From f939ddaf8ff665cd9b6beff5775b226e36d3b3b5 Mon Sep 17 00:00:00 2001 From: Henrik Nygren Date: Fri, 15 May 2026 11:55:53 +0300 Subject: [PATCH 1/5] Move files to new locations --- .eslintrc.json => .oxlintrc.json | 0 post.rb | 7 --- server.ts => src/index.ts | 0 .../integration/e2e-sandbox.test.ts | 0 src/middleware/error_handler.ts | 43 -------------- src/middleware/logger.ts | 54 ------------------ src/{controllers.ts => routes.ts} | 0 ...esourceLimitsFromRequest.ts => schemas.ts} | 0 .../file-extractor.ts} | 0 .../resource-manager.ts} | 0 .../sandbox-executor.ts} | 0 .../tests/helpers/create-callback-server.ts | 0 src/{types/index.ts => types.ts} | 0 src/util/environment.ts | 7 --- src/{util/error.ts => utils/errors.ts} | 0 tests/data/fork-bomb.tar.zst | Bin 12273 -> 0 bytes tests/data/java.tar | Bin 1102336 -> 0 bytes tests/data/out-of-memory.tar.zst | Bin 12281 -> 0 bytes tests/data/submission.tar | Bin 403456 -> 0 bytes tests/data/submission.tar.zst | Bin 276579 -> 0 bytes jest.config.js => vitest.config.ts | 0 21 files changed, 111 deletions(-) rename .eslintrc.json => .oxlintrc.json (100%) delete mode 100644 post.rb rename server.ts => src/index.ts (100%) rename tests/submissions.test.ts => src/integration/e2e-sandbox.test.ts (100%) delete mode 100644 src/middleware/error_handler.ts delete mode 100644 src/middleware/logger.ts rename src/{controllers.ts => routes.ts} (100%) rename src/{util/extractResourceLimitsFromRequest.ts => schemas.ts} (100%) rename src/{util/file_extractor.ts => services/file-extractor.ts} (100%) rename src/{middleware/gatekeeper.ts => services/resource-manager.ts} (100%) rename src/{sandbox.ts => services/sandbox-executor.ts} (100%) rename tests/util/createResultsServer.ts => src/tests/helpers/create-callback-server.ts (100%) rename src/{types/index.ts => types.ts} (100%) delete mode 100644 src/util/environment.ts rename src/{util/error.ts => utils/errors.ts} (100%) delete mode 100644 tests/data/fork-bomb.tar.zst delete mode 100644 tests/data/java.tar delete mode 100644 tests/data/out-of-memory.tar.zst delete mode 100644 tests/data/submission.tar delete mode 100644 tests/data/submission.tar.zst rename jest.config.js => vitest.config.ts (100%) diff --git a/.eslintrc.json b/.oxlintrc.json similarity index 100% rename from .eslintrc.json rename to .oxlintrc.json diff --git a/post.rb b/post.rb deleted file mode 100644 index a976a23..0000000 --- a/post.rb +++ /dev/null @@ -1,7 +0,0 @@ -require 'rest_client' - -post_url = 'http://localhost:3231/tasks.json' - -File.open('submission.tar', 'r') do |tar_file| - RestClient.post post_url, file: tar_file, notify: 'lolled', token: 'secret_token', docker_image: "nygrenh/sandbox-next-maven" -end diff --git a/server.ts b/src/index.ts similarity index 100% rename from server.ts rename to src/index.ts diff --git a/tests/submissions.test.ts b/src/integration/e2e-sandbox.test.ts similarity index 100% rename from tests/submissions.test.ts rename to src/integration/e2e-sandbox.test.ts diff --git a/src/middleware/error_handler.ts b/src/middleware/error_handler.ts deleted file mode 100644 index 1cda30a..0000000 --- a/src/middleware/error_handler.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { CustomContext } from "../types" -import { - BadRequestError, - ForbiddenError, - NotFoundError, - UnauthorizedError, - SandboxBusyError, -} from "../util/error" - -const errorHandler = async ( - ctx: CustomContext, - next: () => Promise, -): Promise => { - try { - await next() - } catch (error) { - ctx.body = { - error: error.message, - } - switch (error.constructor) { - case BadRequestError: - ctx.status = 400 - break - case UnauthorizedError: - ctx.status = 401 - break - case ForbiddenError: - ctx.status = 403 - break - case NotFoundError: - ctx.status = 404 - break - case SandboxBusyError: - ctx.status = 500 - ctx.body = { status: "busy" } - break - default: - ctx.status = 500 - } - } -} - -export default errorHandler diff --git a/src/middleware/logger.ts b/src/middleware/logger.ts deleted file mode 100644 index 2465c18..0000000 --- a/src/middleware/logger.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { CustomContext } from "../types" -import winston, { format } from "winston" -import { v4 as uuidv4 } from "uuid" - -const myFormat = format.printf( - ({ level, message, timestamp, requestId, ...metadata }) => { - return `${timestamp} [${ - requestId || "00000000-0000-0000-0000-000000000000" - }] ${level}: ${message}, ${JSON.stringify(metadata)}` - }, -) - -export const GlobalLogger = winston.createLogger({ - level: "info", - format: format.combine( - format.timestamp({ - format: "YYYY-MM-DD HH:mm:ss", - }), - format.colorize(), - myFormat, - ), - transports: [new winston.transports.Console()], -}) - -const loggerMiddleware = async ( - ctx: CustomContext, - next: () => Promise, -): Promise => { - const start = Date.now() - ctx.state.start = start - const requestId = uuidv4() - const log = GlobalLogger.child({ requestId }) - ctx.log = log - ctx.requestId = requestId - log.info(`${ctx.request.method} ${ctx.req.url}`, { - ip: ctx.request.ip, - origin: ctx.request.origin, - }) - try { - await next() - } catch (e) { - const ms = Date.now() - start - log.error(`Crashed ${ctx.request.method} ${ctx.req.url} in ${ms}ms`, { - error: e.message, - }) - throw e - } - const ms = Date.now() - start - log.info( - `Completed ${ctx.request.method} ${ctx.req.url} ${ctx.response.status} in ${ms}ms`, - ) -} - -export default loggerMiddleware diff --git a/src/controllers.ts b/src/routes.ts similarity index 100% rename from src/controllers.ts rename to src/routes.ts diff --git a/src/util/extractResourceLimitsFromRequest.ts b/src/schemas.ts similarity index 100% rename from src/util/extractResourceLimitsFromRequest.ts rename to src/schemas.ts diff --git a/src/util/file_extractor.ts b/src/services/file-extractor.ts similarity index 100% rename from src/util/file_extractor.ts rename to src/services/file-extractor.ts diff --git a/src/middleware/gatekeeper.ts b/src/services/resource-manager.ts similarity index 100% rename from src/middleware/gatekeeper.ts rename to src/services/resource-manager.ts diff --git a/src/sandbox.ts b/src/services/sandbox-executor.ts similarity index 100% rename from src/sandbox.ts rename to src/services/sandbox-executor.ts diff --git a/tests/util/createResultsServer.ts b/src/tests/helpers/create-callback-server.ts similarity index 100% rename from tests/util/createResultsServer.ts rename to src/tests/helpers/create-callback-server.ts diff --git a/src/types/index.ts b/src/types.ts similarity index 100% rename from src/types/index.ts rename to src/types.ts diff --git a/src/util/environment.ts b/src/util/environment.ts deleted file mode 100644 index 6272848..0000000 --- a/src/util/environment.ts +++ /dev/null @@ -1,7 +0,0 @@ -import dotenv from "dotenv" - -if (process.env.NODE_ENV !== "production") { - dotenv.config({ path: `.env` }) -} - -export default process.env diff --git a/src/util/error.ts b/src/utils/errors.ts similarity index 100% rename from src/util/error.ts rename to src/utils/errors.ts diff --git a/tests/data/fork-bomb.tar.zst b/tests/data/fork-bomb.tar.zst deleted file mode 100644 index 554bf3b2f9e1b157487df245ec1bb54c1113fc74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12273 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%0D$(0BbbH72?qaL%|eD5^9lt8&vp z@Of*)!S^_BDA20lGh@WR;yWXbWC@{G^5Wg33uD>PfO(85Ke09%hKpdednF&_bE4{a zfCm6FLP*4~t7EwJv^&^-uQU_l=w5=&>OIl;QUW;-a~!ig{5@ zXCrEF6mp#(pfLnD2FDady@=XHd#JWb-^oUnjc_0rOx=#Ko*yaYJXiLO})I8I7T@!H7lNX;OaW?o& zjF`#Si4jFnbi%ouV{tLZbDFIA`GL$}s@TjRV3^1f+2}hN9N%5B3Zdve-QX@%3hn2i zAc(U=;0RBfOp0;9zfa-ct2ZZnA6Mf>A#}=<#8FEW$*n`W{kUry_d$wkZBEgBu#MD* zd8TM*f_R#RnDM0iGXG>EoIm*N&B6C{Mus4yQG;_3 zTqZ*UJ-uiZJUbRzo}#S+;?$8#)Sp&AEbGNkvYUueDtDgmxpX%)CFRiPFsOd zi)LO#-%$QwJY&QC2%dj-q8}mraMGiM2%X)DexSUw3wi~S&Vdh?<_*e66wZSrGI4}K zB!a(C7332w2}w-Yk|EY3W6T+RROcecg8b;ei+4tA2`)@UOWi$sQ?Dn#=< z0F5{iD-yK(j@hSvp71?(jANw9JOMC4nk1O{j5HM?K&}Q$VS;0i#w< zACNIx?4h$!5aN1*IKn{w7kF{b{(C6PDKkv}5g3oa#Niq_AU@p|Lvr5b`y?M-6AHO4 zzMdunP>7x&4#ZJ>Ce!xTH+;z85q;>TGd+ZszC;6j&^fm9$$iw$7!`AXB`~McQ~%IA zKJtHT#4h^-(F2kMU2s3-n6n1s&sNqxao|+71h10y2B6S98XcfTB%0n7#=eM)&ry2u zSfkWpz&KjY3=eABvIEzTyozAeybAP*oVDE6Ks_W@bRKL_O-%K}9-b&0Jk_8nsd-Y? zAx(=3OhRgVK|BN1wEaRmy$x4A@W7GMffhoe;#6!sd5(2O!ZuHMmO@;?C{7*Vld2}A zQbeZHMNA0B{N}=|@lRBV$H#~8Q@G`y)h5C>Ki`mpLCE8q7gro zt!R338cX30JC4MpA`*cnow|+MSV$z#Fe7@oco2j0C7;w{w+Fj|a_n;EgmHC<-VQ=Z zNVayai4s(rOFh(nXd)`YbN)ZZ-X=SeCCSp;N-rT_WK~us#~g7NO`aN(gFdGRy?cJ& zy<+hUrlPOffdCu`7nT1jqH5v>gNDy%*6Yjk-L#Ol?jNjr?mz4!;GIMPik%MpQa4zJ zGhje?hnnwX7tRL=Rez7sIU_+x1qV4pg9PMrcf$M+!M6v(b3jsR@*mBG5~+g*u50^r zVLokhP+U`?agHrXM?~P$G{JCtM9uwQd7ZLD3u{prDO8z+zBds&FN~ z6BTU}57=(VN(^;}rVdWk>O-W6+7Yx|#j8#s>PyoE!!tyk#yL2>df)H@kvWzJb`(9osqfQA%j5fL+?4c<8lL7i+m1$0IWbUW(7zsryf_ zi&F#9)I8ygY?a_ik2E>CqR0XnKOn=1Rm&gbocMWYz-7#RnMo6N^E}vrdI8EPa%zkr z5@3>LS ziF87Gj5gShokOlKlM7~qr)lgv)@2%#>8q_jtojn$qoH3xgLceS^^>F_fm)r{lE3BL@c~7Ch{XLAcbtkq>ISH-MZO4@6VHKvpK(W-mHgFC@>-$0Jx$sRt5!#hzcKI} zYeZ;BWZ9yDwJ})+T>fo`@3^aYZx1SXVSCiwiC*w6CKkYp{!m|te!#b)iE~(`oH{^w zi1&hT3q?sv>GAP6~ZeaQp7Rb z1tO{dXVi`t9n{5dv6@HH1(5VgBn;h_;(uC0yptxeb7RLM1K?g*ViD7VZSF4u4CUEm zJ6_IOUQ;xCetD^7ljQ;Mb{wDwS?A#_4iXK(QuBbsvB2a)T+|&t0%gBX z9>QLGkd7V7{Oa;d5ylNdJ$~opn9jcM*5-Pg}(`oxM9EH7eD;(m8G_ZnNLRgUN1cIr533W9@*4FKQqHT9dY!wcNT+L@w5y}@*SixCVG z4j$+Bv9@zKlH&zD=xN;CRqt42Fnxw^NglJ%3`TW;%{z^QBqpPS4Zmh)?^tFq-FC-Z zrJsd}bmJ>4h%2HYCgjhs@vB{<2h$UXyiPPt=CA}c0&FI$Sq$5DO6x1epgJ$)fw-bM zc*N^r9&_4IVVjxWJLnr`&`4h_&xK&{13TD`^7|YjZytHxC|?i&b|};21MI=mTnQxy zb0Kw)hiASd^w6lkxK1DJ93+}xUTv`_$sC@{ENOOiCciM$1{p|ZB~-|8b_W;_6Fk7) z41lkfvU5c`rQU1OdQ?sNw@xpWFk$3rML zLa9&yF)QK@&4jxxW4E9fWX}>d_L!1a+bK|3c#1=9r{>m;UxPfzo+L#M1HoR@WF@_W z)r#=1-3|}3#|$jPd@V1Ju|BH zwqgfSlc?K5wq&j77$ci)VHDMJ*s`*0>d=1ha01*ij<;<->}&}DN54!b-e111FsR=C zH1D(X*wU^TYW|Ty1fp{RCeHjx*F%dYPURry#ZA>m3c)nZz6A?(U!@p0M|mE6CGMgH z4Jv5^fBH^;|8Khz1LpR!WC-Pm$R&ULPH!X~)HvkAd^(0CPBt|*Q%M|i);v%e&S*9R z4w6$p<&BB*8EV{Vsl@>bvIoroc{MM2+Br1u35)In04~%GIf0rGvuDf>DQE?e*`D8f zL--|P=YWL?KpqS^Isk;fO?nQ<2m!h}!kJRQ2=~6i1YiWP+|r+WvgT4m0FqN1Gv_$B zXZ%Layvv>l6cZ5242%gkR@P}aX>GDO9&u86~%6NF~A_U z(G@OYWiT@vEzytv!K3_HpOt(X)M#Jl!4E3Fm_+ftyOBL?AH;4~W-}Pxkg+}FCqCzP zj$f+{T9cH;bl^o2;a#wScW(jqA3ItHq8}(v!v%wvYg%XgFx+jt zcHt+$${ooe_hLS9)2F1a0CaKSpfzQIhy5T`)=cneYK^-NL9Y{whwuZ}7#JS`mh?$B zO2z?+MZbscmPy{3vIW54H4}6^JVk-pTN09Aq7Tpw=vjpA+L_>3*BHc(|JlnC0&E(1 zJ^p85g2{s#>b)Jqx761-H_tD2PE{>osWZ?7egqc8GTw<^JvOEfC&_%y4;P)9K}jHT zZ?wvuL!ygLMQv=X-WCRqJfa(FA}tdF44NI5m_$jK8yDK`&u^wohx!h}f$3%`j^cBg z3dr4Bxr~1pa^pJb(U!vPwDidl1C&qv$v=A8jeNkFuvS+HWh6P>FVT)K;4WhCmU_;* z6W=7XO|vI^?qK-|!yy;nIImy1zrmS$02Y0iI-9V~m zi+pz%ficK>*8ImF8&4}8Y^Mr>rve0`1JJBS^x_hsdiUELiU34B#6&d4Zk)e zcp0`L>fnpy=~5(T@tfx-?h>>H9h#fUb~b#*4mL=;=LVGn%5e2$*g-dt(E>%l8iA|W z4yO=LX z_WFkKFC@!Y@9ab`NERmBO$+}JkwiODA-QO$=lF1EU{}f~0mJCnq1BunCRia-vs#38 zSm8odNFH0n`Xag7#T10t#;chTDz{ifmKMx+>~}Hyw8;u+I{5Bc48k+u%eW#rc6&S! zoQSr&!Fo9jgD>QK5^^>Sdwf0paS8y9Cdei5<1z$5Y*0aZ{Jz_0W=2Ro9-tuYpuHg# z11lqR=|L1G1vYEVc}7tXuoOs#I?4eFPY2r z#>*oSarSv~u_u;IBuZ|1&$8rDy z5-4Y!TwY(78Tjryrn!pmuG|v>Bx1KeO(Q020>~@Cu7ynOvZodsCjPOoPy)?ZiY5 zcfchKl0rzn*R8~bX1&SNIL%EDkcR;9DaT`hM>ZDuYnlEQk^C?I;`PO~jnz)WIEv`I ze+Yb`QAy~u`2qJ(Gf9TaA`Mdv!Gr8T9$X9JQK~@*90o>frj8*Vh8c{XBPeo}__V&c zuc3niE?Aj0ZiaoXGA6!!dCu$-CrGbltWf;&5?_P!Nit3l!Cf(hI~8{8Z%D!*iR!!!-}k$2ARRf{PFV+lfp<3^Ng# zGx~YbH!=+%jcI6OLTqYAirg&B(@txi)D6s38I4vnB%bDZo^%xDkMBE_-f(YoPCNze z5rAOidZXhnCsolt_Vy~CC`uMv9;^}l!@DO{wG5RM!l*Pz+V+0uHBFYLK_UJT5cvv~ zSie&>*$~I2tr2cQ-16`%v3{p&id90-yd^+AzlgLz)P-=szR&_Cn=#T_I554?5^}r= zIPQ#pWRtK45cSS-$tJrTiU*5;R7~PtR{7cB2k8kLDAQ_TXHEzN8jF&HU%%+AcX@s` z_)K_tnbVYR5ov&OJqz3LtGR36;qk$I@{vbp^++w^k_&P)lw=BF9=N&Kbugbi<^enG zNod%r_AIV(_BiKZ+Zn{}Rffxb4 z4KQ1a8G$?38Q70u+;BqS&=U;=ZGZ(0p9A74bhmhaa6jI4hA^X0fWMmHUeXSQmGR=9 zr@@aDNRB71V5vBGn+)-6jbHuiV%P`xV^@L`w@8$YJx?)>DFPn!7J`Qvo{OB-AnFqs zfP{v62-FuU`LzU3%BN#Ae1n%rL&?DHTpg~Mm@=mp>{_!o5Xd^PT*58{3{N)KI7V+ z%ZOAK67D^9S!H0~bYU6dJ(Yt~6uN0|J7+&e0h(JrWA>R*JN-MbPx82uciX@k!VGH= zjTi&~MB3bNbnZNNtn#3K76BS)4n_JL%LoZ3gxJZY$<-err8s|43YP?@umg+4$!7nIF&_FqhxlPn z)r2!Nm@jw1!m@fNGcnw)YQ1+AVI!m!P=#){3D|6A3s15+WGxxYAoWrM&5TsN!PiOk z!u*Gs*i9;uyP&rtKPS}-^X1cjcHaasRq8_Z1M@4Pm`@ZCuk`vmuNUU44?#Eb830)2 zLN<^eGwOc~Cm}B9Dd*lwN&)R)(y3vSiLm978DM+|A&^K$*nH4gBDT+nfnD;!ds(3% zK#;$bO!lN{FwqHPQwmKyYW>9^!oJdj_q;ITz?NJjhDZbk*1$?YqAlLV9s~BkG!Ign ze26{h!RSh9!93Lfc;?=Shd~DHOAksSIusO(z<~zF()=&SWUC6#8GiEFJ{0~r!?&py z^0gAE%^B@ZKikVV#A1UNyt>836#)g~nH&_tj#!@ZH~2hb&rZa%Vds}P3IkcOr%;7Q z|8f#sZAKksr61mn zG0}<2yb>g%D<=$qDWd{&Vp(Ld<)69P(;f{@3O*0&lgCK{1_eTUx&_9bgvH!9^<1Da z*`A7kA_NGF0JXbm(i#bH)ZFOupdWyzs_?Mb(*$DAII{Z`_k7rP#um>73V0sbumJp^ z79Kpw>00=TOk*r;HR2#Vui#N=rbZZ8mQIl+zvjL#JNaN>0t()pL3EvzN}?%iX2R!> z@7toLvrjVevY|x*oJdWAmYQ)Pt=bJCGtj2q?~q_iJb0mdo$4TDP&?S0vO?E(A*-5! zFcd?!peWz@6+c|4nr)$S*CM-AJ`x}0zJuaBCKYPNyNJl41(zsP=rnk~VuvO0@8LL(eu(R3@Zs#c#%$-YD4%Y}zYk z3xjbW#yZ%@PVeH9f$|2fX-C-N37(`YqDq+){I?Soo0%UhPvkqJ4h4xC2&3>L1}Fi(;o-0!^E5PvR79Bq-teSHjX0_`Q-$XO4X@cb z0A493cn=5zeE38kWdS>O4W_Ax25{Ai#-|!Y86g_As75<|L(ZDT>);L%uq%qXg(4gP zKP*5c*y$U31y9XK;2G|2NWmXaz{o|h8~_fqH$TChee9;8OlsVw;&R;IjNn10~e<~-QqH-x{Dz2LgQD_q-X;Vk0w!tB+V z<9}W&t?df1X7QSfuu6x&f>xFD46umQ0#a@I0SPM<&GSu! ziJ~SN+Y{eAPA^Byf>54@vx*2wzuW=SQ;3EXfXpM!EO117i|n+>UBc!Qk!ZQsNSQNr zUdw|k0j>g8V?)n>QGyUf2oJn&dNkHJ*y4c|*sO@n1U6<3wM7)TbpCt`*5^i9SpeyU zYBo&PDxRWC=&77H6&iq6BchG)A!f5B#}UX9#LZUdX2of;V@0fOV>_o91OSkqP(X}J z91l{vH$qSN^HLFvP_#(!iDrbg6Y!h<1J;d$;2i`k6HSO@GK;9_?G29*7_`R82{zAZ zJ;AY2GJs)!VcO_R{F~##ZNitFV=+*$vozngQN54L#V=_1C&mOLW@hi88i-a(v9B1` zvk;iiq~Jj{IVP2uB9$~g^UFoTY8G#nk6*=1e#Mgu)eD`)=F+I2SqwU7=gS9;Xl4&Ov_E5$fNZ3`UEuf5~CswCgBi=^NU@8 z=?4OaQ8-N_V%TMh?^wl_mlLghfySQaM3F$Jn!w(g06-3!3Fyxd=ApqG(1ma^IR`kL zZKmVLGg^Qvq&xq{BgZB@e4{U)FeNbbBRIx^gNMRi7U2rYzD8ry`6wPaF@d9hafw=x zu;B2+X-4mYnYl&AV)m69rbeVISsp>Q{Mir}jKz`A^f1Tm zP>Mao3G<5t1M?OGVgn?@n%PbeUa2_barQ0gMfe70fQl}I zq>{pGssZ~MQ~SQlX}~_kg@_6G5>5qRe$gqWgX#tLLaD&(KcD&KLe<<0r1@GQxKsn% znV33wRj&de6c5l73D^U$->F_;U%ARDg$1@3s@c!#KOLt%FoFw^Dq!A)Y_L8u_5=`Y z!U^dyfkT+LOyXa?Q&L zMT&%*S!)O}owU|+r0g#y4R(R1Z*Ri_=F{EvRRc|Wkzk-cVc}&vx?a$SGMN@02?!7uxH)t>cOagJ z<03==-n8POzg>ZaiZwWJ=QdauDITy-$;%&j^E?{61nd(}ipKg4if8Wbu*YCMCghQu zXjyVVHiMJ(JVD1bitEWfH-WoIG+5ttXs2<9k;Dqw8j?8d$`B{>wKw-RMDZUF=c{lm zR^SN-|DVb zzxEuoM{UiC36td*!Q=lPZjiiuUc`UlJ+JcY$i06WQ(eT5y-(mD-?xIjF<-b8vHbIf-dF| z_=0qpR9Of&_M;cCJh0zBC^Z8a&;5nr8@grIG*%*cH?Gd+NYtkwJa9 z>rBuzp+QXH0B_Hkw^o2SY~12&FPiV-4D8R46pZthB%_N}FsO4jz<&0A*oHqGc3G&A z3fS|YrN{~c z(0#-0IeHH&VlMfDZe}>&T&WXHzy9hytsW|iitZ0k*QT}ui6>R@K2i85+7}*OAoD&a z)vL#UYK#0taoEwhGQ4$CHR)0%h)G`UKk*(ao?fV4J$`o~B0WjLhvXNk7vAG}ETI*} zdb|p8@5OhDIA|Yx5cRawHok~ zd0PBn%ydAegZ(WbBYV;bbm%!M4Zb+!Hu851faws%o!lzpsqzZ0mkz^UOqL08r?jCU%up6Z3c4WIS zjn5)A<(iPfIhj+UmKmFRmM!VUD$j|1!ka3LhlnaRV5E7X#B@bMj`>#pPjlaN2Wc^! z7-5soQ+xziVWOFPJZ$hFeVr1BhXOLNLhqsqVe;#eScCM5Dz7zwGo)d$!bTtao#;FzeD(L*(kfwpA1a<+By5Vsk(dn^@Xzw6Y4`;2cY8FigfR3+w{+A1 zKX!yTS!y#nw*x$-Z92^c)t)4SWP}_5hqNgju1d4A3ouwejhCeYcAm+4EJQ$aNQ)$d zGrvR+#;f;rno8gi4^RM!gabP!x-K!Z{V0p<3k=ND#qtnT0ZOBgh3sa96fA@!m&p17 z^Sn-&$9I$%k`hOvn4WNla1o$E2B`uNi?m(lg!IpuO19mX5Ez(O&$=@COu4m!M}J`+ zb>_x~hcBn6FQN%Pv_TZvAbtd}&bZi3fyN*p#-lqCuuF()q8o#~t{A0Lf0Jqp#-z6OX8htl8DzIyV+6 zbO~vrfvXN{98U9&-+2gv#B6YlCHRS$2D1q5zjyTX;6IR_FfOf07+54NSPbjB%Ef|% z=s_x8FMvYbXUGn*)qWTKL31UCLgeNvG>DEvXDa-ZxG4n$yKvG#D zr1Yz3g9~ofc#v8$9jwcUNRo@EEYLZu)AobRk`avnAhfs~Myc}R!7k@Oa=Q!5nNev> zyFUY`sZ}@1hDos8zK#&loN(nCtLSwUxKTG+XhnF~%UDDqL{AKr*)hxHMd$`iQ5afv zjjFPa>~@;Y^K8L07z`^}W14(&3W0xMpK6W-9Ej}XjUx4f9By@vwkDf9^@ivSaIDOy z$*$hNovYqhj-L%Gjc_5KunM^wK8!_{M2Gkrr4Y!!jk$7vBX7)RY-%;P|Jc*k@MiRB zq*WW9MwxKp88a;rPj;41{~T+{tSN-Z(>C4cUg0GNJ4pL(W1Am3M|mW|;AGqs1rR7LYHh{8C|uge=kLx%qiLSBq!n$>X5K+Q>3-P%c_mmkC{ ztODm9)H|tO04pQK)DLE?Tra$;S)#R^q|z|_3hP{`W;UI43fa_V=e z_~Am;lxRM&II4t7N}k-T(M*WxlL5S1r)f!^cK++MVG|&{M7zppB=ajsFA_HN!;2$S z5=Fbyukqm$7b6a~1|i8YUv0$~t!PjPkq(I+LQb1Y$eL=&6rLk2pK!C+koqF*oLjfM z!D9^&2{CAr9H6*yZm@)wMiPc>xWklK&TdooGbnk=-Jr3FCrCh{kkTT9i@2!!O(eQ8 zA7E`Zp|;QhQxz4B6_3`q!7_THX95I!(qL+YQ%+~sJR%-)wk2Z_)m zXVhE^LK{W&_!hE$U3!RN?^&Ys5dh#s z1}=cD3Jfx{*X7aE4#;!R>uDgWvoPEFnW?~q6;2HMzHl8EkMHI&oh(CWI_Y{AM zdawc_6z-7;E`Tk^4(jh&$R$DMf+82Wc;E*&|A@gE5Mjh~zysO%@44~hDM2HV(;^;u zpJZ++qvbu7!k(V7V;=|i_|r}oJ2oJFMVlXc)lEX%xrhoJizcgE#E#zGzH3 zdlXf?zM6u^bdu-y4JNc>o_=4T(dZ>uoQCo_jH5dxF9-*MgJ_4IJLIhNgWCiE4-Y}~ zJHg=ogIG-6vvl!CjduEhxS%($v&`f$G6!kGzkLuT>jJFPDc2LWGmt=p7cyHV{L|O$ ztc!T9k=ph|?{@POP!L z$~meT#1a@vRJh67++moOhiJ-eDM|^21PwB>lI~GmOl+@iYytHX&nbw+McTfcs+tt4f`vLb zbr|zGPflHeKL~>0I0L7lP1|%N>zL$8-WWr99&&>`r&oXnk|;Rr0a-2$t>QP@dYUW* z5Y6tx$$zT|#$aX3(M|p7w*x^|fZ{m?h0QK$g%*S@OL^IK6`&zVHRsWTV2Uu1WNqej zSwIJ$95K0Ba9WGGwBUQ>MQ*W#Z^-VAS1c_Dt_GeaGi0oU@$(hAZ+ zx+5N*qmG6X9`q1Ne8VqE4&#|P@hbGDz%vvQOtw97%OKX#B;XcoK{)eE?`O2qPhXzA z^khbo*?*vl*9n32owT7yxZo!@@VY_QW7eY742;Q52om4*% zT{?>hdP>F93$M{m5wQlZmCkAqsvEBtq8FK;_pn1{9dK0Xl<)_l%S|dG8g72MP&J(} zw6JJj$;*3~Z5H8<3tf|lj*tfpg*aeAZHorXCT{RW=b=t%n>=2>!^gPJ-1F)ld$BYo z?kVw6((z{9r$=u?U?nhmj6xP96Y>|!$p$pB<@&{&%y!c?i5wCja0nlcbsL1}#Jesi zSR|Eb;{~R5iGg*{hX;)rdSC&95|faGSQQ}!(zb^|p0s9ZdJ zk7m$^1u%y45Fh-PD1XVzY1AhoD2e!i&Vs`n8g=55Qjc-Pdd{hL5gL=e-Ns-RIc(Bd zL|n(Apd{#OukIh={M#jw=3IrQ+GU6+T6L!l;hcY1mJ65suXp5P1Y?(FdUcS~dLRy7gETx$T^s%Z1Jn{uE1p!;NZJ5eC{(oCl%jF3ncWs)BzVq7Amh|y!Av~ zFH|plZ$+@{_AH8p2-6GI2j5wq*OTF;ni;J_ui|@RfT)W`y)M)rKdF_G@bP$rKvS$B|2bR-z~A3VoqT|PaeKJ^f`Gjt2GDSWWAZ3{JP^gg-Mr3 zwKnjpieYJ$5FoT92$gAqheh^RS9H>DX_py;2dBnfZ^poq_C_K%wd8hX}bOqKnPwK+#B zo+gS)pNRgM-3Y0`qwR-3k6`jv zAWbvOKa9%{9oRXzO^!*0GSG?AfV+(Oypa{(1Jfz6kP7mW^YlhF?NXT$#xjD5w0xVH zqC>={PrEdPlwa!>_Mo@ADAtro&KaOBLOih~BR5;c3t@A`h{kT10RyTSDNh5W{o#sX zE_?^Jg+|DOu~5J=O^mpMfry0}*ZL~^%&devx!E9R8Mp^C%waR_MnBOLq-aY|m?vBn zh9z{XyX{^3=gcK`Q~R){?!Xc^@sq9+z%TTTCy||iY8#(DD-o#FE|hbE8~+Kc>YwVb z30MfgPu;YG3~pTnm<}RPW!;9QMMn}82nQ zYuI_Ngr5jEF@~3;KGgUD>2d!v6nT&jP)m)`J)tm*1v$s|48M!q1JSV?Hii_0^YD~! z7Hu7WgPeiqsH}p*PVq4ZDlT*Zo$0s3ReTb3q(J}`xXJqJM6n7VW(YJ&4EN62{QdH_ z$y5Ox14&02(G>v@JYzN|+3Of3_zkHcnWKDMbD?S?C5%L=Vw5Qp?YDk zrA#ZRpT3jjg=*RsquJ|;-4E58e?iq8NCxp*G1povaiU|!1P^;W$eUmUCix_9(k7FI z)ck6A z`zrp4`{IaDvJ<^v7(>A0;TNL0Z`YSob!rr_bU#Y!4?Cx3&u{VmB-87_sWUu>PR*DQ zxtB0nJcJcj`8KyD`-(SNQk!FABy(S2ifDY=wuJ3P&gKZo%_BD;d9#K4QT*}G`2(?EMVc-gvG8zGfU^Mj z6S#;Z`rurGk8QVaqucEF9C8G+c`f`g0hmbuVh9X^X=&Ox#9ql8QW}hxk?h2jQ#^Ev zLJm418hAywyplJ#pyFY(O?<_B_=NZza$xy7cqb{Xd+w^Ivkgv8Ye8Bb-lQ;@kqgQ z3I7m}C5A9S2(+pyf@5%(1hz z4;QkGrB11Q0%y=Wpe0!ml>h{~{Bb9Gp?8t{A%lojcB0vh>Q`%-ACf7m-*%!GdOslS zcaY^Th+gRJOCLg?`NPhs8I%OlYWNKv_?_o`&fl>8^)=rczP-p1chgiP`N&^`jnsce z2fyT#FX8Gn!b}BlEt2+#i|`(+a->Ko5{TUSV;B4Za5&*IE-&Re(QGjtz~wGQtY=b& z#WQ#Im8E$zr<7dNu`K!cV zV?O5{4+vsD@-2lxM71osD#s0(xBAHcOoAux^#dH;E8rExwq?XXVClsb1K{o0JuHbQ z5djh%izNUq>cEYCgU%X9ngaBpVgE|c859u`C_m4n-B-MK9bH{sm!sNQ^F!V>1Gx<6VFM&<%AKupx zov%AM4TvZAh%I6U|B|eeTpK+ye6|^ZstHHx7`+A!+1p0mB1BnQT@t;IJV*vXS zgW(_rkKV2mmjFY^@+-3`K_oFevjCT6-VpB1MCh7eiZ}!@S#E&@=(q7)c4sCGC z5dw*#{Kwpb?x1g=0Teun+R(!r=b;3Z%P{cgUHrlDlEaelLHsn1>}SAK08#bl{)Pwp zM&CpN4KEpp$bha9LFqvTa+Lq~O7CjGrwvak=a${Hz=Z<@5%F=Tu(J% zhTQihpo#ie4Dch;c)LGweP$jHeHxa3z9|SO&0S33%>_m<5T9Z!e>bzM#}W-m$|nyh z0Y1R~ge2Sv5FLz3)u@A?U-}2k$$9w1elSfz#FRY~GOoC8yxH>s^LW(MCZ$;pos(n1<_!d9$Z|*{RkT)FTOSXbQvL`v#BIKbh%G}Do?N}a# z|0z0>et~BonR*8BIqh;#70g3r>o1+)7cfWTooM#FYKLaSipY=?zS@aiVE&X0c`2i8 zccKH#712YY)S3&?kCq%?VKWZ|{LW`5xeh}Nn8)LU9q~!6N28np1l$FYnWQ_Y-&me* zStmQ^kt7a;2h8ax@@AgR6$9o5w$UMgu?T@97LqHpUr56fR>tfcsH`3xFh^HkNQ{Cz zNgZc?O+G-4|FpNdXftTeISdcd&Yo6v+}ndC*oA<$Ihwyd{I$k2HS(rU*u$4x6idi! zvU*0a4*JFyy?^EU_gX54~> z`!Rz;FkySg)esEi5GwD|-6G+6BYoVEQce~?43MOf=!+iD;T(=N)-|RnPi1C9L0xjx zg=3zyC~nFK1$1;@umtr?10uJsB#nSz+fj{(5%`KK7Fq5+ywU$SR^cee{h*B*gfR9e z$g#-WP4a8VA2<#dL)XI2_c>NUF=Au>Ecrp+K#U*b0fWE|h|aW6v`ya?pM#Zn5Pzqw z7Q=}=TPZFyI;QgPJBTOnMLK~}{FkfsV<-C2kc)SA@@@if4L|HeRV^W21n*Z#VcIF0 zL%bJ;TPgY>g0s$*=!M~}7A5mJL>KXzLKC_uqf#m0S{+MV$Ogr0zy?Tck6IjMm_KPg zF4RTw4)gl<4APa<;53ae$92Ss{WuBTVX?zJO%_@v(>4Jk@FF^C%RiO@d)%u71e}%b zjwyZ@d;xATEATD&Qp6Jb<}KxAU0~3g7n*WVq-{wBo1KZ^hej9jiKb>Ov_`EvPqUO{ z1%}n)M%}Oy-(ix1MXC_=(xX04@Vd|T1bB{9S~@6w7!TCR0ScIB&4Qf$P3Qf-9{6!j zKLA<@Fm(=;?IJ-O%p!dkQC^!pvP%{yU5TmYyfxwhtV@YLiHpJ z00^YRnKv6W05Llc?T`ONpn@&PsRe*sdf&|ggV_2B^daveI}wZ^{DjyTR~YT2<5&9! zv77nW9`3e@h`_ji@CiFt&e!}N`>(tjFUy(aO*8?Kc zzWj8?&Z(&qrJ{-~w1|@;QEn$|g2dBWJ^IvJsHMYqvL*(R$OF4+{InAMCc5E72TK+^ zKA0RsQVcT7_dDdC;EA0<5!-mf++IA?Rtb0G7quHk10+Np zdfN+WJ0g)q5R3nvI};w<8&K-U%dixdGc{!mxfTpI?Ya5;ASBdqgm0Kb%}@A>bzSE| z-UzGNWsbBQJm)+1r`^RHcZWC7k_+~Zc7ObXb)+V2c6SZ*Ha>Z^$PiVP7r;hhez|&j zU^g))_$h3zB8p`M$nK)|Wk)oGuEAC6djd{#9B#M;Dk01^1As=-4)6WPjDT=mp@=O~P>MSkS@g2gYhMAy(UC zQ7A90rU%gy0-P*Lg;KPFyL>+Y7MnZ12tT=)Gz5ovw9*d3lBYcASxwjo3vn`@V55H^ zU6&Aft{^6~Xl;ZV=n2g=>HErmfHvvq`380ZI1oO1 z*!LNU1oG~->3PfFqg_m%iU@oBmv=U!1XnOu?u{?p%Y)X^DiNf`dvJ~*DKdK^%awlv4xx;S# z6Kpb-F|#nm3LUyTs9uK>Rv`hZ-5l(Ru?*21L`|d!DBKp+ghV*;<4)A{3DH9!uMqKM zCwd)92rR{FNm%Df)I@2+p7xE`XKSSWsM9;EX++uv5nmYI05?a|eL_pT%$(g}lBNf{ zJ|3J#a5>KF>XfkTWpM)g+N8<+0n}rGX+@q(I;3NUt60J-I?gt+1z-)gq%-7ptkEp# zydb9$UP>Xtk%q&x;uJ;!I=F3w!%<)Q0cX;a2kcDJ%vg}%BnXnY2O;Kx0 zAWUC|9fdcf?{L|{e9$@Y1{#=b=BDU|7x)R!2-Um$o)d{OM^skO=P(CSk%lbySfq1Z z2lICi?7?#&20T(~G~h>DLEL}gJ|P$G)D_NiWJc0bU|>(&LXR^z09`HL;Ok_a6L=g+ z5I=&IlXZXw-5vp$L*0w@8-c%1#XJO0W#l-EgI}C#aC$^>iNJwqf`$jAR!9~g>L^LE z1Xi?Yat6HW(CEWfMo-H^+83O_I=Dm=lEu6KpCjb3=cO>CvKwqJW;76dd;{b+?(fc6 z@5TMLt2mJ#5XvPktQ&gCd}Ahk5U=(bcnaZ#u862F>-(X7@A*ZN!D~)Wd63y6m7$JEzE>EX@R@RT5bJBo=lWj+@W>IM$}A1C17S*@ zKA8j1P5vKmg0UaP2Uv{_2gMFIVi)PXthv)S(#UV62c8J*(lY?^yC3!{+=YLG4sJYn z83G#&Bp@}5<%0UIG=pS^`i;NAT(+f9!r#aPa*+Wwu&kHjW+3udVPa7|@wL+12m|}Z zQzj`9h0UADmD{skEHObDOL(suAlvZ|OyhOsxhV+3B^WryS>4gFL~|Zq2?^_58Uesr zia^jB&gZZ64M(r@QD+DNTmWq6YAio`q|VY<`=5Ja4t}?M5I+PX6$G17J%|ie!`aorn74Z#$O9n)D#5bxJn!By6pl0T!t^v5po81+(u(xra9ygE|5+DfFh_Zf+Gx3kwb^fbZ}L0UE=A% z(*|jX^u9Dg55N)0{0>Op$s1d|f`^ET`W`ls)@ETM+VaSo!gu;c88F7fB8d8E5NNd` zBrDSzUVQQN;VCMlJSmF_(+zr&)At;U1YF7A`8V>4LVTUG1$tQ$qcwt+eRfHc=Z4!+ zz#f>qA{OWbGgTvu5eoqOKW_^(7(q}TxirXYqlZ&3S@W&aMljoYQE}n_wBzBA2MI-L2o510MbdWjsB+=|;CbS}EC$kr1X4>xh93U>p6%Q!{{!ea zi`UuM<-nD2Ol=Slu>Zw}&k;(PllICT&OD()(2`_|<&Wdta)0|jye)5VNbKqvuUi6s zg%2)N&ADbQuM{Mu_8&josG4cTJShASY5fXS=KxO$i|6smgXiE2`3WK4=nWX}ImwO& zU1DC&Kc8HviswUDnMgJvh<6KL7kIbmZcwlx?g%Qo z+rXG8ho`S5Xau^I!qmZ0YAOpbqCtZS5@DD4;AX=?^Y(>YDg(n(RITka31F%aJ6OIe z(RlQ2F~lwVMTRp4bFh~f#Fi|95RTpZ=AG3JjYwX}1Af*e+>Z{xL)rpNVW(_wy)MvT zY=?yN494u3(SQU)BdP&GHS={xN<3&D9SlYA-xK9TPx>vg0U4;OEB^=08_Hx8!5|(G z5jqr?2%BKUB@hP95mFNhrQ(MG?vFe%5N_7{c^T3jDw`0Q;sjy2GeUoS-)}bWnn~!e zI3GQoL2Icx*K$%7%mY4c$qTbm3w)VLIjLUFx$xf)4*k zjs##Gx(Jd7LlcY~DLN)}@_$1)8Rjk7un?qx56J^5sgSp;ao?JKiKdRNJ4k`(NfwZR z{6TU=z}R5Z+~4mI;YUL*Xcf1>tfY^iOo%yte2K&7SUg6sgb?#NW5oD)09}BEB=oMp zGaJ&}#mmsM3d)m2tphC0!ZWFOYS1vFd)4=$*5u~8QlnFsy%Ks?Fg?<2Bq$FVw9s8N^*uY&$bjfcn26zBGXh_~=R#Xh?rjQCy@UEQ#r4Pc-8BQ>$r^;zShzX5+qtSiMr2OH zB6woOLW6A-GxOy5Zthfdl1;ayfo*n`Pp0as$`@vnTT(qIIh0|j1vY@+F|(6bAspbr z1iZ5U++JxD+VP#LX_PcpKB=CMzo06Fhu6bN+8pIz*9)&fZYA_83IQIiQqbJf>=HIh z!b`);&j87W0f4zsH8;{*;3&6S5b`M*0ju+N%E9IaH4IzkiLW#yl7dYat^>=V1=Jvc zj(>cG2o+LgE_`S27UCANM3@~mo?!|6NR~QNu=#%uN#Ln@Q&8NSTV1J6Q6vlXrfNs{ z3?L&X4?sgnt>gCR(8C__ZSihqn_eL87_bX*=)qAzrKfeCyDx38^Mn(VQ~OY zSXW%T8NQ)4PzFnjAr2t;k)NMQ`Dk+C-WW@I>nZGQF#9Fy$MihAB+FhglC_5BA2@HqD4R43QX~ z#_DdU!QN0tNoj>p<%K7LBP?Sp+~sM#=TmBxNi0-oC~97mBraC6SL@v7Ty%2A7qzL_ z7pmq`QbDU|5RIEZf{q_ARK?xF!UqKf4^_KT6?d_?7_S+W&$9^==1SFcNw~MUS4u*? zRK45QX~Y-q`r0^7COnh;qSqvc5()13s5j7kZ~Ot(517WFRN-rGvj zSnI({PkV_$!rsB|&~A`-5Da_hFx(d;k~)#yLAH~)fl^{ySUjP!;-7J57AnRr^wSR~ zVn8p!J52@D2*Ot+7tcCgb#kAQo$#guXIBmd$0(#1n3=}PmALG? zvb%8sa*m_lnd3VJ82C*Xa%Do;6#;1r*^9I}RF9cMJn3gs76VK#=|wA`R{$=5z;JF} zchWb;0%IzT{IMS~*6M-y7O$KArpO0aJOje#2Ac4j>H)q){7Yi|Kwvs8eC9S(B*grI zQ-3qJ&O4-kgRr0txd;_FQxL4;?=Hd*4o7xLoUDa69`G6=fv5F$zYh|pa;R@W9Dl(P zp0p1avR8))CtmMAYaRi_QAnm){`kJXX1{ThXoYbx&V_0cOY{&kVi>*(2d4IgstBCg z)E>5|gL!&*;k?Z$;R}Hu{PlbKN}gPJ{W!dkLusNHZo5#uI$!nDhE9iTNBl7N>N;#V zd6Gn>O)@$KDI2z#>@)FZnC?`tX~JnO53efXV&a6i_H^=K!OvGWbf4sCCW^VpC*u?|L!AGbmELf*7|8H~Y@lbU;&~5(L}#XT093Buz?X0qjK8(C>;PKM);4J?mI2m`186$ z&X73o^#Fq{5j7SqJosb*kEQoWm;(&XDtI^`!uv+~LD7-jD}q2EOW@x>7$0AwY0faZ z2GNmcC<<>ln-v8ud84n#;llF`S$MI2XV#c`(->KNN(g6T6MF6tj?03kKlpG-HcMS)~V@}4s1oFfxN5F)< zt)k8VQTta)PyU1B^&(N`gqZipajT6Gq#Tj&BDs#lHI&so1LRFU97^1KA;aNpz>qK| z068J&%GAEVPaG#M01$iyVX>5K5(i1*OECVpplIiujH8}tJ5!LgOk=MCZ5j-alintO z)79i>DOUrKF){UN2KEj+KC>b9BYa~w^N>$6DwR<@p>^K{Xw<=40eBr2NHOR&HI%>` znqzLmcS_Iz>{JCUI-aA5V+V$HxIW>MH35G}eV3r2IMX3iGVa#}d<$Iqf|$^Lz>}8) zy>H5D#|EU8pL0yMUE~0!(DiIY0ME7-7K5uR8j`|wk(^B|{5^nU8XLr?4HuUs_5}vyigE;RU_1io)CL33 zI7iy)3wH@7a@e#Co&Z8-r)@@l*>T4s6b8>zh&%xxdI{y(esTucv6S!IfdsQ1UgY#Q^Y2_R`nAczcj9iiupsEdY8AMqA0?BJ-rX-T=P zPV_>EF9@7}+~}J-OltF>7;x>5Yd|(5-UuQnDik}(J%8)<)S$@&Lmp(A0A@3RC}4{} zu>hB=xc$UxxPfv2kOwbs8w7F!!>E#`$SmUa9XtI5R2otW3D)Wv2Fhbhk%)B(>i)Ic zL;j~FPalQE_S0!-oA(|nAeyD*ra+^N_D=1uHA^dnygK<3Vvtg5K z%o+j>5(GCVy!#3&0z5%-y36Tng!a^WujKRq;C# z_6$c9x5n@*viU;w!f&ii?d7$WCe6sVndUjnG5vVZ!_6;NbSvcdl->Y1Tzl)gKMwjP zjuUuf7?{gB4h{f5gCB&iU6_saj0heJG;M6dd5~`4x7ly~uwzjYP}w%$KeU&Trelq! z4#Qju0dCqiSAL%5l)*XzmOQtAJM?%O@<0gbCIWH>p!DXEiC{)^s<2A%oU5dRG1qZ4 zUQ0CrJ3JV{!UEB4fd&|KJVZ_6Bo~pvp5GWs@_SEfr^>!2c>3{zIN=<_i5`67)&P36 znX#~Afr+{V0`TK$05W75PzwYx5}34@8@HVjOh4XTHFY@310fyqu&}T;3;f4Tf_?AxWkLP!Jpbg{h9E&5;u zp@ik=r#cPveXG!5c*GUI#XBoUE?IF|??P1!4>JKyO1IzAOMIcKcEk{2$m_*ZDT4g` zaG`o(_;WT=3}+!2U#MO^c{Ss!vR-8dD5OuUIndds_n=zfqqXQ$u9LJ&*BR}>* zdV~kcd87KiKvTvJ4Zq+PKD~M`+9G|j&S&#iQvdi0Fvwlx6z4z~y_y4rgrMCUSHM>8 z1Ki0s(+m1^5X1uu@C$@DgD;WzG~W$i^wweoa1vd(#&5*fje26M*;>zW3^BP1{&G ztOsA77v(&UI6!S82n{%yerEX&38s6<0=y1U=$wHb_i;f_kr)K#Pq6PM7`%=NtWoJ) zkT|%l-=U{{U$MF&{iDvAwT22(6zUXcLGxz7u$n+o}MCLOU`A9n_t6`gM7i zWFiJrLuZSL*bZ_-%7s&gq)xKep$Tycp$#pH`c%O$WYsXmm{{Vqa@0mp@xz6x%7w}@ zBx;NDQvL;1lPOdwd!h0O10xX;7haP>$v|HD;I+?O;6hcz9$wl|52zJLK+}7nYO;h1 z1KJ(7_~`;ZZ?>NXJ1G)RLCS|1Ysm09cPKmEHr-5FqMPL$gAk}GF#J9(%`Wc%vyCrI zXkdb-Nl<~6Pv}k9iTdyV3jDxl1Sf(qb^)68s)6EkVC z%crfAyc0s$A5osaQv1c4xjq^5mm10OKOSHiV-JlkIQ0OtoC&iY3fM~NK7ndRl@F5- zBJ-LMdVu3xiSr~_5dki~p3{#AYcdN~=7``5H3M@SF23jbkcrm3cGDhhXa>6Eb95h_t$`TXZsnB(YG zujWJ?O=ANOW0F*CTy@6rna$d{SvJNOOu zrmYpCfgNgk@h^KhNIT?olFk8H?Bb>q4IQWg1>8f5Kf;)(z1e3_cThjc4p^WpB;=3> zgM!eEgq_@{Gl}HWhUrMrhfh>ME`*qg!jrxM#4C&-3_K$9R1DEm0k4an<|rD4d4O{; z)XACx^IM_SlcY#}lj%i1EbyBv%w zL<@hea#3+GHoj?Nr&FLpQQTtRw6dF!ic5J}Lpt&jOXPb7OnzP7bC@&`Oei)o?FY+r zJm@5w^pTtT;4vY>Cq^z!tHUrSSy49J`dY}KMLvE9?+e+h*Oft{U4#4=WX+Or>kUZA z45=d|Ab8bW$VjE|+V%Un$!qLn)o$P0Sm@?+EFkG$8?cIWmrZ$Hw zEBmJf4tq7vCCypI4p_Tky^D9J1BN3HTSq>%wYmd_I1H28OLs=TZ>uh4v{Y~&S6X>SBK6io{~@J+cJQ+QIa#L z^!|}Rx7+()B6WZmU+Z@v*V9)4UaF8jYVe8 z@YG-`eu5q%yq!Ih-U=k}ANuoVfCgS`0o3q@3}P53j&PpkbeDdhIej~JOQxB0AZ-o? zSm)xn!RAofrI@3ZZz$UAt=9U9%;dv>Nr2f6?N0RqW*a>GQal+H>a@zQ%ex61mtmxe ze1r@?Wya(rdv(9|LU5C*^+Q)&$zH%LgOU=FQt{=&tg6NNr6P2E;#WRzGEVoBe9!A0 z`|-fy6+N=N7o5XV-@oWj(cel0j;FC|UQ*MkOBn}iJsz)wnpVFHd>U;6! z`-qs_Q%nPnEX2O%MwYp-ZS;s%(aghPn1UPd^#siCooYI4HRlhQ1ScXZ+~BF4E`bh# z01D@>@PtyydA-dX_5p(t-WE^cnKR$12Y*W)z$y5Up>2m%+Z4LcPswlPf?;h&AoC<9 z;D6AFUBu4+wada-9N>_+*5+*V3QKy1xzM)7@gQxO`D#y_$ zsqMP??403AHT|wsEyCSZ&32%pJ15n2xl&o~mCm42MLsX)7)X7fjpmxydM52NzwPFD z!zn67FDR`7X)@SvUkDo^g(O~UW(q;&M*>~Q8X~C~zE(mvJ1VJ;7pg``%7yx94jY9r z$xXL`O${lZVt^Hcg;?amYrs;fy7);LsOZ-&R1J`6F{GnStvUD|KVQhE0?Vw?+tBwb zUTo@UpbHCmXzg?()G@-uQ%=~S}8`X3XTE84LM4w4~;dNjm z+46k+g<_5TmpL9*{0j05vllj&$Nv^pBmd3o5s=^AZT|{=QPJ|L4P~jjFCsSb!>riY z_>Z6OiZ${>C8tNNzor^&9L#SF|1Q&z?h-!x{UH-S_}6BY-|_rL*Z>Jy`SQFaP=ja{ zjMJ%|BZi+VT*eh`720XZ-#em?{GC({kZchPzBvW&VGz`vG(5>(*f_A=gQ^^53*XKp zon$X?{4<-aYG{jw7phnFY^_x<4T>YJxjU~{gb4X=5{$?A+M2sly{e}^ZcC=+BjLsN z1C5ERp7hB@YJNqL-+BE!I_;~ok&#LmUL|}3qgH@VS%n#2E@TCeIQkK-AeXkFLoL59 zZa$QG^M%(78QIoI$Ogr4LwA$$)iyrd zlu5Lhqc6+gE_D0CMyZg`Z;>(5V$KImRoTwD+7d~EF_!F60*T_ z|BB9h+ZB9T$XqyJQ*COZXXmhiF7aoz%s^%7JS)r0Oqx2c0|cWlN=_R|;Pc>U(JMtb zGDmgli~wHJ-JM!o9A9JYw7hy$3x0umV-0l^Gwqj%%h=onnL zQ+ww95Fnl9&h6D%dQHbVV3rAUGKBIb=Y&Y3Sc+$o6M-=mNCZ%B4u58v8p%%soaWT- zQY+11&^HC1`F>Ntmx^{?|49kr;@gGaD^z+MEbVyh6?hu)(DRM(2IP|DC8mI zk6_`_8ZT`v05mfcz1d_CGN`3Cxs*bn7%Nzq;MsM1pG*oLhGwxpGTx{fED23HsF8fa zE6BRa*jO1VQ$`AD2TF2L{ri@Rfyg9}G*UH*pn|lQ;t#5|x0E)#W`E;AzTL;yUn?wRh_aK;d zvpc8klamm+E^fOEt z6>)@k#?TJ_Q-+Bj_$L8^(O8Ev>e3fX%&Jfw;BR5k;yNll#%ga43fTa^~ zaTJa0g|1lC(7>w3AoQjz?Celh;Co*gH_a_M1xpgbR(YptG))~Bgc5>$#aTkLSKd&u#!RrOGu3w;hb(Fh=FOb!8&&TL>ldvF*nW=## zDOUPi+gucTp=`lJZ1$pOs5;7U8nIasxXKj-5uoi5?l#6caB&h&gAqz+^N1*C+eAyK z_yzyNPN{P>Cwa4>+2|lAgXMx#I?0<2urZl(glTY^ieeG0Mg7jz9K?gO z?Q#lT?p1*VOAJC^WPTriDsN012;hr3c%yrD9!NNi4zD-et!+0s8$J#2z6C~2-IpUK z;$8x1F!q6U8#owY8ZVFjrGl^Byr#r0a4FE@)1*G2J(FRlU4I}f^nBXK55lI1;qVz( zI>`rM0|UNg0HJMj<;YKV=<(1cB<2si5$vRmnMoMBO;r9Q9KX3asL>S0Xz7`W8wtC6 zmLr)ugm*|h;F>`4P{1(I+S#4L?nYJ!3Yo6KLLr5sAi09cKx_1~mo#>SA+ua7?WnL{ zSCIJRp^?XDxez;IIH!xV5+)&Bq zzmV|gU*#qZs#?^XiaM?FLRO{f>n)^Ex$WMmnhn|Abk+!u6_AN+>l9%Lp;R=u5%k>8~uu=JfoLz>|7l6_DU{LSmpJZ}<%9o$-L` z16HO%ckxKTFKv%@J3WV`aV0MnCL%OqC+A7S3uPlG!h$Qd+SaagVt}8jcO>S}a}G-% zVX>;M1K%h>=3@Zo5)Ff{@vDQBfkzBYM#9k3!OVBwWNs|+IvxUJssI`zb@4{9L3kBr6DJc`mvA0bnUsTg=QRfd;UyLR;HwprUm@>>>J>(XQ#nbAl_9-Q z6@Z#4q5w4NG#AD?67k1>`@jDC|Mx%t`~Ub~yc?gJAis|V)W@`*ctumJlM#R~(SfRx zdM+Hynp+ut7*(Yh!dI)1-&4<2$q9uopC8Strjt(dVFr!2(HwXxg1ZrmY#nL%@_C`D zJjzFY@DYPIKE=`$Xk8PMh-0zWU6M0l)w^MzLwr_Pr3KVOF9BM~IY9B=Vo3 z3%gampIxPaB(BJdWjJHm_zd!ePgA`B5e&QWX>7#Hn2!%5$|DhEVIe&?2W+TBPajyW#{wK=i%e)V*`G%@_FgwYx~hE z;14U!0eYqU-LPgP;-k+C^i23#tPlgA8Kd~nyg;wlg3YOv-6VW(Nc8JN)Zp&kk5DFe z11|VeKanTK-%RR!NT+p7La~D)Z8aX<2+fI`&g{f?uG2ThUmUj5jO5)HX^(6)(!#FR z94Jgr5}+`A!He#6(_Za#Z#XpATj&wlZU%;C%HoM1m)LDX&=H!L=69>Q+UG~pD8^Sv zi0sR=#0+WuwCj62?v~OwOofPk4S2&^YdAlrowX_Q@j?uQaUf5>S+nx?!%fWwPy0-q znNZL;EWtw1OO2COe?EU2K_vH}6^^LeE|IU61i#MTH~fU)03{~14(NTfWf5Q&{zits zU@yLj-9Tz7AW>RHl-silLNKCil%Ipn`Uk2UK;%SvwekRGV!lnOB#jGPybAd~u6&A{LnC;#aHth(aov;2nJ=FLW`b2fS9c=LC-@oPu0*ePk!0xR z#49J+IAHSC41ez&gF})JMSgg(3E}LMp=XX^#_QAn;B(wX`u||6%2U zkKiGM`NUgjoK|@Tks5*|zgpNA@?>@6yQ3_;wSP^Id;ya87?L?) zNE2wvhrkyknG?!%EX`KF_DU6DfHyJ(@NX+LejrPo0&`e_i}_!g7c^oiWkWPMLE}bk zqj^E&Psj?*&gTVn{(3NpouXsqaK$$EsJ)2{ZQUj!a>Cv1vQ|N%IM*D zFkc0Hfd~upGC?HPG)6mJ@$V}rRw-UBxIH}+EO(lMA_g`u3m)aguOQC_`!AmtDCP>= zNN2(-=1Nn2c0Mp%X~%8)6f z>P|P|-qM9%NfhD07D8K+Y|_tP(fcxO#DfPs*nx809Ae;$qd7YV7D)%x>8LMpgPyKP zVuU5Hf(s9G#paiDN2L$-bNX0kSf<_IgK51WkX-M?(3h~mf^s}aP{TOPg_UlC@l7X6 zzNFJohO{UoOe;9%`s2Tvn=ucae0dgCalqrJxGI@6L6-+R$vs@OR$Ctz<0F{oOk zi?pbXmzz_@*y^N#RYO3)P8KvAQ^oc5CgmGfb7(Z_ZuTPYnzHYScTB-6g;n#-DDol) zlScnoVKshi-y=-{DSS4X$&`3+UL8nKHgaU;^Mchs;ZCn%m>bQ11*@BEE38&0)mmj+ zdrg5jvh6fYfY?m{_M;U13Uplg6jBoj#!l@_-15N>odo;(r?K9u%!_(ru5Y2?%gX1~ zHMG~1u93jE4&;3J3~Z8iy_8`~La=6V$bj>*!5KZ%YzBbHpXrD^WOCCl(=`~T-3&8` zKphifn$5&F&Bn%V`i5B0Z1*q=zVP8Qtu!dVQVvu$&PgJ7MyP0?6Kn_Tce@NuHtmNC zxo(3gOQiK6Z4hz_?&5V{ctXyCijHA;ewu+W(PvosW)cGJA#B>kl!V(*r@ zTx!Y6s)3R!ouZ=y?Sv)dx3b^p1`4B^9MFk>-Jw9VnqzPfdlBoNv3gu1Hsw+;Jap6$UF^USDVus*tq<3tyU7cln02(7-cgV_(ZZOCNq!q zRF%&lfI@KZ;l*Ch@nsbTLIIWR^rJC9@gMqbCvI%@Z413qzKtH+M5IUU>G*KmE_uVO zZ(Qh~qUP>ES{?GBIW44X{cHEtKx#mo_d0NAQkH_de?ly*i8%ip%pd$E>rM3m*VG-j zz|22mLK{X=Wg$?h?JoW5M&3x9KAmhJdvjiaqi_MPgIYUm#Dldk(`gAxti^ZuV!;$W zJkfExkHZIZ6K2*Qiyk!SX(fUwzTXK8Q{@TNc#0?_Sl9V+&E|pK#3fqsA$a)Az_9aT z?BJg(?8dHzwm%{9O7nuYD{8-uiH{d6S`=Fa8P+@$8>tqU4hamSg{-j+sr% zuuu=`#%26L9`eW=h|-$?0E8qyrxth*E>dZuAJh#!+(j)y67J|sVCKi5?yC5puG>R| zR8@H9DlRG{7sRhM27X*GN(LpS;Yl*}f)U}cDm|E6$c3S3pG}!n26g$x{JFPJe9!4< z&QN62qu46RR~Ce`Z$dZ?{R3{Hwfloj4p1P)^N?ON9k7j!i4Ksqe_2EuD>AG2t}*{y z^uoBYRjB6Ak+MJc&usyD2^5SjT=C!k(V?KP$_+0dmIr?$l@}Hwi4>M1un@r@`RC5P z@kK!K@ajAV3*xefsS>OJxo4qkaL?u*X?eIqD7p)>Jk{_}^N%XEsQzH>V>o+m)_`r0 z7OUy$&WC-}9;j^}q?>`(IG3+xvsUi}L^@uO)}q*m!ri$cK!D40sg+ z9X|Ni9cl|_e#JR_b%9*h|I)mmw($HXNJF;MyrA|^*i2Kp({|F8~1q6sb3bqGFw48<( zNV^$jkTw|4pBV;b`GaK!;NQqaESawY@V|EYA}u-3!=5&o2YvqvnmE}^`bS5JKE8kY z+X#=eZU}8G13}r{^GiC#Me;#f;@%`gU~&Or1zOR=t)KeOfX$b0LlIEf4DfdE)A zz~>?zM*7k=j#yh-Ozj1ByoKSRR}5Pba(Xq`ATF;gXJ7BW8>EDF5yT&OckHHgV{6PU z!sup^nkF}>#UiTxkKJa|;o_3OChzCv6It9BvFAl)$n9{~4Ek}R3hLtT=}^_{N$60h9XJ$_88aMCtT(-29cgui2-+4K**eqcuWATz<0R1h`kb4d$jt#j&_s zMDq)uoyFpJtGnMv3JI}RWzUg_9#MPKbxu|joG9k&`0y*iL07!eG_Zp1 z`zKUSC(SQ*PA}a36RQV9QE(@E^|&=czs3+(PJ_Jaoars*gr4eiT`Vkn@!5H;$9j}-T`-KpG}Aj+lL#Zd#R3HRwpU}CIW_W3n|+@Ynf zi{Jfg(+XUgEa7K!OnhDyd=3qoWlk%=4p2f>MCWS@k(aMGnHwi|jUX7b`l8fb04wpk zo7@eUp@!7XCe*g3$&(;hg_mHt4B814moXwud}4<@Shg?Iue`6rsAD~tn5{Dj%b zcviYlH|`&v5e`lN9G>x=Cl{i^O=QIUaFgi&C+v-qV@Y;p zyQ#b(H1|E{boU#8{xk?lCNq6MGks|GTFV{LomGkGTjVB-+=&1JaCjghQAHPLEF?U; zrh$?ER7m#FOttcfBk6$o`F=r7`|BHoh^WofayBTX3gvP*aUki`e)FM4ZA@AusR82zg6j)AS@ystoB8Sy@ad zX=Qt2zTr2-8TujHEi5EX?>q53#CFuqzCVO%HIzA_4gsrZZQk)THE5Yuu97Pdq>_qL zV3K`)MMoARQoZ?~Lk=hF&wB)(@4uu|3>c*0T2!~}(VlX%dxNe9o={{%WGHXmEJ)%_ zUFh;GFGBy3x;V2a3AF44RjN7ztvztVhR_j&Bt&$dOej$J+}$`8WmI{&kUtpn$)06X zQAWy2qaTBPEL|fud-zAfs7#LHR|?s>@bmTRgK3(NP;IL&9l~dulU_n)!(xN0{LqhT z(=ofIvf;x#1$1OIwP)d_=}}Pja=-RN$z4;~FzeRQkltD~!3Mj~gAF~LE>9I12({DZ zW!}^S^@QswwVhj93n@~Ld}~9}OK^(H0M}zuPQ?HR>TsWcbjL~3@K?;&s1^2X1bO^U zDZrHx{GAlAGGG|*d2yh&iWmPqu=NI+=M6-#=e1-ju7lJ5wJSe#nM{C0EQSdqsm?kr zQ)oEn7n|m@ktbug%;VKi7$!huNQGD~YKxyl6$V77aLaM6w3O1R%{|}F{@~7VQ4T)Q z*b^5iaR>T2GOfAcO$$W}F8ou2DK;(!&lV*?;>ZzLcy8)c*4+K^`=)T;dUKNnXQVji9&PlVBpa^&$_w$e<&GmYObbDu3tNy1%)9_42*RflCw2=^lNAl$##xVi$5T)fw$ zDBl_(xiW-jG9$)zb+vH#7JEXB05L^E*r3OzP)hq?UJ+{|a9V02p)?7Ax<7aVh*>MJ z2QvMm{XQ@GVcW>d^5kL?g4Fg2pdlOB$^E;nP2ci|ZzB)sH64)3f`J`iDbLrL5920_ zk(?V4jKXL4ag4N2{Os|IRmoZ*a}cE@w4}?EzT?%)>e-uhl`u#tbxD3am|dNeuzT## zZe&9ksUfq%xGtd=*^AM`x|uNUb&K!r6Wa184RHqi3Cs;AQ@uj8JUk@@h@m>-&Ivh# zNPEQU_Z`&d)HE*RCaA}xjWq;L+#v}dh&(MItNvom)gMTqEhp5-VtpJT>4Nw6dA)o- zyPwWIFG=>MyjBw@YqTuWd%!+f*Tbi|8xhXc=Xi4W+VfVGhrC3G__QevPvV9h*+aV_ zYxnGtbCrNMe|;dYP6kkqy_=C5h&o~S@S)z&0hc1_&XPJv!nGR8leP$bJMGlEr;H&5 zjSlH6C)u7AF5ICv+#AD_fT%_*f?<8eB+c42^U^!a+Zw1{p5YxQ;HJ6^zB=rKc_mpy zbTb}T+QDMMMRT#`-F#qDce^{_HhXVau{Qt!yk+PXti!!YxBrl3@SLx-V1vRZH>->_ z|NgjmtVrwaGH+P%$%;X&flZf6)pNqz2BnwVhI)f>`vtK(l?94%U*aA3UZ67E8*!qm z$8x3(n-TPU`t6b@hkeOhjKuMv%uJTJvu5geJi6n22)MelPJ~VaSX}2V2bRmt=|jQ6 zsH-yS_$Tut#j3jt4Z^gwJ)QERqQs6b>4e}7oVIs!$^^aquyDu}7TSd#g>Na&uVpQt z>_Q(5EQR(XTrX|gsPQtdbBcM29I;{Gi+QiY_vm6Ap6;3+3`|^@jXK;%<2@j=3k?I8 zOz<(E&PSwatRyVxcH!9ywyIz+L{eBCQ0AD9@<9`2mu_Ov3d_Tu8#Yzgj2LYL6gAef zWG0Dc0lc}ksZm;>dxxt@L%5Jn1|q*0nqOK|E#ilS!wV!slA0MerBaE^HyfuYQk1Y-C4N2?ZQdNYpcB8z&DiNnJe zvkNQ(Q#weHuo+S2Dpkj{EzrxPiPAWkn_@cO?l)1IS;$iu|^F?!+- zlM^*cXUqWJY$!#98xECR*KWxPB9RJjvu0 z-xK+~i$*># zI2#sDw6#@Qus{fRgPYaOQwJxhF;8siB|dOGu1?#*&)2JRo^>$O;sXo$@O+eSZDV-} ztt?z&)$W=eEL^Ua8%Kz5yU?Q!Ze`kPJ1oqXUFgBWUikd*hh3;S5|o_d2mR-BTzGNB zuyBy=avArzr);Mv^SijcDFJ}Q6*$1vDWO9ugq!~eCT*p8xqlL(WmWcb@+PsyfTV++ zJn#Ys7_0p7ZF^rsSveBtV(}zBswi;xZnd zQ6MNZVO^waiQjJFEx4E~4>X76#IcZI!p4b;;ew4KtE-gp71svmP^BnY=R79_$*NbFpsl5SlTj9pqc6a|(Tx?_^fzgpi!KYI@Y|hg}b0 zD!mIm*j2Nt&D8iOO^+Iv?E6bdVLmUK%C6nTFn+vOCn7}%cKe1}#jnGMlDS%Wf7peJ z`c~7~rg1en!&hADZGzQ*h5Mlhc@TYwnBc$*{O>jnhaR+h&p2oYwuTLSoHnbkFb{)P zqnV|k8u>KM%(Q9l`j#Akg!FTEm?8-I!)@~RMfSm>YI3o_)I6gMW*UseeSCX{zSRzm z#(3ojm_CKBI2v(mN0cz{8GqirkBhjhJ7?w><=XEsm&rc3lkqJg#6;i23)^?8b55W- ztScV4TIAk^$}oYS31Sj^w1L`4?Vz2aG;12mP*ms~6U8rU{GUZ>8Hws0QU5tYI~TrQ zvGBYnM$q`M>hmyyyoUyNp$Bc2oX!3;#i?o9OujWeXj5kCKf@MYx(GdJQ}>l&>PF-) zbDBgjP=_)V2|U1+!QNB$3(zm9m8WcLq8&1my zR$erfH5oP@&RjH4Y}_>!=S`4$K);j8weR#1eHl2ES>`iL?uDQrjV;ygHl7WC+~J1L zml-f2t0=_fAAZ?)Ir?`0l$~x*LAWKoyeEr=t(gM6H{C(s<_<;;qI}5siZ4OUAo&dtc&+}4s}L~X!3zSM4^yp zm~~>$iqp=8CSxm4M`-85*DEE4I+KzL9IE+?X43BPE%cyHMOtH-l>!B3UxiAY(d6ig z9c@0@g_;%-Iu{?&yU<6)c`onl?n0%`xV*>L8Yra!LS4Sj=?Q&~#j@XlnM{2|!4q4b zX^;8#VX;52O3W<=j=De=lG!I_F9kpCT0A&erHAWx^b+*npf{$y7&cBNV!>_}22;eR`+0#9I#!m!I@|ixHujwC}&87-# z{gkE@Bz05zIL`C}eoN0X9Fq2Wq_W#&fas5Mj}6zkKO4H_)<~1gSkG5-8LP^b& zxKjmgkpGjK44X+m^c(o!F1{=9P|btBBewi~y)>_#Mht&|2CeyXdY!(fKU<$<3c5UD zMH|k>eaL6IauOWRt`nH`JQMIRnrw4P)_FLBaPU6>-~yaez?Q$|Y*Z5j0+5U|@+@IH z>b?$G2{`%?Hu2=N19(pJ%}aMP zqpA4^1qI6nerWU0xAljS13XDE(#UlnQ^dJXgWOBHSmGKiY*mHlo6?pbKKJh8GV5Vu zX_Lz^msCM8PgzjIEfK%iJ#-vGFwA^f%*hDMf)V&1<`0{%+KV!lKP_j~gTK7fMyMe- z5#(Y(0QZm`I*!-i(SJk7IE6BRx*}w&|#MgwIy>%9c%+HH_&*Q z>}q~72lw$1GMJy(QABXF3{UW*Gy2cPdxabz<>7fRL*yh2+cOV5pi6n3?WX>)@n5kE z&cewIsT-`s|7&NuQyUj?XiM;borQ7^%=z8!_Mzi0qO1XEOpwfU=0VJNb4y-vwlv&- zekJ22WLq45?JxL>l`X`ju2M5<`*un%p_PzJVFZT#&;7oEL?p#gP zMU{lln1)3IeJ#{*kXRxkuXI-qIqtd-A7?Qr{YONK1MX=a;5jc4*({%< z2(!1ON@VqzNzDuloEGq|1*>#1#brEna3y9bu zsgJps2TQ3(7#Q3&m?x}d#1or%BiGgR;tj@Bp7ItdMQdo8;WPsMMseO*>lL#n=4caS zGeqA42GB&nJGwEI6xcYkZD=p~sgFZ4ytNk|2R1;R?{HgIC7Jg3OW22y8}=iPEHx+M zvBWXi+HBK5gd9FcS^Y(tF_N_CX9C|wuy5lJC6~`FeMF0+$j1z7DX}XqcV*VLEx`V8 zWUA{swN8N?n3aX4Iu9@S6%a|^!ms@$XUS?Wmc2lA7@05a9(xHr`1o%U$0KTDlwH$< zk56%|fj;MxDvaitm!>a1RzMLKjJwbWAA6~W_2Vw|ab(f@T{qwZz1JR-mwCg-iLj*t z4#d-jSa3-!xZf3fo7?0@e9z$n*+f>zCZN;vFp!?*yB#Ml-AxT@VICAa$o>a$mTzR4 zGN=YW{NqjYR`tydc9}dZb}(Ez;i7W9A5Cq7W&*gC2rK1c)d8 zpEvJ%d4AZqo{!IPJit%<8Nv16{Mi9JY#h%^#%3p1rv@3kImBxDP;sLsC3>J<(8|Ul z=%Tbx%K|DB`+?;MFjZo{JL==cn+zfWv1;ONMzWLF){|fRtI^2%a2q0ud49>S7-bjw z;^LY(1vS#U(1VNr=0=%oXmvI3!Nn!;>T&=++gkFP(+3xKK8pRbP}3xi0H1TY-+_*s zgw?#^;-bs5Ea_-gZGjSi&fnGh_Wa~U@By&hBAOhelF4YEiZ`mHRddq<;^g7MpX(Dj zL4uJ>COCvdh5N@P>_fyUvfQtdQx+wjXA*UmJIo@>{xyHl?aTH<#NibA&oIJ8QkzYW zfAR2U`r+X^Ey8wq;WbB+S)Dfp{VH4(W!hw~4u{WBkJU^aQO4L^c8)1BXJaIwG#XK? zmwqEYZv^&@s&k7j;+CJL2ouK9vR_yji~egz$~iTT;T#hqg{zU~pdx#ytbC;EMSP0l zi2KqPP$pQ)r`Cr24_y4mjk_ zdnb{)D}1nTZfLmNp*QTyYPAcMr!vDie^1>7oi9D{;kQ?8%=!KH9feOyyDV|`jyYN-@MFw zaBtVG(zVYWVb?TuiI67$xK7rrP6M_Jm2|`MvK&(NymsEDhHO;@?vnU?RV$1G;qAJH zVO4dizSa6q&P6&8{O!nLS5yG45r1yje)shfrw6(F-GW) zo6nop2eGn(SglmbY7^~|o$j`m#n1A#jDSB;PjX@c8Ll|)z8GH2FhL%ObA46-6k|F+ zxsJjaZNPddFL;vY@EYct-@XK-6jFFI(-QO;8rTzcs>*emL!qfBnV7Kk zC;<9Ll5e|Thd;AQ%M+^dTsLXs^IcbA6pxDBa+-T93_Lw!-wv75HL7G6lTkZOG>pU- zG`;-VUrrWZ93jPATr_hRnjDD(qsb)k7&GQwggU2~S2n9JvLc{z*EBhyCTG-H%_#!j z+=U+O**P6C=ET!o=)s;P_iFPipOE|Jy@9^wwFVa!&dyZ5x%|PNUM}Uel|GP2F0*oH%eA{>YSJb%_Bkss zBs4s(R^uM#b4(kRQlFq7$}E!*1XiPcn$JE4cBB#?TG7wfx%DD-E%BRbGzNPT616CF z5XNbZ^*oOwk2{?9@W&a6PIDaO)t*uP9HE! zN^N|3&1pC@VB+9P#3yZ#GFspgj7+=OOSsr)$HjwtU~IZsb|6G*B=&%A#j^RmxU&iH zN2Iy&;ejjrEh&m(1J!^TE^u$g-~3pkIEHtZ`?NJLBQ!wfH1iQNs)*F0nQw@uf`AC#(2*Rh?B?ce^SLIYTD&5 zf4f*;%z3`bbWHLQR~Y zPqU7;(R2}durXPtMfn#YzU-QsCjlCfMZh|_|M-!meVx?MarQM*lG)`Kg6t@KG0Yd? zCPzE9Z2M6sv`D8G=p1r3Ld|8kr`LM%7x$yCwD+H_G} zD4~M~E>7VYCZm8wnBQ9z?ub7}uocE%+HF4PRv@F{HCc5!y}oBX=LB7UG1!#EQi%y6 z+yGYj`E)CNix*|G7JQbYOLBlM1#>0(Avira@51(-L!XUe@PY7V82ZE@S8kpPnVh{} z95)33Qv{dLv1Pn;mBXY7`?wR5w>fCf*e7%_ENyp{=ilL0j!K|y$$ALmM zmB8>74%&qtbo}JikR(cXp$|ING(SW^G+l%qbbJK-uGagU9>uZefNF8~r#eyx3q)B(tcMch8oLZ6)KnWJFA7Ss1S_)+;W2WXNz25T zg+HiNHvD{Yv1bjrg9yxVnkR|Tzt8&=#+i4IRzk$uz!Oo+IMdblZFJGZbsBASu^EGj zapnt`N#oO^^(|af$v6>4K3wGepp1dPbldLkxfN#hnXo`WsVJ?AK}eQAtKv(vhlg1y zc~Bb@T)yBrmSHT$1kCdO*l!o(XXP)}Lc5Sd)@^y1=imS?o<9-#>wE468=T7n$ayC) zH9VODYG4`EYyF-k=U!NNSZB#Ji0Jhcsz!v^^JWbjTn-V(cM6!u*o;DRtqVU((LVL( z=>(Dln84+v0kF9rEd+MW<*bC9gj6!0o+OL#3oT4x+*n7&&Ss*RECKo zBop|d&|j>z3VkqfMP$d}$BU*16Zg^zMiWnW^BzoG^ZaVLip5yE3%!_FP5n@M7n+hq ztc}yNj_C|Or|;z3dmnW%iQw6l=#UI_2)PYdFT%sbj87I&;CM*q`!>1Bb&h}pta7J! zjlnQ+%35C1MsrxUt$*?ru!0px(if-M-fer@x9MeKuL?Do6=sJG4tO^pH@D}FqrSyI z%3{_GFikjc7SKT{pROZ}IPGO$+7B0(6H`ti&gDGi(^}VDn>UVnDWAeP8G@-gjue5< z$Wz=eEojF&@hOZMorh71?iIpZGapDwDgdXP<6_Q^CrY_~Kl-)fqp$|H)CIy@z zpBGJ2%9uI^05?X9&waXU`k-TV_)ofu&_&auFt%t>h&nHntQU7pL&xO>!W(5c0+7Uy zE`+k&F8!>G3u=UNW((A_iIrC7jlW+096oMxv0&sj2E0s$0x@#h(qC|&Z{S4xH}+mMy&YGO#?UvbF6SFj#rNtY!Ds~_)`uH7qXQAt64^K2D}4&`oxH+ z;%P?&ZK=!Q3Fd+UmiYX|h*f*x#j`u#VUq4jHiE6xBT4d1t7Y3we;BY9*n89HJJ;e6o35)t0hqGnv4QEffql zzvKSGE>(m@3Lqh5|Df!TF3PL)R{YogI=1kz%be`tA+vRvig%&%@PoYNEEfubOzFN0 zby9T)7s`xk^RSO^+>)k)=w;qyjXw19ept4mTpnJ99z5)fbiDumV*FL;!Na9&4Xhy2 zmpL^xQl{tvIiSKI2I<|r(r+BmqYzhGJirIv+Di3u#MC4@qPKqCBDuyUP8Xq4ZKx7% znQ8zmdK%4dQwwa)7?O?PDI<)PHH0T#S!LSc_igAob9_SEXwW9qOf?|GXG}iQryJ^} zy5K20$5=DgbqEldhnjtx^Q`4HTZ{iv%mh;JF^L_2!>!SaD#4e#kr>VTjaHsqB#Wma zS0DxLov)MuxFDxBMg>)L9>!qGh{{lca}^sZjeChjQbl%h3C8S;P>H57Nl2(p)Fr>= z*{ z-OkDgSii+SG||xU66&ntdpW5emV96UrMu9pj4ic|P+MzWnmVUI>*!G|=JAVN(`15) zaD+#IR<04+JF}y=w;6AwB45S5{DDA(qp_(cSSo;N`+0VxCm_9LJUVZIdk%EVu6vFS&29^%NVICEVILX zP5@G}c9BFxPNVG8`InhJmewjGTAJr9qjY!3gA83XWK!&d!ByraY;|Md5jRTOQUy{P z$;@o{*`&^Ct4Oqn*B`DnmM46H2N%~*E!l{TkYN*#eA_WK8~PyeBxLmkzB}fhXRAj@ z2%9c^PAkqou;9sHHAysD+4hESp~q&vn*5slVq0tWrzzrF>Oq4~DWBtxi+u|XRvAJ( z*)=_?$Z9%M8uzW{J!sH!%MZymU>CKk(9mF(IY2)5Ye-+^h#!EOhL&${6z@Qshc|z% zTG$!cB@o5@2g~w*F1{@6d)LFAS*)ddlKVdRp8?Ek$l(&e;-5PdDhD90Wo*wli*NsVQ2}o@$d3aJb%f1Wh_!hF>5*Tlg-H-7qp$GN>t{b?0B0?a?sg8ibP?8ZsSAS7n6^T; zQ2f`IXP(uk7gkrFsdN`A@5Y-IP*=Il5q6={?qe;fs5Cg*_8smSI19U`9Z@yV*m#hdaf#J9#zcV9HG1gF39+EVRhf(U>Y@i*Fp(=B{r) zPpMj!9&;vr8>DtYpneb0xq%hZ!nBm)T#Ya^n*%tXv`Oftclb8K#DrLaJr*gJC)hX3 zn=C$kT`%!Mi?eke-la@w4iJ%Gb>x$QSy}&cadgqum6aC2tgIaL(s{zYQ_n&0Bp~qy z)Itl>)&&T7U;}oO5R}1qK0gT^jlV!-wmnI9k&%1?QFwrHaG@b1^6iuQp8Gj7Ey4r_ zLhOKWBA-0xKUl0U!p{x=oQ1%hS>kf96m#}$epb80Rjr_^-L}~43B%^AXT2*du}?fp zzBtJplr0ng`Um1IHT9(*;Ts&Z3q1;6*8^4cD<0v8UFbr*!=V?U2k~lBCN*FA)&{cI zoIdJZ$Ipf)-?ei$Z}KEK&+5wXO*Q9q@!k+`IiBq%SDI3Polrt2+y_}5Kb1(Z$*qhO zyrk50JBl)4Hh+2XHO2BScdU4jixeQtk-CNLArJ#Bm}D3IZx_Rx8SOH%@{x~7CVpW} z#&c4Rto_gKtW)u3(I6=$P@rm3F_z`NBVJ~HYTh^vJ%ZIm3$$Udr(2E!b8l`t=c?sV zl!-gU;6Je5W*Z=RF?&jr@{vW^u0jVc7BM`!nFZ>dHJ)p0(|5$q zTO4H8EQyF@rG$qG9^OK~d`e^SI`84(%-c3>d6pKqK5F8RP8n9v*IPpIx1$wzR-!n>Akw zALTDYqfQ1Em|>Pc%6Kuas~M-+GQLHBZe;SKH0? z!^2H1TyAFg$}{RC*IWQ9-2ZdY+{Bo6OQf752`LYU3FTp1x_-N8Z)UWmi#AP?087bf z-~ua9Fku%w%v(Ti#vdMTV*S-6V^V?e6e%IJ9d$#*bsKIrI!Iy#2IsaKj9^*0xb5ro zL9=scQDFe60lUx6%N&}{y+6gpp&<*(%I^L;985^VmgQh}dOh%?ZPpKpqC=~FyW;22u4%b|;QmEl!U1wks=R07rDg|oJ-HLp5 z-H>p>GIvAK8j#}fES(Itn?5X@O@!q-nqBUZw-k2W#GW>Deb0JWxK<-)G3<_ufJ==# zI-jjvAXzE*vT`s|xGZf4|JhkMR?0dUiGXMJf{L?gI~-m@4;F5z$yCtdbD!)&ue0BW z5KGi9^jKL+rN_wd{YB`(!s>8Ny2B4X+o|%JQ`3YioPq-SZM?@>z;52u!j)oZRY)cl zMwVn*YA>=w!htp!Ks7>UpccKxKoSP8)5rBPcStyCNj_2KAWb!bsPzHAGShhry)}T% z3-X@_85m9go#@5_Fq*tT`7VAaI4f4lkxbqC5O`xmET68NZ_7_9+^p*Uq1>H65{Szj zr0-hwk}ZZzdM-1IVy%gc&Dr!}#57X9ga=E(x)qsB=66K-nl>zHbcgRbkZAc&bPYAi zIP~E=7Rw~SWryT>g+mO7x$r!ZruvKT837|4h+=Y!*XgKDykK6i(FL18V*n{fxcSBj z@G3q~<01eFkK_b6Ao1J@zu|R^pLdpfIc`Xp8KT80V=oi|`!;acj{Q{etMVy?<95Vw zRLW7Fk<0Vfgm~Y>P4-m5nK#LG_L?xT8!mq1KXyK=a9JuW+LMIzD_8)NH5#&u6=M-o zpY?&{OQe`R2NA2TVyn0$myxnEkx7x_Y%om=zwhMR*$q*-7j%EfXB&`SLYQ6BwL1^z?%j)23jfi+Zi4mk*D>Mdj$5Nfxp>E*E5 zLd9~Iq0BoAuq86T5ar~?#qwFkLvT#kNTD?HYG>L^;-9mvA(@DY#JxIR(AW6o^ekTF1pTXg1Wj- z_m(YYGBNpPcj@y$*CI;vN^QDF^sm#J5;h)jbUC2RM!J$f>8|)=C(+^t5&VaiCMVKu zHF*hrRIt^gAjxJvx2xqP^x#ke6jvv>Fq-0(BRP-Y1*uQ zYHIJ&OVcDlKoJ4O6pVQnO@;noLQToqBXrSJ$j7|0b)DgJl!1uN5#`WfYY|~^L6Sl| z*@X)9nAc@h&w1ycaq!40H1ruwP#4#cSFVmujc+?7o+ktD(DXNQ-W>ywsJ)046wP8Z z=|U!Dm4r0EKHXp6;TpR9>m(wSWy2_NN-f&uVe#al%B*4YvNBW>YxF~MN#=GHy_6Os zwRTpPl-((4S*c|G-KoQoW%sDdY*i>1Fr-Yo%N8#Q2z+W7NbjsC5#-$J63N-+2x$wx zYLpUYm%*I(w41hrOw`lTBWW*blEpZ9s<;ahxh=K@v&ScssWJiyiL;C%6{ojs<6J{r(rQ##S% z6TKL0A)saovQ>Ci+6tGr5r%avi5Sbl+W7N5=Tn7NRDSTptZqb3n%u zyt32R^?zQ1Rj7IH!{(OqN6zCY2-JxXN-ieF&-1rGU&hbs9G39#UZheutJfJj8^g#E z!RojojoCSOrYcwS9fkgsC6wRsdgD#{bDQsGJHn_}qtpv(_6!^D?S{v40&T>NPm6FQ ziTOpc7|Vp)ao}FP#K@D~%g=@boP;(}shF9FkX;HtzwHbhNGj2fmc@ecBDGL(z>K^@ zT%?}$$X~kf%0EjjB>a~yo?LW2%2YFjsEtN=4X0eB9yIJ?tZl>#0T8O=cOOon+PqGb z0}|p)N+M6*FxpM$R3O2p&9Wh4>V4FDDnzn50>^K=@@5D8YjVNgCKoTJq~+^(Dj7(H zG7d8S;r9PNK=VVs=0X;1rwvn(njXL6D-cYI{eF=@R2-a3Orc_s2WAmYDV44HW&Xp) z9_unuvMFxI4xCPgB*#qh_7uGUJSPJ~ZD=#j5HXHp3~L>YpFalqmM*xYKd#GMk;Zc4 zRsWYIcHf=*Um@kF(RYMB>sQVrozl(q=k>GE&MhRopG6dcl-bB)t%qlBt}F0ZK6&uY zZfW=9)RhjD{t-_p*HiO(Q@Z!`hnZu)x4?ou$bta~Kf7Y00t)!!yeoFj`+NmE9=e9v zSp``mf?UfB&yL#+_trmqsK|4lfcYBfx%)TRf$!%{(q8h1os&B*-Vf}7q~Ko&-U9HX zXkw=Io&vctyOASnZ?HRu2uVBO6VT#m7jd#i(FY2bQ!fYY@J$K{NgCipqX%2Kr!7Bkw+vA?25FHG)54r^ zMZQe3?*1uJ&)YDj`bnDp$y02nnqpwf8;XK`fF?_u#B5GT9mJ7f@|DzsFj`ja@>9gsmn=C2JAxU4AEKmb&`O;D@x?V%|N8(1AD8g3*FmPFfaVu0 z@MtHXF4@0dz;l>7!FQDpQ?um2cZ7gn=m2JO$+$VRuqA@)h@T{cm{m0L1OWZ~l0ONw z+JBfj4nQv8GXO|3ZQD+y-Zp2x+d`oS?Sd*Eg7YdHxjBQErx|o}zw=^CW%#$Hn3%Kjn0dpYvZrh6j?Zl01W4e1Awf zfM!WW3>16dEa4z0XmrKJa|IhN*7LBs*n}KmMQUOfJpPB(V*YgGd-8={Bj*b$5_)zL zkOfN=Py#xPG;i+pmLH1FBZ@W7QdY4_K&koLY`Z+y$^co3#eH^k5Pt4QXhZCHdiLVBf4 z>4_iPc=48c71G-12U4WwMc1Q{7EFgShico+^Vao2(8l4&;a+LoE|0g=i=Zp%?6B~r z>p{>iYz&_dXU1pS!``}@DZz?t5IIodUY&5E&wAow=kRl~)Hi){a!@PD1Pu=i$;UO>sTI;S+24 zg_dy7Vb@>mb%Ak7l5_MOmg98XZ>llU&HiEN5WJTw?;=g?fKK|&4CN(PKT2q1vo=Q# z=_Aa_yxKktosbvZR17bfK6u~Y9ZE$5@kG= zHjAI{*K0iAP1gxxBdSC?33r!z)X#+RFRA}V*Mpvg62ZjMOe~z)KBl*ckBOC;HPUl> zq!{Beu_jMw!|VIcul$N(E>aJEu8DtZ{0Ci4lu}gO0ke%xe!N-O^k5Q3wR#MgF5$Dy zG;eQA)uNPlHFTnGG;GrOWnN8%ECPVgse!=uC4w}v>EisM-|h_xChwt>d6oeGBv^

v7=;##!{2YYOWA=k)E-5c-d8s%(6OTtmlT(lKU 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 }coOQCAuO zGskkGYlBor>cLr?$fQ@0fn`!P6F~&9@MRNeQiasy^~1hC_lHfSsq|r(3j&_Miaf~L z!y%mpUm%1dVV~8qA?x7$khQpEfdiVZ>!gmyZ|U&)^!H~?jdjpEUu9Q7VnxCb#0!k_ zinwir!_`~_9IRMSXtsk@_iGd)si|>OYHD9tVaL^{9aB@6HeAp%cZMRGm4iAvHD3%t<%J zH8nB+!|yrK*rZQU9ei4`!baF`uvmDdIYOA4S`@593{m5+#2#|wdd9$Zni#3;2qgBP zA)#lrT4pgk?cvY>2x3Cm-4q)OUsq>`o5jE9C%<@$o@JCNspAV51vg^&4fLeSWU+@8 zAO!n0)>JsJ_b5#h1-;?9AG2q<@YI7GWRw*`ho&fq5n2Nu|@D&)1~BZJN#DE!o1NVSf% z{^i^xeaN5+QfPMajn{H4b1t}0#KVocV4?WqQ)*y!W#3QNP$ENELtDeM zL=gnR$^2*%*+wY*m~pZ7Qyo-Utf+W@>mymunFa2QjXO7Y}|`(Spt`PA+o76jUG;0c%^oPNUSX&)22>_CMWvSF&f|ILe>Rc>V`F z(t7eGR(c*vmjy%V7LeEgR5zKI>(&-8z;@Q0YI$t8qjLA48r1kQ`tuyH}fwV4v&=X#eaOH~5BNj4FLJEL>CkOGcE3L;ABVC`}KwBiRchJQW0 zK>-N_6mxMJ;()XH1+`LUylp=G8}deTjy(~8*?3Cs@oBXPc`w3KBgbrd$Vgq(hy3hf zBlt|&d~Pq-r;|^O%q7_XSlp#Lx1}J$pa2^^(56+j!EEjr0#?le;x2fWfn`s|qZ;Apgw~j@G2yY_IhtQTfD%7t?ts*7W z;8?nGiI5y+eLmap_BEHmzH{LUF4Zgpiekpt3@hTpO}JN56n@U$JefZ(_oe0mbQe`^ zN@xHeSr!~jyVR%P&}cIx`IIzqx0SpkWzORK!o#pA%6O2PAwpO*d);i}b&B+?d zvUGq;tR^l1_#q58)Kk4yyE0J$6cgn}OZm~BHgQBzW`D-7>nr8FTm&j2A^2qzDS>`b4xvMs&-rtGpIVwG^lX)Zd#fg5h<FvqIonn3>l`MRSlS8`oj&t17q*p*rP?sNR+2DlM^ykq#m!*A}r zzaOBgBn8V_xs;MJK!U);1jt~7FkTaFF)tVZ689+Fp4}go6{{XaELmL(SuI4gAc1#W zuym1K&f}nPvSBN$DDcvG%adRp&Fc*_ddvB3V+~ z?<}a{8@1C#Ca7FI683#?s+t(s<`)=c@x%$%VOAZNSR!$o)@ zw%3(6skds~Ftx#9N@fV*`TkoQzBO=gHaO8M1yne!ZgIfU1*(-|`qX06O?+|2s~+m) z76DpSp}C*9_Mqgd{6cK=Qmd@#z8EPf2~2+U*K@bN&v<isT! zh-oq+TuiYms-}=^BUBzcH~RbPcKJz};o&)R4W2=II6B6@x%r)Oce-5~p>Oob)w5;d z=XN#RfH~^uUp;1~)5Bkk+pd|f zv78V|v6wcI6`QeKdwFBr?6iZ2vBu)*D)T|Pppa(;PfLuIqtG=Ig{!$Y6guJIpccna z4P9HP6^4aSQ%!w?TC4fbK_1q%NLdrk@&-kC@LX6cym0>Re84N+qwvzmMuok?9r7Mlho{le(OGOOkj?Syd zwrwC^B5(ZsH>LkoMDO0TFOfHXeu?a`{<)X8ig@`y!D!c5N*ou(Hg0D4A}mMCXngK< z^N*Xz2FjVyaqiGFcnz^|bDhn3v`crVQaN6VPP5wF8Vf^#mvRBS#PtI1*87Q#V5A?} zemB<#jv@;}G}+eRDWKds;-bYVi$@DWu&i$cIjI3+o1&vn=lq|-uQgnw1Q5Lz-_thuszk9+KkfEaZ3_6;f0m(^{B+-wplhns@g%6@d5PQY<>2l`Ll;vi&I_qN3EG zK@?rK@8sFp&iB>AVvd#`j+!kN*ibI$Y9M4r0sj>RH}fspTAg>4Vm1pfrY@0d-UFpg ziciOVRLBu1_RHkZYV3hV*S)_5_u=BLb93_0sR;qYYl;C94hR>uU%MK1RuGp$HV;ss z_2Ecm@BQ{^tM{eda1v!n_~hANwLE(ue*W8?L^D7e%d`2%RzaL}Jw? z7wB2Ddak^ASpIb$ZCtHKniHO4OpUM2Q5)iK`28-Abxv5Oo?X?E0iRc;U3*@Pt-00l z78O*p%xjV16xZ3?lKpNF`x^A2;dX37eZ4jECdP79TpG!HmZ@ql1SG+_Ll30xFCbEGt zj$WgsRQ0fr)OI(K6CF#&Q^B&rR)Zi>jaUQMF>O$s!UCilj=7!{V=(6|oE||4id)Br zh&R7CEu5HYxdFU1qp(mURc)Ed-WoV{@Wdomfb5|Zdwi=eC=UmfSuWarLghumW2-9A zl#kW6z+h(5HF6vIs}f!ko_H8xEKpHq$RL{V&9AQ&;?cXhrVNG(1(%|V>9feZzo~sn z;Vq+&+VLoNdsqGo8em2W8G0%H4dkI zQz}y++gmTfi!v)l9@uXZW{Vk?65z+6!^&jL8&=MR%@wLj*vWJ)0L>m}H8ha3hraDS zymh`vbC^eTIddKcA5r`z5scr@zQGTAINN&p$%9+B3Wd&KS-vb~`v2Ou_96VLe^(eX zf@lTK#F-b=&hZzePxU(>(Mb`k>$)7uZN?MQZj#GR8&}0Y0bP>k=D0)lx`{2aHkyW+ znhXNeOr|+`H&A?BX7tXt@&O%9h0-wQFtW3k=Tqj5ZyOc89NdY*q3E+~=~LvCE#tot zX;`g{1a?d~J3>B1b~OGjwasXt%)hb%scSDA9V4<7&2U5!LVRoAK>N2odwJvAN{U8P zKfUsERcs?+5CH{_QaMm7BY6ATaPryB679r1R;}fi7eaE)o`tGnSPj&0hk;dX8Po{>iTJr!>V$;2Ld!pBRJe#p+wxkTWdJ`jy{I@V%3Rq zRHzfiBs^2p`UXzTbT5~OD_*QRMnWb!*YlLq=y3xsO-%DI!Uru&jLcJ^V(43!*0W}# z8eFnInqJKI&q9C1Pl=Sp_5;C zKOcaNpVM*>%}JB`NO1$4-ugX+Is+y-KA!HH-W!R=ZZ0}xI!4xhW)cBVIwsOxq;;{; zsb4pU3@Y;$0sR=uW!!a7~@)vr)8G(TMzjLA#JXZMBde3&-ktlTTIznrcCESJPKF2j2@f!>A|0%nq%L0Pp1dr+$Y$mr06-0jhXpY45be8eX06hy3jIu;)qp zxLOFsg6N3+kp0AY@%*sNi#^9Q3NocLFiGHwL59_uNN=uxGwbU<>jNkyp0!0SNNRKP zGaAz@P2BnB((|cF$5^dfjIc&@h6A~XuvadBy9h6AFtdkR)QY5@RV}kKZY$i>cAuk* z@B+yAJWM;LCN*&NCH9QTcuEHN&sFV((oW}=cF5BkFBle-VBaq?70jQ72FZ(Y!r)D;>bf z6(om6M^*;|Yq-GuQ(s`jKy$O!`}VL(!$Gp+{bV;{(eDG5XAxjVy79Vei&Mn0?d%5m z{kYiXkm&d{^3aoim9ReY<|eWXIwBnwk;Dv?+PbejFJHa9Edb=Z4qw`0gMa8{33Phd zLtg?u(#B1(4UHpGKT%cV@ew25MBaF`s&dCsK2UdIkE_Wx4ko9H^nnC)!2{+QG@+2+ zz3b7J84jP0h6QXLniqB=tlpb(!M5A8UQD<#(4rYW)Yr(u1ID3*XQm9(D&mXu2Em4( z;~mItOBq9Uh$F&1H#qxL`&Fb4p0TJC6>i~46X=cjpItEmkz+Kdkh?53!m zcKhp>$Xg-$Hys)kVNbh}<@e(%pLYiRo2X(QA^<-dAHGE181yAlAN?a@Iow8zFOdg> zF6}1%Pae}12vpL+rXWP3rrp^RH}TgYA${57MZTr&%5Zb^2;cLIT$H7ul_nE#1L8a zUBc3MX9J8Bl)|9)c5}|B)*tNYpk&`*6%v_DohBG6%(jst-j+iD&izFxJ_V z_SNm7&@q_uo~#UTe?o{@%IQa|)qgQJmbWK44 zpxgt~5Gf+)jk6+R8r^Vx=oElG%szG*N1v0pd^`ne>)n?zA5v|Wq=yNvZhUvIkgHGxbDeZ?2s#xF!Jvepa5;T+vlIF`Ejn%;Z~&2 z1~v@TwI0e`#SAB__8@A6<8ErWW8hQxkgWLhAc=R3S0fWc1p`X)*Vk>w-obLJRDtGE z={}2@Oa%E6JTCfpDE(Ron0^KM%i1iQ7D6G`_y^eq(AKIIV3W>(h_z)!M$>AO z<8z;^51kK`hBI*5l#PuKGKMixb*yPB@zi-iW!~X|=7#C=lN(*wDZp5)-bMpollBx| zc^E^ubwA@rBu6 z7#-y`<|L-ofV>1HPWX2c^C`R#b5tWo)5V5&8Ud7|B5%R@#cD62o#-{jL6|3plii9r z_ut0+;#sZZStBcti^dW$qwzGQap>7a_z{$cX9r-*uSHWuM}@%db?wD-v}ZM723v6z zr6KgrQZ>xi?xc5E9i|--&`--)a5$ajSCOUK)64Wx+{S1BB=JVIbwR81e~9z!hWSwI zjcOymmEmrZe$KX^4~a9K%i!Do_7vF~$4%mmYHPQlcV4cs_&NJTKKeLJyI$2xssS{r zsZg5aS#5ZBiF}BjVq>@xyZM%2?0XLllaFFlp+n`~N!o@ZP(AEw|3(TBrb^{w4&pu()pY=NmnL zK4cdrj`mnyq%z`~h^KTR5aV8k{7JH05>ZwcO~6OcYE4w+yzpbZ9}5D-+hi3ii7RQY z5rC+=yFlW#2WzqI=vitV+Q1yGS^5jUIbX;4Io^d6YWCoe;VCEZ(WSbS)zNGkR8F>s z=)+bEtR?8yO2e+a*xgsgSyD?rYCHc!c9CVI9<2@KUpltOgoQ*s4=5|I{#|ITk6siP zAInK9%Q4;*5ocfHht7*DgygaLcKl1#=yB@~#&@HPht401tR0$vflEH)8BJD(3Mr@M zp0bOprN=f*K@!JIf6ZKs)@K(`z4Pi;udOGLHB~BoP4W6|-FHfjN0~Mf>as9Us4|+3 z0>AH;d9PlVyy{LzaYG9eyJ6;2W=A#5QZKw72Vn*htz5KY z*d1A)BVWW*A+H6U@>`=fa(=n=u{a;7@m zZ+_6J)ZReV0=Iq_7wQ@hoPmY_1Jc=u_sFss=0Kg zXZ1S-a&mUY`nP@;Nm}+GBPo(KWKv`2{=!zy20X|6&X~FLu%7P1M)WdNb_v8onA7WU zRxqS#uo9AMWA`(9^!X}8Cs>TB8V~*fdVA&B8n}4p(4_++hu}ox&UoadLg&)iA(-im z?H$-Tfa-*uzv|T)dK)eNyzu3!IGj<&381^g7Xt#77Yt5Vsf2*Mw7r4{I%7 z4tQfp-pjbDMx-MDDRN4LwN|L>-YpUTB$rz!3-fV)HqDU|WTeR)mJ%iOk6M9Sib}Q;Xg8e?Sx$7u z=QERa?5H2@v7#Jt?e~!7$_^2*v$)&A&YEGV>8A4GO2(ubs}h8}cyeNPsq$=P`Y`gL z%JmQ6RUHgv&e_1S|Ib@Z%_0DN%@s#Ogxh1^G)iC($-0 zCJ1!eM#sJJvpXUFec{H_OI#(wBdv&>ZoAv$Q{=6bj1}so|D%_2%{GEhiRH!_{*qNk z$Mw(#ju(j?$$+t;FKtz_`e=yGR)x<#7W*Ty$1l+pwIps@eUy^PILvcn@(XAleY{a) zxgcIlW+dd4i^M^99*L!DJ?5$}gV~)LpW|3ePrcJAm5vm+o|(@S^U}wGa(xUyV#Vlb zDqIfP-DDrVyvoQim&l%ebTwh#7O5Zu$ln%tk>W5+d^AJBg8HIkE*-+Tb-5rA-yTX% zlel3BJQYdk+yMQzM)&M?;SlvP+wAcfPO7-t>XWR$x=P_GyTFKY$wG9bh+R4p!hJJ_ zsa$V5pX@nF$I+@k{rXXS7_P33M$2bY)~AWjykm(1R5BGlL&oTv85lXy3;JK*A~prH zBb|j|s+nnHLdNok==COgC~-#1JbpT`p)Mh7AWO9&_2JwDq)i_@F(nCO!4RYIa-oEp zFZ~`?9F5C(LkWaNS#ppyEnEm9X&D?V3mftU`0o`Yl1p0$RuP^#>hAIU z@XGsDO}U^D?!M0!LMVue+H>+hFAOKJO-HlRiyBG61z*_vyZpp zagSeGDTW)@rH?m)ERdLN{$&I|w?5toaz_zyoh47my!3G)$a*@}=I-SB9LK?Yp;iiM z-1TwD>(<8-N=c}g!VFjdl6pf6`ISVt=iL03w_B9&^m;3>Ws*$rNEouyN7U{YAo*JbRK(dw?A zULbRpE4wbU{#mKBDxDVTZsXl3N<9LheQ-AQd|GY+)JZ<_OzulJ>EF__(y%jf>dX=$ z`G4&molp6NQ)em=>8;RjWfnGJTHi(HoY;BFF4h$79>zEHt#mHqfQ_F3qxQSt^zi6rx>5zF zS4V3DR^nj&LhQL;+=sbdbMfhyjNllAF+7P{3gp_n80&CpG(BOLnTLY8MsKrxc~f^G zHV!Ioi{7dUNh0Ff)BOLr(CHK&OC>!gl~L4bZKU{=SUMfeqO7H$vbc{x=_0XlGkv@W zyQ7m#>>}|-r%`D~EOmmJSzVi$1vS)Lg8jo0KE~}T2<2u0)OpH!fn@fDV?WKiNNeCN{ z*H?Japi@GHa2G)r_|-Ad;kgyj=Lin%>MJ!sN#x23DvD&QZLF>FN?+>HrPJTeKjgav ziZCl2g+BeKvBCS6*{ij@73|ptY}R3^xHe$8{@!pR?!dvylTnw->09A+w@#uI^`!?!J;M zw9#D%uGU!SFK4x40APXT5l1~B}~Hfw{B0quh;4tf-P|I zeUsIgW;X==*M*N~n5h|q3l9J2=;iDJ_>_3#W2&W|e@U5=2#A`oWUg=>ofI~ zuoc{PN4Hbt(`qLya-V}xR-{=>@vSN*U}8r`hqOQ3M&sGSi;$@oe6-M)X`yCWUNH1c zAW@u<_1eg3s{go z;h6U-{fgtL2&G?T7go5pey3d4$#g1-#m6-2{LoG31(^M99&;-joXKmGHT4P#w5U9< zG&OyAYW^bR<`^(`#YYE9OSWddbHgx2J;LzB+KA#-q1ZzhF5>i zPQFk3FZh(+wNclllO0vWZcNg+AnUzn{fHiSdRki>@u;C$S(-^JZT3wXxDG!Ch8 za@p*#@l$dsY$O|Ms|LcAr{~mxT444b{P%^7MmvQT}kB{njhXLyUe-dwOj0m$=nHd_qF2)%A z($A@o2UKt@23U!AaWPBFUqmfg^>ySAJG>ZqQ*D#j%EFBaVdl1%xtaAV`F^^9;L*fJ z#ZSke7o)=e@q_c>iyqd9A;h z;h$SleHv`hmTf(nhcrE6plZw32;c@F>~Y%q^49<1X8h~%)7lOd!1c#?ei*MWyOo>v zYYzitR|z}}ct9u-rAYO0wiAZ<@u!s?%QSQ2R+gA4m#qG5WpRi`Ya}%!7DhM0`D1eX z*BK+~M3sq0x>%%`O&A+muHm)K|)gzKX6eY-8+TJ!P64kt{`d=QlWXsanKmxUpWzrrlr3tN$QYvWZv zPn67p29n6lIQyq5X*d--faa+>@#@9H)?3xNdy=r4ndp!;0BWgK$y9Qm>gQNqCG<2P zI-3$!x`;I+DM{#GZB2+oX zi{8OVdFL*@$U=|x4Y2HVS7NGZu;3hJF4G(si$rHMu2 z`h!IcUe%yyQ6dM3t0+)=`y4X42&!%(8&BhWu$_*8-z%*!%uQsYXQQ9# zf_RFx#uDE#;Z16zW!X~uS+DXYPnG@{=Iq=0a@HxWCy&7ebPT!iGXF9lXZU|^CiNw| zfw60M?QtJy!?l-0v_Ku{rrV)BoPFqd3z;%X%ow-qVhP2ID)pTJzlkqa$^Ze%a8ZnN z(vT8OaXre$HAQQ8i@qqZsKJjOKVhY_?_`-^zXO21E626pU;gVliiMFbYb4{f+N6;x zp<)c^Z#Mc4mgx>m5h?X>?YDzR$#K-@2 zV~1CjJ?O%_ur*m1X-D^7(~DKl*KmG@#cLg8gyDb_2uw7@z0FtxoV0gQ`$gKLHqwsI z221HHs!O~X@g{mWdquPNdY|+Cuzr+-gmz2HA0Jn)9L`<c|~)cDLA(a`s(PE*qbP^%?Ki&Mny^H!}?c0Z&Y*yYLAcBU@KU6L(rG-!O8SoDH|DZUSvIMNg_nnXf?u8<;7H|sMfDX ztE)3=IS1cK6Y@+6Ls^8HZsH4^t>_as`k6tbhZ>z=@>W57okV-KzSLg?Re3Y6zM8`_ zK=W_I2PAnylYO`DQ+TnohU)|sa5o=eJM9QDLz&6hRq;iY*!N%|imLu7EZD^7{FJMm z*1hz+_`*9LRAfCZ$gS`>rC^DP+Ohak?f2S1x2Ow|jm!1SUtSM8+>rgco$RpSvL69d z0;Xl_@HXY>t>?qPYcRk9?4dyb(^Pd0wSo9-2>f)_i+=}cEM0lmP7+d6&qSfRzlFzP z-;r#t5lTzv!)QMJ2QEA78)IbV$x4M`Z0IwFn~g7jd|bV9780h2 zxN`XzyC9RR$u<)9#Fmg3MnfP4;E)%LmRSGms^dn&>nop{hBkZrtJ<0=B!#P4Ed)C6 zcN^%5h={JZ>9~Pc=LF+WwOJKOWohe!zfKgjZ|Q67hlC|Mk1nO}etgH`dWKp(CKt8`Bv>ar=Ts!Y6-U!W}OANG;$cZVFH}-|CpYN zMr8bpmVa7)C2ZMi8vK<_FRdIv?)eDYGdOx$!5cpS^n?8>kMm;_oZo+4TX~fNgM&Hi z*ou$N{hzsyil7`Dds!*>6=^qJ7Li=wv0offY?UUkGMXUoZ#$b-N6XoLYNGH#d3 zm&nGNCi!K0Syqku``{+>#@{b8j_?~;E!;$wzlYS`Me2*xwU<-Uq*xhfE6?g(nVHG2 zgE{;?k#GJcScw6a2FBzC3{vcyXr7ih;bO{`Evg&E7&o=5JhPkib3m0V_EkpZk2(xhTY~s*& z2Z0#YA~&^7i@cl_llX(>>8tb!ma$~!i~K#QCQ(MApBJpW+-&eFq_r=gr!U~;iCLf) zpaM4S&$mB*0`kS)V?WV8Iar4{hT3RbC0dnw_2KJW;Z{xOgEk$dKAI9QhuMR)qdRtGshYTnypgsM=*DpTPSBgH$c{*p zM%^(Zw$J}0@>X<5)CQhD^SkbDioKC`r}4pS499oI6K$XSgMC`y(DsCUWp~Lnj^bqT z)-1MJphELvy%Q=GF@+Q*TQr=ooAuV#^?|OLo@L1&bbD#!McUKIkD713=v8x7MP`Sb z-+4vsr(ssM~X=aY%dP9#8DDps+*JV+TZ7 z%(V;SBE3jLdLHsk#a$K@YEZH*;LKdtSw-eYY23d^}6@h zhYJsD)7K-aEo3N?3L-|7N89MDGm;n07iv23Py*_PY_X$v|0x{^=98=Zsk+(RV>W*v z6`-ZiEVWC38d&4=F0#8Q@v6F~k)KkHH1C=Bf10t$+w8cfm0{$Lg1@f$n^60SC-I%< z&}V4QA~FI*Rxvgk_&MKr`Q?sNc9*0B9pWjOV63>hgk(|5^dv;$WxKj>BU(h-jN%a( zXFNT>zVT8MLT0P(8*RMSsV6XmWVKMIY-zImOnl& zzBv>=NMzUikM%RSmyz;r+xZfD zh4ya!`4T=XzGc%)3C#zIRWB5C`p-){Ey3i|<0_o^Z=dvjeM!1QBi85i+0s zp0CUMQsuC?$$6eZ)kC8gu{dtBjL0b$hTGo#)Z>tNa}C-uTwa286oSAYz9LjAcx|Qo z?EkfkZ<8V9=C&$tBt9j0!z=EtT`#B<_jNt%z!PSOuiY&ZJ5x#D5c#UShqxpenqqEw z7Ye5T7Nroo)vwE-7if{m^h`(yAgF4)Sq(;Hvvctlbf@%QqMCgl>=kOnTZy*?WzeBn zEcTz>dG=+u#UGcX!7Q}|9Aqh?N(LZQ5j|xe7ye2_mtnjr?`3ZX&pHQ9wuQb9UX}`v zYKmG`Ha|Gz+(5lW9)~gex@ay zozp(;@nY^lAx$!6GqA4r=@jKw0}LamE<<=R_Y478c>sDuG+dx5F^CJ)-&Qf7t^9I6^De-wZug}J$k86z%b5Ex&txQ$SW=uwR z+;ujjeF`mekC}Bqs7kdnWk%kK#o2K4De}hLWrzAPJpX~;i<`)fX@Vnx4sU3^{wI+Q zsImX{QhmQdeqDQcWA4&OinYQ7DXpPc^1ck_6g^{ZXb|H=*!<1O9M^i8;@LG77vU2v z>cdc)Z{xKSv(hY!nkZ%bTzEC+sdGemO%z+YW}iZD&Z0GOZq7`Z)-2C{uuqR{u*44{ zLV?mWMT;#}laca(HSEh=&r!VidVvF#6)8b&PWTxV*bfih@bkJBX38`{rAPyzIdxEo zX^7_PdGn4-&xfu@Z=A%|glBeZ2vQB?#+}Z*U4$1?rB&XY`7oV_R-`8%i?b2Fs=eqk z#4N_W!}YjLnwnJ2=9$rk?Mu(6+OC7#!d_}BKC7_o^ci8KS1xES=Ayn!8;7nbTpMb- z_MVWH>ME6o^3|K{TBWQ8zcsS>1FqU=ndB6>=@NS3fAZI?P+uW@s5&lgD2^@wDn6=k z*N@y&=DI@foQ2%;pQ?)~dkhK|sl^N9|K42mKODUUi+Z6{x1<_mT3cqq7Cdg?`8W$% z8Jzi8Uj$cU6i6Z$jBfsaG4zBz73DJ|BUWfY7+L5UL%YQM>ATl%>vcbq-D%?Zp=d51?V52Ad~Nvolsx1-ED<_l=AZ^J?Hmf8 z!sL84;a9KA$vb})ROpQ?FUc_mJDFy%eKwkXbbKgz7j;yHqR9$?J>{G?F-?OOfh`+8 z$NQ?F$4Ik34mrMRzZe21h>%(PzS--ngh)f#s~H0>QTYT?ddNaiGOu>7%Btr@gHyr` zuXnLW(+Djvn`wm-wuF!dIpG#2uXXH&J33X>4!3kQM=R61ZrxSF_y-LZT4z0kkOn9X zAawRtHCW;pd)@|cU^b3#0mlTu6F#QC{0e%huPqBvm+>#+Bqa|Ab06*bfT$qn`zX~Y zuEtx?v5kicqF#aw7?^-*6VZi0W%H%yMIDTKu$ycm&Ov4t!r&F~qA0ifd&`v)B>04AG7zntzJN5um}$CsX$rlw;N3Kn%IS~SqSm#Z{# zzQ^;c-^H54JscQNWSyZ?vB^y${_Gk0xX|ZN@w%9j!X811YI_q*9_&hsiK81FC6A4jjT9$IAKo{6I1>d-MQ^jZ) zB?q0jxUEQ^-E6>YUK-uvRFp^4f70xf&JAZ*iukA;#&Zqu>^u7GW+P)At?jIy!83$v zi&znT({H1KJLednAUODl+~ATGuW}m@flt6rAPul95ya3^xZckWs}E&gh4DZH+fI>K zrHM?emP z_9AE`_}UEksrsU3%d&Rf%p&QWG{fIW&@hHT+5WZb^s|9eAdlVtnD7rumOu&13C>X< zrhd6X<)Z(>X{YbXNHZB26kKU9NJoKPNw~%4*&}^YP(jInL!k&!8d0BCy3cg}Dt`!g zaW)0I=!$=7Z+RZ~!@{0PID08SN55z*MZk78n&lj)p$TGOh~rm(Zkzbid5gJbj+sAhK7~I>n3rV>3=VX3K1?q2hT~?N@Mug)xWaZlVjfWwr`9nR2>g_0|#!a1~bjN`7uvA8wEcTt%v#z>cdO>@_r8c9r*TmWoLjw~2>_=Io}9&(d6#`+11L*ivvO|&G0_yy>W0x}f;8l4G{(&MSaA@XJ!@FTtxhiM@m zBsYZ^(b;_Z)%ypLbL%Wn@X90)%)&5njI&6Wo)0ERa{x%~3V%N)ZL>bHd!Bx7*CYzm z=JLgGYp>O{K2m7SCX+9bkEQ43SN#wWO{%J!$c}6Qs}F{Sl4aT6-b8jhBa*=DADl0X zxBKNwv5l*@UK-D43sSpb=1XK_X@+0^N~ucO*p$_{y7|oBChJS`oyh@8&=FO#G{r5A zh5^AarzxJQ9xlfb9)(K*=Na@OL+SGDmg7eGt3j_9>( zq>`6ktU1tQSlY$Tyi zHJN~j5iimUDbeC#!6K!rR%1jf4`j1uiRJ2x!{!7V0M7|Gjvp>>?ITX}H=q84{9=vg zMn0!a*=p=9$Fe_NT9d$rbMuMk@E3Y}<}7+q0nVa9+v+nXQrE_?m|LY@EO1Euoa}Si~B^X!1hU0#wVe=gVO~q5awlg6}+j zq^AIt=Rvf|8#L>~@Pc!(*_FpE$Rm|( zy@2-qpKVz`w~H4iEUFM9!zFi)lTv5%%9qF+x$A-mMkiLcUhW;LzC_+i^rHS%IL9G= zc7M&6$c5a?2m&;b-O=+UvJo~Y*jyku9A1C@x{YOHiftX?*dg~QsGsH?Y+xC)9Xwxs zZ5Rm{4;WJw;-Z-WhaFiwX9L~trTh{;)UI;%m|~{-A$W6{S7NE4uEy)!(a+gL^wr9X z+IdP}9NoDcjWkEVE#AeZ1$q_IpVl%i<9L?5rsYGYC*ufd?QihLtzdw|O?E}bv51ic6H z!0_^dWr;|&iTLIPgF0W1`Dw(nGh~yjuDzgpL2AGzUGU7j)UvPo()lUV$9N8!g`iYD zr|3Aiq&7^bP`@;AIGy4i&5$am3*Y$M5O{BvLgKFBf@>>>(|2L{2Zx5O*1TlcexL+K~ycM(4uAULLN#^3`fw}L`T zvc|Dk5kJwMO;RAosw69lq0^@Ze za&6ctFkzJR%;a$`(@AWz$>irBFOJ+*hv+#{LC!{Q@wS~QUqTy%)7uiXp5oeJXuoeV zXM7FM5e@ESgHU!CSyG=^%@v6xn0Rk)y}VWIm28RNrHo-TQpaU58&pG!Rm?NZ8RIo^ zNm2puG{LJdYCK37wevEoBOot1EjGpw*Dg=!L{*ML{@t}fX5;jV8Fa$im3);UZtHVX z;PCmj(JIT_37f}@U_<5lYMXLSy9b*nUxslAz36gW6+mP(6I$W_2Rc#|HrdXpAL5OuFF%BM3%nC zxGR!-5+Z{3Zz69sd9+$D21X<|-bFU3W;EM=bdXvlBlO)KoUgIG)#O$Qv~Bp%;$O~Y zxtq`i&t__I#>?2-ZyklNnS24l*{t-{<6-ZzIjve5hqB^D&l7UPffIRf+_L#a?L*%i zGST-B;?f9D{{mV!6>3V`GQ}TCELS_r@vd4waWH9H*`QPMO&N+Bmd;Oj|Tg3l6?o@v!-UgTmnl3Mms5;^L+_ zkXijXwX|#QFS@*tITqO)QDxD&Tr!VliK;>s{wm|L)k`yr&9c73z%mAvO$bKjvMfIv z*5sG7CGX3xi%a3;p@5eM5xR3Jfl+dUFMgS+%1wbo@(m7+QvCO$G z<7eNmDts`d8^;cN8%{KC5V{tsW+Ts`zi51VZlx_@L>!HmQ(0hyuQ7dSymE)#hK1=o zm+1)V$cgW`a(3MOd|Wp6+77rNiU{b56CfbSRESdL?0fkVJpov!nK|B%l5{kgLj`y1 z@U0xLa#^XA9x3#B6WV|qbTvOnjDd9nmTY?yd1Lerub;S?X$|S@Ap9E8MwBL-DNJ4L z$a(=MlyvK5!)M~S*7;1_`X_)}lsP*ozxsJaOC9Y*iP6|Sz_U1;v;FRI{E~c;_o(Qg zP=Y={5=uZsYrQ}FqrQYUHUQBBOIDARfDU&8CgcLGt4rD+^(p+~>cxp7u>w(OiL25T zbCEY>ZCI4KHLz&WpGW0=Gj8UpMiMM7+f=HvWP0`WgHIh6IvpbxCP6jv|UzGhy zFN0aINinri&(W+ljK0EGCd;z2-|8j@UK&~WHDrfn12dVStGRBAv0H?Q zbo*^p`qIRLaaYA=*}|Fnn7_gk@XRimFVPc(sXSB@jY4YbxA?-tKEDa>V8>95Ok1NZzxN|n z@aj!!gKd&=hv5sI=tFKQXYB3FzEphU?JUY6j-*xvx%a!L?@Q*CLgR^(Q`l1{%xI!; zQ|;6}E0St}N3;Uo({(f_QW6nZL@IImrxzdGdN~D6A_miFn0+ii!)aJIu~S_SzrbQ* zVPsMy={gpPwtaot;gIxJl?)w2m%UqG6Hj8;+ne0NqLvMw%rJ9Aw$2jS9DN($siXgr zgm>cA8Ve}K9C+P2Jxsi84!I4pQ%4n@N9{q^wcmr1Nk`3J=vS3g5c{Enu^7g`uVz}f zYzk0LHr=U(CLE2kUi)Ri_hRD%93x{-L=$%C9%~tdAOvms*lk5F!V94-*)1qwwaMR# z%cx3>Fm<~-c3<9?cNa{0@z|tISmfaxHd75$Uz$eU!27ya-^*aSBaA%s42p~w;|T5D z%=p>!A=%haJk7a=;TvUbtV6z_VT)UE9+Eu}VO&4C7q8|juc^&d-GBIj=u;LC@93v8 z6Na?_Ayu1$t{bFZ1Urz13xWeGQD~u!wu;8tdh&T0+rR#|rc2}7EgB=bn9^j)w-UH`>EBB<+uTGpSY|Z9eMET8>!fcY8zSSg70C$EPM*Gtyzyw+ z$no69SJAdOMI~pe(5KZlB!J$-VwclexN+*q;)(S+io4IZgZ_L9zlz}@yC#ZrJ7i%L zR1i>UhR*|^I>)*G+gMLsT%BQXDwZlcqpdIwWn!vohGrTqUeBh^PgM@>o-;yZnwDn+ zDztq>#CFb&rn7hJd{gY_cn$}n1&_9m%%ZfEC#vx7Du}Z1mF;VQhw)^vr(F zD_qoGtlO9jqH4l_>mIo#H$DdC$KF46~fxX5ERHLx@jRTU$uPB0ri^Kppyunu}@ ztN`PoNLZj4T(Q_lp zFAOXkQ?>zRN+>pqPKjNOU(nQxqJbRR=G zq`e_wDM_v(!IJ7(1T}?fXB}SKAwPwe)g%><7AI4`bTK&UL=!U$NjprQsvpuGIw*7l z!|=c`NmJC~^Cq|~H=WXtm}rZFrjSEJyQ$>kLbbDiF*Fysb#T|G)Ty^;56!2@4sLDM;3&z=rtkJ;jxIujn^+)HFH6g!V|wfHMW*5*#zH5aF+LgdFH z+w2%?dJw$*v2P4(FVLp~hq3F3ea!VDe2oCrFR0IsZOS(djlc+=VQ<))tld7Vcb4J190rU{D( zvzXDz8}1ZyZrb$J|1h>=@SbC_bz2wI758m)!Yxhrs}`?Y-FxR#z7pS7+2&uIzcO2bIY z#)_LBhr1hVV36j$)C#)mmW{t$sfFFjZ^7u-h2)pf99)8Pt#tmEAM$#|W_<$$c+F1m z+Ui@0F3lYBUgF%F*dQUjQwV=Hr0hIpYqiB|m)!@xPrV&kd(6H6EcI{%l+Ugi101We z?yMX6o`I(>hr=CMBUM7gJr`x-G#3k7T}&3Zwy<2cHGzaUCnq~i&C>*Ff!c%oxgp~x zzFw=+Loc~6dXf8x0f*^AM)3Z%-S5K$uM&K-dds4d1`L2)u4q;%B4=00$Hh;tMd?P( ziv?6fR$P0hp|cg`Q)oxZo=i1DC4zXJh)i|s=Pco@$c)XA&6c%NiF{FQBTkbY@#1vs zm56R{A{%9kO2?E2%2G_QyGbs+Y*@`$T9>GFV1XDtF5>)KKO05m*D1rLYXQsvf~YA> zHH!koYUHKEjhzjhB6ya za22r^!Dd#^TMhvPs~V{7*8M@-$vePVEa2B*V(}ZbMOd>0ewAOep&*Z4JDCzjqJwt{ z13&#UQWj=R<6ydoaUnM)|#64`~?j zS;I5H5%Lia-9*l0;ct-&@p!kGyNkRrZ^0&J9I5n6hdaS1CP&>>d7>XgoWHSb_0I)mZ zzGP3?QoQPbNc)|5sxv|A4JCA^7K*mc$DiF)Uu_)vZGA&en7&I37$pgl@%<8WjRdez z{;%Cl_0`I$rlTFliDe;)7XS?x&z=s$A1mm0%MOI=ZQ{p_CC-`ExceMn602z8X2$ zqj`-qcalIL0Xs}VOc}*z`$YyBKj*%6U#%Q^#!j_T-OTjVFr@b8jXI^}(%o)$zCrr6 zK~M2sGbS>#4CdL`@(8}{q$!-0tfA#*)y3t)lJ>KP;oV$IWNbVf(HpSFZ}N*s*7tBQ z81AXTxk^ox1qdF$n)7hA9O#i`E)|>>Us}UP1pX57-+=tu%rQMDR3tEbV*J7e%*!vX z2Yy2FaCLM(aqoo@P8r5(h(LxB(_KFGfbpwp9<5~(Xdx?P!C1%nZ90D43+sRUAOGk7 z>ymc&UVT-~3&A}@Rl$si$56Pd5xnle_9nP-ccvP-GG^;FuXHSRy-j=X&dA zLumvYI4m?7iF%wa^L-Cyqh|QCy&ECYug(?ZXuUlombYKCoAuKS1-OWnpU*AF-t^jl zDD(z<5TvIVN?4PKT=UnXvkinQU~({&hbkdhkTj7p3{##v4F28Yi;)Kvg0*ar3_=oC zEeiV!Y1{k1OmeE?0+d!k9uZEpBaHo+a|)?idEHm=t=EH%&Zab^2%^<2xo7G`xeb#Q znpo-e4YP0J?`+(SL)w-xQ;^x?+sck=v)M#5aW&?*>Wdd`zf?Cue9k>m0l7|}g*6lD z*H`Sm^}gUySSDS_3{cw_oS!fv3X7AZqSsdozeyh?4Z=HXu>0C)MM&~wf7zjh)Qi;? zQfqO_PY&m8^>tz*Q>T>|kMS<7xYa}1tgPiIPF2%dKJgRkjrj?WQw@)ws)mbV?!v9D zT@B+zl4sM}TlgP(73v;`o3+$N20U19EZi!&5 zQWFn>HyYg@Xf?X%&d;-ljf7>ZQAsuCHwLNZJ{zpwhH&cOh9EW^Liv_q)Qt_Q-40)a zUdS)UX!zyO!aWtEUMIu9gig7;gKb+4&p0#1e zCaLWZQJjH;uoTlIr<{36E-rSLK|wV|q~8+L0B|CcyPxBHm9h0HkNcsmK|;wSn`5Eh zhaX>G-7*ZMqv6}kqY-u*^G>*(jeUP(=GBxE$ z6Z#^`6(bdQeXICdDp-W;WTwdD1q))sAQH+$>P&&^>y&X5-V+){MeiO$2Q4eKwN+)6 zg9QrF-N^F$x5o}CjvWf^3Z)jhr0J@j-E#AO{Kmin+0n*s1SEUmhs|vKco*1lOq_at4#Z#X%G0Q~Dn>=#*xgNhXIQlop z0cK0Eb-)bJ`83j51{f=`ea1|-ED#my=i-Tz_Xj4`-4i=h1M0HDGGX6B{AJ)%P7a@` z$(n!-D~Wd9>XBq=5ima`U*)8~Gi}qz$ZO`=Y8#CZ%7`fdpI^cYgq>t}KIOFsSTkno zm01X`0&7la^rhlo4J?ZJ6qD?yAneT2Y#^qR3fGgSU3B~1#KK7doDzK1 zC`eOf&X=*Fb47FE1{*nz_Gn=7)zn)jbu1^%%4^?_kp0wvm9Glat{DFAf1##+PrRy0 zLhw&%+|?&ezj0y9{q52|+y367^ISM>29S7FSe@=k$|=fcLM}HUMymqfoiFruk*DH6 z;~9xwt8t|@^ea1B@cI^gExu02TDR-~E`cAz<7dyV9)a< zIz!d>Lvj&U-gATzt*=Ln-5Dr9LijD*0 zf(#rDJOnnP1_<$3ahz59AE7;tKf{^P90p4w{`0h(GTs&1c-eS6?Z>cjte@T8_I~_E z$Ch&%oV+@%|HJVc3Y&?Ib+|h`V?A$u?jyGSw$lbc)6by_i(Hu%YGIeHtTqzm-B#1 zUl4t3v0*U#8ytkVB8#}ovzo1w=d*=A6KLnh>4>i;4i%qis##_e)TXsvF&%|96En!h zBn5m+FLE}DE%8!YswwU|eCD@Jaa%sL9Pur@FlsGW`w2~wBH7ej3c(yBO{23*?hPcb zn^`PM;_To}ftl&EeM`l{YW6KWAbd`I#a14PAWQwEcf1h+443!_qLp#q$}i^HqEG|+ z{fPs43e;wq7?q~Dzt0}8vtRCg1Si2Sh5vGtFM#E}UxfCjSFU-d2n1j$@G|AIljd8E z#o5apG?y&_vHZoRJ}Bi*Q%(tf4dhkfPCU)cj3`mZni2(Fj>;kB=JudD z74c|bp;*YyA>aT5W}41(2_#0*v{VSI0 zFx9USGd0WL)lHDJJ9hs4py$zZ>%dAZVDqmRvxDRP_#N2bJdQ;&{w3)nB>gykhr`tU zIW8diYLil3L}STcobP$PkYE7dfv6WzO8d_67$0S6l#Kg67S?I#SoP1+T9pi>1T@?1+ z?Lr8VdkAJZVNSi31Ps452VV1OXW+gxUNoU@4@Zb%Po}J9#4uQ18cy!cB43h=E8JP9 zsJwC_^=2cRCR)VsVJo%Yq6@L=Xph-A0wie}{cyJ}b#|qo&~dr#SdSJC7Yld~w-?;} z=~c6la=Nu4o&y6db_VCE|Docn>L8l74bd~0x_M9-8|$^VO+%1$c5A)6>~L|otRp=J zHACVp4Y%i*3WhVV1?tB@7ITc|F?aneLMCorSM$MsMZZQs@>~A!@Vb7cMA3gSrj6zk zAd69%Auw2Q`f|l7l9fRo3_gG@HN%ZK0M_aqA!zr`x9Fm-Qwh~W6WYxI5qIxWfKBAI z2UVOZc?|C$y3WB2md%WxpclJe=zl(_csex9DPCHvz)sEN;qNK3K{WwchAA@S3B=v7 z%=+80@!rJ_YRnNDI==rI)z9JB48u4sdssukHlNy zrG$Dkun{r0XylM!SY$a=BO@Ro8gPbus zG11qMBh%X9F?gr9d)j=fyBN}ohhY^ubtS0P(}jeg3MqR|zaDws&LhgI+gq0Y9QZ{B@xU@_LVR*xw;OtqkMiQjXBj>SwvaNlMDjh=gvz3Z@GtB-&}1l2QM6Dulo+E5ya z8#&&$8a~XoNOP!%ofqnZSqUj~R5qv|$Z~xXiZ9b2;$7ktBQza|NSwji5NHKyrYH~5 z&6FB{G zg_d?%ZW`F8?0jJ99Cwct^wnnf>)qDS{OQ>>zYm*eK%)&+bfZ% zA0=w2sW=Tq>TgSPPH?NCAB|14RHW>6at_qUZ^0Q5G}~eZI6@Ex=x;z(`D2FrXlz19 zPAOU&oIsm`#WIFTTM_I9)tZ(&3Y=#}J`Z00%~&QKN4F-wqi_U&7-f%IJH0ce_w zSdC#)JL`H??N_3&-Yk>FN0Q3iYULSjZ1V+JXaO=D-9X8*kq^BgdRFnRWN=0>lkCh^Nu@d$JG{nP zJb89G0j`5RcsM-MGuWt+GP_gey|0sI5*lNT_#l6E_xV%7Ni(Teu0R+g#K1&)?)_6} z0<}OURZcJ<_8o8>qjZv*TTAp0n{29?l8Y?_5b^*Z43mLL3UwIcQLYm4!*08!=zX}G zZz|-52KzdVZc+1t^G?Q@d9qJ=SeY`Lq_A?^R-HF&&(C{vn{mR!lt-<_G#&UQ>^}UN z0W-KL*Kf>j&|d!Px!J;>wkv4Ym&m!*ovvBP|l&=Xy%~vrL1q`J88%96N_{oL)T|wSjb?7AOql`#`pBx?)cCE zhhd~?1KXr~A2k{wVG_p$$Z85>dFOjDgHx@r1<+Y80&DY|Y`pY^P-HQL!!YH;hqE^4 z(3vlT(99wxcSUtT@H*=!LjfUyPY@dG&Pc%gh$K%c-PAIAjszgUEdFqI*p3>%S{Y*>;b{UfIzhK zHtAOE1ykC@WO35zytMIqvHu_)eCnKhaDnlbkjhu{@sIS8)@8LZTz~}*OU~cwy>Jc= z4(1A;EjE(Fa>x4Al8O{q`Yqd@I|jZPZj(;sNNmLPg*~2>Ft!FM+hPZUD{;+SsR_%M zJ}2iGc^Nc}syu`R;hwhA5;y{_gw)BIM-$7wqBQ>(`%pA%gwyp7F{j-!Tz1tfoank)l4)hXL(dhC{&cj-wxoi<2d zI?t$)V?RsQL66UO^V+-c3}4qIbj9dl?7X0KQ?TfLclW#to&;1_AE79{c6fY~CXSl@ zJ?~_Q2s=Uq zvB7f$6K@@yS%z35UNObML+SXJg9{|V;*f{wHk**g@_C9wd0CxW9@(>{7@4qCAZ7)R zRkYm!_GXMtDB{9lTG2%87`g=h#N5)ZZYEq&Y-<(mL-@4nW)-dI@-)PVm3rc?<}wLu zNGhpA7jEO>v;XZ~r2(KZ>#>$Z{5IH1(URGa6T+J&QmKX?NZ$NnNRy&knQv@UONX|q z<}!wK+5Cj<%Thl4^J(jWsc`3vbeR(#Q%h$sL-ZlSo2@mRDhD@j=+o{D^<}65?4)F%oy6_h%R2 zyTKRFmP|rYX`4L!Hp_~ro9M}Q3JQPlK7G%vI^SCvNTbz>iXc6Zn}ibk(gQj`KvLqr zW*iSRZua2%;cW0|=1c7i6GqKFMVlZoVGwgg#a%QAee1_q zsJc6e{`l8-=HSldZxq#vR%gu7jLcbW#+T{{KeLsUkrKZHnYQlM5P4ciw>!Y*H9vwL2X;iqRH$3BC)43U>i2Ig3 zWn88hNbu%9XHH!r)z6 z_YSg5rGpyoW=W+bZFYO(y9G9N6ph2MR^%~kv|ipCk}R8$)(cg&Ry}QY^lgsK9#~ad z4vcatK)q|7P=sq!=**l=!-$MN4(P_QUzXkcfi18;An0>a#+39!ZzYgPCsL7yj<%Jx z@%49W14IO-sOBejooO56Y!r5}OdYXLWIMoSO_)7*F zQz{;}=sTl(Ye;;G$2&vp)ueKX#Q zi7%b{$QYhtXW|jZtw^srdh^{Md&Ssb$*U|mnSFA;HKi@5uA5v$!@wZg64X5Xw zckG6&52*>s*sG&DdXIfQkMwg~n=i7(kY&b3mZKa8%?i24^J`W5vL^rqv|EjxI z7uulq(cmfJVBFEXBaYkh_gjLPa}I&4Z}jvA1k7ME)baT+jaZNlLpg@ zOiKxL$U@YO2voZ4fEeb+&XD1MQB9|9)blhFgGn_q@m!a ziT2D3JIMWEUGVG5ds5Gb7mOop08iJ7bkljuO zIt`#W_=dq=9yRMp%n^cuwFdm}8#jQWMWT=<<&~$v%x|9FB^A8CCXzn z{`zIR7OT86-}@6dep~s|Xxr#)L)Dt@U3>aaaiBl<8sMaiFG}Rq`7%~;fFG*=S&1u{ zfVJ~8eZg|8!GGG>^Js9O-!!o)7zIK@bMXpmd5>B$SYN?8cM8j#H6HB>4hwtF76<#m zv-LA5U#v}r7cLsC4l(W)swvx%DOf5$Uqt@y;7voFCMhzfvMD7O&3m#9gr+t8krA62 zL?x{2Zf@VhJu73Pw${Q4mF863#!`ArFu|@a43W1%`q|LXH8adyi@|`*czZEZ6h+4)I{}; zr>w$9N47PL(ykVtQk$U4>#Qc!Go7IF1TpBvCt6cO`QRzN>8XNe_)*TN;tL+5JWoy` z=mT8h86W{ousoaED2=j&ph1_Qif+fxUK@c!ImBOmU&Fxir_gVWrq$|p?tR#PCq4lT zPCW~l&J6!zrM}K9`tfP;?st?GuT&mMiGR8f^wHo3DfP9)K2Sb&H^YWi&zdT-M5iW7 z4KrtGezbcU-_<*(W>f&d0gtd?C2o_ID$mIYEn8E{r>yD^XNTuUI|EFiht(X%7O&Me z;GRTT%JWA)Oe>RxC%QL5wZ>7U8r#llj$T)xLPaZ7<&6prja5Q_o9M3uHB?b)0X_J_ zPbx5nloNXxwjYDKw6WO<;<7R4 zyeNpyy0>Qr_9`QXDT|+vu?^NMK)SpRayY3>F?R=rdJw=xzcOamD@;0#?JLQK=XP7_ zhwBFNl{2jrhEw1!Q%CKX2Hub(!EV!iCPpOlQV#68eNF@pXp)J{`)X7FEIwbGN z`WnSO!|d78`!T+W;`FHXfB z?x%MUl@7zzVXNKvN?}Xc(CK0pJiBh;iz3YYBewK zI3e;-Wh<#FaR>39fy{DVFKc&-0SApT2%2j&V&?h>pf8L->=EM!)EP zw@v=>c3tCUj{c-~$04=C27%AHiy`ERoY~LzAvsxN2{jlr=IK7^Qb%RlZioC3J82`M z8}F#v?`BFYmi}GwXIJ5e)Wl~Jb&*!R;;reYcm6-6CL*_wRc`yNmr_)p$>!gE?IdRU z$e#|~E)z(-8SPVSW3B}_;{k<9GhXJsdc=?AuHEPOF}TeXTonX5A3{_MWT&MyX2hbg zXTO^phJ8sp2IMBQ5yq#qu7M!vZ_QJlO}xShTN++PUFp7?<;>R14VbxZ$agWuNX7|7H5k1}eGXgVqia%JNGt(By3Gq7Tjj&>`n* zLxVE&7e5(A1!M$`q6TMcGNn*neK{AXj$|k6h!2ehczCbG4SQ_a9CR`-6M2=7u)3)Q z*4nkyW*7GMJ=z*L8d^&unxd2!-tQ%Fy^$4W+6Do%5)m55U5}OqqWYgDnWnO_H^Q4W zOgh!B|0WceI(C=B<5H)Z9&HV79YbrTV$;SYV|pd?)Y1^YV%S0I^DNke_S<)ZVzljW z?eK61vPshd6vA-vqA6BzU@*?>v)#h~9uGV5U>E+c3DnRCm}XYong-9JB6v<()mSZc z&EvODTj)$3kx#hU*rwaT6De?&yQ+0)u0p8vd9<^+LXEY_vw)JkSf`PJ7&kCaEtp+u zEf+r<*|~KyGE&9{#GU>r&?`5nAbLbBby2uxE{Y7USz{Q9Z3A~<&Q4-}$|sV&rX%ut zqHyztCZ;d|**YI^BaWS_ly+k8nB?3d?(GuJb5cfZ*DHqT;IQLm290vKNE`iSwzawK z=HK_<95Zx$61>8PUXp0GL6Pe6UOXjd@S8XwX$ZQ*queymvn0??ypR62v`fwH&+nv~ zpKL40`6)HAnj*$XNdgldo=XVK?$x=U=KJ7w$}yT`hw%{kF_hm~wS|HHaIx%$VpdN= zSPPXPGAS8@BF+X|9A#(NyQr|)MDZfz=-Dzr4yxLNe(hEXB9=ni81f)$P_J2Se%j&8 zJm{-{4{iF^e+%GU29VomQgnM4l0;VvV)2g?M9&5%B&o2qWN}0YROhw{eL5@42A)#1 zEo;@8o7aB3_V2SY#ZYXnnU-IA+qs>t@bF$x)2f8wv$LW29U_}{jB1A1Os!5qkqW2L z8lHu?WuwOX`^5InM5;H(U~krA={{(d<~p{Akp{`Fb+MvD#OUO@ny6B&Y|n>7`G)9K^M+vKO4CPc3-D+i z65wGtU0Zn(GwZ;dWWIHlKRUkvu4!f*CaBN$PSr&EtXidFH*p8g=@%XPwxlP2K~^nsm)lL5LR{-ilvm?KBnqIDPyd7sLh6ZzFYhqR(nHL4GpZC2cW$s8$tFfea*>Ft(pr z5U4$bJj;JEGi{xyeCV@No}q0PQ9lxH=@qgTX^NaCI>0s4dDETmHcoC4B&YC%Xi6y! zJWX~nUL^x#RgyA~?RZ~yIZI=FY_tPOG_GEpvR@LAb8yZpWM?Y$Y-4zpf205dGGK)P zH%uWq^;E2`{py9d;9SA-Zq-dKa2pIdhF3?z8&sD}&o!YR3ZC7_Zx@iha*IZ2QBhA| zD1iD?nCi>9GQ9hYG&ab>=9& z6)Fj`Ou_UNJ?RC=>vj7LTk|8bOS1FvO?Wa)>1_IK+?!&Gi!@0ky!Y&NYeZt@7yubL z_V#LOM!zps-byfyxOmnu{?xl%400J?rNnJwlF{!?EbS!UoEc5*A1Z@ipEG`63rLitR7mYGCq;}3XH#4(H_SJASMo@3hF z68#ZlNro}HJ;mJQxeqim%S@Ba6rEE@pIyW6LmMPIc+SJm1Q7$3`?|e?6w1aCHg{3G zcPiRGcn&t}U)&(}X=H96wF3kMI;i#-;!kt@N7ckJ~0%g5C z>V0FzL;kGkip{pozaityXHb*B*BNWmrP68&zDXi*2mS%2dGoW4p<9E{V2V z9{dNTv%&OTa1u=v8uL<^Y|kyRz20A>X2iAsw?wa2(m1`kNX;O#bNcP^={j{C6{oe` zards_#BNe)xP9=-NF_b5o>CK{Y~LWZWXphK5^edJV9+(ViQH!cn_SGOD;6CAv{T2U zu*^E#I@Ns5&$i1zcNz6W;sX_SVl1 z#CLm4NdA^nB-PsEE$#i%aPB1_5&0B@$C+xrg7)7L6`lX>bkL*03Ca^Yh8A7)U#ZoJ z6tBvNwCOqx!PJR^is%T&9TvZvJ4l1Sg!PD9E`voL?Q%)X8BEU(EJ zd0pu85+e~O2hUSp7gbY&bI@xe?|U1AQAZG$L9=T$t#{f0ZUi%BSyrJ0eV-sW`^n_z z@JdP;6CBQodo;uFhB%t~Sc-nwWAID+Im^LG)MY|~41iA*+rp2AnUo@BjAtWTAhnES z@Ioghk(~FYE)x{0|4BJi)mc>9w&Et60Pt*Z;Qgzaz7<#)7)}8B^*_M)1b5BuF{xwH zcBm{dF~qs=>mTpt9+=N9MMWL)CQ|I(ez6+Xd<96^ho%viBcgs<8b(j3ynW>?Z?CYclXq5{V&eV3ok zcd@^Z_M{)qOf|6aD`rsgrk-h<7$$!Rz$48SLz-d^gAD9rz)T!zuv=ZwwJeXn=O2 zR$h8`x>*M>p-_+2ShFHg@}AL|WeiPFnWGFG@*L|*^Jin5dHl6%k~;E5cLb?k{h1(` zd$1;5Xi^Z`|6Mf(d%xW&tu4*(gWJ?Ysjgk9!ENYIQ2(VE^TO-DHTWyWi_YGPqHa|6 zZ+H8CG&mtS#rH65H)x+zPt8B3?k}L{j@v?@7#Cx6(WTPyR~_`-;8}1xlZHy?mN6K9 z8mj^0ugFKgt-4fjva3&@O$|bIk3}76O(rU0!dPP}@nT+b+sJI0tk&FF<)PG|mMLY4p<;58&!a`%SbcM?r&|ihRoPJrTprNu)m0Ro1zXz-Fqk z_avFUIh_#&R`E{X3aJt+uNNWBHDsQm#yz4Q8lIdbBW+wr3b0bKSmNPXO=JbM?+7-G zt~#U}=Y5%Pa~G~4z)r|gF*Yv{(L|c(KG+J$^SPwv4R~j{&gds=%yM03$y5QWHjT~` zm-5Q)$@_V`YIakY5vN48Zm*_R_Y_2oN-{RcTDi!dTvlb7M8Evw^hEeiPD6>aC-I}- zlg(1K6w&Ygm4In8au=zS&FZG3ULC%2Xf5o1;E%p`1!RvOKg~;nf&il}QJoFZA7Y!% zb~Y(9FpmC?q048y@53rl4P8vL`3zI~At|hIOp7%M^GB>Hf75_->7c>LN2s+A^h1?1 zkAg}y3COfu5@ZnIPYeh|{~ujE*^}HL1>hK`X z%E$9B1NPkt| z^8*b25jG{EKN9ML!xOtpDvJ$cT4vcJsyI1T)oGj`;?X{Gvsw2W!XYGc@L}bG3fP|HA`E zm{IjHZyC>Y_p3s=%&&WUP&`PMd!D+f#eii!*d^VHz>=IS{;LF>H#n~^yvgN$|Ic}1 z`G+MAl2Oe4jvZo!e&?b3VrUiE@4UITDQwJ-FQUCtJndFUqJI%FLw^ww`VGl;^P1wP z71Ld=s=(V>6|~QA`1gOIY<^e&m-p`JrQw3nB;+T%IM{MRlrwu4Qh)x`;}@3YW7&1v zJ-ANicau}cf_1IL_@AlQfK?=!iWhJ0ac2_=_#d86a^sIVboN zJozUzJ%=9@qc#3vVpe5PfyM82*h3!@_q})uzo2u|yg|N8e zh%{1Z)+GSPT3uJ%Ry0~#e2_aa8!CW2zoqWwqX43$=}7Tr684w0tmE{hNxMAZ=7a~m zMJxya5u9eg;-%=&Fj=b~fN)OoW2!!=g7b%A4`@{|rJNR+rt-Tel$r_y%*jXaBZPg@ zm?u&NJvx~ucv+S??^waOkY$>#I((rqx1>aYdnT+on31C;8OgIK)(o!Nybs|1?%HSl zulQZH#lZ|TTdJ+|GgK*nhHFsTa24;<=J%OwKF&n+Cip@1Tt^oQFj)j+LoM%lL(R}n zt|R@hNp#!t2x zq}zmlkULluxRMkJ70|jd_TX0z@Q?G11GdH>{i0T#q_BDro4=ET@eHM*k^(8069`9P zR0laYQTc$qyBGT>Psiou`O*|!41iEO9xC}eQ0cO3SyJYUSSKwTFiu2yuS$#9s?INw zBporS+S~1Z{Ojcz2hMk5%}gyqxUk&TA-ZBCRGxz`1|dL%{p^+7H%FHx*KyW^C0fg>d=5;EuGx|Nltn zEnZYq=1IYvMDY7=eElGJyD1uya;c~*CM#s~gAB7PYV$GYHSGhQ2!zY{#b zB<$%6Ik`v9E?b;#rv77ns1)zVyW)>MB&P?d6R(ELvC-m@&di!+q4iV}W$hkGFV!tH z-tDj-e9dz!dD+hB!mCCIP9&0m_tE+)3b2;a3TCCsisiFI_k-MATFRkYl%Uf(fYh~+ zR#MErl7Z`~LhN`FO z8rFlq17alUvQqrX8(~c;G%e0q|Ej(#0W#38`xdJ_KzH?|cu=gsG(X?3Fl4+vw4re{ zh_*Dp@8+qn$oz$6A@b(M3yXQnaHlQ@JzQ2q`Yq;%ipfl;xgqwq0O%_we~NrBWI4e& zGds2BzhWdU${oxdx>6%W7cm{l%RR5*L2Yp%pfMjYxv?}S|EJCn_m+-w3Fli0CU~B7 z77~)809rTYWrbrZbcoCpz{$9+XsCvKI@^EO1viQ)vSuC@4MAbt%Jo{SQ-Ga)w|_mJ zlE4tFh)mgxt45?V7I%a~=!4T$o^C(l2Z56)*xamTW0nU=X>V`gT6&^v24}Y?feUL8 z7=fTE)bK}~WcFBNvflL7=eAUSOut+}^n?xt&EZupQC!GZ;x>wB7xu@{6Z+0ICE`Ql zu&%i5rzQ>i&p8+5<*k6Y^Rs=;zR-F$3V)C|_@%hd)=+_M%^U|(2{$fHHu(^hU^emm6k(w$ z!r62r%wG`AYV+k>7CZ9CNdEm)!|k59dy)iB3MlTG;S4PZP(r|mj$rbsjl0}O@o`@s zC}MZEDrZT*RWKrnfyMjXy8c}s_r@d&&));{90eGm6+lXOEg||8r}9<#x<_OF(8=wf z@|e^hwUViR0>beRGz$PR-HJ{%G;Sf3qfb)vNN}-M$AAgAI=g)n>j5Ixg*IhCdnGWq zHPW^O{$%X9sp(V@oyJ4`sevHc@BUS zRn&u9I6(Cg8+SIz{p4)Uyu`BLqYg$paxR8b56WSi6vh_8MeCz|BmGZe$F0pfXDD&6 z;#nU%^PQd&w-rRYm@~GY?tRwtC};gm?VABo+6>76!Zmlyy=hVVqoDZ7&Vd_UH+L~R z8iq*2)#qXi&?t6Vq2N|Rq}t_4V>y*2n9TW9D=s*8IZnku9|RyIPQ&`b48X?gvBtKfl?b(_6!Ro0Ai{djS0cTL}$mU(Wrm1;7 zp`TNq0CaW}R?j>CtD;yv5e-uxx|!ig;{Xc<2ad9bjzS48V5Cs)j-t`*&->}74bcx8 z2UrX-5HtD~4Pt-LLdBXWHNtc%^#Vmg-bWpOSI5DY_8iR5O_c^nF8{1kQR#sQNufqd z?^EsfWMTOs4=5)ab5P**6h?oMBM-7 z>TLI%Ymu9wA9LZTZW5~;&&}fl>pQx68#fnf1 zqM5r5c3t1G()J{{uAul=hwnQq(N+IsSX;zD6P-PT#R^^o&-L3I8qEh}7rQ+wdIC!9;R zJz*Dg6~GUQHx_sV-IH{1BESmr0*$_E9z;|1Mns+3`e~`&meZdE4_xVJ@&oqBe(mUt zOIFB#Q07WWu{F57DD*PqJ~{ilGoP(`xN(ZX+$GOg*;;z6uHi7@F)4G;jFA_fUFIL8 zP9o0;NOh9RgQ4S-Q`f9XkvkBNLGx3*rS&+En^H7KIR4y%$mzertsD)FZ5RCO@yG`H zi$DYE#_#+-ddBUgO8hx=_|*u>f%iDkE3t=8uR}Ih!|YG|m~c{K&AFIz=B%)hJkCGI zpQCPLG#h>!(R_^`m_0|G7^jsuJkUp;3WLQ-C%xA|a~J$Y`UXqm?A(Vc@R*KQ4=$HM*8*NIw=)wW;UOKrQyL{{-7 z4y5Yq8QSDjUENxN1o0<_FX7z%@E^<_{Nhr-K@Nh_NRKK0EtQl~3i*~YBFdELmYAVP z_eTBc*=0XDJTY5dG06ELe+8E^u*==a8$|dV(rzi-2OPWGR-N!5c=4++np@M1VCW5o z4vd6?v7>rqPWs(4(u;pz3?s-OLKGEf^X&T1bu76#5!Wab_Eh5v&XcWqZWx$vhkWA# zIoiV;e(MUv96Y7WUE|5BcTe(nBm4tpt3U?ECu=MfVX$E+_dke*i*cD^pAP%AS&v4! zfZs-Sm9e7S{C-#7hc#TnpMZD7NueC3AxQXedZ zut2+8<3DV?xX5nIM=_=z}(s+EvL+FcTS$0*i@EKykvfwZC z$GxN0GlbihM;0EwQsSqbFOI3m_iglL`Tcm%`Sc0dA{3B?O2nRNb?kQMuqM;ot>E4};-)=kp>chmg zLFt#Gyv#jmg@9U^Y1x6ZZ}I!++l=M=d1~)u{dlV5O{PEj5q- z=cvgVRifVW8{d)h8-?en+l!6nqI!dyq}nYO5qS+&c; zUgo{M81rusKL84IJdWknax)vxcrrq95;TH}?GF8}b-_Lf1Bo)D2?gevM(sxGV%AnUi5X) ztbTB7B~|dX2stJn!sLH!8`reeYEgj-()^$R;FBM5NuTd7Y~sxu9g}I zUZ3Hkp%aUW*`M+rI18YNVlxqHL)&pjQ=#4^zDsUKJxX-0esx3o|It>_+duf=W54 zY4*)RKKsj{I56@t}AEWLAq}#YHi|XDSH1GkWv^$Lg{^nfdVfbx+1OJsw=!a_`9~r5JuD z9O?pdAp}a{0La0Dt|g7oz?PVw3?5t~qxkPk9f?0e`0RRIZB>Zio1)VPyLI3tc<&x` z1!&2-gtC|5P_Efd5XBVZ(;I`xp?17J_&MpG1#&y*l3a&!~0`#3@FfqZaQxCnjm(LU3woT4igbp2JSJR@*5<9f78g z;+TKzN4^=rRdzlpT!6E{7{HbBGz)7g6hm0$eI>Bc-+t%m1*2=j4?``0e+%#1ttmKK zZE0<$Z=#`Uzq^5?BvdMce1B>ZEIzvZ>PhebTy8NJ{9Vk}2FVQdXS|29{vcSPi|^gM zT=m7h|JaN)Wc8D>PmT!u5=qq0p2Y!Jbm{pI~rdF zZZ@%*Eir%z?wij2uTEa@o_1;CKlz$RZ>4875S_I&*kV#n##!RZSbWP)AxocyeBEC8 zBbvYZwe)b-2k6F-HSNdakg7FZg@0B`SD%^7;|d=14ziUbWs`C|A8EO`_GJxb&DM~u z9H0K#bSB=?+zZ9iu!U6gMj*>~xo>TjGOU1f7D{xly$zi`+Xmo{@szk?h~fxZOi&J&ML#lahhev;|K#z6Mrm|XPa#$5uOPV2EP?g5NcHDo<+h54$ z%(W$F`BAo|$MzR8^8$?yXPG=HM<7X+u|>n5JYI0yvg7f&9HX*_5-}3Y4$Bt1Ji8_? zzD{kx3Te9Fhhb7Gyn#U5G1#4m399n5M}cqJihIVO)|r1#jZVl#K|_DT*0; z@f>(Uyvvhfr#v>filnL_KXq~3U1H){&+!N2m{Ein1L-)0Y&D0W_+Ckaf^rti9fLT# zHy#>0kqmn($FjCTMpd8{F(j&`DT?KeJfee5kZk|DJMh1oZxFYKL9b%lQPyOrb0-qc%j+aeWBuP^Nx-3yf_9`%`mdgTEUMW_0C=9G7J;+^v zlcS<0pO%?(seF7XLbysA!mfVHEP206IzKgcn>Rs5Qz>6|E8bddh*(`5)}rH_Xi(bM zR^D$4yZZ=td3{A`OvoF_u*JQ?1O_pWJY|NYf6>!fgrpKiLMKRQ?-yiK4Hht|igOAI zxdmi;uVa3QHK&%3y%Xn_}BYv&Kn=JoaIRX5~Ip(Na`=*A$1=N_!Gmak$_5w+?})&N9LigW&D z*p(=)XrB}=9H2E1YQ3res8=o01wq&CYI=Jl$Aiat|CVc)wd%aWtkRW0H&Dq^`MAD3 zZLZ!yoU>VKc@muWlkO}_?`r5_AWAQ%nuQfHXI5)L?p zH>cDK2g@3Qi6^tZ4}U$w{2-TgO3sZO-JfwBT_qer9xDZ!L0E}!4crTr(~%4k4&KNy z(!i4N))%W@seJoMV4v&A51E#{eUwj_c?+Kaiq;j?)ioz=1vmM_+3Wc0@pudT7jYE9 z+^I1Nb8?wW^+F~;S#O&qKM358jFpX9TXdiY=f+Y)?OE=_yIp-flK&<`sR1Y; zS&wIOCVtL+v1_@p9uS8}ly9PAbT|f2o+B6O5~ryebOy>V8(O9=0?wZK4{3*9fgKhp z3TM-H4&I~& zn>c5;?+5P(osi#^3sh)_%htxSF~Hp_3@@qPp?A+@YK!g%jfJEndJ-*(Wk+z0g91SY ztHx#Ym34x^J+D7$Tohs)+HOcCC@!i#zZNkTo(m?)yl%%;i3go|p7_$*r4R9%Dp^Is zS`)XHhTF;vqhW%n=&9ZVM510!MN5CzZnbiis3M{mS5&k>>{zX23eS8!vh|0K4j4I) zK+)n4^wh*k5kobryF?%OQXf=XiI!6c;EQed(=(*L`+{kuP$Er&!PqBH2HGK6!~cPKou z%{SIyU|c-_Fe_)=lKtRo9u5n6#3j`qTA}Nl5wFS4X(Bb)OloDtgVa1-wN1rnU@2=> zY;t{`flU4&BNER?*yct10Qc$oSEYDK1cmKp@Tjx zc}9q~WM^0^c8<#EpQ7Yzr{K3z=jo*fcurylJiH20d6A1I?TR>2B_RYm9en8KUg8p> z=?37iY@tsdg}t1>dJYI1XNdHBFUyB8C+||DpAbvT(;r&p7VIB_U0J}RWOTN^{(3x% z;-taKnGz|@IX&1g2Gtc!C88ugyGlPud?C-m%pe|2_t}X<*K(H@m(#i7+2Q&z{zA{P zhr#8t@PO79(Ej|7(bGYR#(XIc@5KOaQ5r9;1*9P`@^kR%o;KZFG$=u* z3H^!Zko1M;(>*!YX*G0Hdb46+qqx(3hWZD$-|+{hN3bnT<@lEt?YEinO;@K{bmC@~ z-IJG(lsX#CapR`WtyKL}-UVceOhu={U{t0>(X3;j{1=5(e>OLNNU%s`Q_j5_F5Keb z*`51v|Llzx=;p>gJU1nLr*V)+fC#dpX+Kl~xv z{ISO7)PF2l*}QM47YvT4*U$r((TKDZ(WQDDZ5}2&OM6xGPGB=w-qrs#1sTv=_T0l; zDO3hsE0kYlz8C)Hxe{L!qvto`=LryVr>YqLx0D$~hH8wtiyV5{pDuMbyF;(VFYF7g z@A~W-(xDjUgUhaiofJF7{^6eIOP*MqBcvI$@L3WpCl4b4+F)@vdE-KZ3k6w9gGcZ&-U~WgPu}LGL0#<1P6@;uf(s}iALmF2A#K@-9?-S zKL>YCdAHdZi$B)Fg?RuJJ3+?QQ|gYN(R=$HCxy(4t9$a=9hv}U66T6g*ugpO9VXwU zxv(R{Mnk}IAo-oa^T@@n7fba;0n#tB+>|@bR$lZkKP(4@8Yr+E-6OdThX4LQ{;&V{ z|FLWDU%oW!Ygfgp3qu;`Y$uoJ*`;ApZu>4j#tml5Zn=h2%;II4zYz1H_;?w2`a7R( zT!Qv;C!2V=!}{1`x`VBoV^bai-XC@myW878m>i%aK>bV@@HG!P_nt53uC$0|T}!O=SjFMW9#nt=v_5PV45lo1#Bt7{+Y>A2+8` zGq!Jc7qbO#3@CAW8rqgVB1Vsu#&sNDPYVBT@&)4_d$x?f{kzM{cr&J4U*D1g(;KD9 zwSQVj5#WFR=RU6cJHf@|wo8rRR>7ABiK=G9ig4;0Mf>PHFW~de+df8VDO0=dR-L7%6MI!UK-}RI9=kJrl z)97=9FMgP=C0>A&yWvpQUu?VCpta9io77;=iJj-p`t$&si)$222*6KxROSg%&c`+`iP&Vy-RX@Yo4~ctOl_J zFA_uS<9MsYq!_gC_Ve$FLt+%}E-evN^$8mUR#TeElx{Q#DmRWHk(GrWcZ5n9n;WtM*@D$5*D0_F7 zmyBQD?+w=bw(pyj!X-plH}4PfkQIn}r?>NLvnaQE_;`aif{*{ zv_CmgwOL=Z{?h^noJxPo*ndI|F!Z}>ObF1b-+vQsyVv1}?9to)+7|yLc))2zdU{>S zE)@1qKYa6T5qiGEf$~a{v_^9=>=M<3-~p#f;q9*oK)Og!OoMc0OH;@|281h5Y4u$8 zeLBH^H$*hFwW{zeEIGuNupMEe)@$$+rZuc{UzPyO<7 zSCc9X3tU%19>nIXHFRVnw$q~2d)rl-->J?%?Dh2tnrqtPIZLD5_rU&+_s5r2z>G5 z16TtjaZrNfXe{di=Kj;5zEffTHvsxQ1N)eT{=kT~&#R7}T%OS269oeg=Ab<}xvlWs zuIM*8|KNS$kxOE*yEJ|8NOCtrls6Ef z9x=fO85E9*E+p8}4+>5ah%d}6CW^^`Ap$2a_J%_k%!tG(yW}#GZ<_^weG7#HXibXB zv|*Ij(K>mX`;!Ba=h*22)H|y|WASgU=)C z&Sh`sHa;q1^S(OISpFDw8?M=kfKDEwj7jO#R4b>ONE%ushLE|uY#?D-qP5E;NrDJCP*n* zSl1(vSp0aODu*A$4w4y5H*|*?9yH(eZXFXzTaMtaD`zbp{$%I? znDT={rhiglkFv-Fkwg2v6Kds2Y&~fl58ZhoedZDFrd2)&O{EBJP>!I)mU{7Ny8rHV z$i?atWNZGGw+rmlAc<5qR3_9|-Yw+c-S^;>+Jgi_%viQ{DmMTLd4;?qQl;(H;3YY0 zDi58^o!4+pv$YLQ-417F%0%hfU;rSy_8EQ8G2IsQAb0CEV-!L3GL#h$<$F4z7?Vc15GBs8_`b|;!{c3|Lk&o>OQIyF>m9HtW z;Jr6id^hburC>K(wu)K(Q#z=hGt5EG8mKW*?HbLlqt+pm1b$1if;r9f$88ZPX$L<`gEc=V7DvWlAAW@{ih=h<2Oq3u&s>W8{4 zjcfUT_heLuF3h&yHr%VyWJ2E9U6Nffwg~f7%W1d3*VzdCoApr{U!4Nj>cy*b>5^ymf~6faSt~S)C#TdN{p4#d9V#t~Xe>6Ck@E2P0%#>F z^2vdT81Y)8pQPsIR0*c=L5`Hwe`Yj0ui3>Z7>7#7alVU7VB$gSlx4Je?=1?|TX3tM z;a{vv{p&nx8ww0~+xJ0rzno_mKPfI4_ORKr^vrMPZdF0N!)TgwpA)!8v0kXkgX?uW zvb&|86i>-k$dLCja@-ak#C-JxC0B`UcPSPA?$+&}Dm+j|b#3@VvAr|6 z+483>ePXW%YV1p?ssan$@;458{_KO|g|hUMS-ORz{=U`lTtDl02ieZGPJ9NP1qGf_ zeo#DU7UW5JhSy0Mh2K2RKLE5nKX9a&=#-B3`BR4n&!i{%b|zViD5+%|X}!wqK9HWE zXDc7vsL=IfpP#Z`P!r2Z%E3aim6fzE#ez8RycS`sjPDm3|A1QjNEfO<`pAK0l7oc_ zXp-Tg`?}f!_~!v?p;qd}IHt{&YUs(>JS4F2VbVPbTwKe`NozPx;)d|iNEhe{$>-1^ zn_*7RU7FQ2hLRxcA znC?K^xq=r`P>M4Lsb#K1esnX(|hnWuJKrlBjR6qThh zmoOjJI%=Ahl* z;W!^u0`@sqZnodyyXw^f&6D5_VQLW@&f{0*uF#DuW3l)LwnbfyLvBX&Q}sS2zNp5; zE;ktsG>};Vn-*H7FIO~NaQrE?U;``23TU%_>t4(KAt-I(+YRX9}F583Dzbbt-@f}sD|HW zz-a|}v~!&Qb$0cBaCRKM>TtDBclopk6xgGSg;f#^lKvT{KDhtoR$G-G+#Ph2i|-?y zIBS4e`E{PD-XhqZXP#+F6Sc!tYefHgp8p4jr%{8@UG-u%Ow}~*NHfD4IJL$@>Vs|yo-V>3 zN8aiMI$4z(!@8C^S~jghoq{jFmLwh&7aBFhLl5|!((`>2cop;cG7TdLX)7@#Kw;!B>^ zs=TnYfDlaF!Z~om5NWM#B1~n;Iymsqd*hXi%!+h_Beh}xR7=rvF@rIFh!3ne{5x;C^(!vDI8sN z4#rKpQ)9u*MNT-KhI`qDH+z6TIG7$9X9)RYHz#Z{yz!1U9)+{Z^JDD7|Be+w{AYAb zWLW;SzD~XKoOY2;KTX?O;?6yNAo&$2{-N+P>A^V8pSc5%>DTy)SWfVRDuwd}7JW{> z5Kh{Z#!5I~c!7@uBY26S5f9j)>DfE|A^Yjl7%Z>|8w3WRiYYa@r0gZc;W>Oj<>m1y z58a19B|B~q!PqWBg< z@`t=9`Vr!$&yYE2L??4df=Rc|)b%friC}i`(Ds57eP7~FTblM@S=b#aIF%r_vKa$v=hV| zJaPMmSI4%o;kGHWU< z%~C)qS5jh%G*n9B3C@xrp$(tS< z*%d?H4ga{iD&KL@T}P)`eXuq^cQ!=9Ac5-iOym z@R9YhZ|e5WI2br|gpCr_S@!R{GJfjp6kCG(3&z$e2A9*KgJ#KbxM<+yq`OSUQHfqoc*dF zqlPxs9(3t{4a-uGSK@G#&OY3aQ73j;s3F7|b*kF$qB_F?VahXC=eA=g_Cv7fP7oMqL2m{_SA>kYjQAbs>N_LZ?UI zwjuazhU(gKiy@Wc{H~RUKSf(7-7T>n1aAXWkyNPv=Co}DwtkOHNBXA3ZCTHq$;-9> zs9`-Imp;z!-w%Qd(A}?UYQj*;@?u#QZ!}H~dkWyG5O>w8vPm~#v*1JIgH+17ugg?} zqg}UILsI;gJXBeh3|iI5V*?@G%uoH@-bj+1TXHoc)7BRFs$)YgW~fo~E;OttvpVx2 zHTQMWV%<=I4!EQqju{vJmsP~FsKMlDoo(yi6?R~XlAU&zK@{@?bR(C|<$YcuRnibI z!taxr`L_mBPBuMPHfGuwNp^$G%nAS_;@}G-2aZC7QE9m@#N5^Uut#3vZClQwppw6N zlBxpt-eB<|*&Ki0F1YUOd}S|}pt08HyrQkXM4*j7*bR|)0jawAf1cidTA|v*7Ui6S z&u(-#!f`P~ z@=c&z_p8Xtf2&-Z?-`kQbH!RJL}*4Bmxbp0vnQvKMFXi&xDF8HJ$RbqGto>aC;EG~ zV$lD=-T{@E77{_;GY;?9Rq>nbm=rXV19%tAWjR9hJD+PoZQCLL^S~@~HYVe91~0SC zeyZ@LS+Ac%2U(p!Z+`dpv<_zSs#4-*)CH`$-p*eaVDuU;W2C0%Tm!6Va&G64%PT_f zA6EPK9JPQhBN$l+bcBo5F6Qzb!_Fq}51lNA#pCd*C9thL9W5J@MF z!+88%7^#bX8{?6Eyrc)??lFP03f>^aZ)HGO^yl8s^TFc+qax}&h5eTR+7|XuKWz=u zdP37+xJyv7{4gF~{<1{yu*wOHs-sg66!)Q5!BHBDli>0==;C0QBT!OTY1WCGrQl@|w8c;k z#&WGu+%4$e75LAlK_(DbCNzSs%fT#4{UyAuDoR)8xpyXf&^SwB7uINADZ0o`{Z%I+ zTZzCKe$wSOFaG;q4_rHIQWe>lma>b2@@>i^2cwXScFrEuPXg0Q%^K{bhWqa59XTql{BJ1@Ajcr$kqiGY=J>AfAZgX;skMW1_0-4r z(@5?6TKMJHDlO#qq`#ym?z$nE^7X*|PZkf*X)=E;3$|Zy_XrxiuPO1n?PWe+BU*jQ z<5d0IwR*o>;*;b-I-In{f-mQFg*)fpy^J_f$!-EFaI{!EJ)Cmx&6&TRU(5H>AHtc? zz#@Q%Jh$*`k7H{snM)WQs0-jBBgq7+g znsv@^xxlaVgBy}Y)|1A3UvKtZCv_kAUV-R>Fl!pB(T)MoegP@;S?z- zvQc$_^4Z;h{yFj}fh7)NWfSgsPDh9@)dM~_K4LpHaBaqhWr9{+*Dl;m@}IK}>`L7e zEwA+|EbbCli=Ifm%yzKO1Uo$)R5=_a7wR2IHQOK)%$!ZKpL3s%j^{FUYLcIfDnCR?i10w|Og!QR7f|WA!J+ zgLYloT(PxpB$8tG$m|9=9$*qK53h#`{Un}kUH<)Mq}$V_sWiStND;dz#FOKu>PZQS zy2eAWuaN?G_us#eY9s#e*A zT-(XDm6+(%@U)h)ix{V?GQ-{X{Yh+Y9CjXJiq<%HBwf)MbkT(a0*OJ z|NnC~Q-6wj054}dfY(}W@K+`c%sFAm#r@>&EkUE+Dt2G2X1U=-;sbaRa+~dif6Hn( z?hD>pK#)PCuzj;*iVFmIiT(@d2;5ie9>6P%R$FctqHMHpJE}z2RPbvf#_O6YxpVGz>e9kP)+aLcd9i9IAcxLgRp6 zNp|wmsAOGthx0;r!QSKFyTBK~$Uv3dT^_We`a*FrU2qA7G(-}*E+A`> z{Vu-Epazxawh3-22#0t3@rR#W%-g;Y5yM5%xUH8sLm`#rs#Z7`K5L}zmf=rQb68^) z9yqJRiveI&2vn{j(C844S?E=?>)M`D-bd#~Wd;>66(ec9`r2sjG?lAEh9yUoE`4hvATU&b}M1dDP^ z-?~4O$&{*-7lJ1SYDQLXt=Y+lvc$J$2kl*oE8*6jl@Lll7O9>*E+n?UUHZydn;!r2@obEaXvS{J`UyDb0x{TA^9crCvhzihE&I~7?rSq{!-66P8Y?Pj|@ zKWR)i6qqK8K<<=7^bSkN`XOXdF>cN_{ZAUx2^yuxT$?_QNzO;ydi40+o z>QokNtX*ag%^d`6375`{Bs*>|q_Rq%bkJ|d&#vfC#t-%(Uz8YOPG_UFQP}}YlwZKl zjAyt0Cy|49T)LU%1g>0nSF^9;mvQ)&2~b7QhaQITlw}djSDAW{RIK5B0IW)s1?oe0 zDNKqkvGuIkpDH=Xh6fI7QcE2ndGJOG3t9=3HhBEd35+h5?_CHVa-BK_*oKAl@Jkk z>)~Hq=0F=s^fS%xMM6_Hkd<-LDVI-TVZ2q3z~SDS^daNjcS4+zlAig= z2u1%CU~l$3m+0tIu9qJ;Fi}auM@rzuzs9E;qa=f2*P0(nI$KZ5GWi5ScLkdUk-cVC=)9X`1} zh;}ZKV$FPXwo*XwH09do&HX0yDORgWP0R7Zu0dPrO#U()|A`eEK7_u7DaBws{gmAE zgSZg$`n#Tm$(U36+?I~g_XIJPwuxNe28)SFx>J^k;?`vE;$Tu<+ZJ_*Hk1nHXNd$9S{y8 z={_&~laqO)Nhn~^h~w7dvXNi0LB%w)3e_ZT0e0v8 zkT}js`70BtmHzOKLcV#Jpz3msq9A!+h^Qn>f zDJMLkG3ire1}-`HT~^2eTd}3t7u(!L!H}n66Wj0Q-qI`95GL9fORg6$IS8V3I(noT zgNQVO;=Zt5)D%XX?j=**J@%FQP@;_C)MXwLb*oW%C_4X};kWQ_1g?eWd6oF)r`rCi z-nU!Q)8BtS2R>vdz4fUc6KBDC%S)2HvYa%cgjbnz(%JK?-Cep zA0jWaof2`UHfOU4KK~DyX8hO7u!UYJvy%^VM?;Buf#GG?f~{CLuEGMBOE;z?otMkX zC{Pf+zRi3>O=Z9nU$g-&}@QK^_itE*!w zi7K!2yn;O>LwejbtO5bCdivbZHw8Z_F8=zmysu699KVu7TIzWPUUAspHQx$GCCnaI zpn=$<2fm)E{ozFiG>R0(Ax@QV>k87BC{Jsbb4x%~dM$>v^ru8M*^|fH1HtU{XT?zQ zg(0U4kThj11*l@=83$TG(-S{rJy=r9mET~l6vY}dJ&7NmTPugdFgj&ir8}E2a4m0fVyW@L;{mCrKkIIW z;%OJHtS`hBUQLo4&w)(F8EYr+T?!w5bKr`{(u-3vLb1g17{KZRsoJJ^Sdjye^;R#8 zEt#LHg5j= z`(59s-wCM*WIRz|m)B>(s=rCKpR+6dbNI!wgMl>)<(#V1u7?uAzqer%A5+Z~_vdA7 zVBF!s#|yXLz^qfSw%-fm`|j*c{p9l0k>_l}G|L%&V6<|M1H8<4YRA)$u*+~`rO{w5 zB)Q5_G@Tmfso_QQF3rSdTWTfp;-Ay`S32d4ZPkz=nLstEQvTY>`YFi5_&l&JwQbK= zp2E^y8StvKF6S4%sOH>%%3PqxC8ie%51{40OANn(Sl{6Kix>amHr2T~sNr16pY2Gr z0MWzX|5!z|kop4J)-;y(%dE6r z>Ir>DRk49>ffL481G*3S!P|i}L&Pv{3Sjf9S?PTcw=@+9(XC~aB0Fq4d#FE|nhS?| zCl@IBP)x>^0ZTL3BrwaW4$6*_noAomY|X9XeT6W#y4u50E^Rzkl+-0j6JRS`L(g-; zo+8fIx!1rpHRWn4L}bUEcNJ#-%ZqZ(E@??JJrU?h?bLJCBC7(bm*z_qAzH9fOHGeR z2#U7A$YnaeM(uyzggxk1?>CN)5A#3r=f|7?x!?KUwl5Vj^^T%1P5OSACzlu9BtL#` zU~}ivrNhb_Q!yx!yBD%(>yD4zpT^3+^{-Eo2i@@0{Rwygog0{_2K!BuNzewBt)KDA zv+1Q$@Qup_#%h~fX25F5Qg+$s>=;R0ev_X0!8W-UJom1T4;Q>G*cPUjzhx+iEUyKM z#IA5$`KDuWz)FgHG?PN8fIz^pR^9Vt+fUR zbk1_d(b`WfX zsm#PdH~MYd2f%SIr#7wu>tMXQds08RJOGEG`9Y}LtY@OrUW-x)x6Pg(BM-v0u0*V< zBllZ+eeP2Tt<347$rA5*!1}*G7&;Iq zn;iHkCA3qiFl%d8aa$atrS9j?HB7%{la|6gk@tnY+p{sAh)R&+$zT2*XgY3qH|mt# zsxGCEKm4MnCwh?T3&jI*#plV;@zn)_`h*gj-)zaVK>51Ss8Ydlm%Ohubzr4gyY`yil(M?_*j2+03yqTNUS zq;_gG=sVvc1@&yNANlCZun>mnCCWaEH3qg7@P*j?8#J9>He<60(C``qYDJ?7bo2FQzBe}BwRcEIkU#}^D1LhZk2kq$R-0;y2jg4^7OvOAahd9?-}dP~ zNglA{o8eII>=k`?U)dNnR4b=4`PKH58a<}n9zss}`z=DgZkDD=L5tkU>*9gze8Z8U zDc(c*QbLP_I*iV*W_xn^PZb#E+>;|$70nY3?G+WY`)Q_&TqftP_Ru^@9=NN4mg_UK zbE$K9*Iq26jm(W@gsvc#(r*;}^>qis_f&HbPpy60xr0%=tDtx|s}QKQ4ji=$;J2HY065z669iF?_{Q2rXIb+T%E7n zM=}5V`+e%Cp^NRbo|@?d)4kivd@L#Y#P6>?(H}G}=&c$J^>Y2YB_Z2|VmZI3H*IU@ z$JnKdIzc9K?vSpQFu3)*mZA)Kcf)=RU2-t2p$EO@;7E|BfToph#BMw3$G{~5#%~}Y zox7JIJFy!SBQFDQc{^^a-M_Trui( z=sTTi$$$eaRpE~lOzfCR-h{gsxP(GPh(iy|Q`E^HGQYwg$%UFlYSr0`w$FN`vu3mK zM+G6T&*k{0cV)sDDOG#>;^${AvWU;q4ahvSf?CA<^{!+j3pnCJ_?t?O<7%wuFI3AM zx6cL5;a7QF^(Xu6TD)xZwD@_tp~7C`o2@MXNLIIdEWK_e6P@{hG{%FvjrV6Do$vHA z69nPSnAVdPM5o6ko3_9_WL^PrmMvq9tK4es~6bJC(OOT&iz?>rgIf=9JjEYI`(2FWtAHNf>czV&ySFe?4 zEgj%#CvP;@DW*ucA3n4&Dk+hzf5-#gsR@7-VhG4Fy&;2Aq)$zk^f48@an8; zdMigQHaI3<#s(`OdpFU35Sf3;DkEYcO!@%g)xBG+^P4`U-cYD~ZqMSj(0&k^w~2k9 z8_smHC6i~7R&{k8G=z|O%2RUO8!K}@aHa`J^q~)4s$d)3dScser&yg6PQSK5e=sv= zGzTUk15Jn6yOvWHmeLi&;G}Z~YiiJ^Os8QX^TvcN*M`8QRb&LeCiyT-=2#n zmH8=|faj_rW4fqPQ=KHtjF*&4^T&d3`aO+1ju*v>->eBzaYgA{Qu2`(yam63!%I@Q z`QOy}S)~*eO|jmk&a|=8JX4aq-%pt?0jSQ2>pEEZ*p-3A8g(?TeBIrvPT@2t^ z$xwAih3kMyX$2H7o~DuUsSx!INe=}dAXq(_v4!HaQAOwdM5Sgr@j4QsUK6AES)02EnfyMUSrps2Y43$8@x1x*xR@T=vmM#X_Z4a zp0WC8X8g0^eX9GXmKK*J%uSR$sf3=rrtCB%?MzA8hs(X#`9g@p^{;q}JJX&p?zqR&DRAPbd=544bD_NDAD3t@!czJ%KW zkIQtePZ-Mal^Ob7m6F++i+u+xgz`Ns549ZZh|}e_)fEO;A#fOa$s{-RgGzGWuQd43 z%fXKFYuK!X!WQi)6mpB0V5~d_{bTqShx-RP%Fawp1x(qShI!|x88Ant;OIq~n&WzDW{%{qQ9;s!)5T!P-N|84Y2ADc?C6YB zs(u-|$V;J{sZL^+KuENnw`BLapO^6qx|`lhIMhSl40JpyTv`Sy1-y(OJaqoNa|uuI zbFuL+#`3O16!rZ4N#sHVO{Z{+RzgDTZldT>I%*m6u4gto-ovP#2u%|it`0AWw(@hw`qn{Gdx@ZQt9 z9G^y<7CiXdntE=+FO>MZ*a1R)&X{#IR-Yb@a<;*Bkzm(}_T7A$34vaxX~Yv-!pCb% z@2+HE(J3$F=C9N&C+2w!6oX|;DN2>=g`~B`C?`d1>9m`HpS;b9L*(t;+QVrRt_)u0 z-b%b|S~|DpNJQq?<(e0_I**r?aM#~;oxO`pOt@#jZcEtu0Xz;DOc2+1yYZ(5=HZqc z!F;U9Jn0EJOQLEnZwzg9mXF{PNDx#r{FLx4t8%{qRJ?a#F3^Vls~@)G!wIlv@Tbyn z74J#vz>EA3B{9WG`FkQ#4zoFgayY8Cz>xeQXTM~s12Eyia)-tfP3}m+3!!@TA&l|l z12TWVnC>o8-OvfGB|0Jy?5n!sR>Bj&O4f_=GjNLK+9i=CxQj zo9zC2K8`_TrW7-IvFv?nkF>HR>gd_D`Z@TnT$OzTm;M&624(QFn0M!4%bx>>FJuL6q$Rjdglp2JS**QWtEYyR^qU%EDQyZs20U77Uz|uwKk&S3w-_8xlQ|hhZmj3|Y^W?)Vcf~`6 zWBKrCoPXmn{ZO(5kk;=L`9FD@Tc6zx#X;BcLmKYa7f+(enA`CyRR()}uJ7iZ2e^;( z$=qpZ+S4#G+brGUT2Fb{H@l;jYgeSep!^KQLSaIf z1BOm`gRgD$K6g?SO?x=3SqK`|fT-57T*i4Q@!*q~F&+;xMb`+c1q3I3mQL9=)vX$d zN7&+zr(8U#Ed*$7-rL}TbwU*d@gi}UirWcyQ-}wR2)L$4wM+~0n>G*}?16HTB zrc?$mkPGXZ77P^^mA)$zyH|rBv`y$~t+PI{`Y{!JZR*+AQ428nfN$>^UM5i6mxbDp zGZei0l0P-G0NztGSMKgfc`D33t&HnQCCGTlx%daH3{!rt)tB@C^oX{HM=gFsx&?3# zz+OgBTJ8=gYBO4H=m}~?qQo&^6q%me`6PJItGaSd8b}!-K2FqCzAh>6Qh`KOVX%AJ z@8hCBCm3n7T1v?@H$CFE5zcqy=5+i&pQGF~(SyYv+|B7%j1Q0k zFSKaBCj;T6l;L2H(P`J3bhU@W26R2&?LqGpZjk1F!@Q)s``KtSC!s$U+79S)X*%Vo zdkURSuFZ!}k_(P}HUeVP+--8}dB?xiJm>e{d^s}PTP(Zw74tnD!b4(TNS+W078$1c z2ES7F9GWulDlPu0e#s*B=F;y1iN$UHej#~4ZXI~(rrmGb@x>?irPB08joPggvrbq5 zZ?Bo$;Q<>jBu@*b4%|8tVKA}HklXMONEH^;fc1JuB6r4plKh8D-yTfNCNHR^L}WFc z{5c<4b66CUx65kC{p&?@w+G7>=nQ77dx(XkwJD~lu;>%CE6`pN^lib+)UZk^r<#z{ z(NK9(mJ5qcdXnm1+~QsxqUH5qh>Q+}L?{C24{OSBw7xBSe?6b3Kmm!8v!4qk^cvQ+ zT33&uN^1Y$=g5m_#Y~DwsnNhgOM5NwQOe7>+kG{zF(lpZutk_vk2pCI z3$QKz4v1)z%MZQ5DFPhkjqOu{a*nxGD>AFQN|}>;KuXIckbJqqPfsEmUWB>Dr_8YW zs}x=W$Kvi{I7ko?^Krr=qBW(k_dW#rQ>P~=@n0??V5z$Gi`1-iEIxq)DN6-1uq4u5 zo(~tg>wxkY)>3GdBAX;3e=U+I3k@&$6V6_wySojHh?@X~N^fuiC26f>iRuVr&y9Ld zPL5Mj=vQwvL*buGuRjh77#(4X7L+d$aga$MI}sW)f(ZZ+r6Hg z%wbJDbn{nv`OiC?D0(@bU=dtsqj@&ee^}^TDQan}2*Wxpcvqiw%$iZKSdyRVs+8<3 zd~$QDvd*FgX2y8Sh9SPu4wq%B?m#BL@q0JNEaSh###!e(_`cAh%DBq8i-x)4fEFbP zT)z@;q_x2K!rxrGGG$T0Yx(5rkgD=EF~Pp$DiylhVryc&$vU^D>-ERzP#Rf7?L=!W z0h{@g3?v?@KtK9W*@c-hc6Of+BU2%_HEA{f9G)Zi&`Ecr@rMB~#w>Bnm3VK>QYy+H zjpdJG#xX95@=MCR7$bz@#7Qe+7H4aN6d{Wm0VBM?)%}WvPfnJ1X>R6Px}*;DHaY?| zG2uCG&bGY2zTaAYAJ>zo7$hPZU08)IW@cG1OqGnX9dVzd2QoBZK!|M=Maasful@|2Z5jL=e*&~TFauFi&W6T_u+K8HAVoi0m0_f)n%m|JxAT(T-&rk6cx?9N?(8L@Sk z-xjvIr51bLu<*NfKsWvSKX2Z&7(F-hrQbbaE7hbf3CWS1yb=@FvfmyIfZ{Hh+@~>r zDDYqqDV9M>nNHSE5R)psmJl#s`f$)H9PzuM?x(B=hTt(0DV-pU%DJ;cahuw43e;qz zvJ?h2d@q#dxY&?kP|ClZsR^#}YkaFPJ;}f+YTb}rE8t4P3#k*lvfoHCCLu=3p99Nj z3^L%6d-J~5G2Xo6>nk)U=m3GlW$ciF^Px(l6ix-8rKSsbcYR~`Nk7ze{JvI=QW-E} z)e-c5dWC;(DU&nS(p3%Pv-Yu@MV=NoO;X-E8+5SLVRXc!%P zgpAH{Pyenyvo0~usUzhyYmy$iTu{`OirrKw`VCv3idO^#U@$2BQefUv?=K_ka-S?7 z1S3RhcfR1r$?B0fvfqNO)t9<=QByqtld`z4{d@>~p^V!vBXvbF7sJ*HwtUX$rjjS} z0_+tp_o?I`!Fmu)u2?bReC|hYsjy-OVO&s~!${ET-9rCKdTR>P&_+xs)d( zk*_cxU`pR-W8PoSr!u66Gb-ojVJOIjDXX7sc7C=$@RPu|1;L=Rgl}B`C9rH676dtG zhwbO!+e20HCOhuE3W&YK04mbM%cK)M8|J%VaTEe6OE1Qg;%=kPhL(W*JGHK%&ig>6aD9dj_}WA9zh6(0*>xQ_nBq%7lH@diX|KwPKNF- zEs^bd1!9gAgi_jO%9E(iTh|U=C@zeP2PurA8KZSA&RC>6P-@6MjAv-)C3BP9XPkcs ze6MA}tdy_%6fG_55V!s%(&ZUGjuy8|Z)b<^Cz-h^l>i%AUH7q75){^2Rmnp{MKQu8 z4=~+X|4{#30R-|_650x>327Xm7Wi@mM<6Msh6M_qC#3^vxX1%`rGyGnN-1O%_gr{t zBVSbt&p9dY#YMkR%_$^7kHwcaX;#{!C+M?_lS@gwFK6>VqH^bxy|ZwT@gyc=1Kbi7 z6Sk0>wZvGdyoJAl02p=C>ME31l8b>HHvi(B6%J~H5dp>=6gNFDD3lA`x1Pu*J%q>C zl)Z3ymKRD?zyje#51#1j%Xx(~u-MZHOuL6g6t6Y*R_dODA6zRQiRH5R$>KhB8z!N2&*7gN%+RkX-^m}eljkO zOik^j9~Eq?y=*Hl`>8yBVdX&C26GHEjZ$7BAoxZ!h#@U`(JJxTEBO5$+uNWq3~NOL z2VPMIvkVQlOMAWLqgN=IDiCLFA|@qHmcK0g}ox4Bg~cPjz||#xerADocSOc^39Ea z=}Rpm=je3h*9xMPcW(^%5d1c1K18GSE#54bco8j@oV_|6Qb_u5L>8w!R4|JNTnI7? z6x^mt>NEpL%IFfI^ZxT(;Lyh?^2TILcP^8@%hHoDZ9!I z^AjQ@(wZ62@Xrd^R+&hj>7*c&eC?b5ZnXby3S8>grLJaIhIAQ|VtCQ{vL71YNh{oA z(OVb)AJKbO3vcS`9I7_A|7{?U#<_vKu!~;2qR&byVMcq@ekOx+iz?k7UA0!2D5!30 zqm&^3US1wnANT&=QJaeSApFRBf!QY%df1oXL z$kZu5KSB0blP=fY2w;@BPk`Po$Op0G{8IjC0o?|qEs94gJ;gX3%;;RD6_d8+{v>q} zssubIspiVbBj^9#5X(FvJ?C|Z>%7?WbX-7Nw3uIG9xZ+lE^E;l5Vk=TF;*ex_uUcy z-OcXmp+r;&1cnQ$3dQ1>%0N4LS*@@wpk8D;d09TM#9ozAB`Fo4w}k@UVR*_C=dFjH zorWLx-tP%PWyNKwWy%8X}h<$Dk}fA_jYStDP@od)dmwg+Tn2O|S3snj@e zT@m`VlmCO|Q)lMF4e{4+OsqhmWU7jNznGR7cW3YiiBne^nx7NnIg1%ycOm*;XvFa15}Mk7KLb!h&giHlI&HSy&G=>|H%6O$fr;(Amn1EC2z z?#|oq(j0gS5>r8qLCIc6ShnR1-Uvz`1`$3K>^}S2e*Hn|IHNK()ozQL$@dJLl)R+1 z?dP0PhlbN#b!pkggEJq#eXd_$+ z>O61@aOL*8pqlc|>T554CY|%-pP6r~6yd5&+%>nYOX56z(QYAuTJS762el~e~Yk#TU?Hhq@fFyVJU&PW?oo{JP5Rjsu=F~1bhg2u&d%_kVj4dFXt^*b3_3u zz`Py6v%NhUPvMrYODgq@6{LDF{i{xPBZS0Z+VGU?#ObmAxEMZMBaJNi;OghnV z>~!vBV6U9oz&TDYUzi<6O+MU)D>O427ue<$uQMKiici8(h@pNDpoIvRp?5FX)FcO#cpSC{&lzPeyCuf+!wQ*`-%4S%iLMT(q3P- zmlN9sT;a*B&tvW|ClA}E^}^oiwj`x{fkLSC%+_CWLSKdB9WUz9YlY0EeAq7UBychCslkOsUr!q!JcO14 z`+es#zwruI_m%Pc4k=k}77tsU@6mNHBo`%p^?Ogr7vC~-n+QG2PD!-I8*Kj(HNUo_ z+!Wq-l{QEEbDwkl;fH5iN9ftJzl&dyA^Lu24*H z6htYKsaB-;bWe+fG!HHh03N43_?$ZutF;qpjIcp#?NhN7M(0nx7wc^FLUIWod|1cXuW0~@qNJhhiUF5Gy2PYXtUI{5_6R>S1Nn4ytGKMYP~lp z7bivLppc$8kKZdj+13wdFF5EDb3A5yIe$H$LQ!a>`m`MsdQU#upbVO8hUNPEMCVTm z(+tHlhSy6V3FZ9ubR0O-io8s{yus<3IW_EeO%GDRBNg23_n#9Uxp#K8L;YDA=yX;b zAfA1hpTlk%a7K1N)V&OBSNa-G*cUzz2u>q7W&d*d)pHJ2B$e<)E5$kG?6&@#{i2{q zUJeib&}r@b6lvb%h(!zs^_!#T?{|yoC$ayc;HY)wdym&F2T2PAksJ5z^V~JuE>~0) z)!?e~+ROY&@t~kCs_{-DX0`UOB3UX%u{D8Ew#4K#(D)m_f!c4`=SlH|b)~FaL)w6@ zjM&w-%@KB;EWzzan%7kX(1&jvc~ZQ+9Y05H*5>rJC+u`a*4Ngc zZ}I0q{Uxa?TS`PdpK*cYN$<3KRZFKf$`!(Z(lg3}sdqZa^6Zw}`0*M+N>oq1kUYpI zZ=M3|H~$Yh_r3K*MvmhC>?i}2#w*CmZBpj%SK}@|RwK;3``V76Q%4rWhEB2uOaIEq z)dA(s;GP10-+k(zR=F!4iCO~LQ;Lat?ii>*-gP}>`=*d7m_t?nBI#6q8C!c}}5KBaQ}IfIUCvH}iMS z>40yad|3MSeM*J$bN-i4Vjr4=SS+A5IQZEyQZ{}>F&5Hv?jy(rns7nE+Fe2d(g~23N z?*96Z`6je1+(szFmz^`3}fcw(}GO`C?b+YxR5&4y{zu|88AFN(lJ^ zIcD9%rNQRI9~Qw~H90|2o~^Lt8(pZNsXUS!WMCeI*rVQY^6mYk{e>dvIw}@qj zaC?#_A6=DY&Tb6&reMw1I9u6qp923a2=AR@razn|M;4|Xc_batd+R!<`Q#$YUNxux zc?Qn<(-DhXGP$&-6z zIUn%~0`H4iz+aTM;J`M&vjd zum{Bx80mhcP`f36@v`5zsmkO1M*k5mao?rBzUg;ggXQmU&(nHPJm|LSt7P*l9OKiK zf4|6u0#0`~Ty6}HyD?y%9dKG0eo(w!9sSg?3DY!sWb5{~-bEjk0$8-HyeX`C#9zL8 z{U^oS)QO}_%BU^SwjR^U4({+&SkZ1(WJTD(vWfu$|KA*NY_m2fnc}o?& zGbxbIvOw#j-tj>WLoO{_aM|wDZ$Wmqk66BmM42tLjY842j4KmlRcd7ECxL@>MwE$o zQg$)`H5#GeQ6bTQ@9r}H&cM+{C!~J~r-{Axf+A=-@QlBgxrcgvZm8)@JD*I7c;4T; z4gLF+2lR5b(D7Wg!+S%6AJ#RVRY-ONI zy<*XW?jGK7aBmS?Meqxcfob=UcJnoE_{g97F40pEG4Zxw_tz5QgWw77Il@A5xK`Md zZYnSe`k=KW$%VtmK}0$7K8pLhzupB-@o>5nWLA?=TBU?{yl2h^=&f*?psDgBn;m|# zcfd~=pTfHJnZ}mgjw@!>(4n=Qs@MV_IdQ8Td6Jtimshv~k@Cp`U_51DKg>#@ePdy; z7Tudkx~})&Zw|g?%Y1daLJC6;mN}Y;x)jzy&^VJYcQr16{<;I>o5y@z*YhbkP>gn| zUy^ATA^$4{23qw1^JV9TyX6;)un!gw46fuWqFURlH)?V6H;HkZDP_c6hii=%rR}H0 zfwcalc-p-3n#7Glpal?qd-uD7ZJ_#xb%VZ2xvtZ7-$|?RzE|c+@pgGhP_792`rgD* zM4dH_{zLvEXe9w)ZT6Nqf4jr;A@zm9(o?yv0WOwr=pIhNbK z9uzMOvZc64f2><6(E5x7(YqwiPHbJxG`l%IeLmCNg~7azO~_JaDQPWB7(Gd!ITW#Pb)}%Z@umAE&U*I%7o6xLY|6`G66wYUMSQI%^>#);2)z;_84|% zd=~L*gU@*6xB&&7ozNd+mniV={OFq|M-MjTLGxo@x7lXck73`DkYrY`j5_0_*v)6| zvvu`j;E8&c-87|*WS!t;JDjw{uVSriy&Ld92pkxsP!&9etKJE%>eMiJAFS#PhC8Rh zQj1W^-BbQS>O^<$>p#Vp5n8MW31i0mxigC9syeC;EYM|iQ2Er#LBX7x|02loR^wu5 z7w&hw8o#>+@=~~rMB;=-(wi zAc(7N30sjJ#s{CUU{Uu4u!5%_^m2>)K=Kb-$7f;Na)f25Vy}Eq=eEs*Oj(5cQTW!U z4<4R+JKY~KhRqcqPM!q_i>U0}?StoLfnB0J5B4DYz3JeCvAJ|O$%a|=s)_MJs@@ff zK95o7R5T9*B?;m`tZ=bUE-iC%fufmD)$>&~p^_cZK3|bls>#Ht@oTHvPl~q%EY623 zX;EICqU3HS(+=Hps$ZTI274`1=9_>@LM`CY;-C~nF{8GE=sA3v$Qz824M+nvvaugdh!uGY zvW2E++wO-BhJYE*aPyRlHvO3u0al3~7G6d#0d(autC_~HUZa;!kZDH^f6?4Qz^l6Q zm?0?S7w2!aNIeZbAau4ufAD^QkDQB{BVuufLb}5RdVZ@{km{4C`VQ9lEM(Gdo)W1# zD+lz$sKp+SMTRn7{Aj@osuhNK$F`)$C%LX6yCPO%Etlj@X#eNQ$X(Ioc1Hob0=C*w z!grJaoI#t@qKKkUaY0|2u%8}zdpe(=Ou}$7$=VmX#&#b%Ih;Pfql2dgV>z& zASk7#Ocq@Q9gR5PaBHyh01;h!!fUDi?ymoCvb#?+qaQ0FSo6zJy9gT>a<9N$wiJ2h zUNKZ?-&=1!2+n`2$k*AFegA*D?kzi#Tv@{NR5XOsU99ROy=gQWfR^U3?>9vCu4G`Z zx-gkcI2?X4b4MV8<3;wW8=`Dzd4Rn|7m+539R9v7-{z$-D2_&c6q&xFs9*f^e%PJnpnh77hm4$Ep7WINC z)U&b$N?Qi2@Myy!k!?Wl-!@jVAw~arXYe_nNspq7az5UO7R#WGBe*n@2~d53BONWq ze$2~sO9Xg_PsmbUj$?Y+A;D@H?nGVw$72er4582ZF6hu#`xmPhg+yIs{;coYHUzXs z6&&AwU6ryWtD;_#hR;04{zPD%3g5+X>qQb>fg}lu2^1udhVQ6&c#E9UQ`SHfNqzdX z<1q9tYDi-wdO!E&{22*Po3;*Yg?{kX=0J|ru^6YnVfKh3oOq6z_CS(vqyq{aJW zQI!lrX}E?j(qeP~bdEQF$e2;Y*kqW>pPWPl@M0{+4FU64-#QM{>Cz7o1BN(edEC&d zl5CSK)?p~)iK`}jk3R(79A?%9h0io=gI{mEcAStxpYj9W)eAI}tzduzIR)$FFra&B^B=bQcZ|O3Qvr$+wVv+ApcR9jVpiK|I$~|B(@j`zmRCWEdtwK~v9Fd`Vk? zu5PCcXVqO9y|=>s1@_nZS%wp^z{^N6* zC2pZVaZ8tGkJH3MPv1t$a!#k_9cI&vXtJ0!Y z8R^%s)wtLDR3)2M+$OVzA8SX_V|lm$c$;uy(ND}*T2tZJi%Y64p-SYjG?1g z6In%U&T-q~6KAFm-0VI@)2LjkYs~r@AL|fkGK_T=OFq&e4nbmm2|v!ePE)4yDloQ;#`nf$wk392HAyD2FfXmpK&J99 zLU~!}?4K0$KFtxCqJ&8d5mYEqX6Ow57H}AeA2`IAs%~i@&O|NCCc*diP(X7VKjKL+ zR4Bc4In9*Fc&?0yloftLcW3fB+Ik9RpQ$O$js>94J&(%&@cyByKB&lJ3w2djYPQ=1 zv641(~AjSu{2GZ9~WsmosqE@jUqS6$QCTK~iFV@cC1_zw43 zwnO>A*dhP7#FG%sJ(AcaA10`+{JY*!u&E?=2r45Mcud`WHoF`0Il=$olI6rH5kj&( zKA*KJ0oEDKndeD9Nz5lnC9(S4KHqEEzj+MfF%DRbq{@c28$=rGMIhFAw#%EG^Yn`^ zSx?io#3AdPo!I$IzEF4-hyoA}ioaqB9^_{asrs(gLu4z($3XH_utmmw)iqURGTu5w zsO5;)OUCIihVwj^&PAyJ29+xpSidMChF3t~8`KVqQ9A30vC21kXDXi$j2ajYh4-EA za4fjH$UiwO5Z(~ZFsIiRlKX@xgAiNzz6YP)^BHhRAl`u~##<0;u;hE(S^3663!gjW zMP*Y>f}@NtRmWYiRTO!?Hm)Wrl|{pIkHE(QPh$I7pWJ7>^2yDU&NO(>b@JB&rWsVr zFwLqg@u!9=7_`dw*kvl5SY;u~@&hHO!H`3`8YwhLjoIEJP8(HPZ+;~8FNJ2_bfOAVhvLpzKZbOk!x<^RBzkVT6q68b};Ul;E!C9Cib9WYE) zbJJI$?i(~5Y!e!!iHGf~$;t29{byG&ypZJWUa*!mp>=blQ1Fd28Qx-xtaorcryLo! zHKOc@QwU0G@STkGU0PGBYBi6(L;Cbs?J$%?K3DE?biK3x)-e>`N+!CHQPpHm?6s~1 zt9B$}ti%lgH6HV4z6|%Q%W?o&TQaTdqR+xN7&&|?2wTYba?*}QdTMbdP1(JEPb2!$ zXdxZc9(-Vi3Z^=zYpORtD|N9cKo$Zp=|7oS;U#r=^_9LaOAj3+xm zRDWT?6+*jk)bWUKK=k`6R_-4drAkaxL6!rlN__6OhQ3rzwj5yXu+m%L>8CRL>H`r} zU!5v6HZ~9R4sD4k9*Pm#x`z3dwx9>oJM5-W-7b2I+TWx z&Z)^BnefR)qB;To@;#_EUJ#kq3!3$vudcUr=<;LuY~cfE$}aWHS7EJ*>v|1k?Dxor zkNP;;Za^}|5#@KPAc@z6Tk`3_4k>M8fr!>nkq1xTqfRdst`lA10j#|2Up-CJGtYb6 zp`@-k5ewZcM!arHFDb~ye#m_kILDbk%yU|)Jh6U&Jw-~LR3@vH7i0BTD_klbIa(CI z6*+ZdaKSHulsgF@O1TLUvxXXdP@*u&0!E+DMjeIBv?r`et^ifxBV zu;h1_f&KWI;Pr|e=SPBWX$TKqY8{G_j;ce8faA5TJSo}z*Lq4AK7kyC1_K9}ZnXYx zvga5+4<2aKzFQC1t{%>*XMto<$}AbL`rXC7m#jrG#1IFWA=Uh=EiuY!NbZVBWQv}B zr1UGJJgx2}Y{AV8FoO_yl42ZBLQAs98ZQPI@f2xD z{p={_(HT0utnmE5XLZEijMhgZiEzx*NnR>05yYcJY$2+Z?EWKu+XxXY$@LcbY*xGu14{bmN%?;YIW#3n$T5t8mVJj?L>Bc{9$Bi_ zO!*vy|B!Jy1dveTnJDs*wT!Xeh=%@JETS8#J@*fM$T;X+CXi8l!VxLV0+9lYIek)H z4uAH}%e1FY;@41?9JWN11O%1irFP*eHA0~sW9&HupUhNql3zeIL@U5UZqitycO>+C zj|DD9CcXp(V6%;Z2gVEw?{x^o;WQt>m&c zbF_#vX){J+%@ZxD*xXt0VU$Bir*|y#2=I4^)P<%xr7E^e^Vd0w{xSUUQAswGRxOCq zDsOIDh*Dadh!!Hk3IZ>#IaxSlXrGgmU=B21GvgP6?D)|eGR@uHo<=vR}XUEfgL;`i)$Ip`~O)DvT5N><$3Q>XntHS)H9Ne=yCcd-*(@%0+OAeqLDPYhZCCf};l4{e8BuOq zn9qgY;$)9WiONWjq@uh1$hkF4O;--Llkk>!3N+SPM#SILDEvk>r|K#7WofSS!z7yl z1HPm^?Ud?Z(ArT6lBC({tfdwqqE`kNNy3|x*8G24>A$;rTj#dM8NIldTq?zqK#ZGU zC`I8yyk8#pUC_`wataL?sMk=y*pLJXaS7c+SqzwsR$>N(%ChX-C2ijk zPrDefZ+D3BuO8{~$y+(@j1o3oZNd8d(+)A)!KGMwL@(zY=jV*4x$1-E zs8JH$$D2}(;%$+N%iaq;WJdHM5$nk^TenxOZ-42WMps)cm)pY1+JcXL!Jyp3sywb( zVm7%)p?13w=Xs+3=L$~#7Ff&Q6^ushxOjca^7UK@BP34b1$DLo&(q02V|t&{sh_tc?mj9 zChmNal^AvzYWQBtTeyq{#JFXPcjt}XLQZ^&g@#4xGIKd5yvbu~R>aJV&O*@6$;7vm z-{~qPslpDD9h$FZB_b;;P=%8vp6x``{1$V97B??KsewBgpsY`S5s4AHM94OlCm7Ei z8y^mP?qey;wQ@NE{N1Qml7N5z8wa7{?Fe z#>lb|bwBD`;HlXv5*Fk;LtYgVOh8nHSk zGPFQLtCkc3Q@%46Er620pG*H~z(ssvM+dR(^Vo3p8!G@IQnzHmz}uvnVJvym?{rcE zU;tE+My2wQ{m!r;m6sR8LRR=msrO3%rKtfz&q)M0Y<$s&Huama<`RFEsmS-Nz-z~&*T zZ92^|H1N&brULcWxkj;!3OLWxqyPHzkpj;R$`&%P52Y(GteqVbCwm2yw@8NF=Xmm` zh@pU4*L#HU6(2)8rXB9m-%G;<#7&8ZseGb{A;GYDe2~IRE6kD+F76cOrwYsc=*dD> z6Q%N~0_YpQ^$`mPE~7_VabcaI*tYi6A7xP}^5P5)U&lW`Cti-%71q1OcPlblL1NMZ zR$s=QR4zqR*}}xM7Y*?p8?c4%cr*&VuKDDygdeLD<-^7YEF8dfL4&t(p8p9wPoVzP zf7yx*jeu#Ez=)QUA=x~SlS7+%pH6Nrc^hF_3KvHM;IO*fgh58of6~E=$b=!$!gVAO$f+M&( z6}VIjS|Q%L%W@6NTiRlKRzAV4^iEW6s3z>33rA)*L=Y9rl>|PI^Zy9Yb74wU>P83< zVF@lW3h?#vU0apdESNumxYasi^44pyE=&&vV4rrg%eq#wFsZE89P>2Ti&Io&w@^K_ z1m)*T+F4v}Y5CHMrjOwun8Mo)=n=Z#(c{_UGh1%t@nDX_h*IaI7+p`)_tDVt;?lKE4v1FXc}!H6lvIlq^iU zB39b?!T^!kYvduNK1ySs^_POHgDrF`=EmMsTfCj_5IsJkmlHMbMJzWf0v15VvKddutim#eTpyS;zVzm0Ay0Q? zB%O;|A8q5DK4nq(a71~}3sHIwD1WTwFcE{NNE>K$;erZ;Rz-_dMO&aZT$_6>=Irc+ zNCs7x@tpYzt1@+qTxb#18<$u-#KRuj+@VI%=l^8TT`pM|WoQsX6LN`+(-lcKg9mFy z))rb(qrf=SM zK|mmdSbA@G2lcEiR{0+3hgG^lv%nHwrcHr5lXV9Aw04^OU~Fu$-L>J zxH@IcCDWEc037_AXg!Qi+C+bgIR(_HB0VSlLWQqF0yuWjWgsec$?-Xp zFMQT#8d3~~0Z%T-_p6X0seE6%Y_0*y7U!FjgBp|}4cDCqCI9v3tk@MWXTSqZam8E3}}KL?)bahY4L6>~z z33Q>S51nB`^U=E>T&DZI^;RCpWzI2HFqx=jw`YfOE&~r;)V>g$jo5_O4E1#{1?_w# ztuEsq(%47J0a>%EWo3LdyJ}%1q->~OC0;6Z9P`s&r=4jhBu(~|TCuXL;azaxZ5F7u zQq9T+pK9A&oudf9h&x15tts`$t2`@Ux(ZAM-%0r%+t#rM!MMx9+sYx)vx43VE=g-9 zcCF|4Vc38Je6k-~wc`bZtkkN{*|4JW9IX9V?qQhVVWt-T)yNd9y54{7KX|*sON0_$ zMgKem{ZrH_cck+20u@;C?AB(}dY1M&WLtZ1q_Wdnk|@vpe?cjk|4lwgtZk^P*B%wlv^tBmqMFPS^T0bHr~HFXSO_CR4C8+7rz_|!<|Q%tjOike76!1mRJI*&HY6{wB39c z^F5c8R0ClEdr5+pB<&R*UXz9oBSQeW+RmQBYk~jXovVym;UiB$rTT@9r3xaICsGvB zu0L?l=PhK(K+)ihvjkJvAWkaK8K0F2%*Va`JgE4uKX35;-5Uirt$^FD|AFifB5PX} zxh~W>;`urHp|aIYMxUml&8;#9JJb}NGwPq?#$^J*3YnHA)KImZ=FN<``<+`%^ zBH<*k&nbA!&MV?ioNULSx=t-e)GFu>C?sFi@HX{HTM^Zk07>mhOc`GXhP#_(6&Vv+ zA*c=_q<6>Q-U1Ju$?2fiXG?=Jwy!J0_kWclIN8pS)#Jx){XY+J|8&oxGbwbID$f!{ zzhPHrvPQU~VAckiyjX{HF^W&F)zhZ-r_c1G05HEnWaoQo6w-M~BB zG^~vOcK1%}-LPacgR0g~L#a&r9KQcpc+fk-#wymmAJD9FBO*%9d>vQ zNJP@bC`EhrMe<#tNm2Iokaa}Cz8zx5$$mQI$n8SXEtpa=QR^P4jP0tvE;EnWBOwW2dPTo^O%M4iQ+)l7t}+ z4f5x9=ZJuyc#i*n zxccy#lzNgE51be`Kq6C;%W6kky%d*pTfjxJ1MbR@s0{?v*{@6lauOdaY|o;NS8aWH zeGzh?z9`9~HB@zs0~Uz6`kF95^&VqAr_VhJ{`+AGS`ROUmnenRY_d^v6uEwk-hg+< zH$Mf8-f9Mo;W958{(L?$**4a?jGYytwum)CJ46>b7TEq+{AJu0-gej~GR|~)z&pLi zA~xFIs-9AIL`9`-F#2?~)HpqQ@-E|+;cU2{7vy!X=xSCvrt$w8{A#s}gr{2@5I2ge zM{htdvk3vkj3BaLOKJC42#VauNA7aI|D^A1VthtLItv>?f80xBb?xa%1U2 zkJ`*776@L@aD*mci(?UwT$99IZ0!a*|2=DYNWBi&v4$l=W7}-}3=$#Za=% z1hta_@f4l{$XiU?k->Vxmy(C@gh~f~EwXAOxC)swztQxoJfd5d0ylYWo+!oi7l{Yo zk;`~R1V24xC?&HEZMxt`B_IWXP;Yw1)myv6dKR|It0HR$W~5(!Tx1$6s3j73U#?tDNJmpJQhL z8k@Pf_dq3zM->(*biDI((v$f-W`r=BwL-G2 zX2tQ2zxx@5&Y|#62~VTP**Pu%KVBA6zLldX-t9@yb!(3FeYTZ#kQW%{S0Hzv#LBfYlx})HSU=6+oGPDHY3DuJ6J)!Q_u9+(P##>Pj?9-|3fb7S_XZ;&0Cw#1>xA9Sn z7sJ-zy@!q7EbaG<<&l}ZVV&TUwpMx>_?y}mv$}pV5U_cIVdy7L_S23n+{7~fj5xf8KeR0Fp&Nf$@)Rq!U|M|g0k$b&(gNqxb;+& zV{5C*F5Z%;!`AIlh{3G$95erL!Z?hJ#hCwu0mCz3CKXTkObzL0e&TKFI5YQBHEiZ7i==1^WUeypCaDOFsP>}db@ISX{mCzhzd4ZSDMtnl5EGArh?P_ke z_k*~eG3|a{v|ChnpO}axkNxYBU}#*~(tH=DGy{2+97QB`e?R&DuRr7Ioc_RZEK5nU zD$@E#zWxHDgtH>t%Nkq6j30Xv(c5w-!nr84Zd}|B5=TPYrpOg)EB!3UPq!4m8g6ke zxs5P}Nh&@8+`LjXqp&fL%?j&A4=VsKX?N&|5{s}rU;8CA5Ts^?E_AH0kv1cRi1UUg z&p{9|J(g4#OEaqw9keVi1BoJ)7s+PH3o1QKv}_qFg+P>}z!GTk1hQCdmyn$P8zelHc=8$V9c+RbUj9!|TfQI8mt^4q6Uz57A7EW zjyol!!E01E0Q!?gYbXZxz|)wfCL9V-#(Y5k#+E+JyO=N-dzM?T{jYA86Ir8l?av59Gl2ytA z^ZJ@?8yI&8&db2%=5b9iF;|^$0U2rX!4sk0svfF|1IyCl>HPJwQ!X*};>OF%=)*D+ zqtQ*uqD9yO)K_}9VTm#L=VqzHFjOn1YKUhsUNv&L;tff+{Y(Lp;!DB=|M7ip&~^6~0zI#_WN^O`UiO`n4? zGS2s6eVl9q^&)GbYfgWyGngeNXsoD+3b!xJQn8FvCx=IGXmK9$r_P~|@f^?0<20Vb z?KD-{V`(OR%tm^@$mV6PMRvLjEL9r0Tr`Zo4^?hSNm>cvh0WHBq=h(;W{B2=GkmF9 z5oNNfEP;r{Webm+=-iE`FP%=L|6U!hJsw)dWq(+1@Tux8mim1B7Iesk=gcSmI2>0k zpw{oysakexru7J>Te`lhbJ#^)!pw{cWVgM=xp{OFC7F#;~5Uxb|MUKo!PINtJP z9}|^oNuLB!RT)96nNWfoNonb}!P8$CGe(nSn8&s&|>42Ze zSO&U;{^a@QoSOU`|LnH;NC+Qf8f;aDhvv2R6~f_XSV$>agdHdy z_{+3l-xojitAO9a4*NWrO)FU#%mR>shF8S2Qi&j#<;b2AqYmwHXm5E-P$)$RX(*^v z7IMpp_P49p#S;+dm9W}1+~;}R9}7KWPWhmYdb z(m^?#p$@wV0Fop)DMCQ13Ig`J82vC&uo8rkQuV4D$=0(AyStd+TMP>bDC0`Z%RGmI zWaE$!Ud3Lk=?n75RPB}pKBJ(vke)kKK8>?59_1}bGlP%TJQiJbZINpY3ey~A2f21Q z-fErT9)7pJT^wZIJ*&0Ok09@IMQ07#-;&|IUrTligXdARwNo(;=u00V-R6hpl>IPo z&raV-!T}S*w+F39^i=bUj!&V*drWL#i?YPEazQH{ORcnjf=UwX>#|x~mJ+8u5)1 zOBT4I`0~kNDB;M3bQ4)sNwI?5JX?Z!0r9D57>=mbAD1M54*rStg^F#4*v?{s%&A)H zfB+an0i(j#5B*;0w^FAekSr<1k^Bj>T46hLqE7D`-$<=dm~#|wAp>rtz`B-WEYK7e z1qwjrU4LckVui6dai<6Wem{budYgz0Qn=EG-rg%Ni?Ydnp7;GZd~DTjN5!>KS;EBr zuNj&c2z8nFVXM;Quue8j$hJ=W@6Tn})*QEt6HRb9E{#oQ5F1>Eog&i@tmY`y)ADQm$mf;tH5@guInB?Kf$a;Lf{8-YJ|Kh4=ahl%1hqiEtzYH zKIVTJ6&N&1Rpv!-C`NsTLF2)YrH9vjH{W5e={D;zv&8K(eizuw(h$lltS~veBYSoR z)28TK-ojUs$H9bDCy;>2M(e|qoh}ZaXqVEt#{jj+Tin9B)sR5kdJSeS|FCt_z~CC0 zz>bP!W!AQpZgKaVZf6k2B`+L}ByeHZ=`C(0uywaBR)ORtR^FlLtH37_jI>Uu6iM<( zn}1(H#;o^a+g!AybK9w&3Aq{mcFOU+=H>UDiHd0E2jBca?bPM(P67U?!)*7B zmi-Ej#(aU*x5&e7YQb*EB64uppo+n=en$wSoeB=xcAaStDdeHA=Na@Ld3Sz?;%vk8 zKtPJLkGQ7>o-D@B9e+Ia9I^59E{}O%L-^M625WuB%jkmlN-qHrM)u0QUUJ+O*{_iCeACeObQo?88e|8dyYv$I+ z$5TXaFro} zNZRo&aSUyV#CV%;&zZx&-w(DZz#A3M(I^Q8=_AJ5-Yl5UVZ%=W&y}YUMd51g{s-ov zN1P=lp40801BVp?C-f^e=Uv7Ix-R&t&z8{bt-{a#4~+OIQ%|c-ePy!*{bihbt=1 ziPg{Pm$?=48MrMBfeJd)9f*i%9B0|FN9W@zoiA%2rwOxRroo{(S;-W3aqWqdm5W|K z$8kSZS$c{J5N9=PNQn819P$9>s`i47lGT&v2=|AO!(HXhgfOY%($f2`$TJWmg+sfL zpbftGbNH6iHUp(qP^^21xoDZ{2ZF9QH&;`(p>ZJrHRKne6b z=-}sWd3noOuof39==hgG*KUmNcG4m_+PWY{@aq_M-|Njlr$$2gjR|?4a@@`O z+qwr(?_DBF8j6KtE-1aFozBX1t0Jp$;)9ZFtu&5XXGZpM5A8U?=iago>qxb; zM-eca73C&wIeT_-iCQCW0sh)}e`)pX|3RF=8rN0jwLZbmeAX@Ws(Yl1coFREaY?(w zHwFS6>M#qK7EIw%Tanu&qA_nq8q9SGh=*@vLkc=UvZX5###e;BQxBcWC!usWBe)mWQ%lmx92}yiTaefMTb^+6173MRZvxlt&k9hpI1CgJDKYFV(4LPjg zwPjiM`05<>{2co9S2SxtG&jaeRhnjtxZ$?s<#uX~RDBIFx#^5DFPGMvIllQhKXll&H1hOT0?tb~T*ImkaT`IdL` z)=yQ6%_*3rD&?kIaMC6b#4!QRncDR0x7B>t?dhxbIif7mfbu-ghI%x{z~m#Dpx*nJ zB_4JPkA|91KU5T+?8n&xoGQ@^8^w}C6z$SQp~b72=d#Mw`k&g_2;popw)F{PYMCQin3K=p{g1djJrutkk})_O3Mr`|8)$?O zq5}F@eatoJz1iwN?bB-C-4Wd4*t|B8U=wv#Z_j!t0ovm-Q3mv>%TiC+r;}KW*7JWf z*Z^GYf7S|X3etgTz{jepnZKX&?Vl??DNx6;sM?KeLT;o$#=P6FxZk1qB-ZAbWmc`3 zc!k>1pk&+{p;m^1t5ksNMi;g8v-*rFdTLg>GyNrM8BlF;I6_t%%7%3n$F-Jx`ip$! zJu!R<|9@#qPzrQW-a=MO$>(HHOHc?IRgp;S?@i9x`l_=eC-*6=R=5s+Y)|luq+I7!>oz-`DTJhvsPNeVYqRbc1gQ!j8?b9ZoC^Pt+MAU>s4e>h{gQ;rol;5VPYI> zms0J9S65~(7N-e@fC4;@4ZC?ic)(Phq5U-AVX6um@I#zPE-8`KlC)IVP8OX^DZ=+% z;N{rUTintV`b#XrXi`v1q=V(PPJ?9rIVGZq+3D!#sp22H{bvVo@L^zG0^>G9l#u)z z1lH7;69R*_ms$^5onn>tGu~UI%ooNP` zTNwJP%n#VaLmRTDDY~L)9$n|)oX1<d-re=emThCdMJ^fQphfSl;!;tgu`8_v zM2Qw2kOd(HZu$*t&;1UcF?aecK{5E#8%Io|P*TWf@n)#kVa(h!jH3HO<#bER|F`>6t6$;y_5SW)_|F_**gGH2tLV9wNZvi0v;3(1&EOG&k-xhTc zyjsODl7Jwmn>t4IW@%3zv?U;K?wsV`@8?%odUjd9^ zr#)T0oE9Ys+Y;?3=Rob})XV)toPDbL&oT_okTraTRLA|CQ~eydEH8wbR+-U%*}#?; z5=-B<4bS1!&ygpa<5(lRMph(_MN4Vl7mL|D9=gnYc+8kqT)Y%0KJFVTOy*2AI^-FL zeqP!??3HzR9v1Ka0w^Ka6wqXSe<6r2;3i}_YVd0F&=W!_tR>O*-XN&&a7J{$=6Cp?tzS~!PYT=HD3qCnx?))P+d!dC}K^gdh^;9+#7 zX+O$V0rT@@_YW_f6BkN>BdqID1hs1vbyBWa<^$r1I@LFcHo}@T{}+Ko^G6RDF+AbrZXnD8VP4W@;qyT5 zPZduWd`PS5mpg3%uFN7Zjv}y-ZH-xQ&GUhIZ#@sV|5R~lkWs`M+qLIN z`sN3qb*N+hauGRDZ&cViZZ0{TWnjYcqCqneiy{Wo$OmL!U!zLd2h|Agg+7Euz#%M^ zu^6L4TMca&P#5Q*Dyfwm`kj;CAIm%YgAiEW$O=haYqyPoXbR7$g#9d}2LYmi$l1oi3x7B`?9`TRluy^wE+-bGSx8ZBySuruAuSH7?(ZpCQcbtzbY9hp9&CNO0`YB*QP@6NYjc=sSYyWv#e{>$jY zSi(8A`(nVBAf%sl_(8mVb=n~-+HFo#O{fzQoX zhnaHb>8Y94-$Wf3=LSC#j{SeJ_aUUL>*w*busiD(JmO{DZo-7yc`){eyMEu>l;#F- zkLaQeFDFJ`3%7WJ*<)zVf7|}FN)3*9zy%#DDh;bXkZYhN&hRY1!U{VH3oQD;gS#wI2HY|Qf0Wso(GP93Rze}Mc`*(<H0h_|5MDVqSTrP$&3X6>=A!Mdoji`-m^p~O~)YoqR%0XYOM*f z#|X`8h1=wqPHKMGR_zDF#$~6(UChQIXoP)(OlPVEns52UL%z z%{mW(Tn4i3*QRZm!@T9#ZAAmi(1M6yBXm29Ypiq-Dn|PYw9iSuKku17w=QvM{$Y-? zru5y?jN+N_M?PQ1jwwpDrTfM;va+5c{-^(C*a)IQ;gZEofGr!w+cJu<%dn@1X`odF zgkI&hX6&nXFT)->m`#pWzsI#JP*+0UW!#7$zDva!p?PK{hRPkaCtO7D=N$2eVIMkJ z-WwHuijWf=70OEDcu?RFP+2Q2pQD%`a+Zht#ixRUs)cG5pwMhf!#kmKIY1}q;`+tk zRsWTFH+vkWXct3h8ZH0NSv2p^iK^a4vT(hxa{mYk&4%F zkQqv>V9iO2s{Ni?O4qrVu8JEb*#~<|dp71o&~!QbAk}r{R;vu&WuE0Tn#H!G@%#Ao zpK2Xusq9vU=Y+CgjW^@Cetp$Wtj;b4NYX< zS!>YAIJ>r#O>BF=MV_1}vJeW9I?#oEnu2lW^fQkZG$oOYIZcba)}gO>i#$oeeN2-j zjfu}Go08>k^ibI3ENe%OYw5%NTRb1`5?=OLbHHkfjjmHBq$_6Zu*NQG$}Yi^V87tN za~N;ElG%k&7!<7Kh@GI7q7ttriWEdxaKBgj?9^pidVv9;1sOeVf%h|8F;9T>`eq^vKOVPU8uMAL0Dy~m(S_- z52X*gMUSV?LS8@!hE9qsfe!8QE(Sug)g{k4&JRh4-^^5wl_}D>p`iDRUf+H=x!k_Txp*DZ1rLFud?p#1?X0gwmoF0WM{Lx!fqt3z%d<=6=36R< zCfgM6vR8#7#Y*KQFc-@=p~=dl=dsowk#ZRBKXd}J0tbdJws-9$Wbq9Xgb=LUbrszE z((RC3=3*-U(^A6yzEa|wk|;gUpzlZ-llZFUe@i<=S1cS?AU8|v3P3wE-e$+3o*iwe zBu*Eyg}Tb~7PrW*C_duwS{D>UV_-+jiVW6l?I5=~wkc7*UNYr*=3a&>=!y$bwxbP{ z$`6)a(6!>Rrmvm1gO%+ey%jusXWlLZiM7H3UMA!Rr1i?sf@6=2P~q=PO_dZ zU)=GdIN_Q0H1~vDQ}qbt_sUO}v?s+C)N89rxc#UB;R@e%29u~JSUxVBt-LWVN4-TZ zO-5r2mfg_7FKyudkSBZrAHInFJD*e)3hdn_(1f1t^%8j~uT7&VC1w!IVgfQ-V88-mxaQ1g^T%UNk!JF9g$wN6}qIYjqnff5yy77m3gFjsO1hhW^8RT)*N44l`Bx zg#-?5)hd?*{e8|hevE$_xtugWL;0;?BP=T>YCq{YlKL_9K!#xrjqZZjh^suLMDm_f z*&pNnU_EyCrv&6$d#K>N~J>{Y6Ac8lQPyaB0;q9TZ#i}c@)3XNG+C?_EXg-feD*B(+4&LS9;?=Rj)-4oI zYv*;{cO2S;A>8jH^B=A`2_oa4h3BP=$5K7_JgwyYNX_f;zjRzM`PB1F{tvW0kC?6C zs(^XCWB&GG+Na6IoS!?QQ2_d3Y|?#6$%8e>N~G@>|O7!HV^w{m{ZC zP%iSsfVa58xllV9*Nc|VJpf^T+Ms7ZV|ce6A3fbplHE@Rv~l zrWKuIo}UtC7ADKY;F%#v>0jtr;Py^A=j%m*K}JPk>0<7)br_3?nzFf(zP${6$ga$- znWN?N%FN^>&gw4%pBAqYZIRXVr#Cd0xb=rAF9T1D*Ghbzq1(xAvBjAAvJ@M1{jKA$ zpLSYemlZ>r?wHZbDG3IQ7RX&z%igWnE6I6N;q23dNGPJHwpM7n?UTt`rWJ^OUg<=R zQmI&do}vD!*2&~pR>+aZjtucaoAVU$6%;8 z1g8v`p;J7A?YI5-b&1c1=GOJ*EJk7;J)km>#l==^Wto+N#Bqtr@DeN!&H2b`3n5-s z8Dg<&vebA46R}KelScLY-H*=$G3=!*&!kJfm@v6_^1kIUxj3+1YS#kR2ix_TWn=2Y~i7(Kr%mPn?KxmnmEfiTB&xz+x{(78yPnR0)Aw*rN~0(;=<>V zwA;cSau%3%mGNzRliZ0+a8JMSA_~u`v1!|a-7fty+Nt!|qApTcg$AOjQ-j@#4JM#& zzuU1*_JO5QiFpyZTxgeI zoprQZ+N>cT0WBx#IKwe#c}L(md3uZ9}Tp1J{^|QoWMDNh{CZ#y)$KJhL>~(6iI#EoO;HSl7ZJ=8i-Dcs~Ur7tmlL zg6-jz+1H}=wtTpZoefU6W2I6p@5C3A7Y~{CGHz65)jl2iG-|=@JBtk~u}vp8KUH0p zH_ai&hMzyYx;r)z10uGVGM3b(Ve}p~of7H)d^VbBq<<%(^@k zVSH(kl*4b}vG9;hkgkGL3Z259R_BE8=YmgW^1jRo{YavHNdtAfv629~mf1s31rQ+c z7}K}$4n5Ub9o_^*^#Oqm+(Gcd1;zD73E@Xk3fDh}%0D$b`3Spb5Kt7xfrSdw!D1_w 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 T8e|28hHL;iT4fHWhnw`cz3;~L diff --git a/tests/data/submission.tar b/tests/data/submission.tar deleted file mode 100644 index 485f3a78e5d59345ee7fd11661bff63b2958dfe2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403456 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 ?_wqGppsy>gxsp3c6BY_L3oeU>&)$vZ$Lu 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:PGXBQ=9Q~ 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¨?0?d8`tEBzr=qmy^yrHZ{!t$9 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棳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 Nn98dJc4xo=?tgFRxgY=l diff --git a/jest.config.js b/vitest.config.ts similarity index 100% rename from jest.config.js rename to vitest.config.ts From 192c4c05a6a9b2a119988ed34cfdc524b089382e Mon Sep 17 00:00:00 2001 From: Henrik Nygren Date: Fri, 15 May 2026 11:56:55 +0300 Subject: [PATCH 2/5] Modernize implementation --- .env.example | 3 + .github/workflows/main.yml | 30 +- .gitignore | 12 +- .husky/pre-commit | 1 + .oxfmt.json | 5 + .oxlintrc.json | 80 +- Dockerfile | 26 +- package.json | 93 +- pnpm-lock.yaml | 2446 +++++++++++++++++++ src/app.ts | 34 +- src/index.docker-runtime.test.ts | 24 + src/index.hmac.test.ts | 93 + src/index.test.ts | 293 +++ src/index.ts | 51 +- src/integration/e2e-sandbox.test.ts | 888 +++++-- src/routes.ts | 302 ++- src/schemas.test.ts | 562 +++++ src/schemas.ts | 83 +- src/services/file-extractor.test.ts | 349 +++ src/services/file-extractor.ts | 132 +- src/services/resource-manager.test.ts | 356 +++ src/services/resource-manager.ts | 82 +- src/services/sandbox-executor.test.ts | 873 +++++++ src/services/sandbox-executor.ts | 491 ++-- src/tests/helpers/create-callback-server.ts | 101 +- src/tests/helpers/submission-builder.ts | 119 + src/tests/helpers/tmc-langs.ts | 41 + src/types.ts | 30 +- src/utils/errors.test.ts | 387 +++ src/utils/errors.ts | 89 +- src/utils/hmac.test.ts | 64 + src/utils/hmac.ts | 13 + src/utils/url-safety.test.ts | 136 ++ src/utils/url-safety.ts | 45 + tmc-run | 2 +- tsconfig.json | 84 +- vitest.config.ts | 15 +- 37 files changed, 7554 insertions(+), 881 deletions(-) create mode 100644 .env.example create mode 100644 .husky/pre-commit create mode 100644 .oxfmt.json create mode 100644 pnpm-lock.yaml create mode 100644 src/index.docker-runtime.test.ts create mode 100644 src/index.hmac.test.ts create mode 100644 src/index.test.ts create mode 100644 src/schemas.test.ts create mode 100644 src/services/file-extractor.test.ts create mode 100644 src/services/resource-manager.test.ts create mode 100644 src/services/sandbox-executor.test.ts create mode 100644 src/tests/helpers/submission-builder.ts create mode 100644 src/tests/helpers/tmc-langs.ts create mode 100644 src/utils/errors.test.ts create mode 100644 src/utils/hmac.test.ts create mode 100644 src/utils/hmac.ts create mode 100644 src/utils/url-safety.test.ts create mode 100644 src/utils/url-safety.ts diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..d28aab1 --- /dev/null +++ b/.env.example @@ -0,0 +1,3 @@ +PORT=3000 +HOST=0.0.0.0 +PRINT_VM_LOG=0 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 46a27fd..33be886 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,37 +1,41 @@ name: Test -# Controls when the action will run. on: - # Triggers the workflow on push or pull request events but only for the master branch push: branches: [ master ] pull_request: branches: [ master ] - - # Allows you to run this workflow manually from the Actions tab workflow_dispatch: -# A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: - # This workflow contains a single job called "build" test: - # The type of runner that the job will run on runs-on: ubuntu-latest - # Steps represent a sequence of tasks that will be executed as part of the job steps: - name: Enable Docker IPv6 run: | echo '{ "ipv6": true }' | sudo tee -a /etc/docker/daemon.json sudo systemctl reload docker - - name: Install required operating system packages + + - name: Install required OS packages run: sudo apt-get install -y build-essential moreutils zstd - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 + + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + with: + version: latest + + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: pnpm - name: Install dependencies - run: npm ci + run: pnpm install --frozen-lockfile + - name: Pull required docker images run: docker pull eu.gcr.io/moocfi-public/tmc-sandbox-tmc-langs-rust + - name: Run tests - run: npm test + run: pnpm test diff --git a/.gitignore b/.gitignore index 822298f..2563959 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ -node_modules -dist -uploads -work -.eslintcache +node_modules/ +dist/ +.DS_Store +*.log +.env +.env.local +coverage/ diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..5ee7abd --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +pnpm exec lint-staged diff --git a/.oxfmt.json b/.oxfmt.json new file mode 100644 index 0000000..8caf906 --- /dev/null +++ b/.oxfmt.json @@ -0,0 +1,5 @@ +{ + "indent_width": 2, + "use_tabs": false, + "max_line_length": 120 +} diff --git a/.oxlintrc.json b/.oxlintrc.json index 5f99ef8..2c97f1e 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -1,15 +1,73 @@ { - "root": true, - "parser": "@typescript-eslint/parser", - "plugins": ["@typescript-eslint", "security"], - "extends": [ - "plugin:prettier/recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended", - "plugin:security/recommended" - ], - "ignorePatterns": ["dist"], + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["typescript", "unicorn", "oxc", "import", "promise", "vitest"], + "categories": { + "correctness": "error", + "suspicious": "error", + "perf": "warn" + }, "rules": { - "@typescript-eslint/no-unused-vars": ["warn", { "argsIgnorePattern": "^_" }] + "no-console": "error", + "eqeqeq": "error", + "no-var": "error", + "prefer-const": "error", + "no-shadow": "error", + "radix": "error", + "require-await": "error", + "no-promise-executor-return": "error", + + "typescript/no-explicit-any": "warn", + "typescript/consistent-type-imports": ["warn", { "prefer": "type-imports" }], + "typescript/no-unused-vars": "error", + "typescript/parameter-properties": "off", + "typescript/array-type": "off", + "typescript/no-inferrable-types": "off", + + "import/no-duplicates": "error", + + "unicorn/prefer-node-protocol": "error", + "unicorn/catch-error-name": "error", + "unicorn/prefer-optional-catch-binding": "warn", + "unicorn/text-encoding-identifier-case": "warn", + "unicorn/no-useless-undefined": "warn", + "unicorn/numeric-separators-style": "warn", + "unicorn/no-await-expression-member": "warn", + "unicorn/prefer-ternary": "warn", + "unicorn/prefer-set-has": "warn", + "unicorn/custom-error-definition": "off", + "unicorn/prefer-import-meta-properties": "off", + "unicorn/no-null": "off", + + "promise/param-names": "error", + + "vitest/prefer-strict-equal": "warn", + "vitest/require-mock-type-parameters": "off", + "vitest/prefer-to-be-falsy": "off", + "vitest/prefer-to-be-truthy": "off", + "vitest/no-conditional-in-test": "off", + "vitest/prefer-spy-on": "off", + "vitest/no-importing-vitest-globals": "off", + "vitest/prefer-importing-vitest-globals":"off", + "vitest/prefer-expect-type-of": "off", + "vitest/prefer-describe-function-title": "off", + "vitest/no-hooks": "off", + "vitest/prefer-expect-assertions": "off", + "vitest/require-hook": "off", + "vitest/require-top-level-describe": "off", + "vitest/max-expects": "off", + "vitest/prefer-lowercase-title": "off", + "vitest/prefer-hooks-in-order": "off" + }, + "overrides": [ + { + "files": ["**/*.test.ts"], + "rules": { + "no-console": "off" + } + } + ], + "env": { + "builtin": true, + "node": true } } diff --git a/Dockerfile b/Dockerfile index d5fdf33..bd49ff4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,29 +1,19 @@ -FROM node:11-alpine +FROM node:22-alpine +RUN apk --no-cache add bash -RUN apk --no-cache add \ - bash \ - g++ \ - ca-certificates \ - lz4-dev \ - musl-dev \ - cyrus-sasl-dev \ - openssl-dev \ - make \ - python +RUN corepack enable && corepack prepare pnpm@latest --activate -COPY --chown=node package.json package-lock.json /app/ +COPY --chown=node package.json pnpm-lock.yaml /app/ USER node WORKDIR /app -RUN npm ci +RUN pnpm install --frozen-lockfile --prod COPY --chown=node . /app -ENV BASE_PATH /v2 +RUN pnpm build -RUN npm run build +EXPOSE 3000 -EXPOSE 3003 - -CMD [ "npm", "run", "start" ] +CMD [ "node", "dist/index.js" ] diff --git a/package.json b/package.json index 645268a..2cc4f89 100644 --- a/package.json +++ b/package.json @@ -1,67 +1,42 @@ { - "name": "backendv2", - "version": "1.0.0", - "main": "dist/server.js", - "license": "MIT", + "name": "modernized-sandbox", + "version": "0.1.0", + "packageManager": "pnpm@11.0.9", + "type": "module", "scripts": { - "start": "node ./dist/server.js", - "build": "tsc -p tsconfig.json", - "ts-watch": "tsc --preserveWatchOutput -w -p tsconfig.json", - "watch": "sleep 5 && nodemon --watch dist ./dist/server.js", - "dev": "npm run build && concurrently npm:ts-watch npm:watch", - "test": "jest --runInBand --forceExit", - "test-debug": "jest --runInBand" - }, - "devDependencies": { - "@types/jest": "^26.0.17", - "@types/koa": "^2.11.6", - "@types/koa-bodyparser": "^4.3.0", - "@types/koa-router": "^7.4.1", - "@types/koa__cors": "^3.0.2", - "@types/koa__multer": "^2.0.2", - "@types/supertest": "^2.0.10", - "@types/tar-fs": "^2.0.0", - "@types/uuid": "^8.3.0", - "@typescript-eslint/eslint-plugin": "^4.9.1", - "@typescript-eslint/parser": "^4.9.1", - "concurrently": "^5.3.0", - "eslint": "^7.15.0", - "eslint-config-prettier": "^7.0.0", - "eslint-plugin-prettier": "^3.2.0", - "eslint-plugin-security": "^1.4.0", - "husky": "^4.3.5", - "jest": "^26.6.3", - "lint-staged": "^10.5.3", - "nock": "^13.0.5", - "nodemon": "^2.0.6", - "prettier": "^2.2.1", - "supertest": "^6.0.1", - "ts-jest": "^26.4.4", - "ts-node": "^9.1.1", - "typescript": "^4.1.2" + "dev": "tsgo run src/index.ts", + "build": "tsgo", + "start": "tsgo run dist/index.js", + "test": "vitest", + "test:ui": "vitest --ui", + "lint": "oxlint", + "format": "oxfmt --write src/**/*.ts", + "prepare": "husky" }, "dependencies": { - "@koa/cors": "^3.1.0", - "@koa/multer": "^3.0.0", - "axios": "^0.21.0", - "dotenv": "^8.2.0", - "koa": "^2.13.0", - "koa-bodyparser": "^4.3.0", - "koa-router": "^10.0.0", - "multer": "^1.4.2", - "tar-fs": "^2.1.1", - "uuid": "^8.3.1", - "winston": "^3.3.3" - }, - "nodemonConfig": { - "delay": "2500" - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } + "@fastify/multipart": "10.0.0", + "@fastify/sensible": "6.0.4", + "@marcalexiei/fastify-type-provider-zod": "3.0.0", + "fastify": "5.8.5", + "tar-fs": "3.1.2", + "zod": "4.4.3" }, "lint-staged": { - "*.{js,ts}": "eslint --cache --fix" + "*.ts": [ + "oxfmt --write", + "oxlint" + ] + }, + "devDependencies": { + "@types/node": "25.6.2", + "@types/tar-fs": "^2.0.4", + "@typescript/native-preview": "7.0.0-dev.20260511.1", + "form-data": "4.0.5", + "husky": "^9.1.7", + "lint-staged": "^17.0.4", + "oxfmt": "0.48.0", + "oxlint": "1.63.0", + "typescript": "6.0.3", + "vitest": "4.1.5" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..f55fcc2 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,2446 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@fastify/multipart': + specifier: 10.0.0 + version: 10.0.0 + '@fastify/sensible': + specifier: 6.0.4 + version: 6.0.4 + '@marcalexiei/fastify-type-provider-zod': + specifier: 3.0.0 + version: 3.0.0(@fastify/swagger@9.7.0)(fastify@5.8.5)(openapi-types@12.1.3)(zod@4.4.3) + fastify: + specifier: 5.8.5 + version: 5.8.5 + tar-fs: + specifier: 3.1.2 + version: 3.1.2 + zod: + specifier: 4.4.3 + version: 4.4.3 + devDependencies: + '@types/node': + specifier: 25.6.2 + version: 25.6.2 + '@types/tar-fs': + specifier: ^2.0.4 + version: 2.0.4 + '@typescript/native-preview': + specifier: 7.0.0-dev.20260511.1 + version: 7.0.0-dev.20260511.1 + form-data: + specifier: 4.0.5 + version: 4.0.5 + husky: + specifier: ^9.1.7 + version: 9.1.7 + lint-staged: + specifier: ^17.0.4 + version: 17.0.4 + oxfmt: + specifier: 0.48.0 + version: 0.48.0 + oxlint: + specifier: 1.63.0 + version: 1.63.0 + typescript: + specifier: 6.0.3 + version: 6.0.3 + vitest: + specifier: 4.1.5 + version: 4.1.5(@types/node@25.6.2)(vite@8.0.11(@types/node@25.6.2)(yaml@2.8.4)) + +packages: + + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} + + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} + + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + + '@fastify/ajv-compiler@4.0.5': + resolution: {integrity: sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A==} + + '@fastify/busboy@3.2.0': + resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} + + '@fastify/deepmerge@3.2.1': + resolution: {integrity: sha512-N5Oqvltoa2r9z1tbx4xjky0oRR60v+T47Ic4J1ukoVQcptLOrIdRnCSdTGmOmajZuHVKlTnfcmrjyqsGEW1ztA==} + + '@fastify/error@4.2.0': + resolution: {integrity: sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==} + + '@fastify/fast-json-stringify-compiler@5.0.3': + resolution: {integrity: sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==} + + '@fastify/forwarded@3.0.1': + resolution: {integrity: sha512-JqDochHFqXs3C3Ml3gOY58zM7OqO9ENqPo0UqAjAjH8L01fRZqwX9iLeX34//kiJubF7r2ZQHtBRU36vONbLlw==} + + '@fastify/merge-json-schemas@0.2.1': + resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==} + + '@fastify/multipart@10.0.0': + resolution: {integrity: sha512-pUx3Z1QStY7E7kwvDTIvB6P+rF5lzP+iqPgZyJyG3yBJVPvQaZxzDHYbQD89rbY0ciXrMOyGi8ezHDVexLvJDA==} + + '@fastify/proxy-addr@5.1.0': + resolution: {integrity: sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==} + + '@fastify/sensible@6.0.4': + resolution: {integrity: sha512-1vxcCUlPMew6WroK8fq+LVOwbsLtX+lmuRuqpcp6eYqu6vmkLwbKTdBWAZwbeaSgCfW4tzUpTIHLLvTiQQ1BwQ==} + + '@fastify/swagger@9.7.0': + resolution: {integrity: sha512-Vp1SC1GC2Hrkd3faFILv86BzUNyFz5N4/xdExqtCgkGASOzn/x+eMe4qXIGq7cdT6wif/P/oa6r1Ruqx19paZA==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@lukeed/ms@2.0.2': + resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==} + engines: {node: '>=8'} + + '@marcalexiei/fastify-type-provider-zod@3.0.0': + resolution: {integrity: sha512-2L/gXwQkYCQ/LNKdfHX0/WSBHXxS1x2Rs6eSe5Wwsk33sgB8vUMSOKckLxhwNNeiOEQtJl1TOHwWZUiK8ytJQw==} + peerDependencies: + '@fastify/swagger': ^9.5.1 + fastify: ^5.5.0 + openapi-types: ^12.1.3 + zod: ^4.1.4 + + '@napi-rs/wasm-runtime@1.1.4': + resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + + '@oxc-project/types@0.128.0': + resolution: {integrity: sha512-huv1Y/LzBJkBVHt3OlC7u0zHBW9qXf1FdD7sGmc1rXc2P1mTwHssYv7jyGx5KAACSCH+9B3Bhn6Z9luHRvf7pQ==} + + '@oxfmt/binding-android-arm-eabi@0.48.0': + resolution: {integrity: sha512-uwqk+/KhQvBIpULD8SMM/zAafMRC/+DV/xsEQjkkIsJ/kLmEI/2bxonVowcYTiXqqZ/a0FEW8DPkZY3VvwELDA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxfmt/binding-android-arm64@0.48.0': + resolution: {integrity: sha512-VUCiKuXK5+McVssgHEJdrcGK7hRJzrRb36zm9/jwzMholyYt4BgXhw5Nm1V1DX6Ce717Zi/1jk432b/tgmQgtQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxfmt/binding-darwin-arm64@0.48.0': + resolution: {integrity: sha512-IkKp8rnIyQLW6Jt+6jragCbUVYSayk55lapiprLjIVvt4NczLyO/nwX2GgefLQ5iaBdfS8UEAFgCs/pLO6Cl0w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxfmt/binding-darwin-x64@0.48.0': + resolution: {integrity: sha512-+aFuhsGIuvnoOjXyKVHMhPKJZR1kQkAl8QyrKoMlA7yJsSTC3N0Asl53La8TChSHhW8epToQ/Q0nvLmEmfNmLg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxfmt/binding-freebsd-x64@0.48.0': + resolution: {integrity: sha512-fbqzQL8FjI9gGnktI7RIo0dksDziTAYBy7xlI7jU7eID5fxLF/25fS4Xj6GydD8Y5oWHL83U4NK160QaOAxtyg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxfmt/binding-linux-arm-gnueabihf@0.48.0': + resolution: {integrity: sha512-hn4i0zhAyTiB3ZHjQfYUZkDvrbVkohw1S7pySWxWUoZ87HnkDoTFThj7QTxk40hNPOTUP0vHbPRNamFIv1HBJQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm-musleabihf@0.48.0': + resolution: {integrity: sha512-R4WBD9qF3QM9hqgdAa+fBGXmquTvDUujrPQ36t2Sjk8RPOSKGHDeN7l/khr10hqbQaOq9KCgPHG9ubNET/X/RQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm64-gnu@0.48.0': + resolution: {integrity: sha512-5bVdwSwlm1M8wbYCorLOxWxUBw/8tBvHYyQNIfwWVPwOJaj5vg1APSGJQVpwJfV5VNE9PSrR91UKEpoNwHhqUA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-arm64-musl@0.48.0': + resolution: {integrity: sha512-vCS3Fk7gFslTqE1lUE2IlroyVV7u/9SmMA/uBqDoshuck2psGWcjW0ePyPZI3rM3+qtf2pDaMVIKMHozraifuw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-ppc64-gnu@0.48.0': + resolution: {integrity: sha512-gKtfFfueUClXDumyoHUbymqRf7prHejOOyzJK0eIJn93GF9JBdFHdo60TM1ZBHxkEwZvjuOgHmKtneKbEOc/Eg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-gnu@0.48.0': + resolution: {integrity: sha512-SYt0UhOvZD/UwZz9sXq6J2uAw8o24f5VZpLB2DH01f6MevshmlgakQlZe2lwek2sZJkd07eLu7mZa0g7yeiw7Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-musl@0.48.0': + resolution: {integrity: sha512-JLbrwck2AopG4ud/XklZO5N+qxGC7cS7ROvXZVNfx0MCLDDL2kGOLvzuWORkVjnjAM0CMAfIMU2zNBtQbM+4dw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-s390x-gnu@0.48.0': + resolution: {integrity: sha512-mdxt5L8OQLxkQH+JVpdC/lknZNe0lX4hlO3d8+xvw2wToo+iDrid9tiGOd5bmHfUVd5wVhrUry0qlu5vq66NkQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-gnu@0.48.0': + resolution: {integrity: sha512-oEz1BQwMrV7OMEFx/3VPDU3n9TM0AnxpktDYXjEg5i6nTX87wo18wSfBvkl4tzAICdKtoAQAdBIl7Y7hsPlx5w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-musl@0.48.0': + resolution: {integrity: sha512-g2SKTTurP5mWjd8Ecait0erYqmltL4IqW1EwttM25BxM6NiTt4ubobJYMR1uox1V2QgG4UfHH10CGRvWlUixjw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-openharmony-arm64@0.48.0': + resolution: {integrity: sha512-CIg24VgheEpvolHL2gQuax5qcQ602bRMHrJ9g8XsQr3iVj9aSPgopigBKuMqrXsupwkrU+RQCn5cG8PgFntR6w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxfmt/binding-win32-arm64-msvc@0.48.0': + resolution: {integrity: sha512-zeaWkcxcEULwkGF3I/HgEvcDPN8buYDrxibBUa/IFh5Vmwyge+KpLO+hEwSovW349H0O/C0Z2kaFmEzEDm00/Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxfmt/binding-win32-ia32-msvc@0.48.0': + resolution: {integrity: sha512-yiEKnIAGvx5CyZQOlMaNlZkAbwT7/Quk0j3WLt+PR5hK+qYjPTRRJYDfD77wCBPLvEYAG41v4KG3iL0H+uxoxg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxfmt/binding-win32-x64-msvc@0.48.0': + resolution: {integrity: sha512-GSD2+7t2UoVMV2NgxXypa4bKewflPMAjYnF0Xw9/ht82ZfafAHhb8STwrEd7wlH2PFogt5zw3WVCxYJaHUdbeQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxlint/binding-android-arm-eabi@1.63.0': + resolution: {integrity: sha512-A9xLtQt7i0OA1PoB/meog6kikXI9CdwEp7ZwQqmgnpKn3G3b1orvTDy8CQ6T7w1HvDrgWGB78PkFKcWgibcTCg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxlint/binding-android-arm64@1.63.0': + resolution: {integrity: sha512-SQo+ZMvdR9l3CxZp5W5gFNxSiDxclY6lOzzNpKYLF8asESpm3Pwumx0gER5T7aHLF1/2BAAtLD3DiDkdgy4V1A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxlint/binding-darwin-arm64@1.63.0': + resolution: {integrity: sha512-6W82XjJDTmMnjg30427l0dufpnyLoq7wEukKdM6/g2VIybRVuQiBVh43EA4b+UxZ3+tLcKm+Or/pXGNgLCEU8g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxlint/binding-darwin-x64@1.63.0': + resolution: {integrity: sha512-CnWd/YCuVG5W1BYkjJEVbJG11o526O9qAwBEQM+nh8K19CRFUkFdROXCyYkGmroHEYQe4vgQ6+lh3550Lp35Xw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxlint/binding-freebsd-x64@1.63.0': + resolution: {integrity: sha512-a4eZAqrmtajqcxfdAzC+l7g3PaE3V8hpAYqqeD3fTxLXOMFdK3eNTZrU80n4dDEVm0JXy1aL5PqvqWldBl6zYA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxlint/binding-linux-arm-gnueabihf@1.63.0': + resolution: {integrity: sha512-tYUtU9TdbU3uXF5D62g5zXJ13iniFGhXQx5vp9cyEjGdbSAY3VdFBSaldYvyoDmgMZ0ZYuwQP1Y4t2Fhejwa0w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm-musleabihf@1.63.0': + resolution: {integrity: sha512-I5r3twFf776UZg9dmRo2xbrKt00tTkORXEVe0ctg4vdTkQvJAjiCHxnbAU2HL1AiJ9cqADA76MAliuilsAWnvg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm64-gnu@1.63.0': + resolution: {integrity: sha512-t7ltUkg6FFh4b564QyGir8xIj/QZbXu8FlcRkcyW9+ztr/mfRHlvUOFd95pJCXi9s/L5DrUeWWgpXRS+V+6igQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-arm64-musl@1.63.0': + resolution: {integrity: sha512-Q5mmZy/XWjuYFUuQyYjOvZ5U/JkKEwnpir6hGxhh6HcdP0V/BKxLo8dqkfF/t7r7AguB17dfS/8+go5AQDRR6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-ppc64-gnu@1.63.0': + resolution: {integrity: sha512-uBGtuZ0TzLB4x5wVa82HGNvYqY8buwDhyCnCP0R0gkk9szqVsP0MeTtD5HX7EsEuFIt+aYmYxuxeVxs3nTSwtQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-gnu@1.63.0': + resolution: {integrity: sha512-h4s6FwxE+9MeA181o0dnDwHP32Y/bG8EiB/vrD6Ib+AMt6haigDc/0bUtI/sLmQDBMJnUfaCmtSSrEAqjtEVrA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-musl@1.63.0': + resolution: {integrity: sha512-2EaNcCBR8Mcjl5ARtuN3BdEpVkX7KpjSjMGZ/mJMIeaXgTtdz5ytg2VwygMSStA/k0ixfvZFoZOfjDEcouV5vQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-s390x-gnu@1.63.0': + resolution: {integrity: sha512-p4hlf/fd7TrYYl3QrWWD0GocqJefwMu3cHQhmi2FvEB/YOvFb5DZN3SMBaPi7B1TM5DeypkEtrVib674q1KKPg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-gnu@1.63.0': + resolution: {integrity: sha512-Vgq9rkRVcPcjbcH+ihYTfpeR7vCXfqpd+z5ItTGc0yYUV59L5ceHYN1iV4H9bKGV7Rn5hkVc7x3mSvHegduENA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-musl@1.63.0': + resolution: {integrity: sha512-3/Lkq/ncooA61rorrC+ZQed1Bc4VpGj+WnGsp58zmxKgvZ2vhreu+dcVyr3mX8NUpq7mfZ4gDDTou/yrF1Pd7A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxlint/binding-openharmony-arm64@1.63.0': + resolution: {integrity: sha512-0/EdD/6hDkx5Mfd769PTjvEM8mZ/6Dfukp1dBCL/2PjlIVGEtYdNZyok6ChqYPsT9JcFnlQnUeQzO0/1L/oC9w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxlint/binding-win32-arm64-msvc@1.63.0': + resolution: {integrity: sha512-wb0CUkN8ngwPiRQBjD1Cj0LsHeNvm+Xt6YBHDMtj2DVQVD6Oj8Ri7g6BD+KICf6LaBqZlmzOvy6nF9E/8yyGOg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxlint/binding-win32-ia32-msvc@1.63.0': + resolution: {integrity: sha512-BX5iq+ovdNlVYhSn5qPMUIT0uwAwt2lmEnCnzK+Gkhw4DovIvhGb96OFhV8yzQNUnQxn/xGkOR+X+BLrLDNm8w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxlint/binding-win32-x64-msvc@1.63.0': + resolution: {integrity: sha512-QeN/WELOfsXMeYwxvfgQrl6CbVftYUCZsGXHjXQd5Trccm8+i4gmtxaOui4xbJQaiDlviF8F3yLSBloQUeFsfA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@pinojs/redact@0.4.0': + resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} + + '@rolldown/binding-android-arm64@1.0.0-rc.18': + resolution: {integrity: sha512-lIDyUAfD7U3+BWKzdxMbJcsYHuqXqmGz40aeRqvuAm3y5TkJSYTBW2RDrn65DJFPQqVjUAUqq5uz8urzQ8aBdQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-rc.18': + resolution: {integrity: sha512-apJq2ktnGp27nSInMR5Vcj8kY6xJzDAvfdIFlpDcAK/w4cDO58qVoi1YQsES/SKiFNge/6e4CUzgjfHduYqWpQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-rc.18': + resolution: {integrity: sha512-5Ofot8xbs+pxRHJqm9/9N/4sTQOvdrwEsmPE9pdLEEoAbdZtG6F2LMDfO1sp6ZAtXJuJV/21ew2srq3W8NXB5g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-rc.18': + resolution: {integrity: sha512-7h8eeOTT1eyqJyx64BFCnWZpNm486hGWt2sqeLLgDxA0xI1oGZ9H7gK1S85uNGmBhkdPwa/6reTxfFFKvIsebw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.18': + resolution: {integrity: sha512-eRcm/HVt9U/JFu5RKAEKwGQYtDCKWLiaH6wOnsSEp6NMBb/3Os8LgHZlNyzMpFVNmiiMFlfb2zEnebfzJrHFmg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.18': + resolution: {integrity: sha512-SOrT/cT4ukTmgnrEz/Hg3m7LBnuCLW9psDeMKrimRWY4I8DmnO7Lco8W2vtqPmMkbVu8iJ+g4GFLVLLOVjJ9DQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.18': + resolution: {integrity: sha512-QWjdxN1HJCpBTAcZ5N5F7wju3gVPzRzSpmGzx7na0c/1qpN9CFil+xt+l9lV/1M6/gqHSNXCiqPfwhVJPeLnug==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.18': + resolution: {integrity: sha512-ugCOyj7a4d9h3q9B+wXmf6g3a68UsjGh6dob5DHevHGMwDUbhsYNbSPxJsENcIttJZ9jv7qGM2UesLw5jqIhdg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.18': + resolution: {integrity: sha512-kKWRhbsotpXkGbcd5dllUWg5gEXcDAa8u5YnP9AV5DYNbvJHGzzuwv7dpmhc8NqKMJldl0a+x76IHbspEpEmdA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.18': + resolution: {integrity: sha512-uCo8ElcCIAMyYAZyuIZ81oFkhTSIllNvUCHCAlbhlN4ji3uC28h7IIdlXyIvGO7HsuqnV9p3rD/bpH7XhIyhRw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.18': + resolution: {integrity: sha512-XNOQZtuE6yUIvx4rwGemwh8kpL1xvU41FXy/s9K7T/3JVcqGzo3NfKM2HrbrGgfPYGFW42f07Wk++aOC6B9NWA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.18': + resolution: {integrity: sha512-tSn/kzrfa7tNOXr7sEacDBN4YsIqTyLqh45IO0nHDwtpKIDNDJr+VFojt+4klSpChxB29JLyduSsE0MKEwa65A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.18': + resolution: {integrity: sha512-+J9YGmc+czgqlhYmwun3S3O0FIZhsH8ep2456xwjAdIOmuJxM7xz4P4PtrxU+Bz17a/5bqPA8o3HAAoX0teUdg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.18': + resolution: {integrity: sha512-zsu47DgU0FQzSwi6sU9dZoEdUv7pc1AptSEz/Z8HBg54sV0Pbs3N0+CrIbTsgiu6EyoaNN9CHboqbLaz9lhOyQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.18': + resolution: {integrity: sha512-7H+3yqGgmnlDTRRhw/xpYY9J1kf4GC681nVc4GqKhExZTDrVVrV2tsOR9kso0fvgBdcTCcQShx4SLLoHgaLwhg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-rc.18': + resolution: {integrity: sha512-CUY5Mnhe64xQBGZEEXQ5WyZwsc1JU3vAZLIxtrsBt3LO6UOb+C8GunVKqe9sT8NeWb4lqSaoJtp2xo6GxT1MNw==} + + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@tybys/wasm-util@0.10.2': + resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==} + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + + '@types/node@25.6.2': + resolution: {integrity: sha512-sokuT28dxf9JT5Kady1fsXOvI4HVpjZa95NKT5y9PNTIrs2AsobR4GFAA90ZG8M+nxVRLysCXsVj6eGC7Vbrlw==} + + '@types/tar-fs@2.0.4': + resolution: {integrity: sha512-ipPec0CjTmVDWE+QKr9cTmIIoTl7dFG/yARCM5MqK8i6CNLIG1P8x4kwDsOQY1ChZOZjH0wO9nvfgBvWl4R3kA==} + + '@types/tar-stream@3.1.4': + resolution: {integrity: sha512-921gW0+g29mCJX0fRvqeHzBlE/XclDaAG0Ousy1LCghsOhvaKacDeRGEVzQP9IPfKn8Vysy7FEXAIxycpc/CMg==} + + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260511.1': + resolution: {integrity: sha512-SYrqVOlapDxDG7FzHBIJbfgaix+mXPkYzYGqwpz/TAhoPA7sgbfAoGLaqi3ut9N88C/OYNhEX4tjz/0PC9i1nw==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [darwin] + + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260511.1': + resolution: {integrity: sha512-zIe31OYgBvkgTIQEwJtKim6SYyuVTkr+9fK/87hVwKN15X3Ikjeh0C0g2W/Vl4rXeMvy95wBGDN1jpW11DIvgg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [darwin] + + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260511.1': + resolution: {integrity: sha512-YbmCQXGYkDChGFG7hXJzIgmRjtU1kE5VK/+k322nGnbq4ePqSjS3dS0+ehPATmvfO1XjCDfh3ekED+AtmWk6aQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [linux] + + '@typescript/native-preview-linux-arm@7.0.0-dev.20260511.1': + resolution: {integrity: sha512-02b45lpPmYf125PvcnK67WW93N55qwKmtInwfVefV997S17Ib3h6hlCW4e24BDhNsGRCSLhPA4Lu7ZvTq5pLkw==} + engines: {node: '>=16.20.0'} + cpu: [arm] + os: [linux] + + '@typescript/native-preview-linux-x64@7.0.0-dev.20260511.1': + resolution: {integrity: sha512-e+TweaVJFaM96tV1UM1kRfk2y8QBkZtz7+0wcxrDGmyJz3IIRUlg1btocaBkhsmVtQPXMr37RutBBMgpl3vgUg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [linux] + + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260511.1': + resolution: {integrity: sha512-zgkoGiCpOrly5h8ghcuu6ZNSfrnRqtHoCq584Q92+s4D/j1MU3oKkGPvmkezp5Mj2v7ffR9AjU+lWRDkrfm6eA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [win32] + + '@typescript/native-preview-win32-x64@7.0.0-dev.20260511.1': + resolution: {integrity: sha512-SUm7iVYzKaflol+QwH0Ny5jZtco6PJduI+h/TEg0sgBJzVBa+9RN4I9+Xu9v+EJ1bci3XI7835IRdSP36lCgCw==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [win32] + + '@typescript/native-preview@7.0.0-dev.20260511.1': + resolution: {integrity: sha512-cUyY4Sr6065280lB6hCwTMCBMTxlEIGjSLzHym28yikA5sFiEsAzlwiU0i+XkTUIqr5K5M/SzSJiioDN+vpjtA==} + engines: {node: '>=16.20.0'} + hasBin: true + + '@vitest/expect@4.1.5': + resolution: {integrity: sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw==} + + '@vitest/mocker@4.1.5': + resolution: {integrity: sha512-/x2EmFC4mT4NNzqvC3fmesuV97w5FC903KPmey4gsnJiMQ3Be1IlDKVaDaG8iqaLFHqJ2FVEkxZk5VmeLjIItw==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.1.5': + resolution: {integrity: sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==} + + '@vitest/runner@4.1.5': + resolution: {integrity: sha512-2D+o7Pr82IEO46YPpoA/YU0neeyr6FTerQb5Ro7BUnBuv6NQtT/kmVnczngiMEBhzgqz2UZYl5gArejsyERDSQ==} + + '@vitest/snapshot@4.1.5': + resolution: {integrity: sha512-zypXEt4KH/XgKGPUz4eC2AvErYx0My5hfL8oDb1HzGFpEk1P62bxSohdyOmvz+d9UJwanI68MKwr2EquOaOgMQ==} + + '@vitest/spy@4.1.5': + resolution: {integrity: sha512-2lNOsh6+R2Idnf1TCZqSwYlKN2E/iDlD8sgU59kYVl+OMDmvldO1VDk39smRfpUNwYpNRVn3w4YfuC7KfbBnkQ==} + + '@vitest/utils@4.1.5': + resolution: {integrity: sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==} + + abstract-logging@2.0.1: + resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + + ansi-escapes@7.3.0: + resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} + engines: {node: '>=18'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + + avvio@9.2.0: + resolution: {integrity: sha512-2t/sy01ArdHHE0vRH5Hsay+RtCZt3dLPji7W7/MMOCEgze5b7SNDC4j5H6FnVgPkI1MTNFGzHdHrVXDDl7QSSQ==} + + b4a@1.8.1: + resolution: {integrity: sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==} + peerDependencies: + react-native-b4a: '*' + peerDependenciesMeta: + react-native-b4a: + optional: true + + bare-events@2.8.2: + resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} + peerDependencies: + bare-abort-controller: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + + bare-fs@4.7.1: + resolution: {integrity: sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==} + engines: {bare: '>=1.16.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-os@3.9.1: + resolution: {integrity: sha512-6M5XjcnsygQNPMCMPXSK379xrJFiZ/AEMNBmFEmQW8d/789VQATvriyi5r0HYTL9TkQ26rn3kgdTG3aisbrXkQ==} + engines: {bare: '>=1.14.0'} + + bare-path@3.0.0: + resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + + bare-stream@2.13.1: + resolution: {integrity: sha512-Vp0cnjYyrEC4whYTymQ+YZi6pBpfiICZO3cfRG8sy67ZNWe951urv1x4eW1BKNngw3U+3fPYb5JQvHbCtxH7Ow==} + peerDependencies: + bare-abort-controller: '*' + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + bare-buffer: + optional: true + bare-events: + optional: true + + bare-url@2.4.3: + resolution: {integrity: sha512-Kccpc7ACfXaxfeInfqKcZtW4pT5YBn1mesc4sCsun6sRwtbJ4h+sNOaksUpYEJUKfN65YWC6Bw2OJEFiKxq8nQ==} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-truncate@5.2.0: + resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} + engines: {node: '>=20'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} + engines: {node: '>=18'} + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + eventemitter3@5.0.4: + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + + events-universal@1.0.1: + resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} + + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + + fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + + fast-json-stringify@6.4.0: + resolution: {integrity: sha512-ibRCQ0GZKJIQ+P3Et1h0LhPgp3PMTYk0MH8O+kW3lNYsvmaQww5Nn3f1jf73Q0jR1Yz3a1CDP4/NZD3vOajWJQ==} + + fast-querystring@1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + + fast-uri@3.1.2: + resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + + fastify-plugin@5.1.0: + resolution: {integrity: sha512-FAIDA8eovSt5qcDgcBvDuX/v0Cjz0ohGhENZ/wpc3y+oZCY2afZ9Baqql3g/lC+OHRnciQol4ww7tuthOb9idw==} + + fastify@5.8.5: + resolution: {integrity: sha512-Yqptv59pQzPgQUSIm87hMqHJmdkb1+GPxdE6vW6FRyVE9G86mt7rOghitiU4JHRaTyDUk9pfeKmDeu70lAwM4Q==} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + find-my-way@9.6.0: + resolution: {integrity: sha512-Zf4Xve4RymLl7NgaavNebZ01joJ8MfVerOG43wy7SHLO+r+K0C6d/SE0BiR7AV5V1VOCFlOP7ecdo+I4qmiHrQ==} + engines: {node: '>=20'} + + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} + engines: {node: '>=18'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.3: + resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} + engines: {node: '>= 0.4'} + + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ipaddr.js@2.4.0: + resolution: {integrity: sha512-9VGk3HGanVE6JoZXHiCpnGy5X0jYDnN4EA4lntFPj+1vIWlFhIylq2CrrCOJH9EAhc5CYhq18F2Av2tgoAPsYQ==} + engines: {node: '>= 10'} + + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + engines: {node: '>=18'} + + json-schema-ref-resolver@3.0.0: + resolution: {integrity: sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A==} + + json-schema-resolver@3.0.0: + resolution: {integrity: sha512-HqMnbz0tz2DaEJ3ntsqtx3ezzZyDE7G56A/pPY/NGmrPu76UzsWquOpHFRAf5beTNXoH2LU5cQePVvRli1nchA==} + engines: {node: '>=20'} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + light-my-request@6.6.0: + resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==} + + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + + lint-staged@17.0.4: + resolution: {integrity: sha512-+rU9lSUyVOZ/hDUmRLVGzyS2v73cDdQjX+XQz1AaOdIE4RysLq0HoPW2HrrgeNCLklkhi904VBU1bmgWLHVnkA==} + engines: {node: '>=22.22.1'} + hasBin: true + + listr2@10.2.1: + resolution: {integrity: sha512-7I5knELsJKTUjXG+A6BkKAiGkW1i25fNa/xlUl9hFtk15WbE9jndA89xu5FzQKrY5llajE1hfZZFMILXkDHk/Q==} + engines: {node: '>=22.13.0'} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + + oxfmt@0.48.0: + resolution: {integrity: sha512-AVaLh+7XeGx+R1zfFV+f6VV61nT2MWVJXVUDhbTm5LBWGyNt64xAyh3NYYyjeY2WykNt9AvqSQLPHcbWquYF9g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + oxlint@1.63.0: + resolution: {integrity: sha512-9TGXetdjgIHOJ9OiReomP7nnrMkV9HxC1xM2ramJSLQpzxjsAJtQwa4wqkJN2f/uCrqZuJseFuSlWDdvcruveg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + oxlint-tsgolint: '>=0.22.1' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + + pino-abstract-transport@3.0.0: + resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==} + + pino-std-serializers@7.1.0: + resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} + + pino@10.3.1: + resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==} + hasBin: true + + postcss@8.5.14: + resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} + engines: {node: ^10 || ^12 || >=14} + + process-warning@4.0.1: + resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==} + + process-warning@5.0.0: + resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} + + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + + real-require@1.0.0: + resolution: {integrity: sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + ret@0.5.0: + resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==} + engines: {node: '>=10'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rolldown@1.0.0-rc.18: + resolution: {integrity: sha512-phmyKBpuBdRYDf4hgyynGAYn/rDDe+iZXKVJ7WX5b1zQzpLkP5oJRPGsfJuHdzPMlyyEO/4sPW6yfSx2gf7lVg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + + safe-regex2@5.1.1: + resolution: {integrity: sha512-mOSBvHGDZMuIEZMdOz/aCEYDCv0E7nfcNsIhUF+/P+xC7Hyf3FkvymqgPbg9D1EdSGu+uKbJgy09K/RKKc7kJA==} + hasBin: true + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + secure-json-parse@4.1.0: + resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} + + semver@7.8.0: + resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==} + engines: {node: '>=10'} + hasBin: true + + set-cookie-parser@2.7.2: + resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slice-ansi@7.1.2: + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} + engines: {node: '>=18'} + + slice-ansi@8.0.0: + resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==} + engines: {node: '>=20'} + + sonic-boom@4.2.1: + resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} + + streamx@2.25.0: + resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string-width@8.2.1: + resolution: {integrity: sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==} + engines: {node: '>=20'} + + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + + tar-fs@3.1.2: + resolution: {integrity: sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==} + + tar-stream@3.2.0: + resolution: {integrity: sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==} + + teex@1.0.1: + resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} + + text-decoder@1.2.7: + resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} + + thread-stream@4.1.0: + resolution: {integrity: sha512-Bw6h2iBDt16v6iHLChBIoVYU8CBo9GPsW8TG7h1hRVhqKhIkH6N8qkxNSmiOZTKsCLPbtWG4ViWLkU6KeKXpig==} + engines: {node: '>=20'} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@1.1.2: + resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==} + engines: {node: '>=18'} + + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + engines: {node: '>=12.0.0'} + + tinypool@2.1.0: + resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} + engines: {node: ^20.0.0 || >=22.0.0} + + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} + engines: {node: '>=14.0.0'} + + toad-cache@3.7.0: + resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} + engines: {node: '>=12'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} + + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@7.19.2: + resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vite@8.0.11: + resolution: {integrity: sha512-Jz1mxtUBR5xTT65VOdJZUUeoyLtqljmFkiUXhPTLZka3RDc9vpi/xXkyrnsdRcm2lIi3l3GPMnAidTsEGIj3Ow==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.18 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@4.1.5: + resolution: {integrity: sha512-9Xx1v3/ih3m9hN+SbfkUyy0JAs72ap3r7joc87XL6jwF0jGg6mFBvQ1SrwaX+h8BlkX6Hz9shdd1uo6AF+ZGpg==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.5 + '@vitest/browser-preview': 4.1.5 + '@vitest/browser-webdriverio': 4.1.5 + '@vitest/coverage-istanbul': 4.1.5 + '@vitest/coverage-v8': 4.1.5 + '@vitest/ui': 4.1.5 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + wrap-ansi@10.0.0: + resolution: {integrity: sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==} + engines: {node: '>=20'} + + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + yaml@2.8.4: + resolution: {integrity: sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==} + engines: {node: '>= 14.6'} + hasBin: true + + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + +snapshots: + + '@emnapi/core@1.10.0': + dependencies: + '@emnapi/wasi-threads': 1.2.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.10.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.2.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@fastify/ajv-compiler@4.0.5': + dependencies: + ajv: 8.20.0 + ajv-formats: 3.0.1(ajv@8.20.0) + fast-uri: 3.1.2 + + '@fastify/busboy@3.2.0': {} + + '@fastify/deepmerge@3.2.1': {} + + '@fastify/error@4.2.0': {} + + '@fastify/fast-json-stringify-compiler@5.0.3': + dependencies: + fast-json-stringify: 6.4.0 + + '@fastify/forwarded@3.0.1': {} + + '@fastify/merge-json-schemas@0.2.1': + dependencies: + dequal: 2.0.3 + + '@fastify/multipart@10.0.0': + dependencies: + '@fastify/busboy': 3.2.0 + '@fastify/deepmerge': 3.2.1 + '@fastify/error': 4.2.0 + fastify-plugin: 5.1.0 + secure-json-parse: 4.1.0 + + '@fastify/proxy-addr@5.1.0': + dependencies: + '@fastify/forwarded': 3.0.1 + ipaddr.js: 2.4.0 + + '@fastify/sensible@6.0.4': + dependencies: + '@lukeed/ms': 2.0.2 + dequal: 2.0.3 + fastify-plugin: 5.1.0 + forwarded: 0.2.0 + http-errors: 2.0.1 + type-is: 2.0.1 + vary: 1.1.2 + + '@fastify/swagger@9.7.0': + dependencies: + fastify-plugin: 5.1.0 + json-schema-resolver: 3.0.0 + openapi-types: 12.1.3 + rfdc: 1.4.1 + yaml: 2.8.4 + transitivePeerDependencies: + - supports-color + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@lukeed/ms@2.0.2': {} + + '@marcalexiei/fastify-type-provider-zod@3.0.0(@fastify/swagger@9.7.0)(fastify@5.8.5)(openapi-types@12.1.3)(zod@4.4.3)': + dependencies: + '@fastify/error': 4.2.0 + '@fastify/swagger': 9.7.0 + fastify: 5.8.5 + openapi-types: 12.1.3 + zod: 4.4.3 + + '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@tybys/wasm-util': 0.10.2 + optional: true + + '@oxc-project/types@0.128.0': {} + + '@oxfmt/binding-android-arm-eabi@0.48.0': + optional: true + + '@oxfmt/binding-android-arm64@0.48.0': + optional: true + + '@oxfmt/binding-darwin-arm64@0.48.0': + optional: true + + '@oxfmt/binding-darwin-x64@0.48.0': + optional: true + + '@oxfmt/binding-freebsd-x64@0.48.0': + optional: true + + '@oxfmt/binding-linux-arm-gnueabihf@0.48.0': + optional: true + + '@oxfmt/binding-linux-arm-musleabihf@0.48.0': + optional: true + + '@oxfmt/binding-linux-arm64-gnu@0.48.0': + optional: true + + '@oxfmt/binding-linux-arm64-musl@0.48.0': + optional: true + + '@oxfmt/binding-linux-ppc64-gnu@0.48.0': + optional: true + + '@oxfmt/binding-linux-riscv64-gnu@0.48.0': + optional: true + + '@oxfmt/binding-linux-riscv64-musl@0.48.0': + optional: true + + '@oxfmt/binding-linux-s390x-gnu@0.48.0': + optional: true + + '@oxfmt/binding-linux-x64-gnu@0.48.0': + optional: true + + '@oxfmt/binding-linux-x64-musl@0.48.0': + optional: true + + '@oxfmt/binding-openharmony-arm64@0.48.0': + optional: true + + '@oxfmt/binding-win32-arm64-msvc@0.48.0': + optional: true + + '@oxfmt/binding-win32-ia32-msvc@0.48.0': + optional: true + + '@oxfmt/binding-win32-x64-msvc@0.48.0': + optional: true + + '@oxlint/binding-android-arm-eabi@1.63.0': + optional: true + + '@oxlint/binding-android-arm64@1.63.0': + optional: true + + '@oxlint/binding-darwin-arm64@1.63.0': + optional: true + + '@oxlint/binding-darwin-x64@1.63.0': + optional: true + + '@oxlint/binding-freebsd-x64@1.63.0': + optional: true + + '@oxlint/binding-linux-arm-gnueabihf@1.63.0': + optional: true + + '@oxlint/binding-linux-arm-musleabihf@1.63.0': + optional: true + + '@oxlint/binding-linux-arm64-gnu@1.63.0': + optional: true + + '@oxlint/binding-linux-arm64-musl@1.63.0': + optional: true + + '@oxlint/binding-linux-ppc64-gnu@1.63.0': + optional: true + + '@oxlint/binding-linux-riscv64-gnu@1.63.0': + optional: true + + '@oxlint/binding-linux-riscv64-musl@1.63.0': + optional: true + + '@oxlint/binding-linux-s390x-gnu@1.63.0': + optional: true + + '@oxlint/binding-linux-x64-gnu@1.63.0': + optional: true + + '@oxlint/binding-linux-x64-musl@1.63.0': + optional: true + + '@oxlint/binding-openharmony-arm64@1.63.0': + optional: true + + '@oxlint/binding-win32-arm64-msvc@1.63.0': + optional: true + + '@oxlint/binding-win32-ia32-msvc@1.63.0': + optional: true + + '@oxlint/binding-win32-x64-msvc@1.63.0': + optional: true + + '@pinojs/redact@0.4.0': {} + + '@rolldown/binding-android-arm64@1.0.0-rc.18': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-rc.18': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-rc.18': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-rc.18': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.18': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.18': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.18': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.18': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.18': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.18': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.18': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.18': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.18': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.18': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.18': + optional: true + + '@rolldown/pluginutils@1.0.0-rc.18': {} + + '@standard-schema/spec@1.1.0': {} + + '@tybys/wasm-util@0.10.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + + '@types/estree@1.0.9': {} + + '@types/node@25.6.2': + dependencies: + undici-types: 7.19.2 + + '@types/tar-fs@2.0.4': + dependencies: + '@types/node': 25.6.2 + '@types/tar-stream': 3.1.4 + + '@types/tar-stream@3.1.4': + dependencies: + '@types/node': 25.6.2 + + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260511.1': + optional: true + + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260511.1': + optional: true + + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260511.1': + optional: true + + '@typescript/native-preview-linux-arm@7.0.0-dev.20260511.1': + optional: true + + '@typescript/native-preview-linux-x64@7.0.0-dev.20260511.1': + optional: true + + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260511.1': + optional: true + + '@typescript/native-preview-win32-x64@7.0.0-dev.20260511.1': + optional: true + + '@typescript/native-preview@7.0.0-dev.20260511.1': + optionalDependencies: + '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260511.1 + '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260511.1 + '@typescript/native-preview-linux-arm': 7.0.0-dev.20260511.1 + '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260511.1 + '@typescript/native-preview-linux-x64': 7.0.0-dev.20260511.1 + '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260511.1 + '@typescript/native-preview-win32-x64': 7.0.0-dev.20260511.1 + + '@vitest/expect@4.1.5': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.1.5 + '@vitest/utils': 4.1.5 + chai: 6.2.2 + tinyrainbow: 3.1.0 + + '@vitest/mocker@4.1.5(vite@8.0.11(@types/node@25.6.2)(yaml@2.8.4))': + dependencies: + '@vitest/spy': 4.1.5 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.0.11(@types/node@25.6.2)(yaml@2.8.4) + + '@vitest/pretty-format@4.1.5': + dependencies: + tinyrainbow: 3.1.0 + + '@vitest/runner@4.1.5': + dependencies: + '@vitest/utils': 4.1.5 + pathe: 2.0.3 + + '@vitest/snapshot@4.1.5': + dependencies: + '@vitest/pretty-format': 4.1.5 + '@vitest/utils': 4.1.5 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@4.1.5': {} + + '@vitest/utils@4.1.5': + dependencies: + '@vitest/pretty-format': 4.1.5 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 + + abstract-logging@2.0.1: {} + + ajv-formats@3.0.1(ajv@8.20.0): + optionalDependencies: + ajv: 8.20.0 + + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.2 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-escapes@7.3.0: + dependencies: + environment: 1.1.0 + + ansi-regex@6.2.2: {} + + ansi-styles@6.2.3: {} + + assertion-error@2.0.1: {} + + asynckit@0.4.0: {} + + atomic-sleep@1.0.0: {} + + avvio@9.2.0: + dependencies: + '@fastify/error': 4.2.0 + fastq: 1.20.1 + + b4a@1.8.1: {} + + bare-events@2.8.2: {} + + bare-fs@4.7.1: + dependencies: + bare-events: 2.8.2 + bare-path: 3.0.0 + bare-stream: 2.13.1(bare-events@2.8.2) + bare-url: 2.4.3 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + bare-os@3.9.1: {} + + bare-path@3.0.0: + dependencies: + bare-os: 3.9.1 + + bare-stream@2.13.1(bare-events@2.8.2): + dependencies: + streamx: 2.25.0 + teex: 1.0.1 + optionalDependencies: + bare-events: 2.8.2 + transitivePeerDependencies: + - react-native-b4a + + bare-url@2.4.3: + dependencies: + bare-path: 3.0.0 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + chai@6.2.2: {} + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-truncate@5.2.0: + dependencies: + slice-ansi: 8.0.0 + string-width: 8.2.1 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + content-type@1.0.5: {} + + convert-source-map@2.0.0: {} + + cookie@1.1.1: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + delayed-stream@1.0.0: {} + + depd@2.0.0: {} + + dequal@2.0.3: {} + + detect-libc@2.1.2: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + emoji-regex@10.6.0: {} + + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + + environment@1.1.0: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@2.1.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.3 + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.9 + + eventemitter3@5.0.4: {} + + events-universal@1.0.1: + dependencies: + bare-events: 2.8.2 + transitivePeerDependencies: + - bare-abort-controller + + expect-type@1.3.0: {} + + fast-decode-uri-component@1.0.1: {} + + fast-deep-equal@3.1.3: {} + + fast-fifo@1.3.2: {} + + fast-json-stringify@6.4.0: + dependencies: + '@fastify/merge-json-schemas': 0.2.1 + ajv: 8.20.0 + ajv-formats: 3.0.1(ajv@8.20.0) + fast-uri: 3.1.2 + json-schema-ref-resolver: 3.0.0 + rfdc: 1.4.1 + + fast-querystring@1.1.2: + dependencies: + fast-decode-uri-component: 1.0.1 + + fast-uri@3.1.2: {} + + fastify-plugin@5.1.0: {} + + fastify@5.8.5: + dependencies: + '@fastify/ajv-compiler': 4.0.5 + '@fastify/error': 4.2.0 + '@fastify/fast-json-stringify-compiler': 5.0.3 + '@fastify/proxy-addr': 5.1.0 + abstract-logging: 2.0.1 + avvio: 9.2.0 + fast-json-stringify: 6.4.0 + find-my-way: 9.6.0 + light-my-request: 6.6.0 + pino: 10.3.1 + process-warning: 5.0.0 + rfdc: 1.4.1 + secure-json-parse: 4.1.0 + semver: 7.8.0 + toad-cache: 3.7.0 + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + find-my-way@9.6.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-querystring: 1.1.2 + safe-regex2: 5.1.1 + + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.3 + mime-types: 2.1.35 + + forwarded@0.2.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-east-asian-width@1.6.0: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.3 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + gopd@1.2.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.3: + dependencies: + function-bind: 1.1.2 + + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + + husky@9.1.7: {} + + inherits@2.0.4: {} + + ipaddr.js@2.4.0: {} + + is-fullwidth-code-point@5.1.0: + dependencies: + get-east-asian-width: 1.6.0 + + json-schema-ref-resolver@3.0.0: + dependencies: + dequal: 2.0.3 + + json-schema-resolver@3.0.0: + dependencies: + debug: 4.4.3 + fast-uri: 3.1.2 + rfdc: 1.4.1 + transitivePeerDependencies: + - supports-color + + json-schema-traverse@1.0.0: {} + + light-my-request@6.6.0: + dependencies: + cookie: 1.1.1 + process-warning: 4.0.1 + set-cookie-parser: 2.7.2 + + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + + lint-staged@17.0.4: + dependencies: + listr2: 10.2.1 + picomatch: 4.0.4 + string-argv: 0.3.2 + tinyexec: 1.1.2 + optionalDependencies: + yaml: 2.8.4 + + listr2@10.2.1: + dependencies: + cli-truncate: 5.2.0 + eventemitter3: 5.0.4 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 10.0.0 + + log-update@6.1.0: + dependencies: + ansi-escapes: 7.3.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.2 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + math-intrinsics@1.1.0: {} + + media-typer@1.1.0: {} + + mime-db@1.52.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + + mimic-function@5.0.1: {} + + ms@2.1.3: {} + + nanoid@3.3.12: {} + + obug@2.1.1: {} + + on-exit-leak-free@2.1.2: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + openapi-types@12.1.3: {} + + oxfmt@0.48.0: + dependencies: + tinypool: 2.1.0 + optionalDependencies: + '@oxfmt/binding-android-arm-eabi': 0.48.0 + '@oxfmt/binding-android-arm64': 0.48.0 + '@oxfmt/binding-darwin-arm64': 0.48.0 + '@oxfmt/binding-darwin-x64': 0.48.0 + '@oxfmt/binding-freebsd-x64': 0.48.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.48.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.48.0 + '@oxfmt/binding-linux-arm64-gnu': 0.48.0 + '@oxfmt/binding-linux-arm64-musl': 0.48.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.48.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.48.0 + '@oxfmt/binding-linux-riscv64-musl': 0.48.0 + '@oxfmt/binding-linux-s390x-gnu': 0.48.0 + '@oxfmt/binding-linux-x64-gnu': 0.48.0 + '@oxfmt/binding-linux-x64-musl': 0.48.0 + '@oxfmt/binding-openharmony-arm64': 0.48.0 + '@oxfmt/binding-win32-arm64-msvc': 0.48.0 + '@oxfmt/binding-win32-ia32-msvc': 0.48.0 + '@oxfmt/binding-win32-x64-msvc': 0.48.0 + + oxlint@1.63.0: + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.63.0 + '@oxlint/binding-android-arm64': 1.63.0 + '@oxlint/binding-darwin-arm64': 1.63.0 + '@oxlint/binding-darwin-x64': 1.63.0 + '@oxlint/binding-freebsd-x64': 1.63.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.63.0 + '@oxlint/binding-linux-arm-musleabihf': 1.63.0 + '@oxlint/binding-linux-arm64-gnu': 1.63.0 + '@oxlint/binding-linux-arm64-musl': 1.63.0 + '@oxlint/binding-linux-ppc64-gnu': 1.63.0 + '@oxlint/binding-linux-riscv64-gnu': 1.63.0 + '@oxlint/binding-linux-riscv64-musl': 1.63.0 + '@oxlint/binding-linux-s390x-gnu': 1.63.0 + '@oxlint/binding-linux-x64-gnu': 1.63.0 + '@oxlint/binding-linux-x64-musl': 1.63.0 + '@oxlint/binding-openharmony-arm64': 1.63.0 + '@oxlint/binding-win32-arm64-msvc': 1.63.0 + '@oxlint/binding-win32-ia32-msvc': 1.63.0 + '@oxlint/binding-win32-x64-msvc': 1.63.0 + + pathe@2.0.3: {} + + picocolors@1.1.1: {} + + picomatch@4.0.4: {} + + pino-abstract-transport@3.0.0: + dependencies: + split2: 4.2.0 + + pino-std-serializers@7.1.0: {} + + pino@10.3.1: + dependencies: + '@pinojs/redact': 0.4.0 + atomic-sleep: 1.0.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 3.0.0 + pino-std-serializers: 7.1.0 + process-warning: 5.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.1 + thread-stream: 4.1.0 + + postcss@8.5.14: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + process-warning@4.0.1: {} + + process-warning@5.0.0: {} + + pump@3.0.4: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + + quick-format-unescaped@4.0.4: {} + + real-require@0.2.0: {} + + real-require@1.0.0: {} + + require-from-string@2.0.2: {} + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + ret@0.5.0: {} + + reusify@1.1.0: {} + + rfdc@1.4.1: {} + + rolldown@1.0.0-rc.18: + dependencies: + '@oxc-project/types': 0.128.0 + '@rolldown/pluginutils': 1.0.0-rc.18 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-rc.18 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.18 + '@rolldown/binding-darwin-x64': 1.0.0-rc.18 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.18 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.18 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.18 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.18 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.18 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.18 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.18 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.18 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.18 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.18 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.18 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.18 + + safe-regex2@5.1.1: + dependencies: + ret: 0.5.0 + + safe-stable-stringify@2.5.0: {} + + secure-json-parse@4.1.0: {} + + semver@7.8.0: {} + + set-cookie-parser@2.7.2: {} + + setprototypeof@1.2.0: {} + + siginfo@2.0.0: {} + + signal-exit@4.1.0: {} + + slice-ansi@7.1.2: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + + slice-ansi@8.0.0: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + + sonic-boom@4.2.1: + dependencies: + atomic-sleep: 1.0.0 + + source-map-js@1.2.1: {} + + split2@4.2.0: {} + + stackback@0.0.2: {} + + statuses@2.0.2: {} + + std-env@4.1.0: {} + + streamx@2.25.0: + dependencies: + events-universal: 1.0.1 + fast-fifo: 1.3.2 + text-decoder: 1.2.7 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + string-argv@0.3.2: {} + + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 + + string-width@8.2.1: + dependencies: + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 + + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + + tar-fs@3.1.2: + dependencies: + pump: 3.0.4 + tar-stream: 3.2.0 + optionalDependencies: + bare-fs: 4.7.1 + bare-path: 3.0.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + + tar-stream@3.2.0: + dependencies: + b4a: 1.8.1 + bare-fs: 4.7.1 + fast-fifo: 1.3.2 + streamx: 2.25.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + + teex@1.0.1: + dependencies: + streamx: 2.25.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + text-decoder@1.2.7: + dependencies: + b4a: 1.8.1 + transitivePeerDependencies: + - react-native-b4a + + thread-stream@4.1.0: + dependencies: + real-require: 1.0.0 + + tinybench@2.9.0: {} + + tinyexec@1.1.2: {} + + tinyglobby@0.2.16: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + tinypool@2.1.0: {} + + tinyrainbow@3.1.0: {} + + toad-cache@3.7.0: {} + + toidentifier@1.0.1: {} + + tslib@2.8.1: + optional: true + + type-is@2.0.1: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.2 + + typescript@6.0.3: {} + + undici-types@7.19.2: {} + + vary@1.1.2: {} + + vite@8.0.11(@types/node@25.6.2)(yaml@2.8.4): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.14 + rolldown: 1.0.0-rc.18 + tinyglobby: 0.2.16 + optionalDependencies: + '@types/node': 25.6.2 + fsevents: 2.3.3 + yaml: 2.8.4 + + vitest@4.1.5(@types/node@25.6.2)(vite@8.0.11(@types/node@25.6.2)(yaml@2.8.4)): + dependencies: + '@vitest/expect': 4.1.5 + '@vitest/mocker': 4.1.5(vite@8.0.11(@types/node@25.6.2)(yaml@2.8.4)) + '@vitest/pretty-format': 4.1.5 + '@vitest/runner': 4.1.5 + '@vitest/snapshot': 4.1.5 + '@vitest/spy': 4.1.5 + '@vitest/utils': 4.1.5 + es-module-lexer: 2.1.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.1.2 + tinyglobby: 0.2.16 + tinyrainbow: 3.1.0 + vite: 8.0.11(@types/node@25.6.2)(yaml@2.8.4) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 25.6.2 + transitivePeerDependencies: + - msw + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + wrap-ansi@10.0.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 8.2.1 + strip-ansi: 7.2.0 + + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.2.0 + + wrappy@1.0.2: {} + + yaml@2.8.4: {} + + zod@4.4.3: {} diff --git a/src/app.ts b/src/app.ts index 63b10a2..b40d6d2 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,23 +1,21 @@ -import Koa from "koa" -import bodyParser from "koa-bodyparser" -import api from "./controllers" -import logger from "./middleware/logger" -import errorHandler from "./middleware/error_handler" -import { CustomContext, CustomState } from "./types" -import cors from "@koa/cors" +import Fastify from "fastify"; +import type { FastifyInstance } from "fastify"; +import multipart from "@fastify/multipart"; +import sensible from "@fastify/sensible"; +import { registerRoutes } from "./routes.js"; +import { handleError } from "./utils/errors.js"; -const app = new Koa() +export async function buildApp(opts: { logger?: boolean } = {}): Promise { + const app = Fastify({ + logger: opts.logger ?? true, + }); -app.use(cors()) + await app.register(sensible); + await app.register(multipart); -app.use(errorHandler) + app.setErrorHandler(handleError); -app.use(logger) + registerRoutes(app); -app.use(bodyParser()) - -app.use(api.routes()) - -export type AppContext = typeof app.context - -export default app + return app; +} diff --git a/src/index.docker-runtime.test.ts b/src/index.docker-runtime.test.ts new file mode 100644 index 0000000..c7310e3 --- /dev/null +++ b/src/index.docker-runtime.test.ts @@ -0,0 +1,24 @@ +import { afterEach, describe, expect, it } from "vitest"; +import Fastify from "fastify"; +import { registerRoutes } from "./routes.js"; + +describe("DOCKER_RUNTIME env var selection", () => { + afterEach(() => { + delete process.env["DOCKER_RUNTIME"]; + }); + + it("defaults to runc when DOCKER_RUNTIME is not set", () => { + delete process.env["DOCKER_RUNTIME"]; + expect(() => registerRoutes(Fastify({ logger: false }))).not.toThrow(); + }); + + it("selects runsc when DOCKER_RUNTIME=runsc", () => { + process.env["DOCKER_RUNTIME"] = "runsc"; + expect(() => registerRoutes(Fastify({ logger: false }))).not.toThrow(); + }); + + it("falls back to runc for unrecognised DOCKER_RUNTIME values", () => { + process.env["DOCKER_RUNTIME"] = "unknown-runtime"; + expect(() => registerRoutes(Fastify({ logger: false }))).not.toThrow(); + }); +}); diff --git a/src/index.hmac.test.ts b/src/index.hmac.test.ts new file mode 100644 index 0000000..461cc5e --- /dev/null +++ b/src/index.hmac.test.ts @@ -0,0 +1,93 @@ +import { afterAll, afterEach, beforeAll, describe, expect, it, vi } from "vitest"; +import type { FastifyInstance } from "fastify"; +import Fastify from "fastify"; +import multipart from "@fastify/multipart"; +import sensible from "@fastify/sensible"; +import FormData from "form-data"; +import { createHmac } from "node:crypto"; +import { registerRoutes } from "./routes.js"; +import { handleError } from "./utils/errors.js"; +import { SandboxExecutor } from "./services/sandbox-executor.js"; +import * as resourceManager from "./services/resource-manager.js"; + +describe("POST /tasks.json HMAC enforcement", () => { + let hmacApp: FastifyInstance; + const HMAC_SECRET = "test-hmac-secret-xyz"; + + function makeForm(opts: { notifySignature?: string } = {}): FormData { + const form = new FormData(); + form.append("file", Buffer.from("dummy tar content"), { + filename: "sub.tar", + contentType: "application/x-tar", + }); + form.append("notify", "https://example.com/notify"); + form.append("token", "test-token"); + if (opts.notifySignature !== undefined) { + form.append("notify_signature", opts.notifySignature); + } + return form; + } + + beforeAll(async () => { + process.env["SANDBOX_CALLBACK_SECRET"] = HMAC_SECRET; + process.env["SANDBOX_DISABLE_SSRF_CHECK"] = "true"; + + hmacApp = Fastify({ logger: false }); + await hmacApp.register(sensible); + await hmacApp.register(multipart); + hmacApp.setErrorHandler(handleError); + const mockExecutor = new SandboxExecutor(hmacApp.log, { + execFileFn: vi.fn().mockResolvedValue({ stdout: "", stderr: "" }), + extractFileFn: vi.fn().mockImplementation(() => Promise.resolve()), + readFileFn: vi.fn().mockResolvedValue(""), + }); + registerRoutes(hmacApp, mockExecutor); + }); + + afterAll(async () => { + delete process.env["SANDBOX_CALLBACK_SECRET"]; + delete process.env["SANDBOX_DISABLE_SSRF_CHECK"]; + await hmacApp?.close(); + resourceManager.resetState(); + }); + + afterEach(() => resourceManager.resetState()); + + it("returns 400 when SANDBOX_CALLBACK_SECRET is set and signature is invalid", async () => { + const form = makeForm({ notifySignature: "deadbeef".repeat(8) }); + const response = await hmacApp.inject({ + method: "POST", + url: "/tasks.json", + headers: form.getHeaders() as Record, + payload: form.getBuffer(), + }); + expect(response.statusCode).toBe(400); + expect((JSON.parse(response.body) as { error: string }).error).toBe( + "Invalid notify URL signature", + ); + }); + + it("returns 200 when SANDBOX_CALLBACK_SECRET is set and signature is valid", async () => { + const notifyUrl = "https://example.com/notify"; + const sig = createHmac("sha256", HMAC_SECRET).update(notifyUrl, "utf8").digest("hex"); + const form = makeForm({ notifySignature: sig }); + const response = await hmacApp.inject({ + method: "POST", + url: "/tasks.json", + headers: form.getHeaders() as Record, + payload: form.getBuffer(), + }); + expect(response.statusCode).toBe(200); + }); + + it("returns 200 when SANDBOX_CALLBACK_SECRET is set but no signature provided (warn-only mode)", async () => { + const form = makeForm(); + const response = await hmacApp.inject({ + method: "POST", + url: "/tasks.json", + headers: form.getHeaders() as Record, + payload: form.getBuffer(), + }); + expect(response.statusCode).toBe(200); + }); +}); diff --git a/src/index.test.ts b/src/index.test.ts new file mode 100644 index 0000000..6c3f32d --- /dev/null +++ b/src/index.test.ts @@ -0,0 +1,293 @@ +import { afterAll, beforeAll, describe, expect, it } from "vitest"; +import type { FastifyInstance } from "fastify"; +import { buildApp } from "./app.js"; +import * as resourceManager from "./services/resource-manager.js"; + +describe("Sandbox API Integration", () => { + let app: FastifyInstance; + + beforeAll(async () => { + app = await buildApp({ logger: false }); + }); + + afterAll(async () => { + await app.close(); + }); + + describe("GET /status.json", () => { + it("should return 200 with status data", async () => { + const response = await app.inject({ + method: "GET", + url: "/status.json", + }); + + expect(response.statusCode).toBe(200); + const body = JSON.parse(response.body); + expect(body).toHaveProperty("busyInstances"); + expect(body).toHaveProperty("reservedCpuCores"); + expect(body).toHaveProperty("totalInstances"); + expect(body).toHaveProperty("reservedMemory"); + expect(body).toHaveProperty("totalMemory"); + }); + + it("should return non-negative values", async () => { + const response = await app.inject({ + method: "GET", + url: "/status.json", + }); + + const body = JSON.parse(response.body); + expect(body.busyInstances).toBeGreaterThanOrEqual(0); + expect(body.reservedCpuCores).toBeGreaterThanOrEqual(0); + expect(body.reservedMemory).toBeGreaterThanOrEqual(0); + expect(body.totalInstances).toBeGreaterThan(0); + expect(body.totalMemory).toBeGreaterThan(0); + }); + + it("should have reasonable system resource values", async () => { + const response = await app.inject({ + method: "GET", + url: "/status.json", + }); + + const body = JSON.parse(response.body); + expect(body.totalInstances).toBeGreaterThan(0); + expect(body.totalMemory).toBeGreaterThan(0); + }); + + it("should return consistent structure across multiple calls", async () => { + const calls = await Promise.all([ + app.inject({ method: "GET", url: "/status.json" }), + app.inject({ method: "GET", url: "/status.json" }), + app.inject({ method: "GET", url: "/status.json" }), + ]); + + const bodies = calls.map((r) => JSON.parse(r.body) as Record); + const keys = [ + "busyInstances", + "reservedCpuCores", + "totalInstances", + "reservedMemory", + "totalMemory", + ]; + for (const body of bodies) { + for (const key of keys) { + expect(body).toHaveProperty(key); + } + } + }); + + it("should have content-type application/json", async () => { + const response = await app.inject({ + method: "GET", + url: "/status.json", + }); + + expect(response.headers["content-type"]).toContain("application/json"); + }); + }); + + describe("POST /tasks.json error cases", () => { + it("returns an error status when no multipart file is provided", async () => { + const response = await app.inject({ + method: "POST", + url: "/tasks.json", + payload: "test", + }); + + // The multipart plugin rejects invalid content before our handler runs, + // so the status may be 400 or 500 depending on the plugin version. + expect(response.statusCode).toBeGreaterThanOrEqual(400); + }); + + it("returns an error status for empty body", async () => { + const response = await app.inject({ + method: "POST", + url: "/tasks.json", + }); + + expect(response.statusCode).toBeGreaterThanOrEqual(400); + }); + + it("always returns a JSON error body for bad requests", async () => { + const response = await app.inject({ + method: "POST", + url: "/tasks.json", + payload: "test", + }); + + expect(response.statusCode).toBeGreaterThanOrEqual(400); + const body = JSON.parse(response.body) as Record; + expect(body).toHaveProperty("error"); + expect(typeof body["error"]).toBe("string"); + }); + + it("returns an error for malformed Content-Type", async () => { + const response = await app.inject({ + method: "POST", + url: "/tasks.json", + payload: "test", + headers: { + "content-type": "invalid/type", + }, + }); + + expect(response.statusCode).toBeGreaterThanOrEqual(400); + }); + }); + + describe("POST /tasks.json resource management", () => { + beforeAll(() => { + resourceManager.resetState(); + }); + + afterAll(() => { + resourceManager.resetState(); + }); + + it("should not leak reserved resources after a failed request", async () => { + const before = await app.inject({ method: "GET", url: "/status.json" }); + const beforeStatus = JSON.parse(before.body) as { busyInstances: number }; + + await app.inject({ + method: "POST", + url: "/tasks.json", + payload: "invalid", + }); + + const after = await app.inject({ method: "GET", url: "/status.json" }); + const afterStatus = JSON.parse(after.body) as { busyInstances: number }; + + expect(afterStatus.busyInstances).toBe(beforeStatus.busyInstances); + }); + }); + + describe("routing", () => { + it("should have status endpoint", async () => { + const response = await app.inject({ + method: "GET", + url: "/status.json", + }); + + expect(response.statusCode).toBe(200); + }); + + it("should return 404 for unknown routes", async () => { + const response = await app.inject({ + method: "GET", + url: "/unknown-endpoint", + }); + + expect(response.statusCode).toBe(404); + }); + + it("should return 404 for POST to status endpoint", async () => { + const response = await app.inject({ + method: "POST", + url: "/status.json", + payload: {}, + }); + + expect(response.statusCode).toBe(404); + }); + + it("should accept only POST for tasks endpoint", async () => { + const methods = ["GET", "PUT", "DELETE", "PATCH"] as const; + const responses = await Promise.all( + methods.map((method) => app.inject({ method, url: "/tasks.json" })), + ); + for (const response of responses) { + expect(response.statusCode).not.toBe(200); + } + }); + }); + + describe("response format", () => { + it("status response should have correct structure with correct types", async () => { + const response = await app.inject({ + method: "GET", + url: "/status.json", + }); + + const body = JSON.parse(response.body); + const expectedKeys = [ + "busyInstances", + "reservedCpuCores", + "totalInstances", + "reservedMemory", + "totalMemory", + ]; + + for (const key of expectedKeys) { + expect(body).toHaveProperty(key); + expect(typeof body[key]).toBe("number"); + } + }); + + it("should not leak sensitive information in responses", async () => { + const response = await app.inject({ + method: "GET", + url: "/status.json", + }); + + const body = JSON.parse(response.body); + const sensitiveKeys = ["password", "secret", "token", "credentials"]; + + for (const key of sensitiveKeys) { + expect(body).not.toHaveProperty(key); + } + }); + }); + + describe("performance", () => { + it("status endpoint should respond successfully", async () => { + const response = await app.inject({ + method: "GET", + url: "/status.json", + }); + + expect(response.statusCode).toBe(200); + }); + + it("should handle concurrent status requests", async () => { + const requests = Array.from({ length: 10 }, () => + app.inject({ + method: "GET", + url: "/status.json", + }), + ); + + const responses = await Promise.all(requests); + expect(responses.every((r) => r.statusCode === 200)).toBe(true); + }); + }); + + describe("corner cases", () => { + it("should return 404 for endpoint with trailing slash", async () => { + const response = await app.inject({ + method: "GET", + url: "/status.json/", + }); + + expect(response.statusCode).toBe(404); + }); + + it("should be case-sensitive for endpoints", async () => { + const response = await app.inject({ + method: "GET", + url: "/Status.json", + }); + + expect(response.statusCode).toBe(404); + }); + + it("should handle multiple consecutive requests", async () => { + const responses = await Promise.all( + Array.from({ length: 5 }, () => app.inject({ method: "GET", url: "/status.json" })), + ); + for (const response of responses) { + expect(response.statusCode).toBe(200); + } + }); + }); +}); diff --git a/src/index.ts b/src/index.ts index 51064f0..d4b42f1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,43 +1,20 @@ -import http from "http" -import { GlobalLogger } from "./src/middleware/logger" -import app from "./src/app" -import { ALLOWED_ALTERNATIVE_DOCKER_IMAGES } from "./src/controllers" -import Axios from "axios" -import { promisify } from "util" -import { exec as origExec } from "child_process" -const exec = promisify(origExec) +import { buildApp } from "./app.js"; -const port = process.env.PORT || 3231 - -http - .createServer(app.callback()) - .listen(port, () => GlobalLogger.info(`Server running on port ${port}.`)) +const PORT = parseInt(process.env["PORT"] ?? "3000", 10); +if (Number.isNaN(PORT)) { + throw new Error(`Invalid PORT value "${process.env["PORT"] ?? ""}": must be a number`); +} +const HOST = process.env["HOST"] ?? "0.0.0.0"; -async function pullImage(image: string) { - GlobalLogger.info("Pulling " + image) +async function start(): Promise { + const app = await buildApp(); try { - await exec(`docker pull ${image}`) - } catch (e) { - GlobalLogger.error(`Could not pull image ${image}`, e) + await app.listen({ port: PORT, host: HOST }); + app.log.info(`Sandbox server running at http://${HOST}:${PORT}`); + } catch (error) { + app.log.error(error); + process.exit(1); } } -setInterval(async () => { - for (const image of ALLOWED_ALTERNATIVE_DOCKER_IMAGES) { - await pullImage(image) - } - - GlobalLogger.info("Getting a list of all alternative images") - const res = await Axios.get("https://eu.gcr.io/v2/moocfi-public/tags/list") - const images = res.data.child - if (images && images instanceof Array) { - for (const image of images.filter((o) => o.startsWith("tmc-sandbox-"))) { - await pullImage(`eu.gcr.io/moocfi-public/${image}`) - } - } -}, 10 * 60 * 1000) - -setInterval(() => { - GlobalLogger.info(`Pruning old images that have not been used for 24 hours.`) - exec('docker image prune -a -f --filter "until=24h"') -}, 24 * 60 * 60 * 1000) +start(); diff --git a/src/integration/e2e-sandbox.test.ts b/src/integration/e2e-sandbox.test.ts index 2514e1c..27558b3 100644 --- a/src/integration/e2e-sandbox.test.ts +++ b/src/integration/e2e-sandbox.test.ts @@ -1,228 +1,666 @@ -import { Server } from "http" -import request from "supertest" -import App from "../src/app" -import createResultServer, { NotifyResult } from "./util/createResultsServer" - -let server: Server | null = null - -function testSkipOnCi( - name: string, - fn?: jest.ProvidesCallback, - timeout?: number, -) { - if (process.env.CI) { - return test.skip(name, fn, timeout) - } else { - return test(name, fn, timeout) +import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import type { FastifyInstance } from "fastify"; +import Fastify from "fastify"; +import multipart from "@fastify/multipart"; +import sensible from "@fastify/sensible"; +import FormData from "form-data"; +import { readFileSync, existsSync } from "node:fs"; +import { writeFile, rm } from "node:fs/promises"; +import { join } from "node:path"; +import { tmpdir } from "node:os"; +import { exec as execCallback } from "node:child_process"; +import { promisify } from "node:util"; + +import { registerRoutes } from "../routes.js"; +import { handleError } from "../utils/errors.js"; +import { SandboxExecutor } from "../services/sandbox-executor.js"; +import { resetState } from "../services/resource-manager.js"; +import { createCallbackServer } from "../tests/helpers/create-callback-server.js"; +import { SubmissionBuilder } from "../tests/helpers/submission-builder.js"; +import type { DockerRuntime } from "../types.js"; + +const exec = promisify(execCallback); + +const PYTHON_IMAGE = "eu.gcr.io/moocfi-public/tmc-sandbox-python:latest"; +const MAKE_IMAGE = "eu.gcr.io/moocfi-public/tmc-sandbox-make:latest"; +const TASK_TIMEOUT_MS = 15_000; +const TEST_TOKEN = "test-secret-token-abc123"; + +const REQUIRED_TEMPLATE_DIRS = [ + "/tmp/tmc-langs-rust/sample_exercises/python3/exercise", + "/tmp/tmc-langs-rust/sample_exercises/make/passing-exercise", + "/tmp/tmc-langs-rust/sample_exercises/make/failing-exercise", +]; + +const EMOTICON_TEST_SOURCE = ` +import unittest +from tmc import points +from tmc.utils import load_module, reload_module, get_stdout + +exercise = 'src.emoticon' + +@points('1.emoticon') +class EmoticonTest(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.module = load_module(exercise, 'en') + + def test_print_emoticon(self): + reload_module(self.module) + output = get_stdout() + self.assertEqual(output.strip(), ':^)', 'Expected output :^)') + +if __name__ == '__main__': + unittest.main() +`.trim(); + +let passingPythonTar: string; +let failingPythonTar: string; +let timeoutPythonTar: string; +let oomPythonTar: string; +let forkBombPythonTar: string; +let zstdTar: string; +let corruptTar: string; +let emptyTar: string; +let passingMakeTar: string; +let failingMakeTar: string; + +let fixturesSkipAll = false; + +async function dockerPull(image: string): Promise { + try { + await exec(`docker pull '${image}'`); + return true; + } catch { + return false; + } +} + +function buildMultipartRequest( + tarPath: string, + fields: { + notify: string; + token: string; + dockerImage: string; + mimeType?: string; + memoryLimitGb?: number; + cpuLimit?: number; + submissionId?: string; + }, +): { headers: Record; payload: Buffer } { + const form = new FormData(); + form.append("file", readFileSync(tarPath), { + filename: "submission.tar", + contentType: fields.mimeType ?? "application/x-tar", + }); + form.append("notify", fields.notify); + form.append("token", fields.token); + form.append("docker_image", fields.dockerImage); + if (fields.memoryLimitGb !== undefined) { + form.append("memory_limit_gb", String(fields.memoryLimitGb)); + } + if (fields.cpuLimit !== undefined) { + form.append("cpu_limit", String(fields.cpuLimit)); + } + if (fields.submissionId !== undefined) { + form.append("submission_id", fields.submissionId); + } + const payload = form.getBuffer(); + const headers = form.getHeaders() as Record; + return { headers, payload }; +} + +beforeAll(async () => { + process.env["SANDBOX_DISABLE_SSRF_CHECK"] = "true"; + + const missingDirs = REQUIRED_TEMPLATE_DIRS.filter((d) => !existsSync(d)); + if (missingDirs.length > 0) { + console.warn( + `Skipping E2E tests: template directories not found:\n ${missingDirs.join("\n ")}`, + ); + fixturesSkipAll = true; + return; } + + const [pyOk, makeOk] = await Promise.all([dockerPull(PYTHON_IMAGE), dockerPull(MAKE_IMAGE)]); + if (!pyOk || !makeOk) { + console.warn("Docker images not available, skipping E2E tests"); + fixturesSkipAll = true; + return; + } + + const pythonBuilder = (src: string) => + new SubmissionBuilder() + .withPythonTemplate() + .addFile("test/test_emoticon.py", EMOTICON_TEST_SOURCE) + .addFile("src/emoticon.py", src); + + [passingPythonTar, failingPythonTar, timeoutPythonTar, oomPythonTar, forkBombPythonTar] = + await Promise.all([ + pythonBuilder('print(":^)")').build("tar"), + pythonBuilder('print("wrong")').build("tar"), + new SubmissionBuilder() + .withPythonTemplate() + .addFile(".tmcproject.yml", "tests_timeout_ms: 120000\n") + .addFile("test/test_emoticon.py", EMOTICON_TEST_SOURCE) + .addFile("src/emoticon.py", "import time\nwhile True:\n time.sleep(0.01)") + .build("tar"), + pythonBuilder("x = []\nwhile True:\n x.append(b'\\x00' * 10_000_000)").build("tar"), + pythonBuilder("import os\nwhile True:\n os.fork()").build("tar"), + ]); + + zstdTar = await pythonBuilder('print(":^)")').build("zstd"); + + const SRC_MAKE_PASS = "/tmp/tmc-langs-rust/sample_exercises/make/passing-exercise"; + const SRC_MAKE_FAIL = "/tmp/tmc-langs-rust/sample_exercises/make/failing-exercise"; + const { readFile: readFileAsync } = await import("node:fs/promises"); + [passingMakeTar, failingMakeTar] = await Promise.all([ + Promise.all([ + readFileAsync(join(SRC_MAKE_PASS, "src/source.c"), "utf8"), + readFileAsync(join(SRC_MAKE_PASS, "src/main.c"), "utf8"), + ]).then(([srcC, mainC]) => + new SubmissionBuilder() + .withMakeTemplate() + .addFile("src/source.c", srcC) + .addFile("src/main.c", mainC) + .build("tar"), + ), + Promise.all([ + readFileAsync(join(SRC_MAKE_FAIL, "src/source.c"), "utf8"), + readFileAsync(join(SRC_MAKE_FAIL, "src/main.c"), "utf8"), + ]).then(([srcC, mainC]) => + new SubmissionBuilder() + .withMakeTemplate() + .addFile("src/source.c", srcC) + .addFile("src/main.c", mainC) + .build("tar"), + ), + ]); + + corruptTar = join(tmpdir(), "corrupt.tar"); + await writeFile(corruptTar, "this is not a tar file at all!!!!"); + + emptyTar = join(tmpdir(), "empty.tar"); + await exec(`tar -cf '${emptyTar}' -T /dev/null`); +}, 180_000); + +afterAll(async () => { + delete process.env["SANDBOX_DISABLE_SSRF_CHECK"]; + await Promise.all( + [ + passingPythonTar, + failingPythonTar, + timeoutPythonTar, + oomPythonTar, + forkBombPythonTar, + zstdTar, + passingMakeTar, + failingMakeTar, + corruptTar, + emptyTar, + ] + .filter(Boolean) + .map((p) => rm(p, { force: true })), + ); +}); + +function sandboxSuiteBody(runtime: DockerRuntime) { + return () => { + let app: FastifyInstance; + let skipSuite = false; + + beforeEach(function (ctx) { + if (fixturesSkipAll || skipSuite) ctx.skip(); + }); + + beforeAll(async () => { + if (fixturesSkipAll) return; + + if (runtime === "runsc") { + try { + await exec("docker run --rm --runtime=runsc hello-world"); + } catch { + console.warn("gVisor (runsc) runtime not available, skipping gVisor E2E tests"); + skipSuite = true; + return; + } + } + + app = Fastify({ logger: false }); + await app.register(sensible); + await app.register(multipart); + app.setErrorHandler(handleError); + const executor = new SandboxExecutor(app.log, { + taskTimeoutMs: TASK_TIMEOUT_MS, + dockerRuntime: runtime, + }); + registerRoutes(app, executor); + }, 60_000); + + afterAll(async () => { + resetState(); + await app?.close(); + }); + + async function submitAndWait( + tarPath: string, + dockerImage: string, + opts: { + mimeType?: string; + memoryLimitGb?: number; + cpuLimit?: number; + submissionId?: string; + callbackTimeoutMs?: number; + } = {}, + ) { + const callback = await createCallbackServer(opts.callbackTimeoutMs ?? 60_000); + const { headers, payload } = buildMultipartRequest(tarPath, { + notify: callback.url, + token: TEST_TOKEN, + dockerImage, + ...opts, + }); + + const response = await app.inject({ + method: "POST", + url: "/tasks.json", + headers, + payload, + }); + + return { httpResponse: response, result: await callback.waitForResult() }; + } + + describe("passing submissions", () => { + it("Python exercise: full passing submission checks", { timeout: 60_000 }, async () => { + const { httpResponse, result } = await submitAndWait(passingPythonTar, PYTHON_IMAGE, { + submissionId: `test-sub-42-${runtime}`, + }); + expect(httpResponse.statusCode).toBe(200); + expect(result.status).toBe("finished"); + expect(result.exit_code).toBe("0"); + expect(result.token).toBe(TEST_TOKEN); + expect(result.vm_log.length).toBeGreaterThan(0); + const requiredFields: Array = [ + "token", + "test_output", + "stdout", + "stderr", + "valgrind", + "validations", + "vm_log", + "status", + "exit_code", + ]; + for (const field of requiredFields) { + expect(result).toHaveProperty(field); + } + }); + + it("Python passing: test_output contains PASSED status", { timeout: 60_000 }, async () => { + const { result } = await submitAndWait(passingPythonTar, PYTHON_IMAGE); + const testOutput = JSON.parse(result.test_output) as { status: string }; + expect(testOutput.status).toBe("PASSED"); + }); + + it("zstd compressed submission works", { timeout: 60_000 }, async () => { + const { result } = await submitAndWait(zstdTar, PYTHON_IMAGE, { + mimeType: "application/zstd", + }); + expect(result.status).toBe("finished"); + }); + + it("Make/C passing exercise returns status='finished'", { timeout: 60_000 }, async () => { + const { result } = await submitAndWait(passingMakeTar, MAKE_IMAGE); + expect(result.status).toBe("finished"); + }); + }); + + describe("failing submissions", () => { + it( + "Python with wrong output returns status='finished' with TESTS_FAILED", + { timeout: 60_000 }, + async () => { + const { result } = await submitAndWait(failingPythonTar, PYTHON_IMAGE); + expect(result.status).toBe("finished"); + const testOutput = JSON.parse(result.test_output); + expect(testOutput.status).toBe("TESTS_FAILED"); + }, + ); + + it( + "testResults array is present in test_output for failing submission", + { timeout: 60_000 }, + async () => { + const { result } = await submitAndWait(failingPythonTar, PYTHON_IMAGE); + const testOutput = JSON.parse(result.test_output); + expect(Array.isArray(testOutput.testResults)).toBe(true); + expect(testOutput.testResults.length).toBeGreaterThan(0); + }, + ); + + it( + "failing submission includes the token in the callback payload", + { timeout: 60_000 }, + async () => { + const { result } = await submitAndWait(failingPythonTar, PYTHON_IMAGE); + expect(result.token).toBe(TEST_TOKEN); + }, + ); + + it( + "Make/C failing exercise returns status='finished' with TESTS_FAILED", + { timeout: 60_000 }, + async () => { + const { result } = await submitAndWait(failingMakeTar, MAKE_IMAGE); + expect(result.status).toBe("finished"); + const testOutput = JSON.parse(result.test_output); + expect(testOutput.status).toBe("TESTS_FAILED"); + }, + ); + }); + + describe("resource management", () => { + afterEach(() => resetState()); + + it("busyInstances returns to 0 after submission completes", { timeout: 60_000 }, async () => { + const initialRes = await app.inject({ method: "GET", url: "/status.json" }); + const initial = (JSON.parse(initialRes.body) as { busyInstances: number }).busyInstances; + await submitAndWait(passingPythonTar, PYTHON_IMAGE); + const afterRes = await app.inject({ method: "GET", url: "/status.json" }); + const after = (JSON.parse(afterRes.body) as { busyInstances: number }).busyInstances; + expect(after).toBe(initial); + }); + + it("returns 503 when resources are fully reserved", async () => { + const { TOTAL_CPU_CORES, TOTAL_MEMORY_GB, tryReserveResources } = + await import("../services/resource-manager.js"); + tryReserveResources({ cpus: TOTAL_CPU_CORES, memoryGB: TOTAL_MEMORY_GB }); + const callback = await createCallbackServer(3000); + const { headers, payload } = buildMultipartRequest(passingPythonTar, { + notify: callback.url, + token: TEST_TOKEN, + dockerImage: PYTHON_IMAGE, + }); + const response = await app.inject({ + method: "POST", + url: "/tasks.json", + headers, + payload, + }); + callback.close(); + expect(response.statusCode).toBe(503); + }); + + it( + "reservedCpuCores and reservedMemory return to baseline after completion", + { timeout: 60_000 }, + async () => { + const beforeRes = await app.inject({ method: "GET", url: "/status.json" }); + const before = JSON.parse(beforeRes.body) as { + reservedCpuCores: number; + reservedMemory: number; + }; + + await submitAndWait(passingPythonTar, PYTHON_IMAGE); + + const afterRes = await app.inject({ method: "GET", url: "/status.json" }); + const after = JSON.parse(afterRes.body) as { + reservedCpuCores: number; + reservedMemory: number; + }; + expect(after.reservedCpuCores).toBe(before.reservedCpuCores); + expect(after.reservedMemory).toBe(before.reservedMemory); + }, + ); + + it("accepts custom memory_limit_gb and completes", { timeout: 60_000 }, async () => { + const { result } = await submitAndWait(passingPythonTar, PYTHON_IMAGE, { + memoryLimitGb: 2, + }); + expect(result.status).toBe("finished"); + }); + + it("accepts custom cpu_limit and completes", { timeout: 60_000 }, async () => { + const { result } = await submitAndWait(passingPythonTar, PYTHON_IMAGE, { + cpuLimit: 2, + }); + expect(result.status).toBe("finished"); + }); + + it("releases resources even when submission crashes", { timeout: 60_000 }, async () => { + const beforeRes = await app.inject({ method: "GET", url: "/status.json" }); + const before = (JSON.parse(beforeRes.body) as { busyInstances: number }).busyInstances; + + await submitAndWait(corruptTar, PYTHON_IMAGE, { callbackTimeoutMs: 10_000 }).catch( + () => {}, + ); + await new Promise((resolve) => { + setTimeout(resolve, 2000); + }); + + const afterRes = await app.inject({ method: "GET", url: "/status.json" }); + const after = (JSON.parse(afterRes.body) as { busyInstances: number }).busyInstances; + expect(after).toBeLessThanOrEqual(before); + }); + }); + + describe("error scenarios", () => { + it("OOM submission returns status='out-of-memory'", { timeout: 60_000 }, async () => { + const { result } = await submitAndWait(oomPythonTar, PYTHON_IMAGE, { + callbackTimeoutMs: 60_000, + }); + expect(result.status).toBe("out-of-memory"); + }); + + it("OOM submission includes token in callback payload", { timeout: 60_000 }, async () => { + const { result } = await submitAndWait(oomPythonTar, PYTHON_IMAGE, { + callbackTimeoutMs: 60_000, + }); + expect(result.token).toBe(TEST_TOKEN); + }); + + it( + "empty tar submission does not hang (completes with any status)", + { timeout: 60_000 }, + async () => { + const { result } = await submitAndWait(emptyTar, PYTHON_IMAGE, { + callbackTimeoutMs: 60_000, + }); + expect(result.status).toBeDefined(); + expect(["finished", "failed", "crashed", "timeout", "out-of-memory"]).toContain( + result.status, + ); + }, + ); + + it( + "fork bomb: status is finished or failed (does not hang)", + { timeout: 60_000 }, + async () => { + if (process.env.CI) { + console.log("Skipping fork bomb test on CI"); + return; + } + const { result } = await submitAndWait(forkBombPythonTar, PYTHON_IMAGE, { + callbackTimeoutMs: 60_000, + }); + expect(["finished", "failed", "crashed"]).toContain(result.status); + }, + ); + + it("corrupt tar returns HTTP 200 (async) or immediate error (400/500)", async () => { + const callback = await createCallbackServer(5000); + const { headers, payload } = buildMultipartRequest(corruptTar, { + notify: callback.url, + token: TEST_TOKEN, + dockerImage: PYTHON_IMAGE, + }); + const response = await app.inject({ + method: "POST", + url: "/tasks.json", + headers, + payload, + }); + expect([200, 400, 500]).toContain(response.statusCode); + callback.close(); + }); + }); + + describe("timeout scenario", () => { + it( + "infinite loop returns status='timeout' after executor timeout", + { timeout: 30_000 }, + async () => { + const { result } = await submitAndWait(timeoutPythonTar, PYTHON_IMAGE, { + callbackTimeoutMs: 25_000, + }); + expect(result.status).toBe("timeout"); + }, + ); + + it("timeout submission includes token in callback payload", { timeout: 30_000 }, async () => { + const { result } = await submitAndWait(timeoutPythonTar, PYTHON_IMAGE, { + callbackTimeoutMs: 25_000, + }); + expect(result.token).toBe(TEST_TOKEN); + }); + + it("reservedCpuCores returns to baseline after timeout", { timeout: 30_000 }, async () => { + const beforeRes = await app.inject({ method: "GET", url: "/status.json" }); + const before = JSON.parse(beforeRes.body) as { reservedCpuCores: number }; + + await submitAndWait(timeoutPythonTar, PYTHON_IMAGE, { callbackTimeoutMs: 25_000 }); + + const afterRes = await app.inject({ method: "GET", url: "/status.json" }); + const after = JSON.parse(afterRes.body) as { reservedCpuCores: number }; + expect(after.reservedCpuCores).toBe(before.reservedCpuCores); + }); + }); + + describe("concurrent submissions", () => { + it("two simultaneous Python submissions both complete", { timeout: 90_000 }, async () => { + const [r1, r2] = await Promise.all([ + submitAndWait(passingPythonTar, PYTHON_IMAGE, { callbackTimeoutMs: 80_000 }), + submitAndWait(passingPythonTar, PYTHON_IMAGE, { callbackTimeoutMs: 80_000 }), + ]); + expect(r1.result.status).toBe("finished"); + expect(r2.result.status).toBe("finished"); + }); + + it("two simultaneous failing submissions both complete", { timeout: 90_000 }, async () => { + const [r1, r2] = await Promise.all([ + submitAndWait(failingPythonTar, PYTHON_IMAGE, { callbackTimeoutMs: 80_000 }), + submitAndWait(failingPythonTar, PYTHON_IMAGE, { callbackTimeoutMs: 80_000 }), + ]); + expect(r1.result.status).toBe("finished"); + expect(r2.result.status).toBe("finished"); + }); + }); + + describe("HTTP request validation", () => { + function buildRawForm( + fields: Record, + tarPath: string, + ): { headers: Record; payload: Buffer } { + const form = new FormData(); + form.append("file", readFileSync(tarPath), { + filename: "submission.tar", + contentType: "application/x-tar", + }); + for (const [k, v] of Object.entries(fields)) { + form.append(k, v); + } + return { + headers: form.getHeaders() as Record, + payload: form.getBuffer(), + }; + } + + it("returns 400 when docker_image is not whitelisted", async () => { + const { headers, payload } = buildRawForm( + { + notify: "https://example.com/notify", + token: TEST_TOKEN, + docker_image: "evil/unauthorized-image:latest", + }, + passingPythonTar, + ); + const response = await app.inject({ + method: "POST", + url: "/tasks.json", + headers, + payload, + }); + expect(response.statusCode).toBe(400); + }); + + it("returns 400 when docker_image is an empty string", async () => { + const { headers, payload } = buildRawForm( + { + notify: "https://example.com/notify", + token: TEST_TOKEN, + docker_image: "", + }, + passingPythonTar, + ); + const response = await app.inject({ + method: "POST", + url: "/tasks.json", + headers, + payload, + }); + expect(response.statusCode).toBe(400); + }); + + it("returns 400 when token is missing", async () => { + const { headers, payload } = buildRawForm( + { notify: "https://example.com/notify" }, + passingPythonTar, + ); + const response = await app.inject({ + method: "POST", + url: "/tasks.json", + headers, + payload, + }); + expect(response.statusCode).toBe(400); + }); + + it("returns 400 when notify URL is missing", async () => { + const { headers, payload } = buildRawForm({ token: TEST_TOKEN }, passingPythonTar); + const response = await app.inject({ + method: "POST", + url: "/tasks.json", + headers, + payload, + }); + expect(response.statusCode).toBe(400); + }); + + it("returns 400 when notify URL is not a valid URL", async () => { + const { headers, payload } = buildRawForm( + { notify: "not-a-url", token: TEST_TOKEN }, + passingPythonTar, + ); + const response = await app.inject({ + method: "POST", + url: "/tasks.json", + headers, + payload, + }); + expect(response.statusCode).toBe(400); + }); + }); + }; } -beforeAll(() => { - server = App.listen(0) -}) - -afterAll(() => { - server?.close() -}) - -test("GET /status.json returns the current status", async () => { - const res = await request(server) - .get("/status.json") - .expect("Content-Type", /json/) - .expect(200) - - expect(res.body.busy_instances).toBe(0) - expect(res.body.total_instances).toBeGreaterThan(0) -}) - -test("POST /tasks.json works", async () => { - jest.setTimeout(60000) - const notifyResult: NotifyResult = await new Promise( - async (resolve, _reject) => { - const notifyAddress = createResultServer((res) => { - resolve(res) - }) - - await request(server) - .post("/tasks.json") - .attach("file", "tests/data/submission.tar") - .field( - "docker_image", - "eu.gcr.io/moocfi-public/tmc-sandbox-tmc-langs-rust", - ) - .field("token", "SUPER_SECRET") - .field("notify", notifyAddress) - .set("Accept", "application/json") - .expect("Content-Type", /json/) - .expect(200) - }, - ) - expect(notifyResult.token).toBe("SUPER_SECRET") - expect(notifyResult.exit_code).toBe("0") - expect(notifyResult.status).toBe("finished") - expect(notifyResult.vm_log.length).toBeGreaterThan(5) - const testOutput = JSON.parse(notifyResult.test_output) - expect(testOutput.status).toBe("PASSED") - expect(testOutput.testResults.length).toBe(1) -}) - -test("POST /tasks.json with higher resource limits works", async () => { - jest.setTimeout(60000) - const notifyResult: NotifyResult = await new Promise( - async (resolve, _reject) => { - const notifyAddress = createResultServer((res) => { - resolve(res) - }) - - await request(server) - .post("/tasks.json") - .attach("file", "tests/data/submission.tar") - .field( - "docker_image", - "eu.gcr.io/moocfi-public/tmc-sandbox-tmc-langs-rust", - ) - .field("memory_limit_gb", "3") - .field("cpu_limit", "2") - .field("token", "SUPER_SECRET") - .field("notify", notifyAddress) - .set("Accept", "application/json") - .expect("Content-Type", /json/) - .expect(200) - }, - ) - expect(notifyResult.token).toBe("SUPER_SECRET") - expect(notifyResult.exit_code).toBe("0") - expect(notifyResult.status).toBe("finished") - expect(notifyResult.vm_log.length).toBeGreaterThan(5) - const testOutput = JSON.parse(notifyResult.test_output) - expect(testOutput.status).toBe("PASSED") - expect(testOutput.testResults.length).toBe(1) -}) - -test("POST /tasks.json works with .tar.zst files", async () => { - jest.setTimeout(60000) - const notifyResult: NotifyResult = await new Promise( - async (resolve, _reject) => { - const notifyAddress = createResultServer((res) => { - resolve(res) - }) - - await request(server) - .post("/tasks.json") - .attach("file", "tests/data/submission.tar.zst", { - contentType: "application/zstd", - }) - .field( - "docker_image", - "eu.gcr.io/moocfi-public/tmc-sandbox-tmc-langs-rust", - ) - .field("token", "SUPER_SECRET") - .field("notify", notifyAddress) - .set("Accept", "application/json") - .expect("Content-Type", /json/) - .expect(200) - }, - ) - - expect(notifyResult.token).toBe("SUPER_SECRET") - expect(notifyResult.exit_code).toBe("0") - expect(notifyResult.status).toBe("finished") - expect(notifyResult.vm_log.length).toBeGreaterThan(5) - const testOutput = JSON.parse(notifyResult.test_output) - expect(testOutput.status).toBe("PASSED") - expect(testOutput.testResults.length).toBe(1) -}) - -testSkipOnCi("POST /tasks.json does not crash with fork bombs", async () => { - jest.setTimeout(60000) - const notifyResult: NotifyResult = await new Promise( - async (resolve, _reject) => { - const notifyAddress = createResultServer((res) => { - resolve(res) - }) - - await request(server) - .post("/tasks.json") - .attach("file", "tests/data/fork-bomb.tar.zst", { - contentType: "application/zstd", - }) - .field( - "docker_image", - "eu.gcr.io/moocfi-public/tmc-sandbox-tmc-langs-rust", - ) - .field("token", "SUPER_SECRET") - .field("notify", notifyAddress) - .set("Accept", "application/json") - .expect("Content-Type", /json/) - .expect(200) - }, - ) - - expect(notifyResult.token).toBe("SUPER_SECRET") - - // hard to predict what happens in this case - const case1 = - notifyResult.status === "finished" && - notifyResult.test_output.indexOf("TESTS_FAILED") !== -1 - - const case2 = - notifyResult.status === "failed" && notifyResult.exit_code === "110" - - expect(case1 || case2).toBe(true) -}) - -test("POST /tasks.json works when submission uses too much memory", async () => { - jest.setTimeout(60000) - const notifyResult: NotifyResult = await new Promise( - async (resolve, _reject) => { - const notifyAddress = createResultServer((res) => { - resolve(res) - }) - - await request(server) - .post("/tasks.json") - .attach("file", "tests/data/out-of-memory.tar.zst", { - contentType: "application/zstd", - }) - .field( - "docker_image", - "eu.gcr.io/moocfi-public/tmc-sandbox-tmc-langs-rust", - ) - .field("token", "SUPER_SECRET") - .field("notify", notifyAddress) - .set("Accept", "application/json") - .expect("Content-Type", /json/) - .expect(200) - }, - ) - expect(notifyResult.token).toBe("SUPER_SECRET") - expect(notifyResult.status).toBe("out-of-memory") -}) - -test("POST /tasks.json works with java", async () => { - jest.setTimeout(60000) - const notifyResult: NotifyResult = await new Promise( - async (resolve, _reject) => { - const notifyAddress = createResultServer((res) => { - resolve(res) - }) - - await request(server) - .post("/tasks.json") - .attach("file", "tests/data/java.tar") - .field("docker_image", "eu.gcr.io/moocfi-public/tmc-sandbox-java") - .field("token", "SUPER_SECRET") - .field("notify", notifyAddress) - .set("Accept", "application/json") - .expect("Content-Type", /json/) - .expect(200) - }, - ) - expect(notifyResult.token).toBe("SUPER_SECRET") - expect(notifyResult.exit_code).toBe("0") - expect(notifyResult.status).toBe("finished") - expect(notifyResult.vm_log.length).toBeGreaterThan(5) - const testOutput = JSON.parse(notifyResult.test_output) - expect(testOutput.status).toBe("TESTS_FAILED") - expect(testOutput.testResults.length).toBe(2) -}) +// vitest/valid-describe-callback: factory must be invoked inside describe body +// eslint-disable-next-line vitest/valid-describe-callback +describe("E2E Sandbox Execution (default/runc)", () => { + sandboxSuiteBody("runc")(); +}); +// eslint-disable-next-line vitest/valid-describe-callback +describe("E2E Sandbox Execution (gVisor/runsc)", () => { + sandboxSuiteBody("runsc")(); +}); diff --git a/src/routes.ts b/src/routes.ts index 2f10c36..5976972 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -1,110 +1,212 @@ -import Router from "koa-router" -import { CustomContext, CustomState } from "./types" -import multer from "@koa/multer" -import gateKeeper, { - CPU_CORES_IN_SYSTEM, +import type { FastifyInstance, FastifyRequest, FastifyReply } from "fastify"; +import type { Multipart } from "@fastify/multipart"; +import { pipeline } from "node:stream/promises"; +import { createWriteStream } from "node:fs"; +import { mkdtemp, rm } from "node:fs/promises"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import { randomUUID } from "node:crypto"; +import { z } from "zod"; +import { MimeTypeSchema, TaskPayloadSchema } from "./schemas.js"; +import { + TOTAL_CPU_CORES, + TOTAL_MEMORY_GB, getBusyInstances, - freeInstance, + getReservedCpuCores, getReservedMemory, - TOTAL_SYSTEM_MEMORY_GB, -} from "./middleware/gatekeeper" -import { BadRequestError } from "./util/error" -import handleSubmission, { RunResult } from "./sandbox" -import Axios from "axios" -import { SupportedMimeTypes } from "./util/file_extractor" -import extractResourceLimitsFromRequest from "./util/extractResourceLimitsFromRequest" - -const upload = multer({ dest: "uploads/" }) -export const ALLOWED_ALTERNATIVE_DOCKER_IMAGES = ["nygrenh/sandbox-next"] -const ALLOWED_DOCKER_IMAGE_PREFIX = "eu.gcr.io/moocfi-public/tmc-sandbox-" - -const api = new Router() - .get("/status.json", async (ctx) => { - ctx.body = { - busy_instances: getBusyInstances(), - // This is intentionally the same as busy instances, this is more descriptive name but we're keeping busy_instances for backwards compatibility - reserved_cpu_cores: getBusyInstances(), - - total_instances: CPU_CORES_IN_SYSTEM, - reserved_memory: getReservedMemory(), - total_memory: TOTAL_SYSTEM_MEMORY_GB, - } - }) - - .post("/tasks.json", gateKeeper, upload.single("file"), async (ctx) => { - // Gatekeeper has already reserved a processing instance for us. - // We must remember to free it once we're done. We're limiting the number of - // concurrent tasks in a middleware because we want to do it before receiving - // the uploaded file. - - const resourceLimits = extractResourceLimitsFromRequest(ctx.request.body) - - if ( - ctx.file.mimetype !== "application/x-tar" && - ctx.file.mimetype !== "application/zstd" - ) { - freeInstance(resourceLimits) - throw new BadRequestError( - `Uploaded file type is not supported! Mimetype was: ${ctx.file.mimetype}}. Supported types are application/x-tar and application/zstd.`, - ) - } - - const dockerImage: string = ctx.request.body.docker_image - if ( - dockerImage && - !( - dockerImage.startsWith(ALLOWED_DOCKER_IMAGE_PREFIX) || - ALLOWED_ALTERNATIVE_DOCKER_IMAGES.indexOf(dockerImage) !== -1 - ) - ) { - freeInstance(resourceLimits) - throw new BadRequestError("Docker image was not whitelisted.") - } - - if (ctx.request.body.submission_id) { - ctx.log.info(`Handling submission ${ctx.request.body.submission_id}.`) - } - - // The actual processing is done asynchronously - setImmediate(async () => { + releaseResources, + tryReserveResources, +} from "./services/resource-manager.js"; +import { SandboxExecutor } from "./services/sandbox-executor.js"; +import { BadRequestError, SandboxBusyError } from "./utils/errors.js"; +import { verifyHmacSha256 } from "./utils/hmac.js"; +import type { + DockerRuntime, + ResourceLimits, + StatusResponse, + SubmissionResult, + TaskResponse, +} from "./types.js"; + +const DEFAULT_MEMORY_GB = 1; +const DEFAULT_CPUS = 1; +const NOTIFY_TIMEOUT_MS = 30_000; + +/** Safely extract a text value from a multipart field entry. */ +function fieldValue(field: Multipart | Multipart[] | undefined): string | undefined { + if (!field || Array.isArray(field) || field.type !== "field") return undefined; + return field.value as string; +} + +export function registerRoutes(app: FastifyInstance, executor?: SandboxExecutor): void { + // Read at registration time so tests can set the env var before building the app. + // If set, callbacks without a valid HMAC-SHA256 signature will be warned (future: rejected). + // TODO: Reject unsigned callbacks once all clients are updated to sign requests. + const callbackSecret = process.env["SANDBOX_CALLBACK_SECRET"]; + const runtime: DockerRuntime = process.env["DOCKER_RUNTIME"] === "runsc" ? "runsc" : "runc"; + const exec = executor ?? new SandboxExecutor(app.log, { dockerRuntime: runtime }); + + app.get<{ Reply: StatusResponse }>( + "/status.json", + (): StatusResponse => ({ + busyInstances: getBusyInstances(), + reservedCpuCores: getReservedCpuCores(), + totalInstances: TOTAL_CPU_CORES, + reservedMemory: getReservedMemory(), + totalMemory: TOTAL_MEMORY_GB, + }), + ); + + app.post<{ Reply: TaskResponse }>( + "/tasks.json", + async (request: FastifyRequest, _reply: FastifyReply): Promise => { + const data = await request.file(); + + if (!data) { + throw new BadRequestError("No file provided"); + } + + let taskPayload: z.infer; + try { + taskPayload = TaskPayloadSchema.parse({ + submissionId: fieldValue(data.fields["submission_id"]), + dockerImage: fieldValue(data.fields["docker_image"]), + memoryLimitGb: data.fields["memory_limit_gb"] + ? Number(fieldValue(data.fields["memory_limit_gb"])) + : undefined, + cpuLimit: data.fields["cpu_limit"] + ? Number(fieldValue(data.fields["cpu_limit"])) + : undefined, + notify: fieldValue(data.fields["notify"]), + token: fieldValue(data.fields["token"]), + notifySignature: fieldValue(data.fields["notify_signature"]), + }); + } catch (error) { + if (error instanceof z.ZodError) { + throw new BadRequestError( + `Invalid request: ${error.issues.map((issue) => issue.message).join(", ")}`, + ); + } + throw error; + } + + // Experimental: verify HMAC signature if a secret is configured. + // TODO: Once all clients send notifySignature, reject unsigned callbacks here. + if (callbackSecret) { + if (taskPayload.notifySignature) { + if (!verifyHmacSha256(taskPayload.notify, taskPayload.notifySignature, callbackSecret)) { + throw new BadRequestError("Invalid notify URL signature"); + } + } else { + request.log.warn( + { notify: taskPayload.notify }, + "Received task without notify signature; signature will be required in future", + ); + } + } + + let mimeType: z.infer; try { - let output: RunResult + mimeType = MimeTypeSchema.parse(data.mimetype); + } catch { + throw new BadRequestError( + `Unsupported file type: ${data.mimetype}. Supported types: application/x-tar, application/zstd`, + ); + } + + const resourceLimits: ResourceLimits = { + memoryGB: taskPayload.memoryLimitGb ?? DEFAULT_MEMORY_GB, + cpus: taskPayload.cpuLimit ?? DEFAULT_CPUS, + }; + + if (!tryReserveResources(resourceLimits)) { + throw new SandboxBusyError(); + } + + // Save the multipart stream to a temp file. Release resources and clean up on failure. + let uploadTmpDir = ""; + let uploadPath = ""; + try { + uploadTmpDir = await mkdtemp(join(tmpdir(), "sandbox-upload-")); + uploadPath = join(uploadTmpDir, `${randomUUID()}.upload`); + await pipeline(data.file, createWriteStream(uploadPath)); + } catch (error) { + releaseResources(resourceLimits); + if (uploadTmpDir) await rm(uploadTmpDir, { recursive: true, force: true }).catch(() => {}); + throw error; + } + + if (taskPayload.submissionId) { + request.log.info(`Handling submission ${taskPayload.submissionId}`); + } + + const submissionId = taskPayload.submissionId ?? randomUUID(); + const notifyUrl = taskPayload.notify; + const token = taskPayload.token; + + const capturedUploadTmpDir = uploadTmpDir; + setImmediate(async () => { + let result: SubmissionResult | undefined; + let executionError: unknown; try { - output = await handleSubmission( - ctx.file.path, - ctx.requestId, - dockerImage, - ctx.log.child({ async: true }), - ctx.file.mimetype as SupportedMimeTypes, + result = await exec.executeSubmission( + uploadPath, + submissionId, + taskPayload.dockerImage, + mimeType, resourceLimits, - ) - } catch (reason1) { - ctx.log.error("Handling submission failed.", { reason: reason1 }) - return + ); + } catch (error) { + executionError = error; + request.log.error({ error }, "Submission processing failed"); } finally { - freeInstance(resourceLimits) + // Release before notifying so the counter is accurate when the callback fires. + releaseResources(resourceLimits); + // The executor unlinks the upload file; clean up the containing temp dir. + await rm(capturedUploadTmpDir, { recursive: true, force: true }).catch(() => {}); } - ctx.log.info(`Notifying ${ctx.request.body.notify}...`, { - status: output.status, - }) - await Axios.post(ctx.request.body.notify, { - token: ctx.request.body.token, - test_output: output.test_output, - stdout: output.stdout, - stderr: output.stderr, - valgrind: output.valgrind, - validations: output.validations, - vm_log: output.vm_log, - status: output.status, - exit_code: output.exit_code, - }) - } catch (reason2) { - ctx.log.error("Notifying failed", { error: (reason2 as Error).message }) - } - }) + // Always notify the caller, even on internal failures. + const payload = result + ? { + token, + test_output: result.testOutput, + stdout: result.stdout, + stderr: result.stderr, + valgrind: result.valgrind, + validations: result.validations, + vm_log: result.vmLog, + status: result.status, + exit_code: result.exitCode, + } + : { + token, + status: "failed" as const, + error: + executionError instanceof Error ? executionError.message : String(executionError), + }; - ctx.body = { message: "ok" } - }) + const controller = new AbortController(); + const fetchTimeout = setTimeout(() => controller.abort(), NOTIFY_TIMEOUT_MS); + try { + const response = await fetch(notifyUrl, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload), + signal: controller.signal, + }); + if (!response.ok) { + throw new Error(`HTTP ${response.status}`); + } + request.log.info(`Notified ${notifyUrl} with status ${result?.status ?? "failed"}`); + } catch (error) { + request.log.error({ error }, `Failed to notify ${notifyUrl}`); + } finally { + clearTimeout(fetchTimeout); + } + }); -export default api + return { message: "ok" }; + }, + ); +} diff --git a/src/schemas.test.ts b/src/schemas.test.ts new file mode 100644 index 0000000..669648b --- /dev/null +++ b/src/schemas.test.ts @@ -0,0 +1,562 @@ +import { describe, it, expect } from "vitest"; +import { + ResourceLimitsSchema, + TaskPayloadSchema, + MimeTypeSchema, + StatusResponseSchema, + TaskResponseSchema, + ErrorResponseSchema, +} from "./schemas.js"; + +describe("Schemas", () => { + describe("ResourceLimitsSchema", () => { + it("should validate valid resource limits", () => { + const result = ResourceLimitsSchema.safeParse({ + memoryGB: 2, + cpus: 1.5, + }); + expect(result.success).toBe(true); + }); + + it("should accept minimum memory (0.5GB)", () => { + const result = ResourceLimitsSchema.safeParse({ + memoryGB: 0.5, + cpus: 1, + }); + expect(result.success).toBe(true); + }); + + it("should accept maximum memory (4GB)", () => { + const result = ResourceLimitsSchema.safeParse({ + memoryGB: 4, + cpus: 1, + }); + expect(result.success).toBe(true); + }); + + it("should reject memory below minimum", () => { + const result = ResourceLimitsSchema.safeParse({ + memoryGB: 0.4, + cpus: 1, + }); + expect(result.success).toBe(false); + }); + + it("should reject memory above maximum", () => { + const result = ResourceLimitsSchema.safeParse({ + memoryGB: 5, + cpus: 1, + }); + expect(result.success).toBe(false); + }); + + it("should accept minimum CPU (0.1)", () => { + const result = ResourceLimitsSchema.safeParse({ + memoryGB: 1, + cpus: 0.1, + }); + expect(result.success).toBe(true); + }); + + it("should accept maximum CPU (2)", () => { + const result = ResourceLimitsSchema.safeParse({ + memoryGB: 1, + cpus: 2, + }); + expect(result.success).toBe(true); + }); + + it("should reject CPU below minimum", () => { + const result = ResourceLimitsSchema.safeParse({ + memoryGB: 1, + cpus: 0.05, + }); + expect(result.success).toBe(false); + }); + + it("should reject CPU above maximum", () => { + const result = ResourceLimitsSchema.safeParse({ + memoryGB: 1, + cpus: 3, + }); + expect(result.success).toBe(false); + }); + + it("should reject zero memory", () => { + const result = ResourceLimitsSchema.safeParse({ + memoryGB: 0, + cpus: 1, + }); + expect(result.success).toBe(false); + }); + + it("should reject negative resources", () => { + const result = ResourceLimitsSchema.safeParse({ + memoryGB: -1, + cpus: -1, + }); + expect(result.success).toBe(false); + }); + }); + + describe("TaskPayloadSchema", () => { + const validPayload = { + notify: "http://example.com/notify", + token: "secret-token", + }; + + it("should validate minimum required fields", () => { + const result = TaskPayloadSchema.safeParse(validPayload); + expect(result.success).toBe(true); + }); + + it("should accept optional submission ID", () => { + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + submissionId: "sub-123", + }); + expect(result.success).toBe(true); + }); + + it("should accept empty optional submission ID", () => { + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + submissionId: undefined, + }); + expect(result.success).toBe(true); + }); + + it("should accept whitelisted docker image (GCR prefix)", () => { + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + dockerImage: "eu.gcr.io/moocfi-public/tmc-sandbox-v1", + }); + expect(result.success).toBe(true); + }); + + it("should accept whitelisted alternative docker image", () => { + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + dockerImage: "nygrenh/sandbox-next", + }); + expect(result.success).toBe(true); + }); + + it("should reject non-whitelisted docker image", () => { + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + dockerImage: "untrusted/image:latest", + }); + expect(result.success).toBe(false); + }); + + it("should reject docker image with wrong GCR prefix", () => { + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + dockerImage: "us.gcr.io/moocfi-public/tmc-sandbox-v1", + }); + expect(result.success).toBe(false); + }); + + it("should require valid notify URL", () => { + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + notify: "not-a-url", + }); + expect(result.success).toBe(false); + }); + + it("should accept HTTPS notify URL", () => { + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + notify: "https://secure.example.com/api/notify", + }); + expect(result.success).toBe(true); + }); + + it("should require token", () => { + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + token: "", + }); + expect(result.success).toBe(false); + }); + + it("should reject whitespace-only token", () => { + const result = TaskPayloadSchema.safeParse({ + notify: validPayload.notify, + token: " ", + }); + expect(result.success).toBe(false); + }); + + it("should accept custom memory limit (max 4GB)", () => { + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + memoryLimitGb: 4, + }); + expect(result.success).toBe(true); + }); + + it("should reject memory limit above maximum (4GB)", () => { + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + memoryLimitGb: 999, + }); + expect(result.success).toBe(false); + }); + + it("should accept custom CPU limit (max 2)", () => { + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + cpuLimit: 2, + }); + expect(result.success).toBe(true); + }); + + it("should reject CPU limit above maximum (2)", () => { + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + cpuLimit: 99, + }); + expect(result.success).toBe(false); + }); + + it("should reject loopback notify URL (SSRF)", () => { + const ssrfUrls = [ + "http://127.0.0.1/callback", + "http://localhost/callback", + "http://0.0.0.0/callback", + "http://[::1]/callback", + ]; + for (const url of ssrfUrls) { + const result = TaskPayloadSchema.safeParse({ ...validPayload, notify: url }); + expect(result.success).toBe(false); + } + }); + + it("should reject RFC1918 notify URLs (SSRF)", () => { + const privateUrls = [ + "http://10.0.0.1/callback", + "http://172.16.0.1/callback", + "http://192.168.1.1/callback", + ]; + for (const url of privateUrls) { + const result = TaskPayloadSchema.safeParse({ ...validPayload, notify: url }); + expect(result.success).toBe(false); + } + }); + + it("should reject cloud metadata notify URLs (SSRF)", () => { + const metadataUrls = [ + "http://169.254.169.254/latest/meta-data/", + "http://metadata.google.internal/computeMetadata/v1/", + ]; + for (const url of metadataUrls) { + const result = TaskPayloadSchema.safeParse({ ...validPayload, notify: url }); + expect(result.success).toBe(false); + } + }); + + it("should accept optional notifySignature", () => { + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + notifySignature: "abc123def456", + }); + expect(result.success).toBe(true); + }); + + it("should accept fractional CPU limit", () => { + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + cpuLimit: 0.5, + }); + expect(result.success).toBe(true); + }); + + it("should accept all optional fields together", () => { + const result = TaskPayloadSchema.safeParse({ + submissionId: "sub-456", + dockerImage: "eu.gcr.io/moocfi-public/tmc-sandbox-v2", + memoryLimitGb: 2, + cpuLimit: 1.5, + notify: "https://api.example.com/submissions", + token: "long-random-token-abc123xyz", + }); + expect(result.success).toBe(true); + }); + + it("should reject invalid notify URL formats", () => { + const invalidUrls = ["example.com", "://invalid"]; + invalidUrls.forEach((url) => { + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + notify: url, + }); + expect(result.success).toBe(false); + }); + }); + + it("should reject submissionId with disallowed characters (dots, spaces, slashes)", () => { + const invalid = ["sub.123", "sub 123", "sub/123", "sub@123", "sub#id"]; + for (const id of invalid) { + const result = TaskPayloadSchema.safeParse({ ...validPayload, submissionId: id }); + expect(result.success, `expected "${id}" to be rejected`).toBe(false); + } + }); + + it("should reject empty submissionId", () => { + const result = TaskPayloadSchema.safeParse({ ...validPayload, submissionId: "" }); + expect(result.success).toBe(false); + }); + + it("should accept submissionId at the 128-character maximum", () => { + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + submissionId: "a".repeat(128), + }); + expect(result.success).toBe(true); + }); + + it("should reject submissionId exceeding 128 characters", () => { + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + submissionId: "a".repeat(129), + }); + expect(result.success).toBe(false); + }); + + it("should reject empty string dockerImage (not the same as omitting the field)", () => { + const result = TaskPayloadSchema.safeParse({ ...validPayload, dockerImage: "" }); + expect(result.success).toBe(false); + }); + + it("SANDBOX_DISABLE_SSRF_CHECK allows private notify URLs when set", () => { + const original = process.env["SANDBOX_DISABLE_SSRF_CHECK"]; + try { + process.env["SANDBOX_DISABLE_SSRF_CHECK"] = "true"; + const result = TaskPayloadSchema.safeParse({ + ...validPayload, + notify: "http://127.0.0.1/callback", + }); + expect(result.success).toBe(true); + } finally { + if (original === undefined) { + delete process.env["SANDBOX_DISABLE_SSRF_CHECK"]; + } else { + process.env["SANDBOX_DISABLE_SSRF_CHECK"] = original; + } + } + }); + }); + + describe("MimeTypeSchema", () => { + it("should accept tar mime type", () => { + const result = MimeTypeSchema.safeParse("application/x-tar"); + expect(result.success).toBe(true); + }); + + it("should accept zstd mime type", () => { + const result = MimeTypeSchema.safeParse("application/zstd"); + expect(result.success).toBe(true); + }); + + it("should reject unsupported mime types", () => { + const unsupported = [ + "application/zip", + "application/gzip", + "application/json", + "text/plain", + "application/x-tar-gz", + ]; + unsupported.forEach((mime) => { + const result = MimeTypeSchema.safeParse(mime); + expect(result.success).toBe(false); + }); + }); + + it("should reject empty string", () => { + const result = MimeTypeSchema.safeParse(""); + expect(result.success).toBe(false); + }); + + it("should reject case-sensitive mime types", () => { + const result = MimeTypeSchema.safeParse("Application/X-TAR"); + expect(result.success).toBe(false); + }); + }); + + describe("StatusResponseSchema", () => { + it("should validate complete status response", () => { + const result = StatusResponseSchema.safeParse({ + busyInstances: 2, + reservedCpuCores: 2, + totalInstances: 8, + reservedMemory: 4, + totalMemory: 16, + }); + expect(result.success).toBe(true); + }); + + it("should validate zero values", () => { + const result = StatusResponseSchema.safeParse({ + busyInstances: 0, + reservedCpuCores: 0, + totalInstances: 0, + reservedMemory: 0, + totalMemory: 0, + }); + expect(result.success).toBe(true); + }); + + it("should validate floating point values", () => { + const result = StatusResponseSchema.safeParse({ + busyInstances: 1.5, + reservedCpuCores: 1.5, + totalInstances: 8.5, + reservedMemory: 4.25, + totalMemory: 16.75, + }); + expect(result.success).toBe(true); + }); + + it("should reject missing fields", () => { + const result = StatusResponseSchema.safeParse({ + busyInstances: 2, + reservedCpuCores: 2, + }); + expect(result.success).toBe(false); + }); + + it("should reject non-numeric values", () => { + const result = StatusResponseSchema.safeParse({ + busyInstances: "2", + reservedCpuCores: "2", + totalInstances: 8, + reservedMemory: 4, + totalMemory: 16, + }); + expect(result.success).toBe(false); + }); + }); + + describe("TaskResponseSchema", () => { + it("should validate success response", () => { + const result = TaskResponseSchema.safeParse({ + message: "ok", + }); + expect(result.success).toBe(true); + }); + + it("should accept any non-empty message", () => { + const result = TaskResponseSchema.safeParse({ + message: "Request accepted and queued for processing", + }); + expect(result.success).toBe(true); + }); + + it("should reject missing message", () => { + const result = TaskResponseSchema.safeParse({}); + expect(result.success).toBe(false); + }); + + it("should reject non-string message", () => { + const result = TaskResponseSchema.safeParse({ + message: 123, + }); + expect(result.success).toBe(false); + }); + }); + + describe("ErrorResponseSchema", () => { + it("should validate error response with 400 status", () => { + const result = ErrorResponseSchema.safeParse({ + error: "Invalid input", + statusCode: 400, + }); + expect(result.success).toBe(true); + }); + + it("should validate error response with 500 status", () => { + const result = ErrorResponseSchema.safeParse({ + error: "Internal server error", + statusCode: 500, + }); + expect(result.success).toBe(true); + }); + + it("should validate error response with 503 status", () => { + const result = ErrorResponseSchema.safeParse({ + error: "Service unavailable", + statusCode: 503, + }); + expect(result.success).toBe(true); + }); + + it("should reject non-numeric status code", () => { + const result = ErrorResponseSchema.safeParse({ + error: "Error", + statusCode: "400", + }); + expect(result.success).toBe(false); + }); + + it("should reject missing error message", () => { + const result = ErrorResponseSchema.safeParse({ + statusCode: 400, + }); + expect(result.success).toBe(false); + }); + }); + + describe("corner cases", () => { + it("should handle very long strings", () => { + const longString = "x".repeat(10_000); + const result = TaskPayloadSchema.safeParse({ + notify: "http://example.com/notify", + token: longString, + }); + expect(result.success).toBe(true); + }); + + it("should handle URLs with complex query strings", () => { + const result = TaskPayloadSchema.safeParse({ + notify: "http://example.com/notify?key1=value1&key2=value2&callback=true", + token: "token123", + }); + expect(result.success).toBe(true); + }); + + it("should handle URLs with authentication", () => { + const result = TaskPayloadSchema.safeParse({ + notify: "https://user:pass@example.com/notify", + token: "token123", + }); + expect(result.success).toBe(true); + }); + + it("should handle URLs with ports", () => { + const result = TaskPayloadSchema.safeParse({ + notify: "http://example.com:8080/notify", + token: "token123", + }); + expect(result.success).toBe(true); + }); + + it("should handle very large resource limits", () => { + const result = ResourceLimitsSchema.safeParse({ + memoryGB: 4, + cpus: 2, + }); + expect(result.success).toBe(true); + }); + + it("should handle very small resource limits", () => { + const result = ResourceLimitsSchema.safeParse({ + memoryGB: 0.5, + cpus: 0.1, + }); + expect(result.success).toBe(true); + }); + }); +}); diff --git a/src/schemas.ts b/src/schemas.ts index 8d33c6c..4fd4ba9 100644 --- a/src/schemas.ts +++ b/src/schemas.ts @@ -1,23 +1,64 @@ -export interface ResourceLimits { - memoryGB: number - cpus: number -} +import { z } from "zod"; +import { isPrivateOrMetadataUrl } from "./utils/url-safety.js"; -const MAX_MEMORY_REQUEST_GB = 4 -const MAX_CPUS_REQUEST = 2 +const MAX_MEMORY_REQUEST_GB = 4; +const MAX_CPUS_REQUEST = 2; +const ALLOWED_DOCKER_IMAGE_PREFIX = "eu.gcr.io/moocfi-public/tmc-sandbox-"; +const ALLOWED_ALTERNATIVE_DOCKER_IMAGES = new Set(["nygrenh/sandbox-next"]); -/** Extracts and validatates cpu and memory requests. Handles too big requests by making them smaller. */ -export default function extractResourceLimitsFromRequest( - // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types - requestBody: any, -): ResourceLimits { - let memoryGB = Number(requestBody.memory_limit_gb ?? 1) - let cpus = Number(requestBody.cpu_limit ?? 1) - if (memoryGB > MAX_MEMORY_REQUEST_GB) { - memoryGB = MAX_MEMORY_REQUEST_GB - } - if (cpus > MAX_CPUS_REQUEST) { - cpus = MAX_CPUS_REQUEST - } - return { memoryGB, cpus } -} +export const ResourceLimitsSchema = z.object({ + memoryGB: z.number().min(0.5).max(MAX_MEMORY_REQUEST_GB), + cpus: z.number().min(0.1).max(MAX_CPUS_REQUEST), +}); + +export const TaskPayloadSchema = z.object({ + submissionId: z + .string() + .regex(/^[a-zA-Z0-9_-]+$/) + .max(128, "Submission ID must be at most 128 characters") + .optional(), + dockerImage: z + .string() + .optional() + .refine( + (val) => + val === undefined || + val.startsWith(ALLOWED_DOCKER_IMAGE_PREFIX) || + ALLOWED_ALTERNATIVE_DOCKER_IMAGES.has(val), + "Docker image was not whitelisted", + ), + memoryLimitGb: z.number().min(0.5).max(MAX_MEMORY_REQUEST_GB).optional(), + cpuLimit: z.number().min(0.1).max(MAX_CPUS_REQUEST).optional(), + notify: z + .string() + .url("Notify URL must be valid") + .refine( + // Check is evaluated lazily at parse time so SANDBOX_DISABLE_SSRF_CHECK + // can be set after module load (e.g., in test setup). + (url) => process.env["SANDBOX_DISABLE_SSRF_CHECK"] === "true" || !isPrivateOrMetadataUrl(url), + "Notify URL must not target private or internal addresses", + ), + token: z.string().trim().min(1, "Token must not be empty or whitespace-only"), + // Experimental: HMAC-SHA256 signature (hex) over the notify URL value. + // TODO: Make this required once all clients are updated to sign callbacks. + notifySignature: z.string().optional(), +}); + +export const MimeTypeSchema = z.enum(["application/x-tar", "application/zstd"]); + +export const StatusResponseSchema = z.object({ + busyInstances: z.number(), + reservedCpuCores: z.number(), + totalInstances: z.number(), + reservedMemory: z.number(), + totalMemory: z.number(), +}); + +export const TaskResponseSchema = z.object({ + message: z.string(), +}); + +export const ErrorResponseSchema = z.object({ + error: z.string(), + statusCode: z.number(), +}); diff --git a/src/services/file-extractor.test.ts b/src/services/file-extractor.test.ts new file mode 100644 index 0000000..6401e87 --- /dev/null +++ b/src/services/file-extractor.test.ts @@ -0,0 +1,349 @@ +import { describe, it, expect, beforeAll, afterAll } from "vitest"; +import { mkdtemp, writeFile, rm, readFile, mkdir, symlink, access } from "node:fs/promises"; +import { join } from "node:path"; +import { tmpdir } from "node:os"; +import { createWriteStream } from "node:fs"; +import * as tar from "tar-fs"; +import { execFile as execFileCallback } from "node:child_process"; +import { promisify } from "node:util"; +import { extractFile } from "./file-extractor.js"; +import type { SupportedMimeType } from "../types.js"; + +const execFile = promisify(execFileCallback); + +function buildTarHeader(name: string, size: number): Buffer { + const h = Buffer.alloc(512); + h.write(name.slice(0, 100), 0, "ascii"); + h.write("0100644\0", 100, "ascii"); // mode: rw-r--r-- + h.write("0000000\0", 108, "ascii"); // uid + h.write("0000000\0", 116, "ascii"); // gid + h.write(size.toString(8).padStart(11, "0") + "\0", 124, "ascii"); // size (octal) + h.write( + Math.floor(Date.now() / 1000) + .toString(8) + .padStart(11, "0") + "\0", + 136, + "ascii", + ); // mtime + h.fill(0x20, 148, 156); // checksum placeholder (spaces) + h[156] = 0x30; // typeflag: regular file + h.write("ustar", 257, "ascii"); // ustar magic (byte 262 = 0x00 from alloc) + h[263] = 0x30; // ustar version "0" + h[264] = 0x30; // ustar version "0" + let sum = 0; + for (let i = 0; i < 512; i++) sum += h[i]!; + h.write(sum.toString(8).padStart(6, "0") + "\0 ", 148, "ascii"); // checksum + return h; +} + +function writeTar( + outputPath: string, + entries: ReadonlyArray<{ name: string; content: Buffer }>, +): Promise { + return new Promise((_resolve, reject) => { + const out = createWriteStream(outputPath); + out.on("error", reject); + out.on("finish", _resolve); + for (const { name, content } of entries) { + out.write(buildTarHeader(name, content.length)); + if (content.length > 0) { + out.write(content); + const pad = (512 - (content.length % 512)) % 512; + if (pad > 0) out.write(Buffer.alloc(pad)); + } + } + out.end(Buffer.alloc(1024)); // end-of-archive: two null 512-byte blocks + }); +} + +/** Writes a single-entry tar whose content is `size` zero bytes, streamed in 64 KB chunks. */ +function writeTarWithLargeEntry(outputPath: string, name: string, size: number): Promise { + return new Promise((_resolve, reject) => { + const out = createWriteStream(outputPath); + out.on("error", reject); + out.on("finish", _resolve); + out.write(buildTarHeader(name, size)); + const chunk = Buffer.alloc(65_536); + let remaining = size; + const pump = () => { + while (remaining > 0) { + const n = Math.min(chunk.length, remaining); + remaining -= n; + const keep = out.write(n < chunk.length ? chunk.subarray(0, n) : chunk); + if (!keep && remaining > 0) { + out.once("drain", pump); + return; + } + } + const pad = (512 - (size % 512)) % 512; + if (pad > 0) out.write(Buffer.alloc(pad)); + out.end(Buffer.alloc(1024)); + }; + pump(); + }); +} + +let workDir: string; +let simpleTarPath: string; +let nestedTarPath: string; +let zstdTarPath: string; +let traversalTarPath: string; +let symlinkTarPath: string; + +async function createTar(files: Record, outputPath: string): Promise { + const srcDir = await mkdtemp(join(tmpdir(), "tar-src-")); + try { + await Promise.all( + Object.entries(files).map(async ([relPath, content]) => { + const dest = join(srcDir, relPath); + await mkdir(join(dest, ".."), { recursive: true }); + await writeFile(dest, content); + }), + ); + await new Promise((resolve, reject) => { + const out = createWriteStream(outputPath); + const pack = tar.pack(srcDir); + pack.pipe(out); + out.on("finish", resolve); + out.on("error", reject); + pack.on("error", reject); + }); + } finally { + await rm(srcDir, { recursive: true, force: true }); + } +} + +beforeAll(async () => { + workDir = await mkdtemp(join(tmpdir(), "file-extractor-test-")); + + simpleTarPath = join(workDir, "simple.tar"); + await createTar({ "hello.txt": "hello world", "data.json": '{"ok":true}' }, simpleTarPath); + + nestedTarPath = join(workDir, "nested.tar"); + await createTar( + { + "src/main.py": "print('hello')", + "src/utils.py": "pass", + "test/__init__.py": "", + "test/test_main.py": "assert True", + }, + nestedTarPath, + ); + + zstdTarPath = join(workDir, "submission.tar.zst"); + const tmpSrcDir = await mkdtemp(join(tmpdir(), "zstd-src-")); + const tmpTarPath = join(workDir, "submission-tmp.tar"); + try { + await writeFile(join(tmpSrcDir, "solution.py"), "print('hello')"); + await new Promise((resolve, reject) => { + const out = createWriteStream(tmpTarPath); + const pack = tar.pack(tmpSrcDir); + pack.pipe(out); + out.on("finish", resolve); + out.on("error", reject); + pack.on("error", reject); + }); + await execFile("zstd", [tmpTarPath, "-o", zstdTarPath, "--force"]); + } finally { + await rm(tmpSrcDir, { recursive: true, force: true }); + await rm(tmpTarPath, { force: true }); + } + + // Archive with a path-traversal entry (../evil.txt) alongside a safe entry. + traversalTarPath = join(workDir, "traversal.tar"); + await writeTar(traversalTarPath, [ + { name: "safe.txt", content: Buffer.from("safe") }, + { name: "../evil.txt", content: Buffer.from("evil") }, + ]); + + // Archive with a symlink entry pointing outside the output directory. + symlinkTarPath = join(workDir, "symlink.tar"); + const symlinkSrcDir = await mkdtemp(join(tmpdir(), "sym-src-")); + try { + await writeFile(join(symlinkSrcDir, "normal.txt"), "normal content"); + await symlink("/etc/passwd", join(symlinkSrcDir, "evil_link.txt")); + await execFile("tar", ["-cf", symlinkTarPath, "-C", symlinkSrcDir, "."]); + } finally { + await rm(symlinkSrcDir, { recursive: true, force: true }); + } +}); + +afterAll(async () => { + await rm(workDir, { recursive: true, force: true }); +}); + +describe("extractFile", () => { + describe("tar extraction", () => { + it("extracts files to output directory", async () => { + const outDir = join(workDir, "out-simple"); + await extractFile(simpleTarPath, outDir, "application/x-tar"); + const hello = await readFile(join(outDir, "hello.txt"), "utf8"); + const data = await readFile(join(outDir, "data.json"), "utf8"); + expect(hello).toBe("hello world"); + expect(data).toBe('{"ok":true}'); + }); + + it("handles nested directory structure", async () => { + const outDir = join(workDir, "out-nested"); + await extractFile(nestedTarPath, outDir, "application/x-tar"); + const main = await readFile(join(outDir, "src/main.py"), "utf8"); + const test = await readFile(join(outDir, "test/__init__.py"), "utf8"); + expect(main).toBe("print('hello')"); + expect(test).toBe(""); + }); + + it("creates output directory if it does not exist", async () => { + const outDir = join(workDir, "nonexistent", "nested", "out"); + await expect(extractFile(simpleTarPath, outDir, "application/x-tar")).resolves.not.toThrow(); + }); + }); + + describe("zstd extraction", () => { + it("extracts .tar.zst to output directory", async () => { + const outDir = join(workDir, "out-zstd"); + await extractFile(zstdTarPath, outDir, "application/zstd"); + const sol = await readFile(join(outDir, "solution.py"), "utf8"); + expect(sol).toBe("print('hello')"); + }); + + it("creates output directory if it does not exist", async () => { + const outDir = join(workDir, "out-zstd-new", "deep"); + await expect(extractFile(zstdTarPath, outDir, "application/zstd")).resolves.not.toThrow(); + }); + }); + + describe("error handling", () => { + it("throws on non-existent input file (tar)", async () => { + const outDir = join(workDir, "out-missing"); + const missingPath = join(workDir, "does-not-exist.tar"); + await expect(extractFile(missingPath, outDir, "application/x-tar")).rejects.toThrow("ENOENT"); + }); + + it("throws on non-existent input file (zstd)", async () => { + const outDir = join(workDir, "out-missing-zstd"); + const missingPath = join(workDir, "does-not-exist.tar.zst"); + await expect(extractFile(missingPath, outDir, "application/zstd")).rejects.toThrow( + "does-not-exist", + ); + }); + + it("throws on unsupported mime type", async () => { + const outDir = join(workDir, "out-bad-mime"); + await expect( + extractFile(simpleTarPath, outDir, "application/zip" as unknown as SupportedMimeType), + ).rejects.toThrow("Unsupported mime type"); + }); + + it("throws on corrupt tar data", async () => { + const corruptPath = join(workDir, "corrupt.tar"); + await writeFile(corruptPath, "this is not a valid tar archive at all!!!!"); + const outDir = join(workDir, "out-corrupt"); + await expect(extractFile(corruptPath, outDir, "application/x-tar")).rejects.toThrow( + "Unexpected end of data", + ); + }); + + it("throws on corrupt zstd data (not a valid zstd frame)", async () => { + const corruptZstd = join(workDir, "corrupt.zst"); + await writeFile(corruptZstd, "this is definitely not a zstd archive"); + const outDir = join(workDir, "out-corrupt-zstd"); + await expect(extractFile(corruptZstd, outDir, "application/zstd")).rejects.toThrow( + /zstd|corrupt|failed|invalid/i, + ); + }); + }); + + describe("extraction limits", () => { + it("rejects archives that exceed the entry count limit", async () => { + const manyEntriesTar = join(workDir, "many-entries.tar"); + const entries = Array.from({ length: 10_001 }, (_, i) => ({ + name: `file${i}.txt`, + content: Buffer.from("x"), + })); + await writeTar(manyEntriesTar, entries); + const outDir = join(workDir, "out-many-entries"); + await expect(extractFile(manyEntriesTar, outDir, "application/x-tar")).rejects.toThrow( + "maximum entry count", + ); + }); + + it("rejects archives whose total size exceeds the byte limit", async () => { + const bigSizeTar = join(workDir, "big-size.tar"); + await writeTarWithLargeEntry(bigSizeTar, "big.bin", 537_919_488); + const outDir = join(workDir, "out-big-size"); + await expect(extractFile(bigSizeTar, outDir, "application/x-tar")).rejects.toThrow( + "maximum extraction size", + ); + }); + }); + + describe("zstd path safety", () => { + it("blocks path-traversal entries inside a zstd-wrapped tar", async () => { + const innerTar = join(workDir, "traversal-inner.tar"); + await writeTar(innerTar, [ + { name: "safe.txt", content: Buffer.from("safe") }, + { name: "../zstd-evil.txt", content: Buffer.from("evil") }, + ]); + const traversalZstd = join(workDir, "traversal.zst"); + await execFile("zstd", [innerTar, "-o", traversalZstd, "--force"]); + + const outDir = join(workDir, "out-zstd-traversal"); + await extractFile(traversalZstd, outDir, "application/zstd"); + + // Safe entry should land in outDir. + const safeContent = await readFile(join(outDir, "safe.txt"), "utf8"); + expect(safeContent).toBe("safe"); + + // Traversal entry must not escape. + const escapedPath = join(workDir, "zstd-evil.txt"); + await expect(access(escapedPath)).rejects.toThrow("ENOENT"); + }); + }); + + describe("path safety", () => { + it("extracts safe entries but skips path-traversal entries", async () => { + const outDir = join(workDir, "out-traversal"); + await extractFile(traversalTarPath, outDir, "application/x-tar"); + + // The safe entry should be extracted. + const safeContent = await readFile(join(outDir, "safe.txt"), "utf8"); + expect(safeContent).toBe("safe"); + + // The traversal entry must NOT land outside the output directory. + const escapedPath = join(workDir, "evil.txt"); + await expect(access(escapedPath)).rejects.toThrow("ENOENT"); + }); + + it("does not create a path-traversal file at any location", async () => { + const outDir = join(workDir, "out-traversal-2"); + await extractFile(traversalTarPath, outDir, "application/x-tar"); + + // Traversal entry should be silently skipped, not placed inside outDir either. + const insideOutDir = join(outDir, "..", "evil.txt"); + await expect(access(insideOutDir)).rejects.toThrow("ENOENT"); + }); + + it("skips symlink entries and does not create them in the output", async () => { + const outDir = join(workDir, "out-symlink"); + await extractFile(symlinkTarPath, outDir, "application/x-tar"); + + // Normal file should be extracted. + const normalContent = await readFile(join(outDir, "normal.txt"), "utf8"); + expect(normalContent).toBe("normal content"); + + // The symlink must not be created in the output directory. + await expect(access(join(outDir, "evil_link.txt"))).rejects.toThrow("ENOENT"); + }); + + it("rejects absolute path entries in tar archives", async () => { + const absolutePathTar = join(workDir, "absolute.tar"); + await writeTar(absolutePathTar, [{ name: "/etc/injected.txt", content: Buffer.from("bad") }]); + + const outDir = join(workDir, "out-absolute"); + await extractFile(absolutePathTar, outDir, "application/x-tar"); + + // Nothing should have been written to /etc/injected.txt. + await expect(access("/etc/injected.txt")).rejects.toThrow("ENOENT"); + }); + }); +}); diff --git a/src/services/file-extractor.ts b/src/services/file-extractor.ts index edfd9aa..e54a331 100644 --- a/src/services/file-extractor.ts +++ b/src/services/file-extractor.ts @@ -1,45 +1,107 @@ -import * as tar from "tar-fs" -import { createReadStream, mkdir as origMkdir } from "fs" -import { promisify } from "util" -import { exec as origExec } from "child_process" -const exec = promisify(origExec) -const mkdir = promisify(origMkdir) - -export type SupportedMimeTypes = "application/x-tar" | "application/zstd" - -const extractTar = (inputPath: string, outputPath: string): Promise => { - return new Promise((resolve, reject) => { - const extractStream = createReadStream(inputPath).pipe( - tar.extract(outputPath), - ) - extractStream?.on("finish", () => { - resolve() - }) - extractStream.on("error", (reason) => { - reject(reason) - }) - }) +import { createReadStream } from "node:fs"; +import { unlink } from "node:fs/promises"; +import { execFile as execFileCallback } from "node:child_process"; +import { resolve, sep } from "node:path"; +import * as tar from "tar-fs"; +import type { SupportedMimeType } from "../types.js"; + +const MAX_ARCHIVE_ENTRIES = 10_000; +const MAX_ARCHIVE_BYTES = 512 * 1024 * 1024; // 512 MB + +// Synthetic root used only for path-safety resolution — never touches the filesystem. +const SAFE_PATH_ROOT = "/sandbox-root"; + +function execFile(file: string, args: string[]): Promise { + return new Promise((_resolve, reject) => { + execFileCallback(file, args, (error, _stdout, stderr) => { + if (error) { + const stderrStr = stderr; + const wrapped = new Error( + `${file} failed for ${args.join(" ")}: ${stderrStr || error.message}`, + ); + reject(wrapped); + } else { + _resolve(); + } + }); + }); } -const extractZstd = async ( - inputPath: string, - outputPath: string, -): Promise => { - // Tar expects the output directory to exist - await mkdir(outputPath, { recursive: true }) - await exec(`tar -I zstd -xvf '${inputPath}' --directory '${outputPath}'`) +function assertNever(x: never): never { + throw new Error(`Unsupported mime type: ${String(x)}`); +} + +function isSafePath(entryPath: string): boolean { + const resolved = resolve(SAFE_PATH_ROOT, entryPath); + return resolved === SAFE_PATH_ROOT || resolved.startsWith(SAFE_PATH_ROOT + sep); } -const extract = async ( +const extractTar = (inputPath: string, outputPath: string): Promise => + new Promise((_resolve, reject) => { + let entryCount = 0; + let totalBytes = 0; + let overLimit = false; + + const options: tar.ExtractOptions = { + ignore: (_name: string, header: tar.Headers | undefined) => { + if (!header) return true; + if (header.type === "symlink" || header.type === "link") return true; + if (!isSafePath(header.name)) return true; + if (overLimit) return true; + + entryCount++; + totalBytes += header.size ?? 0; + + if (entryCount > MAX_ARCHIVE_ENTRIES || totalBytes > MAX_ARCHIVE_BYTES) { + overLimit = true; + return true; + } + return false; + }, + }; + + const limitError = () => + new Error( + entryCount > MAX_ARCHIVE_ENTRIES + ? `Archive exceeds maximum entry count of ${MAX_ARCHIVE_ENTRIES}` + : `Archive exceeds maximum extraction size of ${MAX_ARCHIVE_BYTES} bytes`, + ); + + const readStream = createReadStream(inputPath); + const extractStream = readStream.pipe(tar.extract(outputPath, options)); + // If overLimit is set, a stream error means the archive was truncated after the over-sized + // header — report the limit violation rather than the underlying stream error. + readStream.on("error", (err) => reject(overLimit ? limitError() : err)); + extractStream.on("finish", () => { + if (overLimit) { + reject(limitError()); + } else { + _resolve(); + } + }); + extractStream.on("error", (err) => reject(overLimit ? limitError() : err)); + }); + +const extractZstd = async (inputPath: string, outputPath: string): Promise => { + const tmpTar = `${inputPath}.decompressed.tar`; + try { + await execFile("zstd", ["-d", inputPath, "-o", tmpTar, "--force"]); + await extractTar(tmpTar, outputPath); + } finally { + await unlink(tmpTar).catch(() => {}); + } +}; + +export async function extractFile( inputPath: string, outputPath: string, - mimetype: SupportedMimeTypes, -): Promise => { + mimetype: SupportedMimeType, +): Promise { if (mimetype === "application/zstd") { - await extractZstd(inputPath, outputPath) + await extractZstd(inputPath, outputPath); + } else if (mimetype === "application/x-tar") { + await extractTar(inputPath, outputPath); } else { - await extractTar(inputPath, outputPath) + assertNever(mimetype); } } - -export default extract diff --git a/src/services/resource-manager.test.ts b/src/services/resource-manager.test.ts new file mode 100644 index 0000000..6434b9b --- /dev/null +++ b/src/services/resource-manager.test.ts @@ -0,0 +1,356 @@ +import { describe, it, expect, beforeEach, afterEach } from "vitest"; +import * as resourceManager from "./resource-manager.js"; + +describe("ResourceManager", () => { + beforeEach(() => { + resourceManager.resetState(); + }); + + afterEach(() => { + resourceManager.resetState(); + }); + + describe("initial state", () => { + it("should start with zero reserved resources", () => { + expect(resourceManager.getBusyInstances()).toBe(0); + expect(resourceManager.getReservedCpuCores()).toBe(0); + expect(resourceManager.getReservedMemory()).toBe(0); + }); + + it("should have positive total system resources", () => { + expect(resourceManager.TOTAL_CPU_CORES).toBeGreaterThan(0); + expect(resourceManager.TOTAL_MEMORY_GB).toBeGreaterThan(0); + }); + }); + + describe("resource reservation", () => { + it("should reserve single resource allocation", () => { + const limits = { cpus: 1, memoryGB: 1 }; + expect(resourceManager.tryReserveResources(limits)).toBe(true); + + expect(resourceManager.getBusyInstances()).toBe(1); + expect(resourceManager.getReservedCpuCores()).toBe(1); + expect(resourceManager.getReservedMemory()).toBe(1); + }); + + it("should accumulate multiple reservations", () => { + expect(resourceManager.tryReserveResources({ cpus: 1, memoryGB: 1 })).toBe(true); + expect(resourceManager.tryReserveResources({ cpus: 0.5, memoryGB: 0.5 })).toBe(true); + + expect(resourceManager.getBusyInstances()).toBe(2); + expect(resourceManager.getReservedCpuCores()).toBe(1.5); + expect(resourceManager.getReservedMemory()).toBe(1.5); + }); + + it("should release resources correctly", () => { + const limits = { cpus: 1, memoryGB: 1 }; + expect(resourceManager.tryReserveResources(limits)).toBe(true); + resourceManager.releaseResources(limits); + + expect(resourceManager.getBusyInstances()).toBe(0); + expect(resourceManager.getReservedCpuCores()).toBe(0); + expect(resourceManager.getReservedMemory()).toBe(0); + }); + + it("should handle partial release", () => { + expect(resourceManager.tryReserveResources({ cpus: 1, memoryGB: 1 })).toBe(true); + expect(resourceManager.tryReserveResources({ cpus: 0.5, memoryGB: 0.5 })).toBe(true); + resourceManager.releaseResources({ cpus: 0.5, memoryGB: 0.5 }); + + expect(resourceManager.getBusyInstances()).toBe(1); + expect(resourceManager.getReservedCpuCores()).toBe(1); + expect(resourceManager.getReservedMemory()).toBe(1); + }); + + it("should handle fractional CPU allocations", () => { + expect(resourceManager.tryReserveResources({ cpus: 0.25, memoryGB: 0.5 })).toBe(true); + expect(resourceManager.tryReserveResources({ cpus: 0.75, memoryGB: 0.25 })).toBe(true); + + expect(resourceManager.getBusyInstances()).toBe(2); + expect(resourceManager.getReservedCpuCores()).toBe(1); + expect(resourceManager.getReservedMemory()).toBe(0.75); + }); + + it("should allow multiple small reservations", () => { + for (let i = 0; i < 10; i++) { + expect(resourceManager.tryReserveResources({ cpus: 0.1, memoryGB: 0.1 })).toBe(true); + } + expect(resourceManager.getBusyInstances()).toBe(10); + expect(resourceManager.getReservedCpuCores()).toBeCloseTo(1, 10); + expect(resourceManager.getReservedMemory()).toBeCloseTo(1, 10); + }); + }); + + describe("availability checking", () => { + it("should allow small allocations", () => { + const limits = { cpus: 0.1, memoryGB: 0.1 }; + expect(resourceManager.tryReserveResources(limits)).toBe(true); + }); + + it("should prevent exceeding CPU limit", () => { + const reserve = { + cpus: resourceManager.TOTAL_CPU_CORES - 0.1, + memoryGB: 0, + }; + expect(resourceManager.tryReserveResources(reserve)).toBe(true); + + const request = { cpus: 1, memoryGB: 0 }; + expect(resourceManager.tryReserveResources(request)).toBe(false); + }); + + it("should prevent exceeding memory limit", () => { + const reserve = { + cpus: 0, + memoryGB: resourceManager.TOTAL_MEMORY_GB - 0.1, + }; + expect(resourceManager.tryReserveResources(reserve)).toBe(true); + + const request = { cpus: 0, memoryGB: 1 }; + expect(resourceManager.tryReserveResources(request)).toBe(false); + }); + + it("should allow exact match of available resources", () => { + const reserve = { + cpus: resourceManager.TOTAL_CPU_CORES - 1, + memoryGB: resourceManager.TOTAL_MEMORY_GB - 1, + }; + expect(resourceManager.tryReserveResources(reserve)).toBe(true); + + const request = { cpus: 1, memoryGB: 1 }; + expect(resourceManager.tryReserveResources(request)).toBe(true); + }); + + it("should reject when both CPU and memory exceed limits", () => { + expect( + resourceManager.tryReserveResources({ + cpus: resourceManager.TOTAL_CPU_CORES - 0.1, + memoryGB: resourceManager.TOTAL_MEMORY_GB - 0.1, + }), + ).toBe(true); + + expect(resourceManager.tryReserveResources({ cpus: 1, memoryGB: 1 })).toBe(false); + }); + + it("should reject when CPU limit exceeded but memory ok", () => { + expect( + resourceManager.tryReserveResources({ + cpus: resourceManager.TOTAL_CPU_CORES - 0.1, + memoryGB: 0, + }), + ).toBe(true); + + expect(resourceManager.tryReserveResources({ cpus: 1, memoryGB: 0.5 })).toBe(false); + }); + + it("should reject when memory limit exceeded but CPU ok", () => { + expect( + resourceManager.tryReserveResources({ + cpus: 0, + memoryGB: resourceManager.TOTAL_MEMORY_GB - 0.1, + }), + ).toBe(true); + + expect(resourceManager.tryReserveResources({ cpus: 0.5, memoryGB: 1 })).toBe(false); + }); + }); + + describe("utilization reporting", () => { + it("should report zero utilization initially", () => { + const util = resourceManager.getResourceUtilization(); + expect(util.cpuUtilization).toBe(0); + expect(util.memoryUtilization).toBe(0); + }); + + it("should report correct CPU utilization", () => { + expect( + resourceManager.tryReserveResources({ + cpus: resourceManager.TOTAL_CPU_CORES / 2, + memoryGB: 0, + }), + ).toBe(true); + + const util = resourceManager.getResourceUtilization(); + expect(util.cpuUtilization).toBe(0.5); + expect(util.memoryUtilization).toBe(0); + }); + + it("should report correct memory utilization", () => { + expect( + resourceManager.tryReserveResources({ + cpus: 0, + memoryGB: resourceManager.TOTAL_MEMORY_GB / 4, + }), + ).toBe(true); + + const util = resourceManager.getResourceUtilization(); + expect(util.cpuUtilization).toBe(0); + expect(util.memoryUtilization).toBe(0.25); + }); + + it("should report combined utilization", () => { + expect( + resourceManager.tryReserveResources({ + cpus: resourceManager.TOTAL_CPU_CORES / 2, + memoryGB: resourceManager.TOTAL_MEMORY_GB / 4, + }), + ).toBe(true); + + const util = resourceManager.getResourceUtilization(); + expect(util.cpuUtilization).toBe(0.5); + expect(util.memoryUtilization).toBe(0.25); + }); + + it("should report full utilization", () => { + expect( + resourceManager.tryReserveResources({ + cpus: resourceManager.TOTAL_CPU_CORES, + memoryGB: resourceManager.TOTAL_MEMORY_GB, + }), + ).toBe(true); + + const util = resourceManager.getResourceUtilization(); + expect(util.cpuUtilization).toBe(1); + expect(util.memoryUtilization).toBe(1); + }); + + it("should handle very small allocations in utilization", () => { + expect(resourceManager.tryReserveResources({ cpus: 0.01, memoryGB: 0.01 })).toBe(true); + + const util = resourceManager.getResourceUtilization(); + expect(util.cpuUtilization).toBeGreaterThan(0); + expect(util.memoryUtilization).toBeGreaterThan(0); + expect(util.cpuUtilization).toBeLessThan(0.1); + expect(util.memoryUtilization).toBeLessThan(0.1); + }); + }); + + describe("corner cases", () => { + it("clamps to zero on over-release instead of going negative", () => { + expect(resourceManager.tryReserveResources({ cpus: 1, memoryGB: 1 })).toBe(true); + resourceManager.releaseResources({ cpus: 2, memoryGB: 2 }); + + expect(resourceManager.getBusyInstances()).toBe(0); + expect(resourceManager.getReservedCpuCores()).toBe(0); + expect(resourceManager.getReservedMemory()).toBe(0); + }); + + it("clamps to zero on release with no prior reservation", () => { + resourceManager.releaseResources({ cpus: 1, memoryGB: 1 }); + + expect(resourceManager.getBusyInstances()).toBe(0); + expect(resourceManager.getReservedCpuCores()).toBe(0); + expect(resourceManager.getReservedMemory()).toBe(0); + }); + + it("does not allow negative state to cause spurious availability", () => { + // Over-release must clamp to 0, not go negative (which would fake free capacity). + expect(resourceManager.tryReserveResources({ cpus: 1, memoryGB: 1 })).toBe(true); + resourceManager.releaseResources({ cpus: 2, memoryGB: 2 }); + + // Resources should still show as available (clamped to 0, not -1). + expect(resourceManager.tryReserveResources({ cpus: 1, memoryGB: 1 })).toBe(true); + }); + + it("should handle many small consecutive allocations", () => { + for (let i = 0; i < 100; i++) { + expect(resourceManager.tryReserveResources({ cpus: 0.01, memoryGB: 0.01 })).toBe(true); + } + + expect(resourceManager.getBusyInstances()).toBe(100); + expect(resourceManager.getReservedCpuCores()).toBeCloseTo(1, 10); + expect(resourceManager.getReservedMemory()).toBeCloseTo(1, 10); + }); + + it("should handle release and re-reserve cycle", () => { + const limits = { cpus: 1, memoryGB: 1 }; + + for (let i = 0; i < 5; i++) { + expect(resourceManager.tryReserveResources(limits)).toBe(true); + expect(resourceManager.getBusyInstances()).toBe(1); + expect(resourceManager.getReservedCpuCores()).toBe(1); + resourceManager.releaseResources(limits); + expect(resourceManager.getBusyInstances()).toBe(0); + expect(resourceManager.getReservedCpuCores()).toBe(0); + } + }); + + it("should maintain accuracy with floating point operations", () => { + expect(resourceManager.tryReserveResources({ cpus: 0.1, memoryGB: 0.1 })).toBe(true); + expect(resourceManager.tryReserveResources({ cpus: 0.2, memoryGB: 0.2 })).toBe(true); + expect(resourceManager.tryReserveResources({ cpus: 0.3, memoryGB: 0.3 })).toBe(true); + resourceManager.releaseResources({ cpus: 0.1, memoryGB: 0.1 }); + + expect(resourceManager.getBusyInstances()).toBe(2); + expect(resourceManager.getReservedCpuCores()).toBeLessThanOrEqual(0.51); + expect(resourceManager.getReservedCpuCores()).toBeGreaterThanOrEqual(0.39); + expect(resourceManager.getReservedMemory()).toBeLessThanOrEqual(0.51); + expect(resourceManager.getReservedMemory()).toBeGreaterThanOrEqual(0.39); + }); + + it("should handle zero-value resources", () => { + expect(resourceManager.tryReserveResources({ cpus: 0, memoryGB: 0 })).toBe(true); + + expect(resourceManager.getBusyInstances()).toBe(1); + expect(resourceManager.getReservedCpuCores()).toBe(0); + expect(resourceManager.getReservedMemory()).toBe(0); + // Capacity should still be available since zero was reserved. + expect(resourceManager.tryReserveResources({ cpus: 1, memoryGB: 1 })).toBe(true); + }); + }); + + describe("tryReserveResources", () => { + it("reserves and returns true when resources are available", () => { + const limits = { cpus: 1, memoryGB: 1 }; + const result = resourceManager.tryReserveResources(limits); + + expect(result).toBe(true); + expect(resourceManager.getBusyInstances()).toBe(1); + expect(resourceManager.getReservedCpuCores()).toBe(1); + expect(resourceManager.getReservedMemory()).toBe(1); + }); + + it("returns false and does not reserve when CPU is exhausted", () => { + expect( + resourceManager.tryReserveResources({ cpus: resourceManager.TOTAL_CPU_CORES, memoryGB: 0 }), + ).toBe(true); + + const result = resourceManager.tryReserveResources({ cpus: 0.1, memoryGB: 0 }); + + expect(result).toBe(false); + expect(resourceManager.getBusyInstances()).toBe(1); + }); + + it("returns false and does not reserve when memory is exhausted", () => { + expect( + resourceManager.tryReserveResources({ cpus: 0, memoryGB: resourceManager.TOTAL_MEMORY_GB }), + ).toBe(true); + + const result = resourceManager.tryReserveResources({ cpus: 0, memoryGB: 0.1 }); + + expect(result).toBe(false); + expect(resourceManager.getBusyInstances()).toBe(1); + }); + + it("does not double-count on rejection — state unchanged", () => { + expect( + resourceManager.tryReserveResources({ cpus: resourceManager.TOTAL_CPU_CORES, memoryGB: 0 }), + ).toBe(true); + const before = resourceManager.getReservedCpuCores(); + + resourceManager.tryReserveResources({ cpus: 1, memoryGB: 0 }); + + expect(resourceManager.getReservedCpuCores()).toBe(before); + }); + }); + + describe("state reset", () => { + it("should clear all reserved resources on reset", () => { + expect(resourceManager.tryReserveResources({ cpus: 1, memoryGB: 1 })).toBe(true); + resourceManager.resetState(); + + expect(resourceManager.getBusyInstances()).toBe(0); + expect(resourceManager.getReservedCpuCores()).toBe(0); + expect(resourceManager.getReservedMemory()).toBe(0); + }); + }); +}); diff --git a/src/services/resource-manager.ts b/src/services/resource-manager.ts index 1a348fd..2e4814e 100644 --- a/src/services/resource-manager.ts +++ b/src/services/resource-manager.ts @@ -1,51 +1,61 @@ -import { CustomContext } from "../types" -import { cpus, totalmem } from "os" -import { SandboxBusyError } from "../util/error" -import extractResourceLimitsFromRequest, { - ResourceLimits, -} from "../util/extractResourceLimitsFromRequest" +import { cpus, totalmem } from "node:os"; +import type { ResourceLimits } from "../types.js"; -export const CPU_CORES_IN_SYSTEM = cpus().length -export const TOTAL_SYSTEM_MEMORY_GB = totalmem() / 1024 ** 3 +export const TOTAL_CPU_CORES = cpus().length; +export const TOTAL_MEMORY_GB = totalmem() / 1024 ** 3; -let reservedCPUCores = 0 -let reservedMemory = 0 +let busyInstances = 0; +let reservedCpuCores = 0; +let reservedMemoryGb = 0; + +export function resetState(): void { + busyInstances = 0; + reservedCpuCores = 0; + reservedMemoryGb = 0; +} export function getBusyInstances(): number { - return reservedCPUCores + return busyInstances; +} + +export function getReservedCpuCores(): number { + return reservedCpuCores; } export function getReservedMemory(): number { - return reservedMemory + return reservedMemoryGb; } -export function freeInstance(limits: ResourceLimits): void { - reservedCPUCores -= limits.cpus - reservedMemory -= limits.memoryGB +export function releaseResources(limits: ResourceLimits): void { + busyInstances = Math.max(0, busyInstances - 1); + reservedCpuCores = Math.max(0, reservedCpuCores - limits.cpus); + reservedMemoryGb = Math.max(0, reservedMemoryGb - limits.memoryGB); } -function reserveInstance(limits: ResourceLimits): void { - reservedCPUCores += limits.cpus - reservedMemory += limits.memoryGB +function hasAvailableResources(limits: ResourceLimits): boolean { + return ( + reservedCpuCores + limits.cpus <= TOTAL_CPU_CORES && + reservedMemoryGb + limits.memoryGB <= TOTAL_MEMORY_GB + ); } -// Enforces the server is not processing too many submissions at once. -const gateKeeper = async ( - ctx: CustomContext, - next: () => Promise, -): Promise => { - const limits = extractResourceLimitsFromRequest(ctx.request.body) - console.info( - `Sandbox sumbission requesting ${limits.memoryGB}GB of memory and ${limits.cpus} CPUs`, - ) - if (reservedCPUCores + limits.cpus > CPU_CORES_IN_SYSTEM) { - throw new SandboxBusyError() - } - if (reservedMemory + limits.memoryGB > TOTAL_SYSTEM_MEMORY_GB) { - throw new SandboxBusyError() - } - reserveInstance(limits) - await next() +function reserveResources(limits: ResourceLimits): void { + busyInstances++; + reservedCpuCores += limits.cpus; + reservedMemoryGb += limits.memoryGB; } -export default gateKeeper +// Atomically checks availability and reserves in one synchronous operation, +// preventing TOCTOU races between concurrent requests. +export function tryReserveResources(limits: ResourceLimits): boolean { + if (!hasAvailableResources(limits)) return false; + reserveResources(limits); + return true; +} + +export function getResourceUtilization(): { cpuUtilization: number; memoryUtilization: number } { + return { + cpuUtilization: reservedCpuCores / TOTAL_CPU_CORES, + memoryUtilization: reservedMemoryGb / TOTAL_MEMORY_GB, + }; +} diff --git a/src/services/sandbox-executor.test.ts b/src/services/sandbox-executor.test.ts new file mode 100644 index 0000000..e96ea86 --- /dev/null +++ b/src/services/sandbox-executor.test.ts @@ -0,0 +1,873 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import type { Mock } from "vitest"; +import type { FastifyBaseLogger } from "fastify"; +import { SandboxExecutor, buildDockerCreateArgs } from "./sandbox-executor.js"; +import type { ExecFileFn, ExtractFileFn, ReadFileFn } from "./sandbox-executor.js"; +import type { ResourceLimits, SupportedMimeType } from "../types.js"; + +const mockLogger = { + info: vi.fn(), + debug: vi.fn(), + error: vi.fn(), + warn: vi.fn(), +}; + +const defaultLimits: ResourceLimits = { memoryGB: 1, cpus: 1 }; + +/** Builds a mock ExecFileFn that matches on `file + " " + args.join(" ")` substrings. */ +const makeExecFile = ( + overrides: Record = {}, +): Mock => + vi.fn((file: string, args: string[]): Promise<{ stdout: string; stderr: string }> => { + const cmd = [file, ...args].join(" "); + for (const [pattern, result] of Object.entries(overrides)) { + if (cmd.includes(pattern)) { + return result instanceof Error ? Promise.reject(result) : Promise.resolve(result); + } + } + return Promise.resolve({ stdout: "", stderr: "" }); + }); + +describe("SandboxExecutor", () => { + describe("docker command building", () => { + it("should build args starting with 'create'", () => { + const args = buildDockerCreateArgs( + "test-container", + "/path/to/work", + "nygrenh/sandbox-next", + { memoryGB: 2, cpus: 1.5 }, + "runc", + ); + + expect(args[0]).toBe("create"); + expect(args).toContain("--name"); + expect(args[args.indexOf("--name") + 1]).toBe("test-container"); + expect(args).toContain("--memory"); + expect(args[args.indexOf("--memory") + 1]).toBe("2G"); + expect(args).toContain("--cpus"); + expect(args[args.indexOf("--cpus") + 1]).toBe("1.5"); + expect(args).toContain("--network"); + expect(args[args.indexOf("--network") + 1]).toBe("none"); + expect(args).toContain("/app/init"); + expect(args[args.length - 1]).toBe("/app/init"); + }); + + it("should include all security capability drops", () => { + const args = buildDockerCreateArgs( + "test", + "/path", + "image", + { memoryGB: 1, cpus: 1 }, + "runc", + ); + + const capabilities = [ + "SETPCAP", + "SETFCAP", + "AUDIT_WRITE", + "SETGID", + "SETUID", + "NET_BIND_SERVICE", + "SYS_CHROOT", + "NET_RAW", + ]; + for (const cap of capabilities) { + expect(args).toContain(cap); + const idx = args.lastIndexOf(cap); + expect(args[idx - 1]).toBe("--cap-drop"); + } + }); + + it("should set network isolation to 'none'", () => { + const args = buildDockerCreateArgs( + "test", + "/path", + "image", + { memoryGB: 1, cpus: 1 }, + "runc", + ); + expect(args[args.indexOf("--network") + 1]).toBe("none"); + }); + + it("should set process limits", () => { + const args = buildDockerCreateArgs( + "test", + "/path", + "image", + { memoryGB: 1, cpus: 1 }, + "runc", + ); + + expect(args).toContain("--pids-limit=200"); + const ulimitIdx = args.indexOf("--ulimit"); + expect(ulimitIdx).toBeGreaterThanOrEqual(0); + expect(args[ulimitIdx + 1]).toBe("nproc=10000:10000"); + }); + + it("should include kernel memory limit", () => { + const args = buildDockerCreateArgs( + "test", + "/path", + "image", + { memoryGB: 1, cpus: 1 }, + "runc", + ); + expect(args).toContain("--kernel-memory=50M"); + }); + + it("should format memory as 'G'", () => { + const testCases: Array<{ memoryGB: number; expected: string }> = [ + { memoryGB: 0.5, expected: "0.5G" }, + { memoryGB: 1, expected: "1G" }, + { memoryGB: 2, expected: "2G" }, + { memoryGB: 4, expected: "4G" }, + ]; + + for (const { memoryGB, expected } of testCases) { + const args = buildDockerCreateArgs("test", "/path", "image", { memoryGB, cpus: 1 }, "runc"); + expect(args[args.indexOf("--memory") + 1]).toBe(expected); + } + }); + + it("should format CPUs as a string number", () => { + const testCases: Array<{ cpus: number; expected: string }> = [ + { cpus: 0.1, expected: "0.1" }, + { cpus: 0.5, expected: "0.5" }, + { cpus: 1, expected: "1" }, + { cpus: 2, expected: "2" }, + ]; + + for (const { cpus, expected } of testCases) { + const args = buildDockerCreateArgs("test", "/path", "image", { memoryGB: 1, cpus }, "runc"); + expect(args[args.indexOf("--cpus") + 1]).toBe(expected); + } + }); + + it("should mount work directory as bind mount to /app", () => { + const args = buildDockerCreateArgs( + "test", + "/var/work/submission", + "image", + { memoryGB: 1, cpus: 1 }, + "runc", + ); + + const mountArg = args[args.indexOf("--mount") + 1]; + expect(mountArg).toContain("type=bind"); + expect(mountArg).toContain("target=/app"); + expect(mountArg).toContain("/var/work/submission"); + }); + + it("should use the supplied docker image name verbatim", () => { + const image = "eu.gcr.io/moocfi-public/tmc-sandbox-python:latest"; + const args = buildDockerCreateArgs("test", "/path", image, { memoryGB: 1, cpus: 1 }, "runc"); + expect(args[args.indexOf(image)]).toBe(image); + }); + + it("includes the -it flag", () => { + const args = buildDockerCreateArgs( + "test", + "/path", + "image", + { memoryGB: 1, cpus: 1 }, + "runc", + ); + expect(args).toContain("-it"); + }); + + it("sets PYTHONDONTWRITEBYTECODE=1 via --env", () => { + const args = buildDockerCreateArgs( + "test", + "/path", + "image", + { memoryGB: 1, cpus: 1 }, + "runc", + ); + const envIdx = args.indexOf("--env"); + expect(envIdx).toBeGreaterThanOrEqual(0); + expect(args[envIdx + 1]).toBe("PYTHONDONTWRITEBYTECODE=1"); + }); + + it("should not have duplicate consecutive entries for same flags", () => { + const args = buildDockerCreateArgs( + "test", + "/path", + "image", + { memoryGB: 1, cpus: 1 }, + "runc", + ); + // No adjacent duplicate strings except after --cap-drop (which is repeated intentionally). + const pairsToCheck = args + .slice(1) + .map((curr, i) => ({ prev: args[i]!, curr })) + .filter(({ prev }) => prev !== "--cap-drop"); + for (const { prev, curr } of pairsToCheck) { + expect(curr).not.toBe(prev); + } + }); + }); + + describe("resource limits", () => { + const testCases: Array<{ + limits: ResourceLimits; + memoryExpected: string; + cpusExpected: string; + }> = [ + { limits: { memoryGB: 0.5, cpus: 0.5 }, memoryExpected: "0.5G", cpusExpected: "0.5" }, + { limits: { memoryGB: 1, cpus: 1 }, memoryExpected: "1G", cpusExpected: "1" }, + { limits: { memoryGB: 2, cpus: 1.5 }, memoryExpected: "2G", cpusExpected: "1.5" }, + { limits: { memoryGB: 4, cpus: 2 }, memoryExpected: "4G", cpusExpected: "2" }, + ]; + + for (const { limits, memoryExpected, cpusExpected } of testCases) { + it(`applies limits: ${limits.memoryGB}GB, ${limits.cpus} CPU`, () => { + const args = buildDockerCreateArgs("test", "/path", "image", limits, "runc"); + expect(args[args.indexOf("--memory") + 1]).toBe(memoryExpected); + expect(args[args.indexOf("--cpus") + 1]).toBe(cpusExpected); + }); + } + }); + + describe("execution flow", () => { + let mockExecFile: Mock; + let mockReadFile: Mock; + let mockExtractFile: Mock; + let executor: SandboxExecutor; + + beforeEach(() => { + vi.clearAllMocks(); + mockExecFile = makeExecFile({ + "docker inspect": { + stdout: JSON.stringify([{ State: { OOMKilled: false } }]), + stderr: "", + }, + }); + mockReadFile = vi.fn( + (path: string, _encoding: BufferEncoding): Promise => + Promise.resolve(path.endsWith("exit_code.txt") ? "0" : ""), + ); + mockExtractFile = vi.fn( + (_i: string, _o: string, _m: SupportedMimeType): Promise => Promise.resolve(), + ); + executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + taskTimeoutMs: 5000, + execFileFn: mockExecFile, + readFileFn: mockReadFile, + extractFileFn: mockExtractFile, + }); + }); + + it("calls docker create, cp, chmod, and start in correct order", async () => { + await executor.executeSubmission( + "/fake/upload.tar", + "sub-order-test", + undefined, + "application/x-tar", + defaultLimits, + ); + + const calls = mockExecFile.mock.calls as Array<[string, string[]]>; + + const createIdx = calls.findIndex(([f, a]) => f === "docker" && a[0] === "create"); + const cpIdx = calls.findIndex( + ([f, a]) => f === "docker" && a[0] === "cp" && a.some((x) => x.includes("tmc-run")), + ); + const startIdx = calls.findIndex(([f, a]) => f === "docker" && a[0] === "start"); + + expect(createIdx, "docker create not found").toBeGreaterThanOrEqual(0); + expect(cpIdx, "docker cp tmc-run not found").toBeGreaterThan(createIdx); + expect(startIdx, "docker start not found").toBeGreaterThan(cpIdx); + }); + + it("returns status=finished when exit_code is 0 and no OOM", async () => { + const result = await executor.executeSubmission( + "/fake/upload.tar", + "sub-pass", + undefined, + "application/x-tar", + defaultLimits, + ); + + expect(result.status).toBe("finished"); + expect(result.exitCode).toBe("0"); + }); + + it("returns status=out-of-memory when OOMKilled is true", async () => { + mockExecFile = makeExecFile({ + "docker inspect": { + stdout: JSON.stringify([{ State: { OOMKilled: true } }]), + stderr: "", + }, + }); + mockReadFile = vi.fn( + (path: string, _encoding: BufferEncoding): Promise => + Promise.resolve(path.endsWith("exit_code.txt") ? "137" : ""), + ); + executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + taskTimeoutMs: 5000, + execFileFn: mockExecFile, + readFileFn: mockReadFile, + extractFileFn: mockExtractFile, + }); + + const result = await executor.executeSubmission( + "/fake/upload.tar", + "sub-oom", + undefined, + "application/x-tar", + defaultLimits, + ); + + expect(result.status).toBe("out-of-memory"); + }); + + it("returns status=crashed when docker start fails without timeout", async () => { + mockExecFile = makeExecFile({ + "docker start": new Error("container exited with code 1"), + "docker inspect": { + stdout: JSON.stringify([{ State: { OOMKilled: false } }]), + stderr: "", + }, + }); + executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + taskTimeoutMs: 60_000, + execFileFn: mockExecFile, + readFileFn: mockReadFile, + extractFileFn: mockExtractFile, + }); + + const result = await executor.executeSubmission( + "/fake/upload.tar", + "sub-crash", + undefined, + "application/x-tar", + defaultLimits, + ); + + expect(result.status).toBe("crashed"); + }); + + it("awaits container cleanup when docker cp fails after docker create", async () => { + mockExecFile = vi.fn( + (file: string, args: string[]): Promise<{ stdout: string; stderr: string }> => { + if (file === "docker" && args[0] === "cp") + return Promise.reject(new Error("docker cp failed")); + return Promise.resolve({ stdout: "", stderr: "" }); + }, + ); + executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + taskTimeoutMs: 5000, + execFileFn: mockExecFile, + readFileFn: mockReadFile, + extractFileFn: mockExtractFile, + }); + + await expect( + executor.executeSubmission( + "/fake/upload.tar", + "sub-cp-fail", + undefined, + "application/x-tar", + defaultLimits, + ), + ).rejects.toThrow("docker cp failed"); + + const rmCall = (mockExecFile.mock.calls as Array<[string, string[]]>).find( + ([f, a]) => f === "docker" && a[0] === "rm", + ); + expect(rmCall).toBeDefined(); + }); + + it("passes custom docker image to the create command", async () => { + await executor.executeSubmission( + "/fake/upload.tar", + "sub-custom-img", + "eu.gcr.io/moocfi-public/tmc-sandbox-python:latest", + "application/x-tar", + defaultLimits, + ); + + const createCall = (mockExecFile.mock.calls as Array<[string, string[]]>).find( + ([f, a]) => f === "docker" && a[0] === "create", + ); + expect(createCall?.[1]).toContain("eu.gcr.io/moocfi-public/tmc-sandbox-python:latest"); + }); + + it("awaits file cleanup after execution completes", async () => { + await executor.executeSubmission( + "/fake/upload.tar", + "sub-cleanup", + undefined, + "application/x-tar", + defaultLimits, + ); + + const rmCall = (mockExecFile.mock.calls as Array<[string, string[]]>).find( + ([f, a]) => f === "rm" && a[0] === "-rf", + ); + expect(rmCall).toBeDefined(); + }); + + it("returns status=failed when docker start succeeds but exit_code is non-zero", async () => { + mockReadFile = vi.fn( + (path: string, _encoding: BufferEncoding): Promise => + Promise.resolve(path.endsWith("exit_code.txt") ? "1" : ""), + ); + executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + taskTimeoutMs: 5000, + execFileFn: mockExecFile, + readFileFn: mockReadFile, + extractFileFn: mockExtractFile, + }); + + const result = await executor.executeSubmission( + "/fake/upload.tar", + "sub-nonzero", + undefined, + "application/x-tar", + defaultLimits, + ); + + expect(result.status).toBe("failed"); + expect(result.exitCode).toBe("1"); + }); + + it("returns status=crashed when exit_code.txt is empty after docker start succeeds", async () => { + mockReadFile = vi.fn( + (_path: string, _encoding: BufferEncoding): Promise => Promise.resolve(""), + ); + executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + taskTimeoutMs: 5000, + execFileFn: mockExecFile, + readFileFn: mockReadFile, + extractFileFn: mockExtractFile, + }); + + const result = await executor.executeSubmission( + "/fake/upload.tar", + "sub-empty-exit", + undefined, + "application/x-tar", + defaultLimits, + ); + + expect(result.status).toBe("crashed"); + }); + + it("calls docker cp for the init script in addition to tmc-run", async () => { + await executor.executeSubmission( + "/fake/upload.tar", + "sub-cp-init", + undefined, + "application/x-tar", + defaultLimits, + ); + + const calls = mockExecFile.mock.calls as Array<[string, string[]]>; + const cpInitCall = calls.find( + ([f, a]) => f === "docker" && a[0] === "cp" && a.some((x) => x.includes("init")), + ); + expect(cpInitCall, "docker cp init not found").toBeDefined(); + }); + + it("calls chmod 755 on tmc-run and init after copying scripts", async () => { + await executor.executeSubmission( + "/fake/upload.tar", + "sub-chmod755", + undefined, + "application/x-tar", + defaultLimits, + ); + + const calls = mockExecFile.mock.calls as Array<[string, string[]]>; + const chmodCall = calls.find(([f, a]) => f === "chmod" && a[0] === "755"); + expect(chmodCall, "chmod 755 not found").toBeDefined(); + expect(chmodCall?.[1]).toContain("755"); + }); + + it("does not propagate chmod -R 777 failures (expected on AFS-mounted paths)", async () => { + const afsExecFile = vi.fn( + (file: string, args: string[]): Promise<{ stdout: string; stderr: string }> => { + if (file === "chmod" && args[0] === "-R") + return Promise.reject(new Error("chmod: not permitted on AFS")); + if (file === "docker" && args[0] === "inspect") + return Promise.resolve({ + stdout: JSON.stringify([{ State: { OOMKilled: false } }]), + stderr: "", + }); + return Promise.resolve({ stdout: "", stderr: "" }); + }, + ); + executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + taskTimeoutMs: 5000, + execFileFn: afsExecFile, + readFileFn: mockReadFile, + extractFileFn: mockExtractFile, + }); + + await expect( + executor.executeSubmission( + "/fake/upload.tar", + "sub-afs", + undefined, + "application/x-tar", + defaultLimits, + ), + ).resolves.toMatchObject({ status: "finished" }); + }); + + it("warns and continues when docker inspect returns malformed JSON", async () => { + mockExecFile = makeExecFile({ + "docker inspect": { stdout: "not-valid-json{{", stderr: "" }, + }); + executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + taskTimeoutMs: 5000, + execFileFn: mockExecFile, + readFileFn: mockReadFile, + extractFileFn: mockExtractFile, + }); + + const result = await executor.executeSubmission( + "/fake/upload.tar", + "sub-bad-json", + undefined, + "application/x-tar", + defaultLimits, + ); + + expect(result.status).toBe("finished"); + expect(mockLogger.warn).toHaveBeenCalledWith( + expect.objectContaining({ submissionId: "sub-bad-json" }), + "Could not inspect container", + ); + }); + + it("propagates extraction errors from extractFileFn", async () => { + mockExtractFile = vi.fn(() => Promise.reject(new Error("archive is corrupt"))); + executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + taskTimeoutMs: 5000, + execFileFn: mockExecFile, + readFileFn: mockReadFile, + extractFileFn: mockExtractFile, + }); + + await expect( + executor.executeSubmission( + "/fake/upload.tar", + "sub-extract-err", + undefined, + "application/x-tar", + defaultLimits, + ), + ).rejects.toThrow("archive is corrupt"); + }); + + it("uses container name in the format sandbox-submission-", async () => { + await executor.executeSubmission( + "/fake/upload.tar", + "my-submission-id", + undefined, + "application/x-tar", + defaultLimits, + ); + + const calls = mockExecFile.mock.calls as Array<[string, string[]]>; + const createCall = calls.find(([f, a]) => f === "docker" && a[0] === "create"); + const nameIdx = createCall?.[1].indexOf("--name") ?? -1; + expect(createCall?.[1][nameIdx + 1]).toBe("sandbox-submission-my-submission-id"); + }); + + it("logs non-ENOENT errors when reading submission files", async () => { + mockReadFile = vi.fn((path: string, _encoding: BufferEncoding): Promise => { + if (path.endsWith("exit_code.txt")) return Promise.resolve("0"); + const err = Object.assign(new Error("EACCES: permission denied"), { code: "EACCES" }); + return Promise.reject(err); + }); + executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + taskTimeoutMs: 5000, + execFileFn: mockExecFile, + readFileFn: mockReadFile, + extractFileFn: mockExtractFile, + }); + + await executor.executeSubmission( + "/fake/upload.tar", + "sub-eacces", + undefined, + "application/x-tar", + defaultLimits, + ); + + expect(mockLogger.error).toHaveBeenCalledWith( + expect.objectContaining({ error: expect.anything() }), + expect.stringContaining("Error reading submission file"), + ); + }); + + it("does not log when submission file is simply missing (ENOENT)", async () => { + mockReadFile = vi.fn((path: string, _encoding: BufferEncoding): Promise => { + if (path.endsWith("exit_code.txt")) return Promise.resolve("0"); + const err = Object.assign(new Error("ENOENT: no such file"), { code: "ENOENT" }); + return Promise.reject(err); + }); + executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + taskTimeoutMs: 5000, + execFileFn: mockExecFile, + readFileFn: mockReadFile, + extractFileFn: mockExtractFile, + }); + + vi.clearAllMocks(); + await executor.executeSubmission( + "/fake/upload.tar", + "sub-enoent", + undefined, + "application/x-tar", + defaultLimits, + ); + + const errorCalls = (mockLogger.error as ReturnType).mock.calls as Array< + [unknown, string] + >; + const fileReadErrors = errorCalls.filter( + ([, msg]) => typeof msg === "string" && msg.includes("Error reading submission file"), + ); + expect(fileReadErrors).toHaveLength(0); + }); + }); + + describe("timeout handling", () => { + let mockReadFile: Mock; + let mockExtractFile: Mock; + + beforeEach(() => { + vi.clearAllMocks(); + mockReadFile = vi.fn( + (path: string, _encoding: BufferEncoding): Promise => + Promise.resolve(path.endsWith("exit_code.txt") ? "0" : ""), + ); + mockExtractFile = vi.fn((): Promise => Promise.resolve()); + }); + + afterEach(() => { + vi.useRealTimers(); + }); + + it("kills container after timeout and reports status=timeout", async () => { + vi.useFakeTimers(); + + let rejectDockerStart!: (err: Error) => void; + + const mockExecFile = vi.fn( + (file: string, args: string[]): Promise<{ stdout: string; stderr: string }> => { + if (file === "docker" && args[0] === "start") { + return new Promise((_resolve, reject) => { + rejectDockerStart = reject; + }); + } + if (file === "docker" && args[0] === "kill") { + rejectDockerStart(new Error("container killed by timeout")); + return Promise.resolve({ stdout: "", stderr: "" }); + } + if (file === "docker" && args[0] === "inspect") { + return Promise.resolve({ + stdout: JSON.stringify([{ State: { OOMKilled: false } }]), + stderr: "", + }); + } + return Promise.resolve({ stdout: "", stderr: "" }); + }, + ); + + const executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + taskTimeoutMs: 1000, + execFileFn: mockExecFile, + readFileFn: mockReadFile, + extractFileFn: mockExtractFile, + }); + + const executionPromise = executor.executeSubmission( + "/fake/upload.tar", + "sub-timeout", + undefined, + "application/x-tar", + defaultLimits, + ); + + await vi.advanceTimersByTimeAsync(1001); + const result = await executionPromise; + + expect(result.status).toBe("timeout"); + expect( + (mockExecFile.mock.calls as Array<[string, string[]]>).some( + ([f, a]) => + f === "docker" && a[0] === "kill" && a.includes("sandbox-submission-sub-timeout"), + ), + ).toBe(true); + }); + + it("does not kill container before timeout elapses", async () => { + vi.useFakeTimers(); + + let resolveDockerStart!: (val: { stdout: string; stderr: string }) => void; + + const mockExecFile = vi.fn( + (file: string, args: string[]): Promise<{ stdout: string; stderr: string }> => { + if (file === "docker" && args[0] === "start") { + return new Promise((resolve) => { + resolveDockerStart = resolve; + }); + } + if (file === "docker" && args[0] === "inspect") { + return Promise.resolve({ + stdout: JSON.stringify([{ State: { OOMKilled: false } }]), + stderr: "", + }); + } + return Promise.resolve({ stdout: "", stderr: "" }); + }, + ); + + const executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + taskTimeoutMs: 5000, + execFileFn: mockExecFile, + readFileFn: mockReadFile, + extractFileFn: mockExtractFile, + }); + + const executionPromise = executor.executeSubmission( + "/fake/upload.tar", + "sub-early", + undefined, + "application/x-tar", + defaultLimits, + ); + + await vi.advanceTimersByTimeAsync(4999); + + const killCall = (mockExecFile.mock.calls as Array<[string, string[]]>).find( + ([f, a]) => f === "docker" && a[0] === "kill", + ); + expect(killCall).toBeUndefined(); + + // Let execution complete cleanly. + resolveDockerStart({ stdout: "", stderr: "" }); + await executionPromise; + }); + + it("clears timeout timer after normal completion (no kill after container exits)", async () => { + vi.useFakeTimers(); + + const mockExecFile = makeExecFile({ + "docker inspect": { + stdout: JSON.stringify([{ State: { OOMKilled: false } }]), + stderr: "", + }, + }); + + const executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + taskTimeoutMs: 5000, + execFileFn: mockExecFile, + readFileFn: mockReadFile, + extractFileFn: mockExtractFile, + }); + + await executor.executeSubmission( + "/fake/upload.tar", + "sub-clear-timeout", + undefined, + "application/x-tar", + defaultLimits, + ); + + // Advance well past where the timeout would have fired. + await vi.advanceTimersByTimeAsync(10_000); + + const killCall = (mockExecFile.mock.calls as Array<[string, string[]]>).find( + ([f, a]) => f === "docker" && a[0] === "kill", + ); + expect(killCall).toBeUndefined(); + }); + }); +}); + +describe("buildDockerCreateArgs gVisor (runsc) docker args", () => { + it("includes --runtime runsc when dockerRuntime is runsc", () => { + const args = buildDockerCreateArgs("test", "/path", "image", { memoryGB: 1, cpus: 1 }, "runsc"); + const runtimeIdx = args.indexOf("--runtime"); + expect(runtimeIdx).toBeGreaterThanOrEqual(0); + expect(args[runtimeIdx + 1]).toBe("runsc"); + }); + + it("does not include --runtime when dockerRuntime is runc", () => { + const args = buildDockerCreateArgs("test", "/path", "image", { memoryGB: 1, cpus: 1 }, "runc"); + expect(args.indexOf("--runtime")).toBe(-1); + }); + + it("omits --kernel-memory for runsc (unsupported by gVisor)", () => { + const args = buildDockerCreateArgs("test", "/path", "image", { memoryGB: 1, cpus: 1 }, "runsc"); + expect(args.some((a) => a.startsWith("--kernel-memory"))).toBe(false); + }); + + it("includes --kernel-memory for runc (default)", () => { + const args = buildDockerCreateArgs("test", "/path", "image", { memoryGB: 1, cpus: 1 }, "runc"); + expect(args.some((a) => a.startsWith("--kernel-memory"))).toBe(true); + }); + + it("runsc still enforces all security capability drops", () => { + const args = buildDockerCreateArgs("test", "/path", "image", { memoryGB: 1, cpus: 1 }, "runsc"); + const capabilities = [ + "SETPCAP", + "SETFCAP", + "AUDIT_WRITE", + "SETGID", + "SETUID", + "NET_BIND_SERVICE", + "SYS_CHROOT", + "NET_RAW", + ]; + for (const cap of capabilities) { + const idx = args.lastIndexOf(cap); + expect(idx, `${cap} not found`).toBeGreaterThanOrEqual(0); + expect(args[idx - 1]).toBe("--cap-drop"); + } + }); + + it("runsc still isolates the network", () => { + const args = buildDockerCreateArgs("test", "/path", "image", { memoryGB: 1, cpus: 1 }, "runsc"); + expect(args[args.indexOf("--network") + 1]).toBe("none"); + }); + + it("runsc applies memory and CPU limits", () => { + const args = buildDockerCreateArgs( + "test", + "/path", + "image", + { memoryGB: 2, cpus: 1.5 }, + "runsc", + ); + expect(args[args.indexOf("--memory") + 1]).toBe("2G"); + expect(args[args.indexOf("--cpus") + 1]).toBe("1.5"); + }); + + it("runsc --runtime flag appears before the image name", () => { + const args = buildDockerCreateArgs( + "test", + "/path", + "my-image", + { memoryGB: 1, cpus: 1 }, + "runsc", + ); + const runtimeIdx = args.indexOf("--runtime"); + const imageIdx = args.indexOf("my-image"); + expect(runtimeIdx).toBeGreaterThanOrEqual(0); + expect(imageIdx).toBeGreaterThanOrEqual(0); + expect(runtimeIdx).toBeLessThan(imageIdx); + }); + + it("defaults to runc when no dockerRuntime option is provided", () => { + const args = buildDockerCreateArgs("test", "/path", "image", { memoryGB: 1, cpus: 1 }, "runc"); + expect(args.indexOf("--runtime")).toBe(-1); + expect(args.some((a) => a.startsWith("--kernel-memory"))).toBe(true); + }); +}); diff --git a/src/services/sandbox-executor.ts b/src/services/sandbox-executor.ts index 2969cd5..5e61895 100644 --- a/src/services/sandbox-executor.ts +++ b/src/services/sandbox-executor.ts @@ -1,205 +1,336 @@ -import { join, resolve } from "path" -import { promisify } from "util" -import winston from "winston" -import { exec as origExec } from "child_process" -import { readFile as origReadFile, unlink as origUnlink } from "fs" -import extract, { SupportedMimeTypes } from "./util/file_extractor" -import { ResourceLimits } from "./util/extractResourceLimitsFromRequest" -const exec = promisify(origExec) -const readFile = promisify(origReadFile) -const unlink = promisify(origUnlink) - -const DEFAULT_TASK_TIMEOUT_MS = 180000 -const DEBUG = false -const SUPERDEBUG = false - -export interface RunResult { - test_output: string - stdout: string - stderr: string - valgrind: string - validations: string - vm_log: string - status: string - exit_code: string -} +import { join, resolve, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import { execFile as execFileCallback } from "node:child_process"; +import { readFile, unlink } from "node:fs/promises"; +import type { FastifyBaseLogger } from "fastify"; +import { extractFile } from "./file-extractor.js"; +import type { + DockerRuntime, + ResourceLimits, + SubmissionResult, + SupportedMimeType, +} from "../types.js"; -const handleSubmission = async ( - path: string, - id: string, - dockerImage: string | undefined, - log: winston.Logger, - mimetype: SupportedMimeTypes, - resourceLimits: ResourceLimits, -): Promise => { - log.info("Handling submission") - const outputPath = join("work", id) - await extract(path, outputPath, mimetype) - - log.info("Extracted") - await exec(`chmod -R 777 ${outputPath}`) - try { - await exec(`chmod -R 777 ${outputPath}`) - const results = await runTests( - outputPath, - id, - dockerImage, - log, - resourceLimits, - ) - return results - } catch (e) { - log.error(`Error while running: ${e}`) - throw e - } finally { - if (!DEBUG) { - setImmediate(async () => { - try { - await unlink(path) - await exec(`rm -rf '${outputPath}'`) - } catch (e) { - log.error(`Could not clean up ${id}.`, e) - } - }) - } +const DEFAULT_TASK_TIMEOUT_MS = 180_000; +const DEFAULT_DOCKER_IMAGE = "nygrenh/sandbox-next"; +// Three dirnames: src/services/ -> src/ -> project root, where tmc-run and init scripts live. +const SCRIPTS_DIR = dirname(dirname(dirname(fileURLToPath(import.meta.url)))); +const WORK_DIR = join(SCRIPTS_DIR, "work"); + +export type ExecFileFn = ( + file: string, + args: string[], +) => Promise<{ stdout: string; stderr: string }>; +export type ReadFileFn = (path: string, encoding: BufferEncoding) => Promise; +export type ExtractFileFn = typeof extractFile; + +/** Error thrown by the default execFile implementation; carries stdout/stderr from the process. */ +class ExecError extends Error { + override name = "ExecError"; + + constructor( + message: string, + public readonly code: string | number | null | undefined, + public readonly stdout: string, + public readonly stderr: string, + ) { + super(message); } } -async function runTests( +function isNodeError(e: unknown): e is NodeJS.ErrnoException { + return e instanceof Error && "code" in e; +} + +export interface SandboxExecutorOptions { + taskTimeoutMs?: number; + execFileFn?: ExecFileFn; + readFileFn?: ReadFileFn; + extractFileFn?: ExtractFileFn; + dockerRuntime?: DockerRuntime; +} + +export function buildDockerCreateArgs( + containerId: string, path: string, - submission_id: string, - dockerImage: string | undefined, - log: winston.Logger, + image: string, resourceLimits: ResourceLimits, -): Promise { - const id = `sandbox-submission-${submission_id}` - let status = "failed" - const timeout_ms = DEFAULT_TASK_TIMEOUT_MS + dockerRuntime: DockerRuntime, +): string[] { + return [ + "create", + "--name", + containerId, + // gVisor runtime flag — only added when using runsc + ...(dockerRuntime === "runsc" ? ["--runtime", "runsc"] : []), + "--network", + "none", + "--env", + "PYTHONDONTWRITEBYTECODE=1", + "--memory", + `${resourceLimits.memoryGB}G`, + // --kernel-memory is unsupported by gVisor (runsc) + ...(dockerRuntime === "runc" ? ["--kernel-memory=50M"] : []), + "--pids-limit=200", + "--ulimit", + "nproc=10000:10000", + "--cpus", + String(resourceLimits.cpus), + "--cap-drop", + "SETPCAP", + "--cap-drop", + "SETFCAP", + "--cap-drop", + "AUDIT_WRITE", + "--cap-drop", + "SETGID", + "--cap-drop", + "SETUID", + "--cap-drop", + "NET_BIND_SERVICE", + "--cap-drop", + "SYS_CHROOT", + "--cap-drop", + "NET_RAW", + "--mount", + `type=bind,source=${resolve(path)},target=/app`, + "-it", + image, + "/app/init", + ]; +} + +function defaultExecFile( + file: string, + args: string[], +): Promise<{ stdout: string; stderr: string }> { + return new Promise((_resolve, reject) => { + execFileCallback(file, args, (error, stdout, stderr) => { + if (error) { + reject(new ExecError(error.message, error.code, stdout, stderr)); + } else { + _resolve({ stdout, stderr }); + } + }); + }); +} + +export class SandboxExecutor { + private taskTimeoutMs: number; + private execFileFn: ExecFileFn; + private readFileFn: ReadFileFn; + private extractFileFn: ExtractFileFn; + private dockerRuntime: DockerRuntime; + + constructor( + private logger: FastifyBaseLogger, + opts: SandboxExecutorOptions = {}, + ) { + this.taskTimeoutMs = opts.taskTimeoutMs ?? DEFAULT_TASK_TIMEOUT_MS; + this.execFileFn = opts.execFileFn ?? defaultExecFile; + this.readFileFn = opts.readFileFn ?? readFile; + this.extractFileFn = opts.extractFileFn ?? extractFile; + this.dockerRuntime = opts.dockerRuntime ?? "runc"; + } + + async executeSubmission( + filePath: string, + submissionId: string, + dockerImage: string | undefined, + mimetype: SupportedMimeType, + resourceLimits: ResourceLimits, + ): Promise { + this.logger.info({ submissionId }, "Starting submission execution"); + + const outputPath = join(WORK_DIR, submissionId); + let result: SubmissionResult; - const getFile = async (filename: string): Promise => { try { - return await readFile(join(path, filename), "utf8") - } catch (_) { - log.warn(`Could not find ${filename}`) - return "" + await this.extractFileFn(filePath, outputPath, mimetype); + this.logger.debug({ submissionId }, "File extraction complete"); + + try { + await this.execFileFn("chmod", ["-R", "777", outputPath]); + } catch { + // chmod may fail on AFS-mounted paths; this is expected + } + + result = await this.runTests(outputPath, submissionId, dockerImage, resourceLimits); + } catch (error) { + this.logger.error({ submissionId, error }, "Error executing submission"); + throw error; + } finally { + await this.cleanupFiles(filePath, outputPath); } + + return result; } - const image = dockerImage || "nygrenh/sandbox-next" - let command - if (SUPERDEBUG) { - command = `docker create --name '${id}' --memory '${ - resourceLimits.memoryGB - }G' --kernel-memory=50M --pids-limit=200 --ulimit nproc=10000:10000 --cpus '${ - resourceLimits.cpus - }' --mount type=bind,source=${resolve( - path, - )},target=/app -it '${image}' /bin/sleep infinity ` - } else { - command = `docker create --name '${id}' --network none --memory '${ - resourceLimits.memoryGB - }G' --kernel-memory=50M --pids-limit=200 --ulimit nproc=10000:10000 --cpus '${ - resourceLimits.cpus - }' --cap-drop SETPCAP --cap-drop SETFCAP --cap-drop AUDIT_WRITE --cap-drop SETGID --cap-drop SETUID --cap-drop NET_BIND_SERVICE --cap-drop SYS_CHROOT --cap-drop NET_RAW --mount type=bind,source=${resolve( + private async runTests( + path: string, + submissionId: string, + dockerImage: string | undefined, + resourceLimits: ResourceLimits, + ): Promise { + const containerId = `sandbox-submission-${submissionId}`; + const image = dockerImage ?? DEFAULT_DOCKER_IMAGE; + const timeoutMs = this.taskTimeoutMs; + + const dockerArgs = buildDockerCreateArgs( + containerId, path, - )},target=/app -it '${image}' /app/init` - } - log.info(`Creating a container with '${command}'`) - await exec(command) - // await exec(`docker cp '${path}/.' '${id}':/app`); - await exec(`docker cp 'tmc-run' '${id}':/app/tmc-run`) - await exec(`docker cp 'init' '${id}':/app/init`) - let vm_log = "" - - ensureStops(id, log, timeout_ms) - const executionStartTime = new Date().getTime() - let exit_code = "" - - if (DEBUG) { - console.log(`docker start '${id}'`) - throw new Error("DEBUG mode, aborting") - } - try { - const processLog = await exec(`docker start -i '${id}' | ts -s`) - vm_log = processLog.stdout + processLog.stderr - log.info("Ran tests!") - exit_code = (await getFile("exit_code.txt")).trim() - if (!exit_code || exit_code === "") { - // If there is no exit code, tmc-run didn't finish - throw new Error("tmc-run did not exit") + image, + resourceLimits, + this.dockerRuntime, + ); + + this.logger.debug({ containerId, dockerArgs }, "Creating container"); + await this.execFileFn("docker", dockerArgs); + + // If any setup step fails, clean up the created container before rethrowing. + try { + await this.execFileFn("docker", [ + "cp", + join(SCRIPTS_DIR, "tmc-run"), + `${containerId}:/app/tmc-run`, + ]); + await this.execFileFn("docker", [ + "cp", + join(SCRIPTS_DIR, "init"), + `${containerId}:/app/init`, + ]); + // Make scripts executable inside the bind-mount (chmod +x is masked on AFS; use octal) + await this.execFileFn("chmod", ["755", join(path, "tmc-run"), join(path, "init")]); + } catch (error) { + await this.cleanupContainer(containerId); + throw error; } - } catch (e) { - const executionEndTime = new Date().getTime() - const durationMs = executionEndTime - executionStartTime - log.error("Running tests failed", { error: (e as Error).message }) - // If the process died within the last 5 seconds before timeout, it was - // likely a timeout. - if (durationMs > timeout_ms - 5000) { - status = "timeout" - } else { - // TODO: is this the right status - status = "crashed" + + let timedOut = false; + const timeoutHandle = setTimeout(async () => { + timedOut = true; + try { + await this.execFileFn("docker", ["kill", containerId]); + this.logger.info({ containerId }, "Container killed due to timeout"); + } catch { + // Already dead + } + }, timeoutMs); + + let result: SubmissionResult; + try { + result = await this.collectResults(path, containerId, submissionId, () => timedOut); + } finally { + clearTimeout(timeoutHandle); + await this.cleanupContainer(containerId); } + + return result; } - try { - log.info(`Trying to inspect the container`) - const inspection = await exec(`docker inspect '${id}'`) - const info = JSON.parse(inspection.stdout) - const oomKilled = info[0].State.OOMKilled - if (oomKilled) { - status = "out-of-memory" + + private async collectResults( + path: string, + containerId: string, + submissionId: string, + isTimedOut: () => boolean, + ): Promise { + let status: SubmissionResult["status"] = "failed"; + let exitCode = ""; + let vmLog = ""; + + try { + const processLog = await this.execFileFn("docker", ["start", "-i", containerId]); + vmLog = processLog.stdout + processLog.stderr; + this.logger.debug({ submissionId }, "Container execution complete"); + + const rawExitCode = await this.readSubmissionFile(path, "exit_code.txt"); + exitCode = rawExitCode.trim(); + if (!exitCode) { + throw new Error("tmc-run did not exit properly"); + } + } catch (error: unknown) { + if (error instanceof ExecError) { + vmLog = error.stdout + error.stderr; + } + + this.logger.error( + { submissionId, error, timedOut: isTimedOut() }, + "Container execution failed", + ); + + status = isTimedOut() ? "timeout" : "crashed"; + } + + // Check for OOM + try { + const inspection = await this.execFileFn("docker", ["inspect", containerId]); + const info = JSON.parse(inspection.stdout) as Array<{ State?: { OOMKilled?: boolean } }>; + if (info[0]?.State?.OOMKilled) { + status = "out-of-memory"; + } + } catch { + this.logger.warn({ submissionId }, "Could not inspect container"); } - } catch (e) { - log.error("Could not inspect the container", e) - } - const [ - test_output, - stdout, - stderr, - valgrind, - validations, - ] = await Promise.all([ - getFile("test_output.txt"), - getFile("stdout.txt"), - getFile("stderr.txt"), - getFile("valgrind.log"), - getFile("validations.json"), - ]) - - log.info("Result files read", { exit_code }) - if (process.env.PRINT_VM_LOG) { - console.log(vm_log) + const [testOutput, stdout, stderr, valgrind, validations] = await Promise.all([ + this.readSubmissionFile(path, "test_output.txt"), + this.readSubmissionFile(path, "stdout.txt"), + this.readSubmissionFile(path, "stderr.txt"), + this.readSubmissionFile(path, "valgrind.log"), + this.readSubmissionFile(path, "validations.json"), + ]); + + if (status !== "timeout" && status !== "out-of-memory" && exitCode === "0") { + status = "finished"; + } + + if (process.env["PRINT_VM_LOG"]) { + this.logger.info({ vmLog }, "VM log"); + } + + return { + testOutput, + stdout, + stderr, + valgrind, + validations, + vmLog, + exitCode, + status, + }; } - if (status !== "timeout" && exit_code === "0") { - status = "finished" + private async readSubmissionFile(dir: string, filename: string): Promise { + try { + return await this.readFileFn(join(dir, filename), "utf8"); + } catch (error: unknown) { + if (isNodeError(error) && error.code === "ENOENT") { + return ""; + } + this.logger.error({ error }, `Error reading submission file ${filename}`); + return ""; + } } - setImmediate(async () => { - await exec(`docker rm --force '${id}'`) - }) - - return { - test_output, - stdout, - stderr, - valgrind, - validations, - vm_log, - exit_code, - status, + private async cleanupContainer(containerId: string): Promise { + try { + await this.execFileFn("docker", ["rm", "--force", containerId]); + } catch (error) { + this.logger.error({ containerId, error }, "Failed to clean up container"); + } } -} -function ensureStops(id: string, log: winston.Logger, timeout_ms: number) { - setTimeout(async () => { - log.info("Making sure process has terminated.") + private async cleanupFiles(filePath: string, outputPath: string): Promise { + try { + await unlink(filePath); + } catch { + // Upload file may already be gone + } try { - await exec(`docker kill '${id}'`) - log.info(`Submission ${id} timed out.`) - } catch (e) {} - }, timeout_ms) + // Files owned by the container's uid may remain; that's acceptable. + await this.execFileFn("rm", ["-rf", resolve(outputPath)]); + } catch (error) { + this.logger.error({ error }, "Failed to clean up work directory"); + } + } } - -export default handleSubmission diff --git a/src/tests/helpers/create-callback-server.ts b/src/tests/helpers/create-callback-server.ts index 85f548e..ff844d5 100644 --- a/src/tests/helpers/create-callback-server.ts +++ b/src/tests/helpers/create-callback-server.ts @@ -1,46 +1,77 @@ -import { Server } from "http" -import Koa from "koa" -import bodyParser from "koa-bodyparser" -import { AddressInfo } from "net" +import http from "node:http"; export interface NotifyResult { - token: string - test_output: string - stdout: string - stderr: string - valgrind: string - validations: string - vm_log: string - status: string - exit_code: string + token: string; + test_output: string; + stdout: string; + stderr: string; + valgrind: string; + validations: string; + vm_log: string; + status: "finished" | "timeout" | "out-of-memory" | "crashed" | "failed"; + exit_code: string; } -const createResultServer = ( - onResults: (value: NotifyResult) => void, -): string => { - const app = new Koa() - app.use(bodyParser()) - let server: Server | null = null +export interface CallbackServer { + url: string; + waitForResult: () => Promise; + close: () => void; +} - app.use(async (ctx) => { - onResults(ctx.request.body) - ctx.body = "Thanks!" - setImmediate(() => { - server?.close() - }) - }) +export async function createCallbackServer(timeoutMs = 120_000): Promise { + // The Promise constructor executor runs synchronously, so both callbacks are assigned + // before the constructor returns. The typed object approach avoids definite-assignment + // assertions while keeping strict-mode checks on the call sites. + const callbacks: { + resolve: ((result: NotifyResult) => void) | undefined; + reject: ((err: Error) => void) | undefined; + } = { resolve: undefined, reject: undefined }; + const resultPromise = new Promise((resolve, reject) => { + callbacks.resolve = resolve; + callbacks.reject = reject; + }); - server = app.listen(0) + const timer = setTimeout(() => { + callbacks.reject?.(new Error(`Callback server timed out after ${timeoutMs}ms`)); + server.close(); + }, timeoutMs); - const address = server.address() + const server = http.createServer((req, res) => { + const chunks: Buffer[] = []; + req.on("data", (chunk: unknown) => { + if (Buffer.isBuffer(chunk)) chunks.push(chunk); + }); + req.on("end", () => { + clearTimeout(timer); + try { + const body = JSON.parse(Buffer.concat(chunks).toString("utf8")) as NotifyResult; + callbacks.resolve?.(body); + } catch (error) { + callbacks.reject?.(error instanceof Error ? error : new Error(String(error))); + } + res.writeHead(200); + res.end(); + setImmediate(() => server.close()); + }); + }); - if (address instanceof String) { - return address as string - } else { - const address2 = address as AddressInfo + await new Promise((resolve, reject) => { + server.once("error", reject); + server.once("listening", resolve); + server.listen(0); + }); - return `http://${address2.address}:${address2.port}}` + const address = server.address(); + if (!address || typeof address === "string") { + throw new Error("Failed to get callback server port"); } -} -export default createResultServer + return { + url: `http://localhost:${address.port}`, + waitForResult: () => resultPromise, + close: () => { + clearTimeout(timer); + server.close(); + }, + }; +} diff --git a/src/tests/helpers/submission-builder.ts b/src/tests/helpers/submission-builder.ts new file mode 100644 index 0000000..584fc15 --- /dev/null +++ b/src/tests/helpers/submission-builder.ts @@ -0,0 +1,119 @@ +import { copyFile, mkdtemp, mkdir, writeFile, rm } from "node:fs/promises"; +import { existsSync } from "node:fs"; +import { join, dirname } from "node:path"; +import { tmpdir } from "node:os"; +import { randomUUID } from "node:crypto"; +import { execFile as execFileCallback } from "node:child_process"; +import { promisify } from "node:util"; + +const execFile = promisify(execFileCallback); + +const PYTHON_TEMPLATE_DIR = + "/tmp/tmc-langs-rust/sample_exercises/python3/exercise"; +const MAKE_PASSING_DIR = + "/tmp/tmc-langs-rust/sample_exercises/make/passing-exercise"; + +export class SubmissionBuilder { + private files = new Map(); + + addFile(relPath: string, content: string | Buffer): this { + this.files.set(relPath, content); + return this; + } + + removeFile(relPath: string): this { + this.files.delete(relPath); + return this; + } + + /** + * Seeds builder with the Python tmc/ runner framework and test/__init__.py. + * Does NOT add src/ — caller provides student source files. + */ + withPythonTemplate(): this { + const tplFiles = [ + "tmc/__init__.py", + "tmc/__main__.py", + "tmc/django.py", + "tmc/points.py", + "tmc/reflect.py", + "tmc/result.py", + "tmc/runner.py", + "tmc/utils.py", + "test/__init__.py", + ".tmcproject.yml", + ]; + for (const rel of tplFiles) { + const src = join(PYTHON_TEMPLATE_DIR, rel); + if (existsSync(src)) { + this.files.set(rel, `__TEMPLATE__:${src}`); + } + } + return this; + } + + /** + * Seeds builder with the Make/C passing exercise (Makefile, test files). + * Does NOT add src/*.c — caller provides those. + */ + withMakeTemplate(): this { + const tplFiles = [ + "Makefile", + "src/Makefile", + "src/source.h", + "test/Makefile", + "test/tmc-check.c", + "test/tmc-check.h", + "test/checkhelp.c", + "test/test_source.c", + ]; + for (const rel of tplFiles) { + const src = join(MAKE_PASSING_DIR, rel); + if (existsSync(src)) { + this.files.set(rel, `__TEMPLATE__:${src}`); + } + } + return this; + } + + /** + * Compress the current file set into a sandbox-compatible archive. + * Files are at the archive root (no parent directory prefix), matching + * what prepare-submission --no-archive-prefix produces. + * Returns the absolute path to the resulting archive. + */ + async build(format: "tar" | "zstd" = "tar"): Promise { + const dir = await this.buildDirectory(); + const ext = format === "zstd" ? "tar.zst" : "tar"; + const outPath = join(tmpdir(), `sandbox-submission-${randomUUID()}.${ext}`); + try { + await (format === "zstd" + ? execFile("tar", ["-I", "zstd", "-cf", outPath, "-C", dir, "."]) + : execFile("tar", ["-cf", outPath, "-C", dir, "."])); + } finally { + await rm(dir, { recursive: true, force: true }); + } + return outPath; + } + + /** + * Write all files to a temp directory without compressing. + * Caller is responsible for cleanup. + */ + async buildDirectory(): Promise { + const dir = await mkdtemp(join(tmpdir(), "sandbox-exercise-")); + await Promise.all( + Array.from(this.files).map(async ([rel, content]) => { + const dest = join(dir, rel); + await mkdir(dirname(dest), { recursive: true }); + if (typeof content === "string" && content.startsWith("__TEMPLATE__:")) { + const src = content.slice("__TEMPLATE__:".length); + await copyFile(src, dest); + } else { + await writeFile(dest, content); + } + }), + ); + return dir; + } +} diff --git a/src/tests/helpers/tmc-langs.ts b/src/tests/helpers/tmc-langs.ts new file mode 100644 index 0000000..477d753 --- /dev/null +++ b/src/tests/helpers/tmc-langs.ts @@ -0,0 +1,41 @@ +import { execFile as execFileCallback } from "node:child_process"; +import { existsSync, statSync } from "node:fs"; +import { chmod, mkdir } from "node:fs/promises"; +import { promisify } from "node:util"; + +const execFile = promisify(execFileCallback); + +const BINARY_VERSION = "0.39.4"; +const BINARY_URL = `https://download.mooc.fi/tmc-langs-rust/tmc-langs-cli-x86_64-unknown-linux-musl-${BINARY_VERSION}`; +const CACHE_DIR = "/tmp/tmc-langs-cli-cache"; +const BINARY_PATH = `${CACHE_DIR}/tmc-langs-cli`; + +export class TmcLangs { + private constructor(private readonly binaryPath: string) {} + + static async setup(): Promise { + const missing = !existsSync(BINARY_PATH) || statSync(BINARY_PATH).size === 0; + if (missing) { + await mkdir(CACHE_DIR, { recursive: true }); + await execFile("curl", ["-L", "-o", BINARY_PATH, BINARY_URL]); + await chmod(BINARY_PATH, 0o755); + } + return new TmcLangs(BINARY_PATH); + } + + async compressProject( + exercisePath: string, + outputPath: string, + format: "tar" | "zstd" = "tar", + ): Promise { + // --naive includes ALL files (skips student-file-policy filtering), which is + // required for sandbox tests: we need test/ and tmc/ directories included. + await execFile(this.binaryPath, [ + "compress-project", + "--exercise-path", exercisePath, + "--output-path", outputPath, + "--compression", format, + "--naive", + ]); + } +} diff --git a/src/types.ts b/src/types.ts index 6ce4868..fd80d0f 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,10 +1,24 @@ -import winston from "winston" -import { ParameterizedContext } from "koa" +import type { z } from "zod"; +import type { + MimeTypeSchema, + ResourceLimitsSchema, + StatusResponseSchema, + TaskResponseSchema, +} from "./schemas.js"; -export interface CustomContext extends ParameterizedContext { - log: winston.Logger - requestId: string -} +export type DockerRuntime = "runc" | "runsc"; +export type SupportedMimeType = z.infer; +export type ResourceLimits = z.infer; +export type StatusResponse = z.infer; +export type TaskResponse = z.infer; -// eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface CustomState {} +export interface SubmissionResult { + testOutput: string; + stdout: string; + stderr: string; + valgrind: string; + validations: string; + vmLog: string; + status: "finished" | "timeout" | "crashed" | "out-of-memory" | "failed"; + exitCode: string; +} diff --git a/src/utils/errors.test.ts b/src/utils/errors.test.ts new file mode 100644 index 0000000..34960e0 --- /dev/null +++ b/src/utils/errors.test.ts @@ -0,0 +1,387 @@ +import { describe, it, expect, vi, beforeEach } from "vitest"; +import type { FastifyRequest, FastifyReply } from "fastify"; +import { + AppError, + BadRequestError, + UnauthorizedError, + ForbiddenError, + NotFoundError, + SandboxBusyError, + InternalServerError, + handleError, +} from "./errors.js"; + +describe("Error Classes", () => { + describe("BadRequestError", () => { + it("should have 400 status code", () => { + const error = new BadRequestError("Bad input"); + expect(error.statusCode).toBe(400); + expect(error.message).toBe("Bad input"); + }); + + it("should be instanceof AppError", () => { + const error = new BadRequestError("Test"); + expect(error instanceof AppError).toBe(true); + }); + + it("should have correct error name", () => { + const error = new BadRequestError("Test"); + expect(error.name).toBe("BadRequestError"); + }); + }); + + describe("UnauthorizedError", () => { + it("should have 401 status code", () => { + const error = new UnauthorizedError("No auth"); + expect(error.statusCode).toBe(401); + expect(error.message).toBe("No auth"); + }); + + it("should use default message", () => { + const error = new UnauthorizedError(); + expect(error.message).toBe("Unauthorized"); + }); + }); + + describe("ForbiddenError", () => { + it("should have 403 status code", () => { + const error = new ForbiddenError("Access denied"); + expect(error.statusCode).toBe(403); + expect(error.message).toBe("Access denied"); + }); + + it("should use default message", () => { + const error = new ForbiddenError(); + expect(error.message).toBe("Forbidden"); + }); + }); + + describe("NotFoundError", () => { + it("should have 404 status code", () => { + const error = new NotFoundError("Not found"); + expect(error.statusCode).toBe(404); + expect(error.message).toBe("Not found"); + }); + + it("should use default message", () => { + const error = new NotFoundError(); + expect(error.message).toBe("Not found"); + }); + }); + + describe("SandboxBusyError", () => { + it("should have 503 status code", () => { + const error = new SandboxBusyError("Too busy"); + expect(error.statusCode).toBe(503); + expect(error.message).toBe("Too busy"); + }); + + it("should use default busy message", () => { + const error = new SandboxBusyError(); + expect(error.message).toContain("busy"); + }); + }); + + describe("InternalServerError", () => { + it("should have 500 status code", () => { + const error = new InternalServerError("Oops"); + expect(error.statusCode).toBe(500); + expect(error.message).toBe("Oops"); + }); + + it("should use default message", () => { + const error = new InternalServerError(); + expect(error.message).toBe("Internal server error"); + }); + }); + + describe("AppError base class", () => { + it("should be an Error", () => { + const error = new AppError(400, "Test"); + expect(error instanceof Error).toBe(true); + }); + + it("should capture stack trace", () => { + const error = new AppError(400, "Test"); + expect(error.stack).toBeDefined(); + expect(error.stack).toContain("AppError"); + }); + + it("should have correct property access", () => { + const error = new AppError(418, "I am a teapot"); + expect(error.statusCode).toBe(418); + expect(error.message).toBe("I am a teapot"); + }); + }); +}); + +describe("Error Handler", () => { + let mockRequest: FastifyRequest; + let mockReply: FastifyReply; + + beforeEach(() => { + mockRequest = { + log: { + error: vi.fn(), + }, + } as unknown as FastifyRequest; + mockReply = { + code: vi.fn().mockReturnThis(), + send: vi.fn().mockReturnThis(), + } as unknown as FastifyReply; + }); + + describe("AppError handling", () => { + it("should handle BadRequestError", () => { + const error = new BadRequestError("Invalid"); + handleError(error, mockRequest, mockReply); + + expect(mockReply.code).toHaveBeenCalledWith(400); + expect(mockReply.send).toHaveBeenCalledWith({ + error: "Invalid", + statusCode: 400, + }); + }); + + it("should handle UnauthorizedError", () => { + const error = new UnauthorizedError("No token"); + handleError(error, mockRequest, mockReply); + + expect(mockReply.code).toHaveBeenCalledWith(401); + expect(mockReply.send).toHaveBeenCalledWith({ + error: "No token", + statusCode: 401, + }); + }); + + it("should handle ForbiddenError", () => { + const error = new ForbiddenError("Denied"); + handleError(error, mockRequest, mockReply); + + expect(mockReply.code).toHaveBeenCalledWith(403); + expect(mockReply.send).toHaveBeenCalledWith({ + error: "Denied", + statusCode: 403, + }); + }); + + it("should handle NotFoundError", () => { + const error = new NotFoundError("Resource"); + handleError(error, mockRequest, mockReply); + + expect(mockReply.code).toHaveBeenCalledWith(404); + expect(mockReply.send).toHaveBeenCalledWith({ + error: "Resource", + statusCode: 404, + }); + }); + + it("should handle SandboxBusyError", () => { + const error = new SandboxBusyError("Overloaded"); + handleError(error, mockRequest, mockReply); + + expect(mockReply.code).toHaveBeenCalledWith(503); + expect(mockReply.send).toHaveBeenCalledWith({ + error: "Overloaded", + statusCode: 503, + }); + }); + + it("should handle InternalServerError", () => { + const error = new InternalServerError("Crash"); + handleError(error, mockRequest, mockReply); + + expect(mockReply.code).toHaveBeenCalledWith(500); + expect(mockReply.send).toHaveBeenCalledWith({ + error: "Crash", + statusCode: 500, + }); + }); + + it("should handle all status codes correctly", () => { + const testCases = [ + { error: new BadRequestError(""), code: 400 }, + { error: new UnauthorizedError(""), code: 401 }, + { error: new ForbiddenError(""), code: 403 }, + { error: new NotFoundError(""), code: 404 }, + { error: new InternalServerError(""), code: 500 }, + { error: new SandboxBusyError(""), code: 503 }, + ]; + + testCases.forEach(({ error, code }) => { + mockReply.code = vi.fn().mockReturnThis(); + mockReply.send = vi.fn().mockReturnThis(); + handleError(error, mockRequest, mockReply); + expect(mockReply.code).toHaveBeenCalledWith(code); + }); + }); + }); + + describe("Generic Error handling", () => { + it("should handle standard Error", () => { + const error = new Error("Something went wrong"); + handleError(error, mockRequest, mockReply); + + expect(mockReply.code).toHaveBeenCalledWith(500); + expect(mockReply.send).toHaveBeenCalledWith({ + error: "Internal server error", + statusCode: 500, + }); + }); + + it("should log unexpected errors via request.log.error", () => { + const error = new Error("Something went wrong"); + handleError(error, mockRequest, mockReply); + + expect( + (mockRequest.log as unknown as { error: ReturnType }).error, + ).toHaveBeenCalledWith({ error }, "Unexpected error"); + }); + + it("should log unknown non-Error throws via request.log.error", () => { + handleError("string error", mockRequest, mockReply); + + expect( + (mockRequest.log as unknown as { error: ReturnType }).error, + ).toHaveBeenCalledWith({ error: "string error" }, "Unknown non-Error thrown"); + }); + + it("should handle TypeError", () => { + const error = new TypeError("Cannot read property"); + handleError(error, mockRequest, mockReply); + + expect(mockReply.code).toHaveBeenCalledWith(500); + }); + + it("should handle RangeError", () => { + const error = new RangeError("Out of range"); + handleError(error, mockRequest, mockReply); + + expect(mockReply.code).toHaveBeenCalledWith(500); + }); + + it("should handle SyntaxError", () => { + const error = new SyntaxError("Invalid JSON"); + handleError(error, mockRequest, mockReply); + + expect(mockReply.code).toHaveBeenCalledWith(500); + }); + }); + + describe("Unknown error handling", () => { + it("should handle string error", () => { + handleError("unexpected", mockRequest, mockReply); + + expect(mockReply.code).toHaveBeenCalledWith(500); + expect(mockReply.send).toHaveBeenCalledWith({ + error: "Unknown error", + statusCode: 500, + }); + }); + + it("should handle null error", () => { + handleError(null, mockRequest, mockReply); + + expect(mockReply.code).toHaveBeenCalledWith(500); + expect(mockReply.send).toHaveBeenCalledWith({ + error: "Unknown error", + statusCode: 500, + }); + }); + + it("should handle undefined error", () => { + handleError(undefined, mockRequest, mockReply); + + expect(mockReply.code).toHaveBeenCalledWith(500); + }); + + it("should handle object error", () => { + handleError({ error: "Something" }, mockRequest, mockReply); + + expect(mockReply.code).toHaveBeenCalledWith(500); + expect(mockReply.send).toHaveBeenCalledWith({ + error: "Unknown error", + statusCode: 500, + }); + }); + + it("should handle number error", () => { + handleError(404, mockRequest, mockReply); + + expect(mockReply.code).toHaveBeenCalledWith(500); + }); + }); + + describe("corner cases", () => { + it("should handle empty error message", () => { + const error = new BadRequestError(""); + handleError(error, mockRequest, mockReply); + + expect(mockReply.code).toHaveBeenCalledWith(400); + expect(mockReply.send).toHaveBeenCalledWith({ + error: "", + statusCode: 400, + }); + }); + + it("should handle very long error message", () => { + const longMessage = "x".repeat(10_000); + const error = new BadRequestError(longMessage); + handleError(error, mockRequest, mockReply); + + expect(mockReply.code).toHaveBeenCalledWith(400); + expect(mockReply.send).toHaveBeenCalledWith({ + error: longMessage, + statusCode: 400, + }); + }); + + it("should handle special characters in message", () => { + const error = new BadRequestError('Test "quotes" and & symbols'); + handleError(error, mockRequest, mockReply); + + expect(mockReply.send).toHaveBeenCalledWith({ + error: 'Test "quotes" and & symbols', + statusCode: 400, + }); + }); + + it("should handle unicode characters in message", () => { + const error = new BadRequestError("Error: 测试 🚀 ñ"); + handleError(error, mockRequest, mockReply); + + expect(mockReply.send).toHaveBeenCalledWith({ + error: "Error: 测试 🚀 ñ", + statusCode: 400, + }); + }); + + it("should handle multiline error message", () => { + const multilineMessage = "Line 1\nLine 2\nLine 3"; + const error = new BadRequestError(multilineMessage); + handleError(error, mockRequest, mockReply); + + expect(mockReply.send).toHaveBeenCalledWith({ + error: multilineMessage, + statusCode: 400, + }); + }); + + it("should call methods in correct order", () => { + const callOrder: string[] = []; + mockReply.code = vi.fn(() => { + callOrder.push("code"); + return mockReply; + }); + mockReply.send = vi.fn(() => { + callOrder.push("send"); + return mockReply; + }); + + const error = new BadRequestError("Test"); + handleError(error, mockRequest, mockReply); + + expect(callOrder).toStrictEqual(["code", "send"]); + }); + }); +}); diff --git a/src/utils/errors.ts b/src/utils/errors.ts index 7fdfa70..27e1714 100644 --- a/src/utils/errors.ts +++ b/src/utils/errors.ts @@ -1,20 +1,85 @@ -class CustomError extends Error { - constructor(message?: string) { - super(message) - if (Error.captureStackTrace) { - Error.captureStackTrace(this, CustomError) - } +import type { FastifyReply, FastifyRequest } from "fastify"; + +export class AppError extends Error { + override name = "AppError"; + + constructor( + public readonly statusCode: number, + message: string, + ) { + super(message); + } +} + +export class BadRequestError extends AppError { + override name = "BadRequestError"; + + constructor(message: string) { + super(400, message); + } +} + +export class UnauthorizedError extends AppError { + override name = "UnauthorizedError"; + + constructor(message: string = "Unauthorized") { + super(401, message); + } +} + +export class ForbiddenError extends AppError { + override name = "ForbiddenError"; + + constructor(message: string = "Forbidden") { + super(403, message); } } -export class NotFoundError extends CustomError {} +export class NotFoundError extends AppError { + override name = "NotFoundError"; -export class UnauthorizedError extends CustomError {} + constructor(message: string = "Not found") { + super(404, message); + } +} -export class ForbiddenError extends CustomError {} +export class SandboxBusyError extends AppError { + override name = "SandboxBusyError"; -export class BadRequestError extends CustomError {} + constructor(message: string = "Sandbox is currently busy, please try again later") { + super(503, message); + } +} -export class SandboxBusyError extends CustomError {} +export class InternalServerError extends AppError { + override name = "InternalServerError"; -export class InternalServerError extends CustomError {} + constructor(message: string = "Internal server error") { + super(500, message); + } +} + +export function handleError(error: unknown, request: FastifyRequest, reply: FastifyReply): void { + if (error instanceof AppError) { + reply.code(error.statusCode).send({ + error: error.message, + statusCode: error.statusCode, + }); + return; + } + + if (error instanceof Error) { + request.log.error({ error }, "Unexpected error"); + reply.code(500).send({ + error: "Internal server error", + statusCode: 500, + }); + return; + } + + request.log.error({ error }, "Unknown non-Error thrown"); + reply.code(500).send({ + error: "Unknown error", + statusCode: 500, + }); +} diff --git a/src/utils/hmac.test.ts b/src/utils/hmac.test.ts new file mode 100644 index 0000000..85a1cfa --- /dev/null +++ b/src/utils/hmac.test.ts @@ -0,0 +1,64 @@ +import { describe, it, expect } from "vitest"; +import { createHmac } from "node:crypto"; +import { verifyHmacSha256 } from "./hmac.js"; + +function sign(message: string, secret: string): string { + return createHmac("sha256", secret).update(message, "utf8").digest("hex"); +} + +describe("verifyHmacSha256", () => { + const secret = "test-secret-key"; + const message = "https://example.com/callback"; + + it("returns true for a valid signature", () => { + const signature = sign(message, secret); + expect(verifyHmacSha256(message, signature, secret)).toBe(true); + }); + + it("returns false for wrong secret", () => { + const signature = sign(message, secret); + expect(verifyHmacSha256(message, signature, "wrong-secret")).toBe(false); + }); + + it("returns false for tampered message", () => { + const signature = sign(message, secret); + expect(verifyHmacSha256("https://evil.com/callback", signature, secret)).toBe(false); + }); + + it("returns false for tampered signature", () => { + const signature = sign(message, secret); + const tampered = signature.slice(0, -2) + "00"; + expect(verifyHmacSha256(message, tampered, secret)).toBe(false); + }); + + it("returns false for empty signature", () => { + expect(verifyHmacSha256(message, "", secret)).toBe(false); + }); + + it("returns false for non-hex signature", () => { + expect(verifyHmacSha256(message, "not-hex-at-all!!", secret)).toBe(false); + }); + + it("returns false for valid-length string with non-hex characters", () => { + // 64 chars, right length for SHA-256 hex, but 'g' is not a hex digit + expect(verifyHmacSha256(message, "g".repeat(64), secret)).toBe(false); + }); + + it("returns false for signature of wrong length", () => { + const truncated = sign(message, secret).slice(0, 32); + expect(verifyHmacSha256(message, truncated, secret)).toBe(false); + }); + + it("is case-insensitive on hex digits (both produce same bytes)", () => { + const signatureLower = sign(message, secret).toLowerCase(); + const signatureUpper = sign(message, secret).toUpperCase(); + expect(verifyHmacSha256(message, signatureLower, secret)).toBe(true); + expect(verifyHmacSha256(message, signatureUpper, secret)).toBe(true); + }); + + it("works with unicode message content", () => { + const unicodeMessage = "https://example.com/callback?user=测试"; + const signature = sign(unicodeMessage, secret); + expect(verifyHmacSha256(unicodeMessage, signature, secret)).toBe(true); + }); +}); diff --git a/src/utils/hmac.ts b/src/utils/hmac.ts new file mode 100644 index 0000000..91f3122 --- /dev/null +++ b/src/utils/hmac.ts @@ -0,0 +1,13 @@ +import { createHmac, timingSafeEqual } from "node:crypto"; + +const HEX_SHA256_RE = /^[0-9a-fA-F]{64}$/; + +// Verifies that `signature` is the hex-encoded HMAC-SHA256 of `message` under `secret`. +// Uses constant-time comparison to prevent timing attacks. +export function verifyHmacSha256(message: string, signature: string, secret: string): boolean { + if (!HEX_SHA256_RE.test(signature)) return false; + const expected = createHmac("sha256", secret).update(message, "utf8").digest(); + const provided = Buffer.from(signature, "hex"); + if (expected.length !== provided.length) return false; + return timingSafeEqual(expected, provided); +} diff --git a/src/utils/url-safety.test.ts b/src/utils/url-safety.test.ts new file mode 100644 index 0000000..463cc3c --- /dev/null +++ b/src/utils/url-safety.test.ts @@ -0,0 +1,136 @@ +import { describe, it, expect } from "vitest"; +import { isPrivateOrMetadataUrl } from "./url-safety.js"; + +describe("isPrivateOrMetadataUrl", () => { + describe("public URLs (should return false)", () => { + it("allows regular public HTTPS URL", () => { + expect(isPrivateOrMetadataUrl("https://example.com/callback")).toBe(false); + }); + + it("allows public IP URL", () => { + expect(isPrivateOrMetadataUrl("https://8.8.8.8/callback")).toBe(false); + }); + + it("allows public URL with port", () => { + expect(isPrivateOrMetadataUrl("https://example.com:8080/callback")).toBe(false); + }); + + it("allows public URL with path and query", () => { + expect(isPrivateOrMetadataUrl("https://api.example.com/v1/notify?token=abc")).toBe(false); + }); + + it("returns false for an unparseable string (no URL)", () => { + expect(isPrivateOrMetadataUrl("not-a-url")).toBe(false); + }); + }); + + describe("loopback addresses (should return true)", () => { + it("blocks 127.0.0.1", () => { + expect(isPrivateOrMetadataUrl("http://127.0.0.1/")).toBe(true); + }); + + it("blocks 127.x.x.x range", () => { + expect(isPrivateOrMetadataUrl("http://127.255.255.255/")).toBe(true); + }); + + it("blocks IPv6 loopback ::1", () => { + expect(isPrivateOrMetadataUrl("http://[::1]/")).toBe(true); + }); + + it("blocks 0.0.0.0", () => { + expect(isPrivateOrMetadataUrl("http://0.0.0.0/")).toBe(true); + }); + + it("blocks localhost hostname", () => { + expect(isPrivateOrMetadataUrl("http://localhost/callback")).toBe(true); + }); + + it("blocks localhost with port", () => { + expect(isPrivateOrMetadataUrl("http://localhost:8080/callback")).toBe(true); + }); + }); + + describe("RFC1918 private ranges (should return true)", () => { + it("blocks 10.x.x.x", () => { + expect(isPrivateOrMetadataUrl("http://10.0.0.1/callback")).toBe(true); + }); + + it("blocks 172.16.x.x", () => { + expect(isPrivateOrMetadataUrl("http://172.16.0.1/callback")).toBe(true); + }); + + it("blocks 172.31.x.x", () => { + expect(isPrivateOrMetadataUrl("http://172.31.255.254/callback")).toBe(true); + }); + + it("allows 172.15.x.x (just outside RFC1918 range)", () => { + expect(isPrivateOrMetadataUrl("http://172.15.0.1/callback")).toBe(false); + }); + + it("allows 172.32.x.x (just outside RFC1918 range)", () => { + expect(isPrivateOrMetadataUrl("http://172.32.0.1/callback")).toBe(false); + }); + + it("blocks 192.168.x.x", () => { + expect(isPrivateOrMetadataUrl("http://192.168.1.100/callback")).toBe(true); + }); + }); + + describe("link-local and cloud metadata (should return true)", () => { + it("blocks 169.254.x.x (link-local)", () => { + expect(isPrivateOrMetadataUrl("http://169.254.0.1/")).toBe(true); + }); + + it("blocks AWS metadata IP 169.254.169.254", () => { + expect(isPrivateOrMetadataUrl("http://169.254.169.254/latest/meta-data/")).toBe(true); + }); + + it("blocks metadata.google.internal", () => { + expect(isPrivateOrMetadataUrl("http://metadata.google.internal/computeMetadata/v1/")).toBe( + true, + ); + }); + + it("blocks metadata.internal", () => { + expect(isPrivateOrMetadataUrl("http://metadata.internal/")).toBe(true); + }); + + it("blocks AWS IPv6 metadata fd00:ec2::254", () => { + expect(isPrivateOrMetadataUrl("http://[fd00:ec2::254]/latest/meta-data/")).toBe(true); + }); + }); + + describe("IPv6 unique-local (should return true)", () => { + it("blocks fc00::/7 unique-local addresses", () => { + expect(isPrivateOrMetadataUrl("http://[fc00::1]/")).toBe(true); + }); + + it("blocks fd00::/8 unique-local addresses", () => { + expect(isPrivateOrMetadataUrl("http://[fd12:3456:789a::1]/")).toBe(true); + }); + + it("blocks IPv6 link-local fe80::", () => { + expect(isPrivateOrMetadataUrl("http://[fe80::1]/")).toBe(true); + }); + }); + + describe("CGNAT range (should return true)", () => { + it("blocks 100.64.0.0 (CGNAT start)", () => { + expect(isPrivateOrMetadataUrl("http://100.64.0.1/")).toBe(true); + }); + + it("blocks 100.127.255.255 (CGNAT end)", () => { + expect(isPrivateOrMetadataUrl("http://100.127.255.254/")).toBe(true); + }); + + it("allows 100.128.0.1 (outside CGNAT)", () => { + expect(isPrivateOrMetadataUrl("http://100.128.0.1/")).toBe(false); + }); + }); + + describe("case insensitivity for hostnames", () => { + it("blocks mixed-case cloud metadata hostname", () => { + expect(isPrivateOrMetadataUrl("http://Metadata.Google.Internal/")).toBe(true); + }); + }); +}); diff --git a/src/utils/url-safety.ts b/src/utils/url-safety.ts new file mode 100644 index 0000000..9a74700 --- /dev/null +++ b/src/utils/url-safety.ts @@ -0,0 +1,45 @@ +// Private/reserved IP ranges and hostnames that must not be reachable as callback targets. +const PRIVATE_HOST_PATTERNS: readonly RegExp[] = [ + /^127\./, // IPv4 loopback (127.0.0.0/8) + /^::1$/, // IPv6 loopback + /^0\./, // this-network (0.0.0.0/8) + /^10\./, // RFC1918 (10.0.0.0/8) + /^172\.(1[6-9]|2\d|3[01])\./, // RFC1918 (172.16.0.0/12) + /^192\.168\./, // RFC1918 (192.168.0.0/16) + /^169\.254\./, // link-local + AWS/Azure metadata (169.254.0.0/16) + /^fe80:/i, // IPv6 link-local (fe80::/10) + /^f[cd][0-9a-f]{2}:/i, // IPv6 unique-local (fc00::/7) + /^100\.(6[4-9]|[7-9]\d|1[01]\d|12[0-7])\./, // CGNAT (100.64.0.0/10, RFC6598) + /^192\.0\.2\./, // TEST-NET-1 (RFC5737) + /^198\.51\.100\./, // TEST-NET-2 (RFC5737) + /^203\.0\.113\./, // TEST-NET-3 (RFC5737) +]; + +const BLOCKED_HOSTNAMES: Readonly> = new Set([ + "localhost", // always resolves to loopback + "metadata.google.internal", + "metadata.internal", +]); + +// Specific metadata IPs not already covered by range patterns above. +const CLOUD_METADATA_IPS: Readonly> = new Set([ + "fd00:ec2::254", // AWS IPv6 metadata +]); + +export function isPrivateOrMetadataUrl(rawUrl: string): boolean { + let url: URL; + try { + url = new URL(rawUrl); + } catch { + return false; + } + + // Strip IPv6 brackets before pattern matching. + const hostname = url.hostname.replace(/^\[|\]$/g, "").toLowerCase(); + + if (BLOCKED_HOSTNAMES.has(hostname) || CLOUD_METADATA_IPS.has(hostname)) { + return true; + } + + return PRIVATE_HOST_PATTERNS.some((pattern) => pattern.test(hostname)); +} diff --git a/tmc-run b/tmc-run index eb2abbf..075851b 100755 --- a/tmc-run +++ b/tmc-run @@ -38,7 +38,7 @@ echo "Running tests..." export RUST_LOG=debug export TMC_SANDBOX=true export MAVEN_OPTS="-Dtestfx.robot=glass -Dtestfx.headless=true -Dprism.order=sw -Dprism.text=t2k -Djava.awt.headless=true" -./tmc-langs-cli run-tests --exercise-path . --output-path /app/test_output.txt --checkstyle-output-path /app/validations.json --locale $error_msg_locale > >(tee -a stdout.log) 2> >(tee -a stderr.log >&2) || exit 110 +./tmc-langs-cli run-tests --exercise-path . --output-path /app/test_output.txt --checkstyle-output-path /app/validations.json --locale "$error_msg_locale" > >(tee -a stdout.log) 2> >(tee -a stderr.log >&2) || exit 110 echo "All the files:" ls -laR diff --git a/tsconfig.json b/tsconfig.json index 7646a60..8704d38 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,65 +1,25 @@ { - "include": ["src", "server.ts"], - "exclude": ["node_modules", "dist", "uploads", "work"], "compilerOptions": { - /* Basic Options */ - "target": "es6" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */, - "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, - "lib": [ - "es2019" - ] /* Specify library files to be included in the compilation. */, - // "allowJs": true, /* Allow javascript files to be compiled. */ - // "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - // "declaration": true, /* Generates corresponding '.d.ts' file. */ - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - // "sourceMap": true, /* Generates corresponding '.map' file. */ - // "outFile": "./", /* Concatenate and emit output to single file. */ - "outDir": "./dist" /* Redirect output structure to the directory. */, - // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - // "composite": true, /* Enable project compilation */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - - /* Strict Type-Checking Options */ - "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - - /* Module Resolution Options */ - // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - "typeRoots": [ - "node_modules/@types" - ] /* List of folders to include type definitions from. */, - // "types": [], /* Type declaration files to be included in compilation. */ - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - } + "target": "ES2022", + "module": "ES2022", + "lib": ["ES2022"], + "moduleResolution": "bundler", + "rootDir": "./src", + "outDir": "./dist", + "strict": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "exactOptionalPropertyTypes": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] } diff --git a/vitest.config.ts b/vitest.config.ts index 25b3ad6..bb6c7ac 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,5 +1,10 @@ -module.exports = { - preset: "ts-jest", - testEnvironment: "node", - testPathIgnorePatterns: ["/dist/", "/node_modules/"], -} +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + globals: true, + environment: "node", + testTimeout: 10_000, + fileParallelism: false, + }, +}); From 0fff3cab205785acf7677989211c99379a3e4601 Mon Sep 17 00:00:00 2001 From: Henrik Nygren Date: Fri, 15 May 2026 13:04:40 +0300 Subject: [PATCH 3/5] WIP --- .dockerignore | 6 + .env.example | 1 + .github/workflows/main.yml | 2 +- .gitignore | 1 + .node-version | 1 + .nvmrc | 1 + Dockerfile | 22 +- README.md | 11 +- package-lock.json | 10429 ---------------- package.json | 23 +- pnpm-lock.yaml | 647 +- pnpm-workspace.yaml | 4 + src/app.ts | 2 + src/index.docker-runtime.test.ts | 29 +- src/index.hmac.test.ts | 9 + src/index.test.ts | 101 +- src/index.ts | 7 + src/integration/e2e-sandbox.test.ts | 64 +- src/routes.test.ts | 208 + src/routes.ts | 167 +- src/schemas.test.ts | 44 +- src/schemas.ts | 16 +- src/services/docker-image-maintenance.test.ts | 39 + src/services/docker-image-maintenance.ts | 130 + src/services/file-extractor.ts | 8 +- src/services/resource-manager.ts | 17 + src/services/sandbox-executor.test.ts | 75 +- src/services/sandbox-executor.ts | 22 +- src/tests/helpers/create-callback-server.ts | 1 + src/tests/helpers/tmc-langs.ts | 32 +- src/utils/url-safety.test.ts | 16 + src/utils/url-safety.ts | 106 +- vitest.config.ts | 1 - 33 files changed, 1644 insertions(+), 10598 deletions(-) create mode 100644 .dockerignore create mode 100644 .node-version create mode 100644 .nvmrc delete mode 100644 package-lock.json create mode 100644 pnpm-workspace.yaml create mode 100644 src/routes.test.ts create mode 100644 src/services/docker-image-maintenance.test.ts create mode 100644 src/services/docker-image-maintenance.ts diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..0cf829c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +node_modules +dist +work +.git +.env +*.log diff --git a/.env.example b/.env.example index d28aab1..87565c8 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,4 @@ PORT=3000 HOST=0.0.0.0 +DOCKER_RUNTIME=runc PRINT_VM_LOG=0 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 33be886..0f63e78 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -28,7 +28,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: 22 + node-version-file: .nvmrc cache: pnpm - name: Install dependencies diff --git a/.gitignore b/.gitignore index 2563959..526b15c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ node_modules/ dist/ +work/ .DS_Store *.log .env diff --git a/.node-version b/.node-version new file mode 100644 index 0000000..5bf4400 --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +24.15.0 diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..5bf4400 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +24.15.0 diff --git a/Dockerfile b/Dockerfile index bd49ff4..82f3ee7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,18 +1,34 @@ -FROM node:22-alpine +FROM node:24.15.0-alpine AS builder RUN apk --no-cache add bash RUN corepack enable && corepack prepare pnpm@latest --activate -COPY --chown=node package.json pnpm-lock.yaml /app/ +COPY --chown=node package.json pnpm-lock.yaml pnpm-workspace.yaml /app/ USER node WORKDIR /app -RUN pnpm install --frozen-lockfile --prod +RUN pnpm install --frozen-lockfile COPY --chown=node . /app RUN pnpm build +RUN pnpm prune --prod --ignore-scripts + +FROM node:24.15.0-alpine + +RUN apk --no-cache add bash + +RUN corepack enable && corepack prepare pnpm@latest --activate + +USER node +WORKDIR /app + +COPY --from=builder --chown=node /app/package.json /app/pnpm-lock.yaml /app/ +COPY --from=builder --chown=node /app/node_modules /app/node_modules +COPY --from=builder --chown=node /app/dist /app/dist +COPY --from=builder --chown=node /app/init /app/tmc-run /app/ +RUN mkdir -p /app/work EXPOSE 3000 diff --git a/README.md b/README.md index 9615d26..6664282 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,16 @@ ## Development environment -Requirements: Node and docker, tar, zstd, ts (from moreutils) +Requirements: pnpm (nodejs 22+), docker, tar, zstd, ts (from moreutils). ```bash -npm ci -npm run dev +pnpm install +export DOCKER_RUNTIME=runc +pnpm dev ``` +`DOCKER_RUNTIME` is required. Use `runc` for the standard Docker runtime or `runsc` for gVisor. + If you wish to see the VM Log in the terminal, run: ```bash @@ -18,5 +21,5 @@ export PRINT_VM_LOG=1 ## Running tests ```bash -npm run test +pnpm test ``` diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 65723c3..0000000 --- a/package-lock.json +++ /dev/null @@ -1,10429 +0,0 @@ -{ - "name": "backendv2", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/core": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", - "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.1", - "@babel/parser": "^7.12.3", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", - "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", - "dev": true, - "requires": { - "@babel/types": "^7.12.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - } - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", - "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", - "dev": true, - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" - } - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", - "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - } - } - }, - "@babel/traverse": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", - "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.5", - "@babel/types": "^7.12.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.5.tgz", - "integrity": "sha512-gyTcvz7JFa4V45C0Zklv//GmFOAal5fL23OWpBLqc4nZ4Yrz67s4kCNwSK1Gu0MXGTU8mRY3zJYtacLdKXlzig==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - } - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@dabh/diagnostics": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", - "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", - "requires": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "@eslint/eslintrc": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", - "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", - "dev": true, - "requires": { - "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.19", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", - "dev": true - }, - "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - } - } - }, - "@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - } - } - }, - "@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "node-notifier": "^8.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - } - } - }, - "@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "dev": true, - "requires": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - } - }, - "@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - } - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "@koa/cors": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-3.1.0.tgz", - "integrity": "sha512-7ulRC1da/rBa6kj6P4g2aJfnET3z8Uf3SWu60cjbtxTA5g8lxRdX/Bd2P92EagGwwAhANeNw8T8if99rJliR6Q==", - "requires": { - "vary": "^1.1.2" - } - }, - "@koa/multer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@koa/multer/-/multer-3.0.0.tgz", - "integrity": "sha512-y+OQBmex5D1jIl723gAEUYcAWPEicIXppaAKw/zCMfpllQ08ZNweDPwoCLxEoatqd5pCu2XG6V8dl67JRq3RJw==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "^1.6.0" - } - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, - "@sinonjs/commons": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", - "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/babel__core": { - "version": "7.1.12", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", - "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.3.tgz", - "integrity": "sha512-uCoznIPDmnickEi6D0v11SBpW0OuVqHJCa7syXqQHy5uktSCreIlt0iglsCnmvz8yCb38hGcWeseA8cWJSwv5Q==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.15.tgz", - "integrity": "sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.33", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", - "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg==", - "dev": true - }, - "@types/cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==", - "dev": true - }, - "@types/cookies": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.4.tgz", - "integrity": "sha512-oTGtMzZZAVuEjTwCjIh8T8FrC8n/uwy+PG0yTvQcdZ7etoel7C7/3MSd7qrukENTgQtotG7gvBlBojuVs7X5rw==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/express": "*", - "@types/keygrip": "*", - "@types/node": "*" - } - }, - "@types/express": { - "version": "4.17.8", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.8.tgz", - "integrity": "sha512-wLhcKh3PMlyA2cNAB9sjM1BntnhPMiM0JOBwPBqttjHev2428MLEB4AYVN+d8s2iyCVZac+o41Pflm/ZH5vLXQ==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.13.tgz", - "integrity": "sha512-RgDi5a4nuzam073lRGKTUIaL3eF2+H7LJvJ8eUnCI0wA6SNjXc44DCmWNiTLs/AZ7QlsFWZiw/gTG3nSQGL0fA==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz", - "integrity": "sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/http-assert": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.1.tgz", - "integrity": "sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ==", - "dev": true - }, - "@types/http-errors": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.0.tgz", - "integrity": "sha512-2aoSC4UUbHDj2uCsCxcG/vRMXey/m17bC7UwitVm5hn22nI8O8Y9iDpA76Orc+DWkQ4zZrOKEshCqR/jSuXAHA==", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "26.0.17", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.17.tgz", - "integrity": "sha512-5sy3dHuiT/nJGM0XZ8ozFgdR4Y/gmi89n2OCDthTULSi8nG3YdcSDVuxYT3X7eN62NGXWJYz2oNOpDp/aIaynQ==", - "dev": true, - "requires": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" - } - }, - "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", - "dev": true - }, - "@types/keygrip": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", - "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==", - "dev": true - }, - "@types/koa": { - "version": "2.11.6", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.11.6.tgz", - "integrity": "sha512-BhyrMj06eQkk04C97fovEDQMpLpd2IxCB4ecitaXwOKGq78Wi2tooaDOWOFGajPk8IkQOAtMppApgSVkYe1F/A==", - "dev": true, - "requires": { - "@types/accepts": "*", - "@types/content-disposition": "*", - "@types/cookies": "*", - "@types/http-assert": "*", - "@types/http-errors": "*", - "@types/keygrip": "*", - "@types/koa-compose": "*", - "@types/node": "*" - } - }, - "@types/koa-bodyparser": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@types/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz", - "integrity": "sha512-aB/vwwq4G9FAtKzqZ2p8UHTscXxZvICFKVjuckqxCtkX1Ro7F5KHkTCUqTRZFBgDoEkmeca+bFLI1bIsdPPZTA==", - "dev": true, - "requires": { - "@types/koa": "*" - } - }, - "@types/koa-compose": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", - "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", - "dev": true, - "requires": { - "@types/koa": "*" - } - }, - "@types/koa-router": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/koa-router/-/koa-router-7.4.1.tgz", - "integrity": "sha512-Hg78TXz78QYfEgdq3nTeRmQFEwJKZljsXb/DhtexmyrpRDRnl59oMglh9uPj3/WgKor0woANrYTnxA8gaWGK2A==", - "dev": true, - "requires": { - "@types/koa": "*" - } - }, - "@types/koa__cors": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/koa__cors/-/koa__cors-3.0.2.tgz", - "integrity": "sha512-gBetQR0DJ9JTG1YQoW33BADHCrDPJGiJUKUUcEPJwW1A2unzpIMhorEpXB6eMaaXTaqHLemcGnq3RmH9XaryRQ==", - "dev": true, - "requires": { - "@types/koa": "*" - } - }, - "@types/koa__multer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/koa__multer/-/koa__multer-2.0.2.tgz", - "integrity": "sha512-wIRH6jXfKgfMSEGmXo8sTT+13J/RXPYqIfNRwYDE9izsNv125o2pU/7hnnc+c2rGNNO5cG/ahsegZm8h8bDWEQ==", - "dev": true, - "requires": { - "@types/koa": "*" - } - }, - "@types/mime": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz", - "integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==", - "dev": true - }, - "@types/node": { - "version": "14.0.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.10.tgz", - "integrity": "sha512-Bz23oN/5bi0rniKT24ExLf4cK0JdvN3dH/3k0whYkdN4eI4vS2ZW/2ENNn2uxHCzWcbdHIa/GRuWQytfzCjRYw==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/prettier": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.5.tgz", - "integrity": "sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ==", - "dev": true - }, - "@types/qs": { - "version": "6.9.5", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz", - "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", - "dev": true - }, - "@types/serve-static": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.6.tgz", - "integrity": "sha512-nuRJmv7jW7VmCVTn+IgYDkkbbDGyIINOeu/G0d74X3lm6E5KfMeQPJhxIt1ayQeQB3cSxvYs1RA/wipYoFB4EA==", - "dev": true, - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true - }, - "@types/superagent": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.10.tgz", - "integrity": "sha512-xAgkb2CMWUMCyVc/3+7iQfOEBE75NvuZeezvmixbUw3nmENf2tCnQkW5yQLTYqvXUQ+R6EXxdqKKbal2zM5V/g==", - "dev": true, - "requires": { - "@types/cookiejar": "*", - "@types/node": "*" - } - }, - "@types/supertest": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.10.tgz", - "integrity": "sha512-Xt8TbEyZTnD5Xulw95GLMOkmjGICrOQyJ2jqgkSjAUR3mm7pAIzSR0NFBaMcwlzVvlpCjNwbATcWWwjNiZiFrQ==", - "dev": true, - "requires": { - "@types/superagent": "*" - } - }, - "@types/tar-fs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/tar-fs/-/tar-fs-2.0.0.tgz", - "integrity": "sha512-3H2HmxuT1OCZYXi1KG5xIjbpv97JjdLSRByH13YhHK8lr+GaJndJ91IuQfHxn23BQRaWHf2LTnlHPQcQDzt8vw==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/tar-stream": "*" - } - }, - "@types/tar-stream": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/tar-stream/-/tar-stream-2.1.0.tgz", - "integrity": "sha512-s1UQxQUVMHbSkCC0X4qdoiWgHF8DoyY1JjQouFsnk/8ysoTdBaiCHud/exoAZzKDbzAXVc+ah6sczxGVMAohFw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==", - "dev": true - }, - "@types/yargs": { - "version": "15.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.9.tgz", - "integrity": "sha512-HmU8SeIRhZCWcnRskCs36Q1Q00KBV6Cqh/ora8WN1+22dY07AZdn6Gel8QZ3t26XYPImtcL8WV/eqjhVmMEw4g==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.9.1.tgz", - "integrity": "sha512-QRLDSvIPeI1pz5tVuurD+cStNR4sle4avtHhxA+2uyixWGFjKzJ+EaFVRW6dA/jOgjV5DTAjOxboQkRDE8cRlQ==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.9.1", - "@typescript-eslint/scope-manager": "4.9.1", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.9.1.tgz", - "integrity": "sha512-c3k/xJqk0exLFs+cWSJxIjqLYwdHCuLWhnpnikmPQD2+NGAx9KjLYlBDcSI81EArh9FDYSL6dslAUSwILeWOxg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.9.1", - "@typescript-eslint/types": "4.9.1", - "@typescript-eslint/typescript-estree": "4.9.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.9.1.tgz", - "integrity": "sha512-Gv2VpqiomvQ2v4UL+dXlQcZ8zCX4eTkoIW+1aGVWT6yTO+6jbxsw7yQl2z2pPl/4B9qa5JXeIbhJpONKjXIy3g==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.9.1", - "@typescript-eslint/types": "4.9.1", - "@typescript-eslint/typescript-estree": "4.9.1", - "debug": "^4.1.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.9.1.tgz", - "integrity": "sha512-sa4L9yUfD/1sg9Kl8OxPxvpUcqxKXRjBeZxBuZSSV1v13hjfEJkn84n0An2hN8oLQ1PmEl2uA6FkI07idXeFgQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.9.1", - "@typescript-eslint/visitor-keys": "4.9.1" - } - }, - "@typescript-eslint/types": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.9.1.tgz", - "integrity": "sha512-fjkT+tXR13ks6Le7JiEdagnwEFc49IkOyys7ueWQ4O8k4quKPwPJudrwlVOJCUQhXo45PrfIvIarcrEjFTNwUA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.9.1.tgz", - "integrity": "sha512-bzP8vqwX6Vgmvs81bPtCkLtM/Skh36NE6unu6tsDeU/ZFoYthlTXbBmpIrvosgiDKlWTfb2ZpPELHH89aQjeQw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.9.1", - "@typescript-eslint/visitor-keys": "4.9.1", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.9.1.tgz", - "integrity": "sha512-9gspzc6UqLQHd7lXQS7oWs+hrYggspv/rk6zzEMhCbYwPE/sF7oxo7GAjkS35Tdlt7wguIG+ViWCPtVZHz/ybQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.9.1", - "eslint-visitor-keys": "^2.0.0" - } - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dev": true, - "requires": { - "string-width": "^3.0.0" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - }, - "dependencies": { - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "append-field": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", - "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "axios": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.0.tgz", - "integrity": "sha512-fmkJBknJKoZwem3/IKSSLpkdNXZeBu5Q7GA/aRsr2btgrptmSCxi2oFjZHqGdK9DoTil9PIHlPIZw2EcRJXRvw==", - "requires": { - "follow-redirects": "^1.10.0" - } - }, - "babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "dev": true, - "requires": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz", - "integrity": "sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@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-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true - }, - "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "busboy": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", - "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", - "requires": { - "dicer": "0.2.5", - "readable-stream": "1.1.x" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "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" - } - }, - "cache-content-type": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", - "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", - "requires": { - "mime-types": "^2.1.18", - "ylru": "^1.2.0" - } - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.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" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "co-body": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.0.0.tgz", - "integrity": "sha512-9ZIcixguuuKIptnY8yemEOuhb71L/lLf+Rl5JfJEUiDNJk0e02MBt7BPxR2GEh5mw8dPthQYR4jPI/BnS1MQgw==", - "requires": { - "inflation": "^2.0.0", - "qs": "^6.5.2", - "raw-body": "^2.3.3", - "type-is": "^1.6.16" - } - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, - "colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", - "requires": { - "color": "3.0.x", - "text-hex": "1.0.x" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", - "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", - "dev": true - }, - "compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "concurrently": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz", - "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "date-fns": "^2.0.1", - "lodash": "^4.17.15", - "read-pkg": "^4.0.1", - "rxjs": "^6.5.2", - "spawn-command": "^0.0.2-1", - "supports-color": "^6.1.0", - "tree-kill": "^1.2.2", - "yargs": "^13.3.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "requires": { - "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" - } - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", - "dev": true - }, - "cookies": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", - "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", - "requires": { - "depd": "~2.0.0", - "keygrip": "~1.1.0" - }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - } - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-to": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", - "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "dependencies": { - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - } - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "date-fns": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.16.1.tgz", - "integrity": "sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ==", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "dicer": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", - "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", - "requires": { - "readable-stream": "1.1.x", - "streamsearch": "0.1.2" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - }, - "dependencies": { - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - } - } - }, - "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "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" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, - "eslint": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.15.0.tgz", - "integrity": "sha512-Vr64xFDT8w30wFll643e7cGrIkPEU50yIiI36OdSIDoSGguIeaLzBo0vpGvzo9RECUqq7htURfwEtKqwytkqzA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.2", - "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.19", - "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": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "eslint-config-prettier": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.0.0.tgz", - "integrity": "sha512-8Y8lGLVPPZdaNA7JXqnvETVC7IiVRgAP6afQu9gOQRn90YY3otMNh+x7Vr2vMePQntF+5erdSUBqSzCmU/AxaQ==", - "dev": true - }, - "eslint-plugin-prettier": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.2.0.tgz", - "integrity": "sha512-kOUSJnFjAUFKwVxuzy6sA5yyMx6+o9ino4gCdShzBNx4eyFRudWRYKCFolKjoM40PEiuU6Cn7wBLfq3WsGg7qg==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-plugin-security": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz", - "integrity": "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==", - "dev": true, - "requires": { - "safe-regex": "^1.1.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" - }, - "fastq": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", - "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "fecha": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.0.tgz", - "integrity": "sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg==" - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", - "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "find-versions": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", - "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", - "dev": true, - "requires": { - "semver-regex": "^2.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", - "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", - "dev": true - }, - "fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" - }, - "follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", - "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "formidable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", - "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "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-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-dirs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", - "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", - "dev": true, - "requires": { - "ini": "^1.3.5" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", - "dev": true, - "requires": { - "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" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "requires": { - "@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": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true, - "optional": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.4.1.tgz", - "integrity": "sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw==", - "requires": { - "deep-equal": "~1.0.1", - "http-errors": "~1.7.2" - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "husky": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.5.tgz", - "integrity": "sha512-E5S/1HMoDDaqsH8kDF5zeKEQbYqe3wL9zJDyqyYqc8I4vHBtAoxkDBGXox0lZ9RI+k5GyB728vZdmnM4bYap+g==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "compare-versions": "^3.6.0", - "cosmiconfig": "^7.0.0", - "find-versions": "^3.2.0", - "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^4.2.0", - "please-upgrade-node": "^3.2.0", - "slash": "^3.0.0", - "which-pm-runs": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "import-fresh": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", - "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflation": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", - "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", - "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", - "dev": true, - "optional": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-generator-function": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz", - "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", - "dev": true, - "requires": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" - } - }, - "is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-inside": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", - "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-potential-custom-element-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", - "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", - "dev": true - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", - "dev": true, - "requires": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "requires": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "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-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - } - } - }, - "jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - } - } - }, - "jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - } - } - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - } - } - }, - "jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", - "dev": true, - "requires": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true - }, - "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true - }, - "jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - } - } - }, - "jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "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-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true - }, - "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "dev": true, - "requires": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - } - } - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", - "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "acorn": "^7.1.1", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.2.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.0", - "domexception": "^2.0.1", - "escodegen": "^1.14.1", - "html-encoding-sniffer": "^2.0.1", - "is-potential-custom-element-name": "^1.0.0", - "nwsapi": "^2.2.0", - "parse5": "5.1.1", - "request": "^2.88.2", - "request-promise-native": "^1.0.8", - "saxes": "^5.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^3.0.1", - "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.0.0", - "ws": "^7.2.3", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "keygrip": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", - "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", - "requires": { - "tsscmp": "1.0.6" - } - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "koa": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.0.tgz", - "integrity": "sha512-i/XJVOfPw7npbMv67+bOeXr3gPqOAw6uh5wFyNs3QvJ47tUx3M3V9rIE0//WytY42MKz4l/MXKyGkQ2LQTfLUQ==", - "requires": { - "accepts": "^1.3.5", - "cache-content-type": "^1.0.0", - "content-disposition": "~0.5.2", - "content-type": "^1.0.4", - "cookies": "~0.8.0", - "debug": "~3.1.0", - "delegates": "^1.0.0", - "depd": "^1.1.2", - "destroy": "^1.0.4", - "encodeurl": "^1.0.2", - "escape-html": "^1.0.3", - "fresh": "~0.5.2", - "http-assert": "^1.3.0", - "http-errors": "^1.6.3", - "is-generator-function": "^1.0.7", - "koa-compose": "^4.1.0", - "koa-convert": "^1.2.0", - "on-finished": "^2.3.0", - "only": "~0.0.2", - "parseurl": "^1.3.2", - "statuses": "^1.5.0", - "type-is": "^1.6.16", - "vary": "^1.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "koa-bodyparser": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.3.0.tgz", - "integrity": "sha512-uyV8G29KAGwZc4q/0WUAjH+Tsmuv9ImfBUF2oZVyZtaeo0husInagyn/JH85xMSxM0hEk/mbCII5ubLDuqW/Rw==", - "requires": { - "co-body": "^6.0.0", - "copy-to": "^2.0.1" - } - }, - "koa-compose": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==" - }, - "koa-convert": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz", - "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", - "requires": { - "co": "^4.6.0", - "koa-compose": "^3.0.0" - }, - "dependencies": { - "koa-compose": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", - "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", - "requires": { - "any-promise": "^1.1.0" - } - } - } - }, - "koa-router": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/koa-router/-/koa-router-10.0.0.tgz", - "integrity": "sha512-gAE5J1gBQTvfR8rMMtMUkE26+1MbO3DGpGmvfmM2pR9Z7w2VIb2Ecqeal98yVO7+4ltffby7gWOzpCmdNOQe0w==", - "requires": { - "debug": "^4.1.1", - "http-errors": "^1.7.3", - "koa-compose": "^4.1.0", - "methods": "^1.1.2", - "path-to-regexp": "^6.1.0" - } - }, - "kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" - }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "requires": { - "package-json": "^6.3.0" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "lint-staged": { - "version": "10.5.3", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.3.tgz", - "integrity": "sha512-TanwFfuqUBLufxCc3RUtFEkFraSPNR3WzWcGF39R3f2J7S9+iF9W0KTVLfSy09lYGmZS5NDCxjNvhGMSJyFCWg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "cli-truncate": "^2.1.0", - "commander": "^6.2.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.2.0", - "dedent": "^0.7.0", - "enquirer": "^2.3.6", - "execa": "^4.1.0", - "listr2": "^3.2.2", - "log-symbols": "^4.0.0", - "micromatch": "^4.0.2", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.2.0", - "string-argv": "0.3.1", - "stringify-object": "^3.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - } - } - }, - "listr2": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.2.3.tgz", - "integrity": "sha512-vUb80S2dSUi8YxXahO8/I/s29GqnOL8ozgHVLjfWQXa03BNEeS1TpBLjh2ruaqq5ufx46BRGvfymdBSuoXET5w==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "cli-truncate": "^2.1.0", - "figures": "^3.2.0", - "indent-string": "^4.0.0", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rxjs": "^6.6.3", - "through": "^2.3.8" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "requires": { - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "logform": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", - "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", - "requires": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "triple-beam": "^1.3.0" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", - "dev": true - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "multer": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz", - "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==", - "requires": { - "append-field": "^1.0.0", - "busboy": "^0.2.11", - "concat-stream": "^1.5.2", - "mkdirp": "^0.5.1", - "object-assign": "^4.1.1", - "on-finished": "^2.3.0", - "type-is": "^1.6.4", - "xtend": "^4.0.0" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - } - } - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "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": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "nock": { - "version": "13.0.5", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.0.5.tgz", - "integrity": "sha512-1ILZl0zfFm2G4TIeJFW0iHknxr2NyA+aGCMTjDVUsBY4CkMRispF1pfIYkTRdAR/3Bg+UzdEuK0B6HczMQZcCg==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash.set": "^4.3.2", - "propagate": "^2.0.0" - } - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-notifier": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz", - "integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==", - "dev": true, - "optional": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - } - }, - "nodemon": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.6.tgz", - "integrity": "sha512-4I3YDSKXg6ltYpcnZeHompqac4E6JeAMpGm8tJnB9Y3T0ehasLa4139dJOcCrB93HHrUMsCrKtoAlXTqT5n4AQ==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - }, - "dependencies": { - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - } - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "requires": { - "fn.name": "1.x.x" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "only": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" - }, - "opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "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" - } - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true - }, - "p-each-series": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.1.0.tgz", - "integrity": "sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.0.tgz", - "integrity": "sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } - } - }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "prettier": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", - "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", - "dev": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "requires": { - "escape-goat": "^2.0.0" - } - }, - "qs": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", - "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==" - }, - "raw-body": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.3", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - } - } - }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", - "dev": true - }, - "read-pkg": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", - "dev": true, - "requires": { - "normalize-package-data": "^2.3.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - } - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true - }, - "registry-auth-token": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", - "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "dev": true, - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "dependencies": { - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", - "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", - "dev": true, - "requires": { - "is-core-module": "^2.0.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "run-parallel": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", - "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", - "dev": true - }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "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" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "semver-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - } - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "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": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "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" - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "stack-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.2.tgz", - "integrity": "sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "streamsearch": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, - "string-length": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", - "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" - } - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - } - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "superagent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-6.1.0.tgz", - "integrity": "sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==", - "dev": true, - "requires": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.2", - "debug": "^4.1.1", - "fast-safe-stringify": "^2.0.7", - "form-data": "^3.0.0", - "formidable": "^1.2.2", - "methods": "^1.1.2", - "mime": "^2.4.6", - "qs": "^6.9.4", - "readable-stream": "^3.6.0", - "semver": "^7.3.2" - }, - "dependencies": { - "form-data": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", - "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } - } - }, - "supertest": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.0.1.tgz", - "integrity": "sha512-8yDNdm+bbAN/jeDdXsRipbq9qMpVF7wRsbwLgsANHqdjPsCoecmlTuqEcLQMGpmojFBhxayZ0ckXmLXYq7e+0g==", - "dev": true, - "requires": { - "methods": "1.1.2", - "superagent": "6.1.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - } - } - }, - "supports-hyperlinks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", - "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - } - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - } - }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", - "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } - }, - "tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, - "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true - }, - "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" - }, - "ts-jest": { - "version": "26.4.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.4.4.tgz", - "integrity": "sha512-3lFWKbLxJm34QxyVNNCgXX1u4o/RV0myvA2y2Bxm46iGIjKlaY0own9gIckbjZJPn+WaJEnfPPJ20HHGpoq4yg==", - "dev": true, - "requires": { - "@types/jest": "26.x", - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^26.1.0", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "mkdirp": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "dependencies": { - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - } - } - }, - "ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dev": true, - "requires": { - "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" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsscmp": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==" - }, - "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.2.tgz", - "integrity": "sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==", - "dev": true - }, - "undefsafe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", - "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", - "dev": true, - "requires": { - "debug": "^2.2.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==" - }, - "v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", - "dev": true - }, - "v8-to-istanbul": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz", - "integrity": "sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", - "dev": true - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "requires": { - "string-width": "^4.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "winston": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", - "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==", - "requires": { - "@dabh/diagnostics": "^2.0.2", - "async": "^3.1.0", - "is-stream": "^2.0.0", - "logform": "^2.2.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.4.0" - }, - "dependencies": { - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - } - } - }, - "winston-transport": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", - "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", - "requires": { - "readable-stream": "^2.3.7", - "triple-beam": "^1.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", - "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", - "dev": true - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "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-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "ylru": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", - "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==" - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - } - } -} diff --git a/package.json b/package.json index 2cc4f89..d204e77 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,27 @@ { "name": "modernized-sandbox", "version": "0.1.0", - "packageManager": "pnpm@11.0.9", "type": "module", + "devEngines": { + "packageManager": { + "name": "pnpm", + "version": "11.1.2", + "onFail": "download" + }, + "runtime": { + "name": "node", + "version": "24.15.0", + "onFail": "download" + } + }, + "engines": { + "node": "24.15.0", + "pnpm": "11.1.2" + }, "scripts": { - "dev": "tsgo run src/index.ts", + "dev": "tsx src/index.ts", "build": "tsgo", - "start": "tsgo run dist/index.js", + "start": "node dist/index.js", "test": "vitest", "test:ui": "vitest --ui", "lint": "oxlint", @@ -14,6 +29,7 @@ "prepare": "husky" }, "dependencies": { + "@fastify/cors": "11.2.0", "@fastify/multipart": "10.0.0", "@fastify/sensible": "6.0.4", "@marcalexiei/fastify-type-provider-zod": "3.0.0", @@ -36,6 +52,7 @@ "lint-staged": "^17.0.4", "oxfmt": "0.48.0", "oxlint": "1.63.0", + "tsx": "^4.21.0", "typescript": "6.0.3", "vitest": "4.1.5" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f55fcc2..d4679d2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,3 +1,202 @@ +--- +lockfileVersion: '9.0' + +importers: + + .: + configDependencies: {} + packageManagerDependencies: + '@pnpm/exe': + specifier: 11.1.2 + version: 11.1.2 + pnpm: + specifier: 11.1.2 + version: 11.1.2 + +packages: + + '@pnpm/exe@11.1.2': + resolution: {integrity: sha512-di6YvqPO/2jvih6kCJ8r0ySzQNjQWrBXPEfqEHtrmwOamuNALnfASwhFBwEtMjWmaA8QG7TqAg2qEvAe+8cBkQ==} + hasBin: true + + '@pnpm/linux-arm64@11.1.2': + resolution: {integrity: sha512-VdyZw4LsGm2v+645a7sZsb3MyjrRizTsV7wtpzIySJGYgc7nnQeTzw5QSI5xaoRf/ge0PTKDG8BeRqJOs+KpAg==} + cpu: [arm64] + os: [linux] + + '@pnpm/linux-x64@11.1.2': + resolution: {integrity: sha512-WTyDmmeQFLDlPJXDFNqJXrEmEjE78dJDXo3VSz7O/xXpC2nPwY38nVxthPGd+6t9SKmGDx/s4RLOjjKo82Hbig==} + cpu: [x64] + os: [linux] + + '@pnpm/linuxstatic-arm64@11.1.2': + resolution: {integrity: sha512-eIpUghshpgEAtSBv/uSRM+7jBaUVcEpP4sInlOuRYDK+Wg091lQ5Gv5uOxgiHAqs3LWku3lRF81EReKyHehYUQ==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@pnpm/linuxstatic-x64@11.1.2': + resolution: {integrity: sha512-sYJxMj7zrR8ZSGqvqai3fWJ95VAZtuDYUAluDXQ/VZ3/7+FqikbXqokitTt0yCGSOzbO8u7zseW8EsOqxf93Qw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@pnpm/macos-arm64@11.1.2': + resolution: {integrity: sha512-eqwJeQbqgKRhLCgcVtb0Eaz3Ay6AspOkioqhT00jN6dFwoUYi7Xo78rnZ2uSwVSp+Sij4Yyuvmu++ZPIeP9VrA==} + cpu: [arm64] + os: [darwin] + + '@pnpm/win-arm64@11.1.2': + resolution: {integrity: sha512-MZzvuuODP/AI781f+x/lB9UuN2SHIGVn6W08SEWKdPIMxWqBGKXLd9QOuh6uRJ7UWC9AufFzhbVs0fSQxxEcng==} + cpu: [arm64] + os: [win32] + + '@pnpm/win-x64@11.1.2': + resolution: {integrity: sha512-1B2ijW1Z68ehS4QkLVbD+oENz7ribCNpL5Hh5UMDdVm04KYmi2vDp2BW7SrC8AS6G4/5YUs5yFLJPY57CLJJ8A==} + cpu: [x64] + os: [win32] + + '@reflink/reflink-darwin-arm64@0.1.19': + resolution: {integrity: sha512-ruy44Lpepdk1FqDz38vExBY/PVUsjxZA+chd9wozjUH9JjuDT/HEaQYA6wYN9mf041l0yLVar6BCZuWABJvHSA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@reflink/reflink-darwin-x64@0.1.19': + resolution: {integrity: sha512-By85MSWrMZa+c26TcnAy8SDk0sTUkYlNnwknSchkhHpGXOtjNDUOxJE9oByBnGbeuIE1PiQsxDG3Ud+IVV9yuA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@reflink/reflink-linux-arm64-gnu@0.1.19': + resolution: {integrity: sha512-7P+er8+rP9iNeN+bfmccM4hTAaLP6PQJPKWSA4iSk2bNvo6KU6RyPgYeHxXmzNKzPVRcypZQTpFgstHam6maVg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@reflink/reflink-linux-arm64-musl@0.1.19': + resolution: {integrity: sha512-37iO/Dp6m5DDaC2sf3zPtx/hl9FV3Xze4xoYidrxxS9bgP3S8ALroxRK6xBG/1TtfXKTvolvp+IjrUU6ujIGmA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@reflink/reflink-linux-x64-gnu@0.1.19': + resolution: {integrity: sha512-jbI8jvuYCaA3MVUdu8vLoLAFqC+iNMpiSuLbxlAgg7x3K5bsS8nOpTRnkLF7vISJ+rVR8W+7ThXlXlUQ93ulkw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@reflink/reflink-linux-x64-musl@0.1.19': + resolution: {integrity: sha512-e9FBWDe+lv7QKAwtKOt6A2W/fyy/aEEfr0g6j/hWzvQcrzHCsz07BNQYlNOjTfeytrtLU7k449H1PI95jA4OjQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@reflink/reflink-win32-arm64-msvc@0.1.19': + resolution: {integrity: sha512-09PxnVIQcd+UOn4WAW73WU6PXL7DwGS6wPlkMhMg2zlHHG65F3vHepOw06HFCq+N42qkaNAc8AKIabWvtk6cIQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@reflink/reflink-win32-x64-msvc@0.1.19': + resolution: {integrity: sha512-E//yT4ni2SyhwP8JRjVGWr3cbnhWDiPLgnQ66qqaanjjnMiu3O/2tjCPQXlcGc/DEYofpDc9fvhv6tALQsMV9w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@reflink/reflink@0.1.19': + resolution: {integrity: sha512-DmCG8GzysnCZ15bres3N5AHCmwBwYgp0As6xjhQ47rAUTUXxJiK+lLUxaGsX3hd/30qUpVElh05PbGuxRPgJwA==} + engines: {node: '>= 10'} + + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + + pnpm@11.1.2: + resolution: {integrity: sha512-QVocwll0cx51RVwUaDcb50xapft2IbUNQFbSIkUWCfEUEvI/1gLmFp8eBgRmZB95hZfhvpYaEGiINqZ7FlaUmQ==} + engines: {node: '>=22.13'} + hasBin: true + +snapshots: + + '@pnpm/exe@11.1.2': + dependencies: + '@reflink/reflink': 0.1.19 + detect-libc: 2.1.2 + optionalDependencies: + '@pnpm/linux-arm64': 11.1.2 + '@pnpm/linux-x64': 11.1.2 + '@pnpm/linuxstatic-arm64': 11.1.2 + '@pnpm/linuxstatic-x64': 11.1.2 + '@pnpm/macos-arm64': 11.1.2 + '@pnpm/win-arm64': 11.1.2 + '@pnpm/win-x64': 11.1.2 + + '@pnpm/linux-arm64@11.1.2': + optional: true + + '@pnpm/linux-x64@11.1.2': + optional: true + + '@pnpm/linuxstatic-arm64@11.1.2': + optional: true + + '@pnpm/linuxstatic-x64@11.1.2': + optional: true + + '@pnpm/macos-arm64@11.1.2': + optional: true + + '@pnpm/win-arm64@11.1.2': + optional: true + + '@pnpm/win-x64@11.1.2': + optional: true + + '@reflink/reflink-darwin-arm64@0.1.19': + optional: true + + '@reflink/reflink-darwin-x64@0.1.19': + optional: true + + '@reflink/reflink-linux-arm64-gnu@0.1.19': + optional: true + + '@reflink/reflink-linux-arm64-musl@0.1.19': + optional: true + + '@reflink/reflink-linux-x64-gnu@0.1.19': + optional: true + + '@reflink/reflink-linux-x64-musl@0.1.19': + optional: true + + '@reflink/reflink-win32-arm64-msvc@0.1.19': + optional: true + + '@reflink/reflink-win32-x64-msvc@0.1.19': + optional: true + + '@reflink/reflink@0.1.19': + optionalDependencies: + '@reflink/reflink-darwin-arm64': 0.1.19 + '@reflink/reflink-darwin-x64': 0.1.19 + '@reflink/reflink-linux-arm64-gnu': 0.1.19 + '@reflink/reflink-linux-arm64-musl': 0.1.19 + '@reflink/reflink-linux-x64-gnu': 0.1.19 + '@reflink/reflink-linux-x64-musl': 0.1.19 + '@reflink/reflink-win32-arm64-msvc': 0.1.19 + '@reflink/reflink-win32-x64-msvc': 0.1.19 + + detect-libc@2.1.2: {} + + pnpm@11.1.2: {} + +--- lockfileVersion: '9.0' settings: @@ -8,6 +207,9 @@ importers: .: dependencies: + '@fastify/cors': + specifier: 11.2.0 + version: 11.2.0 '@fastify/multipart': specifier: 10.0.0 version: 10.0.0 @@ -45,18 +247,24 @@ importers: lint-staged: specifier: ^17.0.4 version: 17.0.4 + node: + specifier: runtime:24.15.0 + version: runtime:24.15.0 oxfmt: specifier: 0.48.0 version: 0.48.0 oxlint: specifier: 1.63.0 version: 1.63.0 + tsx: + specifier: ^4.21.0 + version: 4.21.0 typescript: specifier: 6.0.3 version: 6.0.3 vitest: specifier: 4.1.5 - version: 4.1.5(@types/node@25.6.2)(vite@8.0.11(@types/node@25.6.2)(yaml@2.8.4)) + version: 4.1.5(@types/node@25.6.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(tsx@4.21.0)(yaml@2.8.4)) packages: @@ -69,12 +277,171 @@ packages: '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} + '@esbuild/aix-ppc64@0.27.7': + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.27.7': + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.7': + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.7': + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.7': + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.7': + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.7': + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.7': + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.7': + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.7': + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.7': + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.7': + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.7': + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.7': + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.7': + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.7': + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.7': + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.7': + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.7': + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.7': + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.7': + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.7': + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.7': + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.27.7': + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.7': + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.7': + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@fastify/ajv-compiler@4.0.5': resolution: {integrity: sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A==} '@fastify/busboy@3.2.0': resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} + '@fastify/cors@11.2.0': + resolution: {integrity: sha512-LbLHBuSAdGdSFZYTLVA3+Ch2t+sA6nq3Ejc6XLAKiQ6ViS2qFnvicpj0htsx03FyYeLs04HfRNBsz/a8SvbcUw==} + '@fastify/deepmerge@3.2.1': resolution: {integrity: sha512-N5Oqvltoa2r9z1tbx4xjky0oRR60v+T47Ic4J1ukoVQcptLOrIdRnCSdTGmOmajZuHVKlTnfcmrjyqsGEW1ztA==} @@ -749,6 +1116,11 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} + esbuild@0.27.7: + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + engines: {node: '>=18'} + hasBin: true + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -830,6 +1202,9 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-tsconfig@4.14.0: + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -1005,6 +1380,127 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + node@runtime:24.15.0: + resolution: + type: variations + variants: + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-3UvHfctfTJoslkNzm7WTUAzLCUE+xCyqD47w5e8RYJU= + type: binary + url: https://nodejs.org/download/release/v24.15.0/node-v24.15.0-aix-ppc64.tar.gz + targets: + - cpu: ppc64 + os: aix + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-NyMxuWl3mrXRW5SYhPxur4jVr+h73ouogdZAC5EA/8Q= + type: binary + url: https://nodejs.org/download/release/v24.15.0/node-v24.15.0-darwin-arm64.tar.gz + targets: + - cpu: arm64 + os: darwin + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-/9XuKTRnkn8+5zGlU+uI/R9Iz3TuvC10prq+SvIoZzs= + type: binary + url: https://nodejs.org/download/release/v24.15.0/node-v24.15.0-darwin-x64.tar.gz + targets: + - cpu: x64 + os: darwin + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-c6/CNNVYwkkZh19RwtHqACoq2k6m+DYBo4OGn++mTu0= + type: binary + url: https://nodejs.org/download/release/v24.15.0/node-v24.15.0-linux-arm64.tar.gz + targets: + - cpu: arm64 + os: linux + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-sfiJAKSxY2XqulYmkwT8Edp1gdvwNVLUSV+azh/AX20= + type: binary + url: https://nodejs.org/download/release/v24.15.0/node-v24.15.0-linux-ppc64le.tar.gz + targets: + - cpu: ppc64le + os: linux + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-+YVFVDnVL+m43mqPbQe/7MxzbepSfofqyv5ajXUWo4A= + type: binary + url: https://nodejs.org/download/release/v24.15.0/node-v24.15.0-linux-s390x.tar.gz + targets: + - cpu: s390x + os: linux + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-RINoctmuxJ8ea1KpqSKHLbmisC0jWmFqVoG2qF/sjYk= + type: binary + url: https://nodejs.org/download/release/v24.15.0/node-v24.15.0-linux-x64.tar.gz + targets: + - cpu: x64 + os: linux + - resolution: + archive: zip + bin: + node: node.exe + integrity: sha256-yet0Au2ibiun5EtnJ/yFqN5WxQlbH3Hr0wYokiEaoRY= + prefix: node-v24.15.0-win-arm64 + type: binary + url: https://nodejs.org/download/release/v24.15.0/node-v24.15.0-win-arm64.zip + targets: + - cpu: arm64 + os: win32 + - resolution: + archive: zip + bin: + node: node.exe + integrity: sha256-zFFJ6r1Td5zh573FQBZDYi0MfmgAreGJKKdn6UC7DmI= + prefix: node-v24.15.0-win-x64 + type: binary + url: https://nodejs.org/download/release/v24.15.0/node-v24.15.0-win-x64.zip + targets: + - cpu: x64 + os: win32 + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-MemKqWCgZ9qR7f/V2TvEZle10qgClhLDWfXyrABgFSo= + type: binary + url: https://unofficial-builds.nodejs.org/download/release/v24.15.0/node-v24.15.0-linux-arm64-musl.tar.gz + targets: + - cpu: arm64 + os: linux + libc: musl + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-9Vr1vUicU0exE8pllMrgClSzC6V6xYdTJDEb/G9HYuM= + type: binary + url: https://unofficial-builds.nodejs.org/download/release/v24.15.0/node-v24.15.0-linux-x64-musl.tar.gz + targets: + - cpu: x64 + os: linux + libc: musl + version: 24.15.0 + hasBin: true + obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} @@ -1084,6 +1580,9 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} @@ -1227,6 +1726,11 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + engines: {node: '>=18.0.0'} + hasBin: true + type-is@2.0.1: resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} @@ -1369,6 +1873,84 @@ snapshots: tslib: 2.8.1 optional: true + '@esbuild/aix-ppc64@0.27.7': + optional: true + + '@esbuild/android-arm64@0.27.7': + optional: true + + '@esbuild/android-arm@0.27.7': + optional: true + + '@esbuild/android-x64@0.27.7': + optional: true + + '@esbuild/darwin-arm64@0.27.7': + optional: true + + '@esbuild/darwin-x64@0.27.7': + optional: true + + '@esbuild/freebsd-arm64@0.27.7': + optional: true + + '@esbuild/freebsd-x64@0.27.7': + optional: true + + '@esbuild/linux-arm64@0.27.7': + optional: true + + '@esbuild/linux-arm@0.27.7': + optional: true + + '@esbuild/linux-ia32@0.27.7': + optional: true + + '@esbuild/linux-loong64@0.27.7': + optional: true + + '@esbuild/linux-mips64el@0.27.7': + optional: true + + '@esbuild/linux-ppc64@0.27.7': + optional: true + + '@esbuild/linux-riscv64@0.27.7': + optional: true + + '@esbuild/linux-s390x@0.27.7': + optional: true + + '@esbuild/linux-x64@0.27.7': + optional: true + + '@esbuild/netbsd-arm64@0.27.7': + optional: true + + '@esbuild/netbsd-x64@0.27.7': + optional: true + + '@esbuild/openbsd-arm64@0.27.7': + optional: true + + '@esbuild/openbsd-x64@0.27.7': + optional: true + + '@esbuild/openharmony-arm64@0.27.7': + optional: true + + '@esbuild/sunos-x64@0.27.7': + optional: true + + '@esbuild/win32-arm64@0.27.7': + optional: true + + '@esbuild/win32-ia32@0.27.7': + optional: true + + '@esbuild/win32-x64@0.27.7': + optional: true + '@fastify/ajv-compiler@4.0.5': dependencies: ajv: 8.20.0 @@ -1377,6 +1959,11 @@ snapshots: '@fastify/busboy@3.2.0': {} + '@fastify/cors@11.2.0': + dependencies: + fastify-plugin: 5.1.0 + toad-cache: 3.7.0 + '@fastify/deepmerge@3.2.1': {} '@fastify/error@4.2.0': {} @@ -1681,13 +2268,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.5(vite@8.0.11(@types/node@25.6.2)(yaml@2.8.4))': + '@vitest/mocker@4.1.5(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(tsx@4.21.0)(yaml@2.8.4))': dependencies: '@vitest/spy': 4.1.5 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.11(@types/node@25.6.2)(yaml@2.8.4) + vite: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(tsx@4.21.0)(yaml@2.8.4) '@vitest/pretty-format@4.1.5': dependencies: @@ -1848,6 +2435,35 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.3 + esbuild@0.27.7: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.7 + '@esbuild/android-arm': 0.27.7 + '@esbuild/android-arm64': 0.27.7 + '@esbuild/android-x64': 0.27.7 + '@esbuild/darwin-arm64': 0.27.7 + '@esbuild/darwin-x64': 0.27.7 + '@esbuild/freebsd-arm64': 0.27.7 + '@esbuild/freebsd-x64': 0.27.7 + '@esbuild/linux-arm': 0.27.7 + '@esbuild/linux-arm64': 0.27.7 + '@esbuild/linux-ia32': 0.27.7 + '@esbuild/linux-loong64': 0.27.7 + '@esbuild/linux-mips64el': 0.27.7 + '@esbuild/linux-ppc64': 0.27.7 + '@esbuild/linux-riscv64': 0.27.7 + '@esbuild/linux-s390x': 0.27.7 + '@esbuild/linux-x64': 0.27.7 + '@esbuild/netbsd-arm64': 0.27.7 + '@esbuild/netbsd-x64': 0.27.7 + '@esbuild/openbsd-arm64': 0.27.7 + '@esbuild/openbsd-x64': 0.27.7 + '@esbuild/openharmony-arm64': 0.27.7 + '@esbuild/sunos-x64': 0.27.7 + '@esbuild/win32-arm64': 0.27.7 + '@esbuild/win32-ia32': 0.27.7 + '@esbuild/win32-x64': 0.27.7 + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.9 @@ -1952,6 +2568,10 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-tsconfig@4.14.0: + dependencies: + resolve-pkg-maps: 1.0.0 + gopd@1.2.0: {} has-symbols@1.1.0: {} @@ -2102,6 +2722,8 @@ snapshots: nanoid@3.3.12: {} + node@runtime:24.15.0: {} + obug@2.1.1: {} on-exit-leak-free@2.1.2: {} @@ -2211,6 +2833,8 @@ snapshots: require-from-string@2.0.2: {} + resolve-pkg-maps@1.0.0: {} + restore-cursor@5.1.0: dependencies: onetime: 7.0.0 @@ -2371,6 +2995,13 @@ snapshots: tslib@2.8.1: optional: true + tsx@4.21.0: + dependencies: + esbuild: 0.27.7 + get-tsconfig: 4.14.0 + optionalDependencies: + fsevents: 2.3.3 + type-is@2.0.1: dependencies: content-type: 1.0.5 @@ -2383,7 +3014,7 @@ snapshots: vary@1.1.2: {} - vite@8.0.11(@types/node@25.6.2)(yaml@2.8.4): + vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(tsx@4.21.0)(yaml@2.8.4): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -2392,13 +3023,15 @@ snapshots: tinyglobby: 0.2.16 optionalDependencies: '@types/node': 25.6.2 + esbuild: 0.27.7 fsevents: 2.3.3 + tsx: 4.21.0 yaml: 2.8.4 - vitest@4.1.5(@types/node@25.6.2)(vite@8.0.11(@types/node@25.6.2)(yaml@2.8.4)): + vitest@4.1.5(@types/node@25.6.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(tsx@4.21.0)(yaml@2.8.4)): dependencies: '@vitest/expect': 4.1.5 - '@vitest/mocker': 4.1.5(vite@8.0.11(@types/node@25.6.2)(yaml@2.8.4)) + '@vitest/mocker': 4.1.5(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(tsx@4.21.0)(yaml@2.8.4)) '@vitest/pretty-format': 4.1.5 '@vitest/runner': 4.1.5 '@vitest/snapshot': 4.1.5 @@ -2415,7 +3048,7 @@ snapshots: tinyexec: 1.1.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 8.0.11(@types/node@25.6.2)(yaml@2.8.4) + vite: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(tsx@4.21.0)(yaml@2.8.4) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.6.2 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..c6668f0 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +allowBuilds: + esbuild: true +pmOnFail: download +runtimeOnFail: download diff --git a/src/app.ts b/src/app.ts index b40d6d2..8ee883a 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,5 +1,6 @@ import Fastify from "fastify"; import type { FastifyInstance } from "fastify"; +import cors from "@fastify/cors"; import multipart from "@fastify/multipart"; import sensible from "@fastify/sensible"; import { registerRoutes } from "./routes.js"; @@ -11,6 +12,7 @@ export async function buildApp(opts: { logger?: boolean } = {}): Promise { + let previousDockerRuntime: string | undefined; + + beforeEach(() => { + previousDockerRuntime = process.env["DOCKER_RUNTIME"]; + }); + afterEach(() => { - delete process.env["DOCKER_RUNTIME"]; + if (previousDockerRuntime === undefined) { + delete process.env["DOCKER_RUNTIME"]; + } else { + process.env["DOCKER_RUNTIME"] = previousDockerRuntime; + } }); - it("defaults to runc when DOCKER_RUNTIME is not set", () => { + it("requires DOCKER_RUNTIME to be set", () => { delete process.env["DOCKER_RUNTIME"]; + expect(() => registerRoutes(Fastify({ logger: false }))).toThrow( + 'DOCKER_RUNTIME is required and must be set to "runc" or "runsc"', + ); + }); + + it("selects runc when DOCKER_RUNTIME=runc", () => { + process.env["DOCKER_RUNTIME"] = "runc"; expect(() => registerRoutes(Fastify({ logger: false }))).not.toThrow(); }); @@ -17,8 +34,10 @@ describe("DOCKER_RUNTIME env var selection", () => { expect(() => registerRoutes(Fastify({ logger: false }))).not.toThrow(); }); - it("falls back to runc for unrecognised DOCKER_RUNTIME values", () => { + it("rejects unrecognised DOCKER_RUNTIME values", () => { process.env["DOCKER_RUNTIME"] = "unknown-runtime"; - expect(() => registerRoutes(Fastify({ logger: false }))).not.toThrow(); + expect(() => registerRoutes(Fastify({ logger: false }))).toThrow( + 'Invalid DOCKER_RUNTIME value "unknown-runtime": expected "runc" or "runsc"', + ); }); }); diff --git a/src/index.hmac.test.ts b/src/index.hmac.test.ts index 461cc5e..aec84db 100644 --- a/src/index.hmac.test.ts +++ b/src/index.hmac.test.ts @@ -12,6 +12,7 @@ import * as resourceManager from "./services/resource-manager.js"; describe("POST /tasks.json HMAC enforcement", () => { let hmacApp: FastifyInstance; + let previousDockerRuntime: string | undefined; const HMAC_SECRET = "test-hmac-secret-xyz"; function makeForm(opts: { notifySignature?: string } = {}): FormData { @@ -31,12 +32,15 @@ describe("POST /tasks.json HMAC enforcement", () => { beforeAll(async () => { process.env["SANDBOX_CALLBACK_SECRET"] = HMAC_SECRET; process.env["SANDBOX_DISABLE_SSRF_CHECK"] = "true"; + previousDockerRuntime = process.env["DOCKER_RUNTIME"]; + process.env["DOCKER_RUNTIME"] = "runc"; hmacApp = Fastify({ logger: false }); await hmacApp.register(sensible); await hmacApp.register(multipart); hmacApp.setErrorHandler(handleError); const mockExecutor = new SandboxExecutor(hmacApp.log, { + dockerRuntime: "runc", execFileFn: vi.fn().mockResolvedValue({ stdout: "", stderr: "" }), extractFileFn: vi.fn().mockImplementation(() => Promise.resolve()), readFileFn: vi.fn().mockResolvedValue(""), @@ -47,6 +51,11 @@ describe("POST /tasks.json HMAC enforcement", () => { afterAll(async () => { delete process.env["SANDBOX_CALLBACK_SECRET"]; delete process.env["SANDBOX_DISABLE_SSRF_CHECK"]; + if (previousDockerRuntime === undefined) { + delete process.env["DOCKER_RUNTIME"]; + } else { + process.env["DOCKER_RUNTIME"] = previousDockerRuntime; + } await hmacApp?.close(); resourceManager.resetState(); }); diff --git a/src/index.test.ts b/src/index.test.ts index 6c3f32d..66e8283 100644 --- a/src/index.test.ts +++ b/src/index.test.ts @@ -5,13 +5,21 @@ import * as resourceManager from "./services/resource-manager.js"; describe("Sandbox API Integration", () => { let app: FastifyInstance; + let previousDockerRuntime: string | undefined; beforeAll(async () => { + previousDockerRuntime = process.env["DOCKER_RUNTIME"]; + process.env["DOCKER_RUNTIME"] = "runc"; app = await buildApp({ logger: false }); }); afterAll(async () => { await app.close(); + if (previousDockerRuntime === undefined) { + delete process.env["DOCKER_RUNTIME"]; + } else { + process.env["DOCKER_RUNTIME"] = previousDockerRuntime; + } }); describe("GET /status.json", () => { @@ -23,11 +31,54 @@ describe("Sandbox API Integration", () => { expect(response.statusCode).toBe(200); const body = JSON.parse(response.body); - expect(body).toHaveProperty("busyInstances"); - expect(body).toHaveProperty("reservedCpuCores"); - expect(body).toHaveProperty("totalInstances"); - expect(body).toHaveProperty("reservedMemory"); - expect(body).toHaveProperty("totalMemory"); + expect(body).toHaveProperty("busy_instances"); + expect(body).toHaveProperty("reserved_cpu_cores"); + expect(body).toHaveProperty("total_instances"); + expect(body).toHaveProperty("reserved_memory"); + expect(body).toHaveProperty("total_memory"); + }); + + it("should return all five snake_case status fields", async () => { + const response = await app.inject({ + method: "GET", + url: "/status.json", + }); + + expect(response.statusCode).toBe(200); + const body = JSON.parse(response.body); + expect(body).toHaveProperty("busy_instances"); + expect(body).toHaveProperty("reserved_cpu_cores"); + expect(body).toHaveProperty("total_instances"); + expect(body).toHaveProperty("reserved_memory"); + expect(body).toHaveProperty("total_memory"); + }); + + it("reports busy_instances as the count of in-flight submissions", async () => { + resourceManager.resetState(); + const limits = { cpus: Math.min(2, resourceManager.TOTAL_CPU_CORES), memoryGB: 0.5 }; + expect(resourceManager.tryReserveResources(limits)).toBe(true); + + const response = await app.inject({ + method: "GET", + url: "/status.json", + }); + + const body = JSON.parse(response.body); + expect(body.busy_instances).toBe(1); + expect(body.reserved_cpu_cores).toBe(limits.cpus); + + resourceManager.resetState(); + }); + + it("sends CORS headers for browser clients", async () => { + const response = await app.inject({ + method: "GET", + url: "/status.json", + headers: { origin: "https://example.com" }, + }); + + expect(response.statusCode).toBe(200); + expect(response.headers["access-control-allow-origin"]).toBe("*"); }); it("should return non-negative values", async () => { @@ -37,11 +88,11 @@ describe("Sandbox API Integration", () => { }); const body = JSON.parse(response.body); - expect(body.busyInstances).toBeGreaterThanOrEqual(0); - expect(body.reservedCpuCores).toBeGreaterThanOrEqual(0); - expect(body.reservedMemory).toBeGreaterThanOrEqual(0); - expect(body.totalInstances).toBeGreaterThan(0); - expect(body.totalMemory).toBeGreaterThan(0); + expect(body.busy_instances).toBeGreaterThanOrEqual(0); + expect(body.reserved_cpu_cores).toBeGreaterThanOrEqual(0); + expect(body.reserved_memory).toBeGreaterThanOrEqual(0); + expect(body.total_instances).toBeGreaterThan(0); + expect(body.total_memory).toBeGreaterThan(0); }); it("should have reasonable system resource values", async () => { @@ -51,8 +102,8 @@ describe("Sandbox API Integration", () => { }); const body = JSON.parse(response.body); - expect(body.totalInstances).toBeGreaterThan(0); - expect(body.totalMemory).toBeGreaterThan(0); + expect(body.total_instances).toBeGreaterThan(0); + expect(body.total_memory).toBeGreaterThan(0); }); it("should return consistent structure across multiple calls", async () => { @@ -64,11 +115,11 @@ describe("Sandbox API Integration", () => { const bodies = calls.map((r) => JSON.parse(r.body) as Record); const keys = [ - "busyInstances", - "reservedCpuCores", - "totalInstances", - "reservedMemory", - "totalMemory", + "busy_instances", + "reserved_cpu_cores", + "total_instances", + "reserved_memory", + "total_memory", ]; for (const body of bodies) { for (const key of keys) { @@ -147,7 +198,7 @@ describe("Sandbox API Integration", () => { it("should not leak reserved resources after a failed request", async () => { const before = await app.inject({ method: "GET", url: "/status.json" }); - const beforeStatus = JSON.parse(before.body) as { busyInstances: number }; + const beforeStatus = JSON.parse(before.body) as { busy_instances: number }; await app.inject({ method: "POST", @@ -156,9 +207,9 @@ describe("Sandbox API Integration", () => { }); const after = await app.inject({ method: "GET", url: "/status.json" }); - const afterStatus = JSON.parse(after.body) as { busyInstances: number }; + const afterStatus = JSON.parse(after.body) as { busy_instances: number }; - expect(afterStatus.busyInstances).toBe(beforeStatus.busyInstances); + expect(afterStatus.busy_instances).toBe(beforeStatus.busy_instances); }); }); @@ -211,11 +262,11 @@ describe("Sandbox API Integration", () => { const body = JSON.parse(response.body); const expectedKeys = [ - "busyInstances", - "reservedCpuCores", - "totalInstances", - "reservedMemory", - "totalMemory", + "busy_instances", + "reserved_cpu_cores", + "total_instances", + "reserved_memory", + "total_memory", ]; for (const key of expectedKeys) { diff --git a/src/index.ts b/src/index.ts index d4b42f1..94a3e02 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,5 @@ import { buildApp } from "./app.js"; +import { startDockerImageMaintenance } from "./services/docker-image-maintenance.js"; const PORT = parseInt(process.env["PORT"] ?? "3000", 10); if (Number.isNaN(PORT)) { @@ -8,8 +9,14 @@ const HOST = process.env["HOST"] ?? "0.0.0.0"; async function start(): Promise { const app = await buildApp(); + let stopDockerImageMaintenance: (() => void) | undefined; + app.addHook("onClose", () => { + stopDockerImageMaintenance?.(); + }); + try { await app.listen({ port: PORT, host: HOST }); + stopDockerImageMaintenance = startDockerImageMaintenance(app.log); app.log.info(`Sandbox server running at http://${HOST}:${PORT}`); } catch (error) { app.log.error(error); diff --git a/src/integration/e2e-sandbox.test.ts b/src/integration/e2e-sandbox.test.ts index 27558b3..96db068 100644 --- a/src/integration/e2e-sandbox.test.ts +++ b/src/integration/e2e-sandbox.test.ts @@ -208,6 +208,8 @@ function sandboxSuiteBody(runtime: DockerRuntime) { return () => { let app: FastifyInstance; let skipSuite = false; + let previousDockerRuntime: string | undefined; + let dockerRuntimeEnvWasConfigured = false; beforeEach(function (ctx) { if (fixturesSkipAll || skipSuite) ctx.skip(); @@ -215,6 +217,9 @@ function sandboxSuiteBody(runtime: DockerRuntime) { beforeAll(async () => { if (fixturesSkipAll) return; + previousDockerRuntime = process.env["DOCKER_RUNTIME"]; + process.env["DOCKER_RUNTIME"] = runtime; + dockerRuntimeEnvWasConfigured = true; if (runtime === "runsc") { try { @@ -240,6 +245,13 @@ function sandboxSuiteBody(runtime: DockerRuntime) { afterAll(async () => { resetState(); await app?.close(); + if (dockerRuntimeEnvWasConfigured) { + if (previousDockerRuntime === undefined) { + delete process.env["DOCKER_RUNTIME"]; + } else { + process.env["DOCKER_RUNTIME"] = previousDockerRuntime; + } + } }); async function submitAndWait( @@ -363,14 +375,19 @@ function sandboxSuiteBody(runtime: DockerRuntime) { describe("resource management", () => { afterEach(() => resetState()); - it("busyInstances returns to 0 after submission completes", { timeout: 60_000 }, async () => { - const initialRes = await app.inject({ method: "GET", url: "/status.json" }); - const initial = (JSON.parse(initialRes.body) as { busyInstances: number }).busyInstances; - await submitAndWait(passingPythonTar, PYTHON_IMAGE); - const afterRes = await app.inject({ method: "GET", url: "/status.json" }); - const after = (JSON.parse(afterRes.body) as { busyInstances: number }).busyInstances; - expect(after).toBe(initial); - }); + it( + "busy_instances returns to 0 after submission completes", + { timeout: 60_000 }, + async () => { + const initialRes = await app.inject({ method: "GET", url: "/status.json" }); + const initial = (JSON.parse(initialRes.body) as { busy_instances: number }) + .busy_instances; + await submitAndWait(passingPythonTar, PYTHON_IMAGE); + const afterRes = await app.inject({ method: "GET", url: "/status.json" }); + const after = (JSON.parse(afterRes.body) as { busy_instances: number }).busy_instances; + expect(after).toBe(initial); + }, + ); it("returns 503 when resources are fully reserved", async () => { const { TOTAL_CPU_CORES, TOTAL_MEMORY_GB, tryReserveResources } = @@ -393,24 +410,24 @@ function sandboxSuiteBody(runtime: DockerRuntime) { }); it( - "reservedCpuCores and reservedMemory return to baseline after completion", + "reserved_cpu_cores and reserved_memory return to baseline after completion", { timeout: 60_000 }, async () => { const beforeRes = await app.inject({ method: "GET", url: "/status.json" }); const before = JSON.parse(beforeRes.body) as { - reservedCpuCores: number; - reservedMemory: number; + reserved_cpu_cores: number; + reserved_memory: number; }; await submitAndWait(passingPythonTar, PYTHON_IMAGE); const afterRes = await app.inject({ method: "GET", url: "/status.json" }); const after = JSON.parse(afterRes.body) as { - reservedCpuCores: number; - reservedMemory: number; + reserved_cpu_cores: number; + reserved_memory: number; }; - expect(after.reservedCpuCores).toBe(before.reservedCpuCores); - expect(after.reservedMemory).toBe(before.reservedMemory); + expect(after.reserved_cpu_cores).toBe(before.reserved_cpu_cores); + expect(after.reserved_memory).toBe(before.reserved_memory); }, ); @@ -430,7 +447,7 @@ function sandboxSuiteBody(runtime: DockerRuntime) { it("releases resources even when submission crashes", { timeout: 60_000 }, async () => { const beforeRes = await app.inject({ method: "GET", url: "/status.json" }); - const before = (JSON.parse(beforeRes.body) as { busyInstances: number }).busyInstances; + const before = (JSON.parse(beforeRes.body) as { busy_instances: number }).busy_instances; await submitAndWait(corruptTar, PYTHON_IMAGE, { callbackTimeoutMs: 10_000 }).catch( () => {}, @@ -440,7 +457,7 @@ function sandboxSuiteBody(runtime: DockerRuntime) { }); const afterRes = await app.inject({ method: "GET", url: "/status.json" }); - const after = (JSON.parse(afterRes.body) as { busyInstances: number }).busyInstances; + const after = (JSON.parse(afterRes.body) as { busy_instances: number }).busy_instances; expect(after).toBeLessThanOrEqual(before); }); }); @@ -477,10 +494,9 @@ function sandboxSuiteBody(runtime: DockerRuntime) { it( "fork bomb: status is finished or failed (does not hang)", { timeout: 60_000 }, - async () => { + async (ctx) => { if (process.env.CI) { - console.log("Skipping fork bomb test on CI"); - return; + ctx.skip(); } const { result } = await submitAndWait(forkBombPythonTar, PYTHON_IMAGE, { callbackTimeoutMs: 60_000, @@ -526,15 +542,15 @@ function sandboxSuiteBody(runtime: DockerRuntime) { expect(result.token).toBe(TEST_TOKEN); }); - it("reservedCpuCores returns to baseline after timeout", { timeout: 30_000 }, async () => { + it("reserved_cpu_cores returns to baseline after timeout", { timeout: 30_000 }, async () => { const beforeRes = await app.inject({ method: "GET", url: "/status.json" }); - const before = JSON.parse(beforeRes.body) as { reservedCpuCores: number }; + const before = JSON.parse(beforeRes.body) as { reserved_cpu_cores: number }; await submitAndWait(timeoutPythonTar, PYTHON_IMAGE, { callbackTimeoutMs: 25_000 }); const afterRes = await app.inject({ method: "GET", url: "/status.json" }); - const after = JSON.parse(afterRes.body) as { reservedCpuCores: number }; - expect(after.reservedCpuCores).toBe(before.reservedCpuCores); + const after = JSON.parse(afterRes.body) as { reserved_cpu_cores: number }; + expect(after.reserved_cpu_cores).toBe(before.reserved_cpu_cores); }); }); diff --git a/src/routes.test.ts b/src/routes.test.ts new file mode 100644 index 0000000..1981e0b --- /dev/null +++ b/src/routes.test.ts @@ -0,0 +1,208 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import type { FastifyInstance } from "fastify"; +import Fastify from "fastify"; +import multipart from "@fastify/multipart"; +import sensible from "@fastify/sensible"; +import FormData from "form-data"; +import { registerRoutes } from "./routes.js"; +import { handleError } from "./utils/errors.js"; +import type { SandboxExecutor } from "./services/sandbox-executor.js"; +import { resetState, TOTAL_CPU_CORES, tryReserveResources } from "./services/resource-manager.js"; +import type { SubmissionResult } from "./types.js"; + +const TEST_IMAGE = "eu.gcr.io/moocfi-public/tmc-sandbox-python:latest"; + +const successfulResult: SubmissionResult = { + testOutput: "", + stdout: "", + stderr: "", + valgrind: "", + validations: "", + vmLog: "", + status: "finished", + exitCode: "0", +}; + +let previousDockerRuntime: string | undefined; + +async function buildTestApp(executeSubmission: ReturnType): Promise { + const app = Fastify({ logger: false }); + await app.register(sensible); + await app.register(multipart); + app.setErrorHandler(handleError); + registerRoutes(app, { executeSubmission } as unknown as SandboxExecutor); + return app; +} + +function buildForm(opts: { submissionId?: string } = {}): { + headers: Record; + payload: Buffer; +} { + const form = new FormData(); + form.append("file", Buffer.from("dummy tar content"), { + filename: "submission.tar", + contentType: "application/x-tar", + }); + form.append("notify", "https://example.com/notify"); + form.append("token", "test-token"); + form.append("docker_image", TEST_IMAGE); + if (opts.submissionId !== undefined) { + form.append("submission_id", opts.submissionId); + } + + return { + headers: form.getHeaders() as Record, + payload: form.getBuffer(), + }; +} + +function stubFetch( + response: Response = new Response(null, { status: 200 }), + expectedCalls = 1, +): { + fetchCalled: Promise; + fetchMock: ReturnType; +} { + let calls = 0; + let resolveFetch!: (init: RequestInit | undefined) => void; + const fetchCalled = new Promise((resolve) => { + resolveFetch = resolve; + }); + const fetchMock = vi.fn((_url: string | URL | Request, init?: RequestInit) => { + calls += 1; + if (calls === expectedCalls) { + resolveFetch(init); + } + return Promise.resolve(response); + }); + vi.stubGlobal("fetch", fetchMock); + return { fetchCalled, fetchMock }; +} + +beforeEach(() => { + previousDockerRuntime = process.env["DOCKER_RUNTIME"]; + process.env["DOCKER_RUNTIME"] = "runc"; +}); + +afterEach(() => { + if (previousDockerRuntime === undefined) { + delete process.env["DOCKER_RUNTIME"]; + } else { + process.env["DOCKER_RUNTIME"] = previousDockerRuntime; + } + vi.unstubAllGlobals(); + resetState(); +}); + +describe("registerRoutes", () => { + it("accepts multipart fields that arrive after the file part", async () => { + const executeSubmission = vi.fn().mockResolvedValue(successfulResult); + const app = await buildTestApp(executeSubmission); + const { fetchCalled } = stubFetch(); + const { headers, payload } = buildForm(); + + const response = await app.inject({ + method: "POST", + url: "/tasks.json", + headers, + payload, + }); + + expect(response.statusCode).toBe(200); + await fetchCalled; + expect(executeSubmission).toHaveBeenCalledTimes(1); + expect(executeSubmission.mock.calls[0]?.[2]).toBe(TEST_IMAGE); + expect(executeSubmission.mock.calls[0]?.[3]).toBe("application/x-tar"); + + await app.close(); + }); + + it("rejects busy submissions before accepting an upload slot", async () => { + expect(tryReserveResources({ cpus: TOTAL_CPU_CORES, memoryGB: 0 })).toBe(true); + const executeSubmission = vi.fn().mockResolvedValue(successfulResult); + const app = await buildTestApp(executeSubmission); + const { headers, payload } = buildForm(); + + const response = await app.inject({ + method: "POST", + url: "/tasks.json", + headers, + payload, + }); + + expect(response.statusCode).toBe(503); + expect(executeSubmission).not.toHaveBeenCalled(); + + await app.close(); + }); + + it("uses unique internal execution IDs instead of client submission_id", async () => { + let executionCount = 0; + let resolveExecutedTwice!: () => void; + const executedTwice = new Promise((resolve) => { + resolveExecutedTwice = resolve; + }); + const executeSubmission = vi.fn().mockImplementation(() => { + executionCount += 1; + if (executionCount === 2) { + resolveExecutedTwice(); + } + return Promise.resolve(successfulResult); + }); + const app = await buildTestApp(executeSubmission); + const { fetchCalled } = stubFetch(undefined, 2); + + const first = buildForm({ submissionId: "client-retry-id" }); + const firstResponse = await app.inject({ + method: "POST", + url: "/tasks.json", + headers: first.headers, + payload: first.payload, + }); + const second = buildForm({ submissionId: "client-retry-id" }); + const secondResponse = await app.inject({ + method: "POST", + url: "/tasks.json", + headers: second.headers, + payload: second.payload, + }); + + expect(firstResponse.statusCode).toBe(200); + expect(secondResponse.statusCode).toBe(200); + + await executedTwice; + await fetchCalled; + const executionIds = executeSubmission.mock.calls.map((call) => call[1]); + expect(executionIds).toHaveLength(2); + expect(executionIds).not.toContain("client-retry-id"); + expect(new Set(executionIds).size).toBe(2); + + await app.close(); + }); + + it("does not follow callback redirects", async () => { + const executeSubmission = vi.fn().mockResolvedValue(successfulResult); + const app = await buildTestApp(executeSubmission); + const { fetchCalled, fetchMock } = stubFetch( + new Response(null, { + status: 302, + headers: { location: "http://169.254.169.254/" }, + }), + ); + const { headers, payload } = buildForm(); + + const response = await app.inject({ + method: "POST", + url: "/tasks.json", + headers, + payload, + }); + + expect(response.statusCode).toBe(200); + const fetchInit = await fetchCalled; + expect(fetchMock).toHaveBeenCalledTimes(1); + expect(fetchInit?.redirect).toBe("manual"); + + await app.close(); + }); +}); diff --git a/src/routes.ts b/src/routes.ts index 5976972..55f8509 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -1,5 +1,4 @@ import type { FastifyInstance, FastifyRequest, FastifyReply } from "fastify"; -import type { Multipart } from "@fastify/multipart"; import { pipeline } from "node:stream/promises"; import { createWriteStream } from "node:fs"; import { mkdtemp, rm } from "node:fs/promises"; @@ -15,6 +14,7 @@ import { getReservedCpuCores, getReservedMemory, releaseResources, + tryResizeReservedResources, tryReserveResources, } from "./services/resource-manager.js"; import { SandboxExecutor } from "./services/sandbox-executor.js"; @@ -30,12 +30,35 @@ import type { const DEFAULT_MEMORY_GB = 1; const DEFAULT_CPUS = 1; +const DEFAULT_RESOURCE_LIMITS: ResourceLimits = { + memoryGB: DEFAULT_MEMORY_GB, + cpus: DEFAULT_CPUS, +}; const NOTIFY_TIMEOUT_MS = 30_000; -/** Safely extract a text value from a multipart field entry. */ -function fieldValue(field: Multipart | Multipart[] | undefined): string | undefined { - if (!field || Array.isArray(field) || field.type !== "field") return undefined; - return field.value as string; +type MultipartFields = Record; + +function readDockerRuntimeFromEnv(): DockerRuntime { + const runtime = process.env["DOCKER_RUNTIME"]; + + if (runtime === "runc" || runtime === "runsc") { + return runtime; + } + + if (runtime === undefined || runtime === "") { + throw new Error('DOCKER_RUNTIME is required and must be set to "runc" or "runsc"'); + } + + throw new Error(`Invalid DOCKER_RUNTIME value "${runtime}": expected "runc" or "runsc"`); +} + +function setMultipartField(fields: MultipartFields, name: string, value: unknown): void { + fields[name] = value === undefined || value === null ? undefined : String(value); +} + +function numberField(fields: MultipartFields, name: string): number | undefined { + const value = fields[name]; + return value === undefined ? undefined : Number(value); } export function registerRoutes(app: FastifyInstance, executor?: SandboxExecutor): void { @@ -43,45 +66,85 @@ export function registerRoutes(app: FastifyInstance, executor?: SandboxExecutor) // If set, callbacks without a valid HMAC-SHA256 signature will be warned (future: rejected). // TODO: Reject unsigned callbacks once all clients are updated to sign requests. const callbackSecret = process.env["SANDBOX_CALLBACK_SECRET"]; - const runtime: DockerRuntime = process.env["DOCKER_RUNTIME"] === "runsc" ? "runsc" : "runc"; + const runtime = readDockerRuntimeFromEnv(); const exec = executor ?? new SandboxExecutor(app.log, { dockerRuntime: runtime }); - app.get<{ Reply: StatusResponse }>( - "/status.json", - (): StatusResponse => ({ - busyInstances: getBusyInstances(), - reservedCpuCores: getReservedCpuCores(), - totalInstances: TOTAL_CPU_CORES, - reservedMemory: getReservedMemory(), - totalMemory: TOTAL_MEMORY_GB, - }), - ); + app.get<{ Reply: StatusResponse }>("/status.json", (): StatusResponse => { + return { + busy_instances: getBusyInstances(), + reserved_cpu_cores: getReservedCpuCores(), + total_instances: TOTAL_CPU_CORES, + reserved_memory: getReservedMemory(), + total_memory: TOTAL_MEMORY_GB, + }; + }); app.post<{ Reply: TaskResponse }>( "/tasks.json", async (request: FastifyRequest, _reply: FastifyReply): Promise => { - const data = await request.file(); + const fields: MultipartFields = {}; + let uploadTmpDir = ""; + let uploadPath = ""; + let uploadMimeType = ""; + let reservedLimits: ResourceLimits | undefined; + + const cleanupUpload = async (): Promise => { + if (uploadTmpDir) { + await rm(uploadTmpDir, { recursive: true, force: true }).catch(() => {}); + } + }; + + const releaseReservedResources = (): void => { + if (reservedLimits) { + releaseResources(reservedLimits); + reservedLimits = undefined; + } + }; + + if (!tryReserveResources(DEFAULT_RESOURCE_LIMITS)) { + throw new SandboxBusyError(); + } + reservedLimits = DEFAULT_RESOURCE_LIMITS; + + try { + for await (const part of request.parts()) { + if (part.type === "file") { + if (uploadPath) { + throw new BadRequestError("Only one file provided"); + } + uploadMimeType = part.mimetype; + uploadTmpDir = await mkdtemp(join(tmpdir(), "sandbox-upload-")); + uploadPath = join(uploadTmpDir, `${randomUUID()}.upload`); + await pipeline(part.file, createWriteStream(uploadPath)); + } else { + setMultipartField(fields, part.fieldname, part.value); + } + } + } catch (error) { + await cleanupUpload(); + releaseReservedResources(); + throw error; + } - if (!data) { + if (!uploadPath) { + releaseReservedResources(); throw new BadRequestError("No file provided"); } let taskPayload: z.infer; try { taskPayload = TaskPayloadSchema.parse({ - submissionId: fieldValue(data.fields["submission_id"]), - dockerImage: fieldValue(data.fields["docker_image"]), - memoryLimitGb: data.fields["memory_limit_gb"] - ? Number(fieldValue(data.fields["memory_limit_gb"])) - : undefined, - cpuLimit: data.fields["cpu_limit"] - ? Number(fieldValue(data.fields["cpu_limit"])) - : undefined, - notify: fieldValue(data.fields["notify"]), - token: fieldValue(data.fields["token"]), - notifySignature: fieldValue(data.fields["notify_signature"]), + submissionId: fields["submission_id"], + dockerImage: fields["docker_image"], + memoryLimitGb: numberField(fields, "memory_limit_gb"), + cpuLimit: numberField(fields, "cpu_limit"), + notify: fields["notify"], + token: fields["token"], + notifySignature: fields["notify_signature"], }); } catch (error) { + await cleanupUpload(); + releaseReservedResources(); if (error instanceof z.ZodError) { throw new BadRequestError( `Invalid request: ${error.issues.map((issue) => issue.message).join(", ")}`, @@ -95,6 +158,8 @@ export function registerRoutes(app: FastifyInstance, executor?: SandboxExecutor) if (callbackSecret) { if (taskPayload.notifySignature) { if (!verifyHmacSha256(taskPayload.notify, taskPayload.notifySignature, callbackSecret)) { + await cleanupUpload(); + releaseReservedResources(); throw new BadRequestError("Invalid notify URL signature"); } } else { @@ -107,10 +172,12 @@ export function registerRoutes(app: FastifyInstance, executor?: SandboxExecutor) let mimeType: z.infer; try { - mimeType = MimeTypeSchema.parse(data.mimetype); + mimeType = MimeTypeSchema.parse(uploadMimeType); } catch { + await cleanupUpload(); + releaseReservedResources(); throw new BadRequestError( - `Unsupported file type: ${data.mimetype}. Supported types: application/x-tar, application/zstd`, + `Unsupported file type: ${uploadMimeType}. Supported types: application/x-tar, application/zstd`, ); } @@ -119,49 +186,41 @@ export function registerRoutes(app: FastifyInstance, executor?: SandboxExecutor) cpus: taskPayload.cpuLimit ?? DEFAULT_CPUS, }; - if (!tryReserveResources(resourceLimits)) { + if (!tryResizeReservedResources(reservedLimits, resourceLimits)) { + await cleanupUpload(); + releaseReservedResources(); throw new SandboxBusyError(); } - - // Save the multipart stream to a temp file. Release resources and clean up on failure. - let uploadTmpDir = ""; - let uploadPath = ""; - try { - uploadTmpDir = await mkdtemp(join(tmpdir(), "sandbox-upload-")); - uploadPath = join(uploadTmpDir, `${randomUUID()}.upload`); - await pipeline(data.file, createWriteStream(uploadPath)); - } catch (error) { - releaseResources(resourceLimits); - if (uploadTmpDir) await rm(uploadTmpDir, { recursive: true, force: true }).catch(() => {}); - throw error; - } + reservedLimits = resourceLimits; if (taskPayload.submissionId) { - request.log.info(`Handling submission ${taskPayload.submissionId}`); + request.log.info({ submissionId: taskPayload.submissionId }, "Handling submission"); } - const submissionId = taskPayload.submissionId ?? randomUUID(); + const executionId = randomUUID(); const notifyUrl = taskPayload.notify; const token = taskPayload.token; + const log = request.log.child({}); const capturedUploadTmpDir = uploadTmpDir; + const capturedResourceLimits = reservedLimits; setImmediate(async () => { let result: SubmissionResult | undefined; let executionError: unknown; try { result = await exec.executeSubmission( uploadPath, - submissionId, + executionId, taskPayload.dockerImage, mimeType, resourceLimits, ); } catch (error) { executionError = error; - request.log.error({ error }, "Submission processing failed"); + log.error({ error }, "Submission processing failed"); } finally { // Release before notifying so the counter is accurate when the callback fires. - releaseResources(resourceLimits); + releaseResources(capturedResourceLimits); // The executor unlinks the upload file; clean up the containing temp dir. await rm(capturedUploadTmpDir, { recursive: true, force: true }).catch(() => {}); } @@ -194,13 +253,17 @@ export function registerRoutes(app: FastifyInstance, executor?: SandboxExecutor) headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload), signal: controller.signal, + redirect: "manual", }); + if (response.status >= 300 && response.status < 400) { + throw new Error(`Redirects are not allowed for notify URL (HTTP ${response.status})`); + } if (!response.ok) { throw new Error(`HTTP ${response.status}`); } - request.log.info(`Notified ${notifyUrl} with status ${result?.status ?? "failed"}`); + log.info(`Notified ${notifyUrl} with status ${result?.status ?? "failed"}`); } catch (error) { - request.log.error({ error }, `Failed to notify ${notifyUrl}`); + log.error({ error }, `Failed to notify ${notifyUrl}`); } finally { clearTimeout(fetchTimeout); } diff --git a/src/schemas.test.ts b/src/schemas.test.ts index 669648b..8aa360d 100644 --- a/src/schemas.test.ts +++ b/src/schemas.test.ts @@ -389,52 +389,52 @@ describe("Schemas", () => { describe("StatusResponseSchema", () => { it("should validate complete status response", () => { const result = StatusResponseSchema.safeParse({ - busyInstances: 2, - reservedCpuCores: 2, - totalInstances: 8, - reservedMemory: 4, - totalMemory: 16, + busy_instances: 2, + reserved_cpu_cores: 2, + total_instances: 8, + reserved_memory: 4, + total_memory: 16, }); expect(result.success).toBe(true); }); it("should validate zero values", () => { const result = StatusResponseSchema.safeParse({ - busyInstances: 0, - reservedCpuCores: 0, - totalInstances: 0, - reservedMemory: 0, - totalMemory: 0, + busy_instances: 0, + reserved_cpu_cores: 0, + total_instances: 0, + reserved_memory: 0, + total_memory: 0, }); expect(result.success).toBe(true); }); it("should validate floating point values", () => { const result = StatusResponseSchema.safeParse({ - busyInstances: 1.5, - reservedCpuCores: 1.5, - totalInstances: 8.5, - reservedMemory: 4.25, - totalMemory: 16.75, + busy_instances: 1.5, + reserved_cpu_cores: 1.5, + total_instances: 8.5, + reserved_memory: 4.25, + total_memory: 16.75, }); expect(result.success).toBe(true); }); it("should reject missing fields", () => { const result = StatusResponseSchema.safeParse({ - busyInstances: 2, - reservedCpuCores: 2, + busy_instances: 2, + reserved_cpu_cores: 2, }); expect(result.success).toBe(false); }); it("should reject non-numeric values", () => { const result = StatusResponseSchema.safeParse({ - busyInstances: "2", - reservedCpuCores: "2", - totalInstances: 8, - reservedMemory: 4, - totalMemory: 16, + busy_instances: "2", + reserved_cpu_cores: "2", + total_instances: 8, + reserved_memory: 4, + total_memory: 16, }); expect(result.success).toBe(false); }); diff --git a/src/schemas.ts b/src/schemas.ts index 4fd4ba9..4aa4d8b 100644 --- a/src/schemas.ts +++ b/src/schemas.ts @@ -3,8 +3,10 @@ import { isPrivateOrMetadataUrl } from "./utils/url-safety.js"; const MAX_MEMORY_REQUEST_GB = 4; const MAX_CPUS_REQUEST = 2; -const ALLOWED_DOCKER_IMAGE_PREFIX = "eu.gcr.io/moocfi-public/tmc-sandbox-"; -const ALLOWED_ALTERNATIVE_DOCKER_IMAGES = new Set(["nygrenh/sandbox-next"]); +export const ALLOWED_DOCKER_IMAGE_PREFIX = "eu.gcr.io/moocfi-public/tmc-sandbox-"; +export const ALLOWED_ALTERNATIVE_DOCKER_IMAGES: ReadonlySet = new Set([ + "nygrenh/sandbox-next", +]); export const ResourceLimitsSchema = z.object({ memoryGB: z.number().min(0.5).max(MAX_MEMORY_REQUEST_GB), @@ -47,11 +49,11 @@ export const TaskPayloadSchema = z.object({ export const MimeTypeSchema = z.enum(["application/x-tar", "application/zstd"]); export const StatusResponseSchema = z.object({ - busyInstances: z.number(), - reservedCpuCores: z.number(), - totalInstances: z.number(), - reservedMemory: z.number(), - totalMemory: z.number(), + busy_instances: z.number(), + reserved_cpu_cores: z.number(), + total_instances: z.number(), + reserved_memory: z.number(), + total_memory: z.number(), }); export const TaskResponseSchema = z.object({ diff --git a/src/services/docker-image-maintenance.test.ts b/src/services/docker-image-maintenance.test.ts new file mode 100644 index 0000000..cd95405 --- /dev/null +++ b/src/services/docker-image-maintenance.test.ts @@ -0,0 +1,39 @@ +import { describe, expect, it, vi } from "vitest"; +import type { FastifyBaseLogger } from "fastify"; +import { pullAllowedDockerImages } from "./docker-image-maintenance.js"; + +const logger = { + info: vi.fn(), + error: vi.fn(), +} as unknown as FastifyBaseLogger; + +describe("pullAllowedDockerImages", () => { + it("pulls alternative images and registry sandbox images", async () => { + const execFileFn = vi.fn().mockResolvedValue({ stdout: "", stderr: "" }); + const fetchFn = vi.fn().mockResolvedValue( + new Response( + JSON.stringify({ + child: ["tmc-sandbox-python", "not-sandbox", "tmc-sandbox-make"], + }), + { status: 200 }, + ), + ); + + await pullAllowedDockerImages(logger, { execFileFn, fetchFn }); + + expect(fetchFn).toHaveBeenCalledWith("https://eu.gcr.io/v2/moocfi-public/tags/list"); + expect(execFileFn).toHaveBeenCalledWith("docker", ["pull", "nygrenh/sandbox-next"]); + expect(execFileFn).toHaveBeenCalledWith("docker", [ + "pull", + "eu.gcr.io/moocfi-public/tmc-sandbox-python", + ]); + expect(execFileFn).toHaveBeenCalledWith("docker", [ + "pull", + "eu.gcr.io/moocfi-public/tmc-sandbox-make", + ]); + expect(execFileFn).not.toHaveBeenCalledWith("docker", [ + "pull", + "eu.gcr.io/moocfi-public/not-sandbox", + ]); + }); +}); diff --git a/src/services/docker-image-maintenance.ts b/src/services/docker-image-maintenance.ts new file mode 100644 index 0000000..d68584d --- /dev/null +++ b/src/services/docker-image-maintenance.ts @@ -0,0 +1,130 @@ +import { execFile as execFileCallback } from "node:child_process"; +import type { FastifyBaseLogger } from "fastify"; +import { ALLOWED_ALTERNATIVE_DOCKER_IMAGES } from "../schemas.js"; + +const REGISTRY_CHILDREN_URL = "https://eu.gcr.io/v2/moocfi-public/tags/list"; +const REGISTRY_BASE = "eu.gcr.io/moocfi-public/"; +const IMAGE_NAME_PREFIX = "tmc-sandbox-"; +const PULL_INTERVAL_MS = 10 * 60 * 1000; +const PRUNE_INTERVAL_MS = 24 * 60 * 60 * 1000; + +type ExecFileFn = (file: string, args: string[]) => Promise<{ stdout: string; stderr: string }>; + +interface DockerImageMaintenanceOptions { + execFileFn?: ExecFileFn; + fetchFn?: typeof fetch; + pullIntervalMs?: number; + pruneIntervalMs?: number; +} + +function defaultExecFile( + file: string, + args: string[], +): Promise<{ stdout: string; stderr: string }> { + return new Promise((resolve, reject) => { + execFileCallback(file, args, (error, stdout, stderr) => { + if (error) { + reject(error); + } else { + resolve({ stdout, stderr }); + } + }); + }); +} + +function imageRepositoryForChild(child: string): string { + return `${REGISTRY_BASE}${child}`; +} + +async function listRegistrySandboxImages(fetchFn: typeof fetch): Promise { + const response = await fetchFn(REGISTRY_CHILDREN_URL); + if (!response.ok) { + throw new Error(`Could not list sandbox images: HTTP ${response.status}`); + } + + const body: unknown = await response.json(); + const child = body && typeof body === "object" ? (body as { child?: unknown }).child : undefined; + if (!Array.isArray(child)) return []; + + return child + .filter((image): image is string => typeof image === "string") + .filter((image) => image.startsWith(IMAGE_NAME_PREFIX)) + .map(imageRepositoryForChild); +} + +async function pullImage( + image: string, + logger: FastifyBaseLogger, + execFileFn: ExecFileFn, +): Promise { + logger.info({ image }, "Pulling sandbox image"); + try { + await execFileFn("docker", ["pull", image]); + } catch (error) { + logger.error({ image, error }, "Could not pull sandbox image"); + } +} + +export async function pullAllowedDockerImages( + logger: FastifyBaseLogger, + opts: Pick = {}, +): Promise { + const execFileFn = opts.execFileFn ?? defaultExecFile; + const fetchFn = opts.fetchFn ?? fetch; + const registryImages = await listRegistrySandboxImages(fetchFn); + const images = new Set([...ALLOWED_ALTERNATIVE_DOCKER_IMAGES, ...registryImages]); + + await Promise.all([...images].map((image) => pullImage(image, logger, execFileFn))); +} + +async function pruneOldDockerImages( + logger: FastifyBaseLogger, + execFileFn: ExecFileFn, +): Promise { + logger.info("Pruning sandbox images that have not been used for 24 hours"); + try { + await execFileFn("docker", ["image", "prune", "-a", "-f", "--filter", "until=24h"]); + } catch (error) { + logger.error({ error }, "Could not prune old sandbox images"); + } +} + +export function startDockerImageMaintenance( + logger: FastifyBaseLogger, + opts: DockerImageMaintenanceOptions = {}, +): () => void { + const execFileFn = opts.execFileFn ?? defaultExecFile; + const pullIntervalMs = opts.pullIntervalMs ?? PULL_INTERVAL_MS; + const pruneIntervalMs = opts.pruneIntervalMs ?? PRUNE_INTERVAL_MS; + let pullRunning = false; + const pullOptions: Pick = { + execFileFn, + }; + if (opts.fetchFn) { + pullOptions.fetchFn = opts.fetchFn; + } + + const runPull = (): void => { + if (pullRunning) return; + pullRunning = true; + void pullAllowedDockerImages(logger, pullOptions) + .catch((error: unknown) => { + logger.error({ error }, "Could not refresh allowed sandbox images"); + }) + .finally(() => { + pullRunning = false; + }); + }; + + runPull(); + + const pullInterval = setInterval(runPull, pullIntervalMs); + const pruneInterval = setInterval(() => { + void pruneOldDockerImages(logger, execFileFn).then(runPull); + }, pruneIntervalMs); + + return () => { + clearInterval(pullInterval); + clearInterval(pruneInterval); + }; +} diff --git a/src/services/file-extractor.ts b/src/services/file-extractor.ts index e54a331..90ee9ee 100644 --- a/src/services/file-extractor.ts +++ b/src/services/file-extractor.ts @@ -1,5 +1,5 @@ import { createReadStream } from "node:fs"; -import { unlink } from "node:fs/promises"; +import { mkdir, unlink } from "node:fs/promises"; import { execFile as execFileCallback } from "node:child_process"; import { resolve, sep } from "node:path"; import * as tar from "tar-fs"; @@ -36,8 +36,9 @@ function isSafePath(entryPath: string): boolean { return resolved === SAFE_PATH_ROOT || resolved.startsWith(SAFE_PATH_ROOT + sep); } -const extractTar = (inputPath: string, outputPath: string): Promise => - new Promise((_resolve, reject) => { +const extractTar = async (inputPath: string, outputPath: string): Promise => { + await mkdir(outputPath, { recursive: true }); + return new Promise((_resolve, reject) => { let entryCount = 0; let totalBytes = 0; let overLimit = false; @@ -81,6 +82,7 @@ const extractTar = (inputPath: string, outputPath: string): Promise => }); extractStream.on("error", (err) => reject(overLimit ? limitError() : err)); }); +}; const extractZstd = async (inputPath: string, outputPath: string): Promise => { const tmpTar = `${inputPath}.decompressed.tar`; diff --git a/src/services/resource-manager.ts b/src/services/resource-manager.ts index 2e4814e..1883b53 100644 --- a/src/services/resource-manager.ts +++ b/src/services/resource-manager.ts @@ -53,6 +53,23 @@ export function tryReserveResources(limits: ResourceLimits): boolean { return true; } +export function tryResizeReservedResources( + currentLimits: ResourceLimits, + nextLimits: ResourceLimits, +): boolean { + const additionalLimits: ResourceLimits = { + cpus: Math.max(0, nextLimits.cpus - currentLimits.cpus), + memoryGB: Math.max(0, nextLimits.memoryGB - currentLimits.memoryGB), + }; + + if (!hasAvailableResources(additionalLimits)) return false; + + // busyInstances count doesn't change on resize — only the resource amounts do. + reservedCpuCores += nextLimits.cpus - currentLimits.cpus; + reservedMemoryGb += nextLimits.memoryGB - currentLimits.memoryGB; + return true; +} + export function getResourceUtilization(): { cpuUtilization: number; memoryUtilization: number } { return { cpuUtilization: reservedCpuCores / TOTAL_CPU_CORES, diff --git a/src/services/sandbox-executor.test.ts b/src/services/sandbox-executor.test.ts index e96ea86..f05fe4f 100644 --- a/src/services/sandbox-executor.test.ts +++ b/src/services/sandbox-executor.test.ts @@ -250,6 +250,7 @@ describe("SandboxExecutor", () => { (_i: string, _o: string, _m: SupportedMimeType): Promise => Promise.resolve(), ); executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, readFileFn: mockReadFile, @@ -279,6 +280,65 @@ describe("SandboxExecutor", () => { expect(startIdx, "docker start not found").toBeGreaterThan(cpIdx); }); + it("does not pull the docker image when it is already present", async () => { + await executor.executeSubmission( + "/fake/upload.tar", + "sub-image-present", + undefined, + "application/x-tar", + defaultLimits, + ); + + const calls = mockExecFile.mock.calls as Array<[string, string[]]>; + expect(calls.some(([f, a]) => f === "docker" && a[0] === "image" && a[1] === "inspect")).toBe( + true, + ); + expect(calls.some(([f, a]) => f === "docker" && a[0] === "pull")).toBe(false); + }); + + it("pulls the docker image only when it is missing locally", async () => { + mockExecFile = vi.fn( + (file: string, args: string[]): Promise<{ stdout: string; stderr: string }> => { + if (file === "docker" && args[0] === "image" && args[1] === "inspect") { + return Promise.reject(new Error("No such image")); + } + if (file === "docker" && args[0] === "inspect") { + return Promise.resolve({ + stdout: JSON.stringify([{ State: { OOMKilled: false } }]), + stderr: "", + }); + } + return Promise.resolve({ stdout: "", stderr: "" }); + }, + ); + executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + dockerRuntime: "runc", + taskTimeoutMs: 5000, + execFileFn: mockExecFile, + readFileFn: mockReadFile, + extractFileFn: mockExtractFile, + }); + + await executor.executeSubmission( + "/fake/upload.tar", + "sub-missing-image", + "eu.gcr.io/moocfi-public/tmc-sandbox-python:latest", + "application/x-tar", + defaultLimits, + ); + + const calls = mockExecFile.mock.calls as Array<[string, string[]]>; + const inspectIdx = calls.findIndex( + ([f, a]) => f === "docker" && a[0] === "image" && a[1] === "inspect", + ); + const pullIdx = calls.findIndex(([f, a]) => f === "docker" && a[0] === "pull"); + const createIdx = calls.findIndex(([f, a]) => f === "docker" && a[0] === "create"); + + expect(inspectIdx).toBeGreaterThanOrEqual(0); + expect(pullIdx).toBeGreaterThan(inspectIdx); + expect(createIdx).toBeGreaterThan(pullIdx); + }); + it("returns status=finished when exit_code is 0 and no OOM", async () => { const result = await executor.executeSubmission( "/fake/upload.tar", @@ -304,6 +364,7 @@ describe("SandboxExecutor", () => { Promise.resolve(path.endsWith("exit_code.txt") ? "137" : ""), ); executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, readFileFn: mockReadFile, @@ -330,6 +391,7 @@ describe("SandboxExecutor", () => { }, }); executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + dockerRuntime: "runc", taskTimeoutMs: 60_000, execFileFn: mockExecFile, readFileFn: mockReadFile, @@ -356,6 +418,7 @@ describe("SandboxExecutor", () => { }, ); executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, readFileFn: mockReadFile, @@ -414,6 +477,7 @@ describe("SandboxExecutor", () => { Promise.resolve(path.endsWith("exit_code.txt") ? "1" : ""), ); executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, readFileFn: mockReadFile, @@ -437,6 +501,7 @@ describe("SandboxExecutor", () => { (_path: string, _encoding: BufferEncoding): Promise => Promise.resolve(""), ); executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, readFileFn: mockReadFile, @@ -499,6 +564,7 @@ describe("SandboxExecutor", () => { }, ); executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: afsExecFile, readFileFn: mockReadFile, @@ -521,6 +587,7 @@ describe("SandboxExecutor", () => { "docker inspect": { stdout: "not-valid-json{{", stderr: "" }, }); executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, readFileFn: mockReadFile, @@ -545,6 +612,7 @@ describe("SandboxExecutor", () => { it("propagates extraction errors from extractFileFn", async () => { mockExtractFile = vi.fn(() => Promise.reject(new Error("archive is corrupt"))); executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, readFileFn: mockReadFile, @@ -584,6 +652,7 @@ describe("SandboxExecutor", () => { return Promise.reject(err); }); executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, readFileFn: mockReadFile, @@ -611,6 +680,7 @@ describe("SandboxExecutor", () => { return Promise.reject(err); }); executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, readFileFn: mockReadFile, @@ -680,6 +750,7 @@ describe("SandboxExecutor", () => { ); const executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + dockerRuntime: "runc", taskTimeoutMs: 1000, execFileFn: mockExecFile, readFileFn: mockReadFile, @@ -729,6 +800,7 @@ describe("SandboxExecutor", () => { ); const executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, readFileFn: mockReadFile, @@ -766,6 +838,7 @@ describe("SandboxExecutor", () => { }); const executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, readFileFn: mockReadFile, @@ -865,7 +938,7 @@ describe("buildDockerCreateArgs gVisor (runsc) docker args", () => { expect(runtimeIdx).toBeLessThan(imageIdx); }); - it("defaults to runc when no dockerRuntime option is provided", () => { + it("omits runsc-only flags when dockerRuntime is runc", () => { const args = buildDockerCreateArgs("test", "/path", "image", { memoryGB: 1, cpus: 1 }, "runc"); expect(args.indexOf("--runtime")).toBe(-1); expect(args.some((a) => a.startsWith("--kernel-memory"))).toBe(true); diff --git a/src/services/sandbox-executor.ts b/src/services/sandbox-executor.ts index 5e61895..6e47e16 100644 --- a/src/services/sandbox-executor.ts +++ b/src/services/sandbox-executor.ts @@ -43,11 +43,11 @@ function isNodeError(e: unknown): e is NodeJS.ErrnoException { } export interface SandboxExecutorOptions { + dockerRuntime: DockerRuntime; taskTimeoutMs?: number; execFileFn?: ExecFileFn; readFileFn?: ReadFileFn; extractFileFn?: ExtractFileFn; - dockerRuntime?: DockerRuntime; } export function buildDockerCreateArgs( @@ -69,7 +69,8 @@ export function buildDockerCreateArgs( "PYTHONDONTWRITEBYTECODE=1", "--memory", `${resourceLimits.memoryGB}G`, - // --kernel-memory is unsupported by gVisor (runsc) + // --kernel-memory is unsupported by gVisor (runsc) and deprecated in Docker 20.10+ + // (no-op on cgroups v2); kept for cgroups v1 compatibility. ...(dockerRuntime === "runc" ? ["--kernel-memory=50M"] : []), "--pids-limit=200", "--ulimit", @@ -124,13 +125,13 @@ export class SandboxExecutor { constructor( private logger: FastifyBaseLogger, - opts: SandboxExecutorOptions = {}, + opts: SandboxExecutorOptions, ) { this.taskTimeoutMs = opts.taskTimeoutMs ?? DEFAULT_TASK_TIMEOUT_MS; this.execFileFn = opts.execFileFn ?? defaultExecFile; this.readFileFn = opts.readFileFn ?? readFile; this.extractFileFn = opts.extractFileFn ?? extractFile; - this.dockerRuntime = opts.dockerRuntime ?? "runc"; + this.dockerRuntime = opts.dockerRuntime; } async executeSubmission( @@ -176,6 +177,8 @@ export class SandboxExecutor { const image = dockerImage ?? DEFAULT_DOCKER_IMAGE; const timeoutMs = this.taskTimeoutMs; + await this.ensureDockerImageAvailable(image); + const dockerArgs = buildDockerCreateArgs( containerId, path, @@ -228,6 +231,17 @@ export class SandboxExecutor { return result; } + private async ensureDockerImageAvailable(image: string): Promise { + try { + await this.execFileFn("docker", ["image", "inspect", image]); + return; + } catch (error) { + this.logger.info({ image, error }, "Docker image not found locally; pulling"); + } + + await this.execFileFn("docker", ["pull", image]); + } + private async collectResults( path: string, containerId: string, diff --git a/src/tests/helpers/create-callback-server.ts b/src/tests/helpers/create-callback-server.ts index ff844d5..ec61e01 100644 --- a/src/tests/helpers/create-callback-server.ts +++ b/src/tests/helpers/create-callback-server.ts @@ -10,6 +10,7 @@ export interface NotifyResult { vm_log: string; status: "finished" | "timeout" | "out-of-memory" | "crashed" | "failed"; exit_code: string; + error?: string; } export interface CallbackServer { diff --git a/src/tests/helpers/tmc-langs.ts b/src/tests/helpers/tmc-langs.ts index 477d753..72787a1 100644 --- a/src/tests/helpers/tmc-langs.ts +++ b/src/tests/helpers/tmc-langs.ts @@ -1,14 +1,29 @@ import { execFile as execFileCallback } from "node:child_process"; import { existsSync, statSync } from "node:fs"; -import { chmod, mkdir } from "node:fs/promises"; +import { chmod, mkdir, readFile } from "node:fs/promises"; import { promisify } from "node:util"; const execFile = promisify(execFileCallback); const BINARY_VERSION = "0.39.4"; const BINARY_URL = `https://download.mooc.fi/tmc-langs-rust/tmc-langs-cli-x86_64-unknown-linux-musl-${BINARY_VERSION}`; +const CHECKSUM_URL = `${BINARY_URL}.sha256`; const CACHE_DIR = "/tmp/tmc-langs-cli-cache"; const BINARY_PATH = `${CACHE_DIR}/tmc-langs-cli`; +const CHECKSUM_PATH = `${BINARY_PATH}.sha256`; + +async function verifyChecksum(binaryPath: string, checksumPath: string): Promise { + const checksumContent = await readFile(checksumPath, "utf8"); + const expectedHash = checksumContent.trim().split(/\s+/)[0]; + if (!expectedHash) throw new Error("Checksum file is empty or malformed"); + const { stdout } = await execFile("sha256sum", [binaryPath]); + const actualHash = stdout.trim().split(/\s+/)[0]; + if (expectedHash !== actualHash) { + throw new Error( + `Checksum mismatch for ${binaryPath}: expected ${expectedHash}, got ${actualHash}`, + ); + } +} export class TmcLangs { private constructor(private readonly binaryPath: string) {} @@ -17,7 +32,11 @@ export class TmcLangs { const missing = !existsSync(BINARY_PATH) || statSync(BINARY_PATH).size === 0; if (missing) { await mkdir(CACHE_DIR, { recursive: true }); - await execFile("curl", ["-L", "-o", BINARY_PATH, BINARY_URL]); + await Promise.all([ + execFile("curl", ["--fail", "-L", "-o", BINARY_PATH, BINARY_URL]), + execFile("curl", ["--fail", "-L", "-o", CHECKSUM_PATH, CHECKSUM_URL]), + ]); + await verifyChecksum(BINARY_PATH, CHECKSUM_PATH); await chmod(BINARY_PATH, 0o755); } return new TmcLangs(BINARY_PATH); @@ -32,9 +51,12 @@ export class TmcLangs { // required for sandbox tests: we need test/ and tmc/ directories included. await execFile(this.binaryPath, [ "compress-project", - "--exercise-path", exercisePath, - "--output-path", outputPath, - "--compression", format, + "--exercise-path", + exercisePath, + "--output-path", + outputPath, + "--compression", + format, "--naive", ]); } diff --git a/src/utils/url-safety.test.ts b/src/utils/url-safety.test.ts index 463cc3c..3ab3509 100644 --- a/src/utils/url-safety.test.ts +++ b/src/utils/url-safety.test.ts @@ -48,6 +48,22 @@ describe("isPrivateOrMetadataUrl", () => { it("blocks localhost with port", () => { expect(isPrivateOrMetadataUrl("http://localhost:8080/callback")).toBe(true); }); + + it("blocks localhost with a trailing DNS dot", () => { + expect(isPrivateOrMetadataUrl("http://localhost./callback")).toBe(true); + }); + + it("blocks IPv4-mapped IPv6 loopback addresses", () => { + expect(isPrivateOrMetadataUrl("http://[::ffff:7f00:1]/callback")).toBe(true); + }); + + it("blocks IPv4-mapped IPv6 private addresses", () => { + expect(isPrivateOrMetadataUrl("http://[::ffff:c0a8:101]/callback")).toBe(true); + }); + + it("allows IPv4-mapped IPv6 public addresses", () => { + expect(isPrivateOrMetadataUrl("http://[::ffff:808:808]/callback")).toBe(false); + }); }); describe("RFC1918 private ranges (should return true)", () => { diff --git a/src/utils/url-safety.ts b/src/utils/url-safety.ts index 9a74700..4195505 100644 --- a/src/utils/url-safety.ts +++ b/src/utils/url-safety.ts @@ -1,3 +1,5 @@ +import { isIP } from "node:net"; + // Private/reserved IP ranges and hostnames that must not be reachable as callback targets. const PRIVATE_HOST_PATTERNS: readonly RegExp[] = [ /^127\./, // IPv4 loopback (127.0.0.0/8) @@ -26,6 +28,98 @@ const CLOUD_METADATA_IPS: Readonly> = new Set([ "fd00:ec2::254", // AWS IPv6 metadata ]); +function normalizeHostname(hostname: string): string { + return hostname + .replace(/^\[|\]$/g, "") + .toLowerCase() + .replace(/\.+$/g, ""); +} + +function parseIpv4Address(hostname: string): number[] | undefined { + const octets = hostname.split("."); + if (octets.length !== 4) return undefined; + + const parsed = octets.map((octet) => { + if (!/^\d{1,3}$/.test(octet)) return Number.NaN; + const value = Number(octet); + return value >= 0 && value <= 255 ? value : Number.NaN; + }); + + return parsed.every((octet) => Number.isInteger(octet)) ? parsed : undefined; +} + +function parseHextets(part: string): number[] | undefined { + if (!part) return []; + const hextets = part.split(":"); + const parsed = hextets.map((hextet) => { + if (!/^[0-9a-f]{1,4}$/i.test(hextet)) return Number.NaN; + return Number.parseInt(hextet, 16); + }); + return parsed.every((hextet) => Number.isInteger(hextet)) ? parsed : undefined; +} + +function parseIpv6Bytes(hostname: string): number[] | undefined { + let address = hostname; + + if (address.includes(".")) { + const lastColonIndex = address.lastIndexOf(":"); + if (lastColonIndex === -1) return undefined; + + const ipv4Bytes = parseIpv4Address(address.slice(lastColonIndex + 1)); + if (!ipv4Bytes) return undefined; + + const firstHextet = (ipv4Bytes[0]! << 8) + ipv4Bytes[1]!; + const secondHextet = (ipv4Bytes[2]! << 8) + ipv4Bytes[3]!; + address = `${address.slice(0, lastColonIndex)}:${firstHextet.toString( + 16, + )}:${secondHextet.toString(16)}`; + } + + const compressionParts = address.split("::"); + if (compressionParts.length > 2) return undefined; + + const left = parseHextets(compressionParts[0] ?? ""); + const right = parseHextets(compressionParts[1] ?? ""); + if (!left || !right) return undefined; + + const missingHextets = compressionParts.length === 2 ? 8 - left.length - right.length : 0; + if (missingHextets < 0) return undefined; + + const hextets = + compressionParts.length === 2 + ? [...left, ...Array.from({ length: missingHextets }, () => 0), ...right] + : left; + + if (hextets.length !== 8) return undefined; + + return hextets.flatMap((hextet) => [(hextet >> 8) & 0xff, hextet & 0xff]); +} + +function ipv4MappedAddress(hostname: string): string | undefined { + const ipv6Bytes = parseIpv6Bytes(hostname); + if (!ipv6Bytes) return undefined; + + const isMapped = + ipv6Bytes.slice(0, 10).every((byte) => byte === 0) && + ipv6Bytes[10] === 0xff && + ipv6Bytes[11] === 0xff; + + if (!isMapped) return undefined; + return ipv6Bytes.slice(12).join("."); +} + +function isPrivateIpv6Address(hostname: string): boolean { + const ipv6Bytes = parseIpv6Bytes(hostname); + if (!ipv6Bytes) return false; + + const isUnspecified = ipv6Bytes.every((byte) => byte === 0); + const isLoopback = ipv6Bytes.slice(0, 15).every((byte) => byte === 0) && ipv6Bytes[15] === 1; + const isUniqueLocal = (ipv6Bytes[0]! & 0xfe) === 0xfc; + const isLinkLocal = ipv6Bytes[0] === 0xfe && (ipv6Bytes[1]! & 0xc0) === 0x80; + + return isUnspecified || isLoopback || isUniqueLocal || isLinkLocal; +} + export function isPrivateOrMetadataUrl(rawUrl: string): boolean { let url: URL; try { @@ -34,12 +128,20 @@ export function isPrivateOrMetadataUrl(rawUrl: string): boolean { return false; } - // Strip IPv6 brackets before pattern matching. - const hostname = url.hostname.replace(/^\[|\]$/g, "").toLowerCase(); + const hostname = normalizeHostname(url.hostname); if (BLOCKED_HOSTNAMES.has(hostname) || CLOUD_METADATA_IPS.has(hostname)) { return true; } + const mappedIpv4Address = ipv4MappedAddress(hostname); + if (mappedIpv4Address) { + return PRIVATE_HOST_PATTERNS.some((pattern) => pattern.test(mappedIpv4Address)); + } + + if (isIP(hostname) === 6 && isPrivateIpv6Address(hostname)) { + return true; + } + return PRIVATE_HOST_PATTERNS.some((pattern) => pattern.test(hostname)); } diff --git a/vitest.config.ts b/vitest.config.ts index bb6c7ac..0d00cbe 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -2,7 +2,6 @@ import { defineConfig } from "vitest/config"; export default defineConfig({ test: { - globals: true, environment: "node", testTimeout: 10_000, fileParallelism: false, From 8d8ede0127e5f64597af70764c9ce7626645272c Mon Sep 17 00:00:00 2001 From: Henrik Nygren Date: Fri, 15 May 2026 15:35:58 +0300 Subject: [PATCH 4/5] Improve logging --- package.json | 1 + pnpm-lock.yaml | 65 +++++++++++++++++++++ src/app.ts | 34 ++++++++++- src/index.ts | 2 +- src/routes.ts | 9 ++- src/services/sandbox-executor.test.ts | 13 +++-- src/services/sandbox-executor.ts | 82 ++++++++++++++++----------- 7 files changed, 164 insertions(+), 42 deletions(-) diff --git a/package.json b/package.json index d204e77..8478244 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "@fastify/sensible": "6.0.4", "@marcalexiei/fastify-type-provider-zod": "3.0.0", "fastify": "5.8.5", + "pino-pretty": "^13.1.3", "tar-fs": "3.1.2", "zod": "4.4.3" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d4679d2..5bdf6d2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -222,6 +222,9 @@ importers: fastify: specifier: 5.8.5 version: 5.8.5 + pino-pretty: + specifier: ^13.1.3 + version: 13.1.3 tar-fs: specifier: 3.1.2 version: 3.1.2 @@ -1043,6 +1046,9 @@ packages: resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} engines: {node: '>=20'} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -1058,6 +1064,9 @@ packages: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} + dateformat@4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -1134,6 +1143,9 @@ packages: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} + fast-copy@4.0.3: + resolution: {integrity: sha512-58apWr0GUiDFM8+3afrO6eYwJBn9ZAhDOzG3L+/9llab/haCARS2UIfffmOurYLwbgDRs8n0rfr6qAAPEAuAQw==} + fast-decode-uri-component@1.0.1: resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} @@ -1149,6 +1161,9 @@ packages: fast-querystring@1.1.2: resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-uri@3.1.2: resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} @@ -1221,6 +1236,9 @@ packages: resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} + help-me@5.0.0: + resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + http-errors@2.0.1: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} @@ -1241,6 +1259,10 @@ packages: resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} engines: {node: '>=18'} + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + json-schema-ref-resolver@3.0.0: resolution: {integrity: sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A==} @@ -1372,6 +1394,9 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1546,6 +1571,10 @@ packages: pino-abstract-transport@3.0.0: resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==} + pino-pretty@13.1.3: + resolution: {integrity: sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==} + hasBin: true + pino-std-serializers@7.1.0: resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} @@ -1680,6 +1709,10 @@ packages: resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} + strip-json-comments@5.0.3: + resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} + engines: {node: '>=14.16'} + tar-fs@3.1.2: resolution: {integrity: sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==} @@ -2382,6 +2415,8 @@ snapshots: slice-ansi: 8.0.0 string-width: 8.2.1 + colorette@2.0.20: {} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -2392,6 +2427,8 @@ snapshots: cookie@1.1.1: {} + dateformat@4.6.3: {} + debug@4.4.3: dependencies: ms: 2.1.3 @@ -2478,6 +2515,8 @@ snapshots: expect-type@1.3.0: {} + fast-copy@4.0.3: {} + fast-decode-uri-component@1.0.1: {} fast-deep-equal@3.1.3: {} @@ -2497,6 +2536,8 @@ snapshots: dependencies: fast-decode-uri-component: 1.0.1 + fast-safe-stringify@2.1.1: {} + fast-uri@3.1.2: {} fastify-plugin@5.1.0: {} @@ -2584,6 +2625,8 @@ snapshots: dependencies: function-bind: 1.1.2 + help-me@5.0.0: {} + http-errors@2.0.1: dependencies: depd: 2.0.0 @@ -2602,6 +2645,8 @@ snapshots: dependencies: get-east-asian-width: 1.6.0 + joycon@3.1.1: {} + json-schema-ref-resolver@3.0.0: dependencies: dequal: 2.0.3 @@ -2718,6 +2763,8 @@ snapshots: mimic-function@5.0.1: {} + minimist@1.2.8: {} + ms@2.1.3: {} nanoid@3.3.12: {} @@ -2794,6 +2841,22 @@ snapshots: dependencies: split2: 4.2.0 + pino-pretty@13.1.3: + dependencies: + colorette: 2.0.20 + dateformat: 4.6.3 + fast-copy: 4.0.3 + fast-safe-stringify: 2.1.1 + help-me: 5.0.0 + joycon: 3.1.1 + minimist: 1.2.8 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 3.0.0 + pump: 3.0.4 + secure-json-parse: 4.1.0 + sonic-boom: 4.2.1 + strip-json-comments: 5.0.3 + pino-std-serializers@7.1.0: {} pino@10.3.1: @@ -2935,6 +2998,8 @@ snapshots: dependencies: ansi-regex: 6.2.2 + strip-json-comments@5.0.3: {} + tar-fs@3.1.2: dependencies: pump: 3.0.4 diff --git a/src/app.ts b/src/app.ts index 8ee883a..068bd86 100644 --- a/src/app.ts +++ b/src/app.ts @@ -6,9 +6,41 @@ import sensible from "@fastify/sensible"; import { registerRoutes } from "./routes.js"; import { handleError } from "./utils/errors.js"; +const VALID_LOG_LEVELS = ["trace", "debug", "info", "warn", "error", "fatal", "silent"] as const; +type LogLevel = (typeof VALID_LOG_LEVELS)[number]; + +function resolveLogLevel(): LogLevel { + const env = process.env["LOG_LEVEL"]; + if (env !== undefined) { + if (!VALID_LOG_LEVELS.includes(env as LogLevel)) { + throw new Error(`Invalid LOG_LEVEL "${env}": must be one of ${VALID_LOG_LEVELS.join(", ")}`); + } + return env as LogLevel; + } + return process.env["NODE_ENV"] === "production" ? "info" : "debug"; +} + +function buildLoggerConfig() { + const level = resolveLogLevel(); + if (process.env["NODE_ENV"] === "production") { + return { level }; + } + return { + level, + transport: { + target: "pino-pretty", + options: { + colorize: true, + translateTime: "SYS:HH:MM:ss.l", + ignore: "pid,hostname", + }, + }, + }; +} + export async function buildApp(opts: { logger?: boolean } = {}): Promise { const app = Fastify({ - logger: opts.logger ?? true, + logger: opts.logger === false ? false : buildLoggerConfig(), }); await app.register(sensible); diff --git a/src/index.ts b/src/index.ts index 94a3e02..a14757b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -19,7 +19,7 @@ async function start(): Promise { stopDockerImageMaintenance = startDockerImageMaintenance(app.log); app.log.info(`Sandbox server running at http://${HOST}:${PORT}`); } catch (error) { - app.log.error(error); + app.log.fatal({ error }, "Server failed to start"); process.exit(1); } } diff --git a/src/routes.ts b/src/routes.ts index 55f8509..075bd9e 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -200,7 +200,10 @@ export function registerRoutes(app: FastifyInstance, executor?: SandboxExecutor) const executionId = randomUUID(); const notifyUrl = taskPayload.notify; const token = taskPayload.token; - const log = request.log.child({}); + const log = request.log.child({ + executionId, + ...(taskPayload.submissionId ? { submissionId: taskPayload.submissionId } : {}), + }); const capturedUploadTmpDir = uploadTmpDir; const capturedResourceLimits = reservedLimits; @@ -261,9 +264,9 @@ export function registerRoutes(app: FastifyInstance, executor?: SandboxExecutor) if (!response.ok) { throw new Error(`HTTP ${response.status}`); } - log.info(`Notified ${notifyUrl} with status ${result?.status ?? "failed"}`); + log.info({ notifyUrl, status: result?.status ?? "failed" }, "Notify callback succeeded"); } catch (error) { - log.error({ error }, `Failed to notify ${notifyUrl}`); + log.error({ notifyUrl, error }, "Notify callback failed"); } finally { clearTimeout(fetchTimeout); } diff --git a/src/services/sandbox-executor.test.ts b/src/services/sandbox-executor.test.ts index f05fe4f..9bc9124 100644 --- a/src/services/sandbox-executor.test.ts +++ b/src/services/sandbox-executor.test.ts @@ -5,11 +5,16 @@ import { SandboxExecutor, buildDockerCreateArgs } from "./sandbox-executor.js"; import type { ExecFileFn, ExtractFileFn, ReadFileFn } from "./sandbox-executor.js"; import type { ResourceLimits, SupportedMimeType } from "../types.js"; -const mockLogger = { +const mockLogger: FastifyBaseLogger = { info: vi.fn(), debug: vi.fn(), error: vi.fn(), warn: vi.fn(), + fatal: vi.fn(), + trace: vi.fn(), + silent: vi.fn(), + level: "info", + child: vi.fn(() => mockLogger), }; const defaultLimits: ResourceLimits = { memoryGB: 1, cpus: 1 }; @@ -605,7 +610,7 @@ describe("SandboxExecutor", () => { expect(result.status).toBe("finished"); expect(mockLogger.warn).toHaveBeenCalledWith( expect.objectContaining({ submissionId: "sub-bad-json" }), - "Could not inspect container", + "Could not inspect container for OOM status", ); }); @@ -668,8 +673,8 @@ describe("SandboxExecutor", () => { ); expect(mockLogger.error).toHaveBeenCalledWith( - expect.objectContaining({ error: expect.anything() }), - expect.stringContaining("Error reading submission file"), + expect.objectContaining({ error: expect.anything(), filename: expect.any(String) }), + "Unexpected error reading submission file", ); }); diff --git a/src/services/sandbox-executor.ts b/src/services/sandbox-executor.ts index 6e47e16..1199c6f 100644 --- a/src/services/sandbox-executor.ts +++ b/src/services/sandbox-executor.ts @@ -141,14 +141,16 @@ export class SandboxExecutor { mimetype: SupportedMimeType, resourceLimits: ResourceLimits, ): Promise { - this.logger.info({ submissionId }, "Starting submission execution"); + const log = this.logger.child({ submissionId }); + const startTime = Date.now(); + log.info("Starting submission execution"); const outputPath = join(WORK_DIR, submissionId); let result: SubmissionResult; try { await this.extractFileFn(filePath, outputPath, mimetype); - this.logger.debug({ submissionId }, "File extraction complete"); + log.debug("File extraction complete"); try { await this.execFileFn("chmod", ["-R", "777", outputPath]); @@ -156,14 +158,20 @@ export class SandboxExecutor { // chmod may fail on AFS-mounted paths; this is expected } - result = await this.runTests(outputPath, submissionId, dockerImage, resourceLimits); + result = await this.runTests(outputPath, submissionId, dockerImage, resourceLimits, log); } catch (error) { - this.logger.error({ submissionId, error }, "Error executing submission"); + log.error({ error }, "Submission execution failed"); throw error; } finally { - await this.cleanupFiles(filePath, outputPath); + await this.cleanupFiles(filePath, outputPath, log); } + const durationMs = Date.now() - startTime; + log.info( + { status: result.status, exitCode: result.exitCode, durationMs }, + "Submission complete", + ); + return result; } @@ -172,12 +180,13 @@ export class SandboxExecutor { submissionId: string, dockerImage: string | undefined, resourceLimits: ResourceLimits, + log: FastifyBaseLogger, ): Promise { const containerId = `sandbox-submission-${submissionId}`; const image = dockerImage ?? DEFAULT_DOCKER_IMAGE; const timeoutMs = this.taskTimeoutMs; - await this.ensureDockerImageAvailable(image); + await this.ensureDockerImageAvailable(image, log); const dockerArgs = buildDockerCreateArgs( containerId, @@ -187,7 +196,7 @@ export class SandboxExecutor { this.dockerRuntime, ); - this.logger.debug({ containerId, dockerArgs }, "Creating container"); + log.debug({ containerId, image }, "Creating container"); await this.execFileFn("docker", dockerArgs); // If any setup step fails, clean up the created container before rethrowing. @@ -205,7 +214,7 @@ export class SandboxExecutor { // Make scripts executable inside the bind-mount (chmod +x is masked on AFS; use octal) await this.execFileFn("chmod", ["755", join(path, "tmc-run"), join(path, "init")]); } catch (error) { - await this.cleanupContainer(containerId); + await this.cleanupContainer(containerId, log); throw error; } @@ -214,7 +223,7 @@ export class SandboxExecutor { timedOut = true; try { await this.execFileFn("docker", ["kill", containerId]); - this.logger.info({ containerId }, "Container killed due to timeout"); + log.warn({ containerId }, "Container killed due to timeout"); } catch { // Already dead } @@ -222,21 +231,21 @@ export class SandboxExecutor { let result: SubmissionResult; try { - result = await this.collectResults(path, containerId, submissionId, () => timedOut); + result = await this.collectResults(path, containerId, submissionId, () => timedOut, log); } finally { clearTimeout(timeoutHandle); - await this.cleanupContainer(containerId); + await this.cleanupContainer(containerId, log); } return result; } - private async ensureDockerImageAvailable(image: string): Promise { + private async ensureDockerImageAvailable(image: string, log: FastifyBaseLogger): Promise { try { await this.execFileFn("docker", ["image", "inspect", image]); return; - } catch (error) { - this.logger.info({ image, error }, "Docker image not found locally; pulling"); + } catch { + log.info({ image }, "Docker image not found locally; pulling"); } await this.execFileFn("docker", ["pull", image]); @@ -247,6 +256,7 @@ export class SandboxExecutor { containerId: string, submissionId: string, isTimedOut: () => boolean, + log: FastifyBaseLogger, ): Promise { let status: SubmissionResult["status"] = "failed"; let exitCode = ""; @@ -255,9 +265,9 @@ export class SandboxExecutor { try { const processLog = await this.execFileFn("docker", ["start", "-i", containerId]); vmLog = processLog.stdout + processLog.stderr; - this.logger.debug({ submissionId }, "Container execution complete"); + log.debug("Container execution complete"); - const rawExitCode = await this.readSubmissionFile(path, "exit_code.txt"); + const rawExitCode = await this.readSubmissionFile(path, "exit_code.txt", log); exitCode = rawExitCode.trim(); if (!exitCode) { throw new Error("tmc-run did not exit properly"); @@ -267,10 +277,7 @@ export class SandboxExecutor { vmLog = error.stdout + error.stderr; } - this.logger.error( - { submissionId, error, timedOut: isTimedOut() }, - "Container execution failed", - ); + log.error({ error, timedOut: isTimedOut() }, "Container execution failed"); status = isTimedOut() ? "timeout" : "crashed"; } @@ -281,17 +288,18 @@ export class SandboxExecutor { const info = JSON.parse(inspection.stdout) as Array<{ State?: { OOMKilled?: boolean } }>; if (info[0]?.State?.OOMKilled) { status = "out-of-memory"; + log.warn({ containerId }, "Container killed by OOM"); } } catch { - this.logger.warn({ submissionId }, "Could not inspect container"); + log.warn({ submissionId }, "Could not inspect container for OOM status"); } const [testOutput, stdout, stderr, valgrind, validations] = await Promise.all([ - this.readSubmissionFile(path, "test_output.txt"), - this.readSubmissionFile(path, "stdout.txt"), - this.readSubmissionFile(path, "stderr.txt"), - this.readSubmissionFile(path, "valgrind.log"), - this.readSubmissionFile(path, "validations.json"), + this.readSubmissionFile(path, "test_output.txt", log), + this.readSubmissionFile(path, "stdout.txt", log), + this.readSubmissionFile(path, "stderr.txt", log), + this.readSubmissionFile(path, "valgrind.log", log), + this.readSubmissionFile(path, "validations.json", log), ]); if (status !== "timeout" && status !== "out-of-memory" && exitCode === "0") { @@ -299,7 +307,7 @@ export class SandboxExecutor { } if (process.env["PRINT_VM_LOG"]) { - this.logger.info({ vmLog }, "VM log"); + log.debug({ vmLog }, "VM log"); } return { @@ -314,27 +322,35 @@ export class SandboxExecutor { }; } - private async readSubmissionFile(dir: string, filename: string): Promise { + private async readSubmissionFile( + dir: string, + filename: string, + log: FastifyBaseLogger, + ): Promise { try { return await this.readFileFn(join(dir, filename), "utf8"); } catch (error: unknown) { if (isNodeError(error) && error.code === "ENOENT") { return ""; } - this.logger.error({ error }, `Error reading submission file ${filename}`); + log.error({ error, filename }, "Unexpected error reading submission file"); return ""; } } - private async cleanupContainer(containerId: string): Promise { + private async cleanupContainer(containerId: string, log: FastifyBaseLogger): Promise { try { await this.execFileFn("docker", ["rm", "--force", containerId]); } catch (error) { - this.logger.error({ containerId, error }, "Failed to clean up container"); + log.error({ containerId, error }, "Failed to clean up container"); } } - private async cleanupFiles(filePath: string, outputPath: string): Promise { + private async cleanupFiles( + filePath: string, + outputPath: string, + log: FastifyBaseLogger, + ): Promise { try { await unlink(filePath); } catch { @@ -344,7 +360,7 @@ export class SandboxExecutor { // Files owned by the container's uid may remain; that's acceptable. await this.execFileFn("rm", ["-rf", resolve(outputPath)]); } catch (error) { - this.logger.error({ error }, "Failed to clean up work directory"); + log.error({ error }, "Failed to clean up work directory"); } } } From 6f0ffb0dd1db234c49f8de4e971781d48bf22430 Mon Sep 17 00:00:00 2001 From: Henrik Nygren Date: Fri, 15 May 2026 16:11:30 +0300 Subject: [PATCH 5/5] More strict typing and logging --- .oxlintrc.json | 23 ++- package.json | 1 + pnpm-lock.yaml | 69 ++++++++- src/app.ts | 8 +- src/index.ts | 2 +- src/integration/e2e-sandbox.test.ts | 48 ++++--- src/routes.ts | 147 +++++++++++--------- src/services/docker-image-maintenance.ts | 25 ++-- src/services/file-extractor.test.ts | 12 +- src/services/file-extractor.ts | 22 ++- src/services/resource-manager.ts | 8 +- src/services/sandbox-executor.test.ts | 47 ++++--- src/services/sandbox-executor.ts | 39 +++--- src/tests/helpers/create-callback-server.ts | 4 +- src/tests/helpers/tmc-langs.ts | 10 +- src/utils/errors.ts | 7 +- src/utils/hmac.ts | 8 +- src/utils/url-safety.ts | 52 +++++-- tsconfig.json | 19 ++- 19 files changed, 381 insertions(+), 170 deletions(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index 2c97f1e..0075c96 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -1,6 +1,9 @@ { "$schema": "./node_modules/oxlint/configuration_schema.json", - "plugins": ["typescript", "unicorn", "oxc", "import", "promise", "vitest"], + "plugins": ["eslint", "typescript", "unicorn", "oxc", "import", "promise", "vitest"], + "options": { + "typeAware": true + }, "categories": { "correctness": "error", "suspicious": "error", @@ -8,13 +11,23 @@ }, "rules": { "no-console": "error", - "eqeqeq": "error", + "curly": ["error", "all"], + "eqeqeq": ["error", "always"], "no-var": "error", "prefer-const": "error", "no-shadow": "error", "radix": "error", "require-await": "error", "no-promise-executor-return": "error", + "no-implicit-coercion": "warn", + "no-else-return": "warn", + "no-param-reassign": ["warn", { "props": true }], + + "promise/prefer-await-to-then": ["error", { "strict": true }], + + "typescript/no-floating-promises": "error", + "typescript/no-misused-promises": "error", + "typescript/await-thenable": "error", "typescript/no-explicit-any": "warn", "typescript/consistent-type-imports": ["warn", { "prefer": "type-imports" }], @@ -60,9 +73,11 @@ }, "overrides": [ { - "files": ["**/*.test.ts"], + "files": ["**/*.test.ts", "**/tests/**/*.ts"], "rules": { - "no-console": "off" + "no-console": "off", + "typescript/unbound-method": "off", + "typescript/no-unsafe-type-assertion": "off" } } ], diff --git a/package.json b/package.json index 8478244..154154d 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "lint-staged": "^17.0.4", "oxfmt": "0.48.0", "oxlint": "1.63.0", + "oxlint-tsgolint": "^0.22.1", "tsx": "^4.21.0", "typescript": "6.0.3", "vitest": "4.1.5" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5bdf6d2..2fe74f9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -258,7 +258,10 @@ importers: version: 0.48.0 oxlint: specifier: 1.63.0 - version: 1.63.0 + version: 1.63.0(oxlint-tsgolint@0.22.1) + oxlint-tsgolint: + specifier: ^0.22.1 + version: 0.22.1 tsx: specifier: ^4.21.0 version: 4.21.0 @@ -618,6 +621,36 @@ packages: cpu: [x64] os: [win32] + '@oxlint-tsgolint/darwin-arm64@0.22.1': + resolution: {integrity: sha512-4150Lpgc1YM09GcjA6GSrra1JoPjC7aOpfywLjWEY4vW0Sd1qKzqHF1WRaiw0/qUZ40OATYdv3aRd7ipPkWQbw==} + cpu: [arm64] + os: [darwin] + + '@oxlint-tsgolint/darwin-x64@0.22.1': + resolution: {integrity: sha512-vFWcPWYOgZs4HWcgS1EjUZg33NLcNfEYU49KGImmCfZWkflENrmBYV4HN/C0YeAPum6ZZ/goPSvQrB/cOD+NfA==} + cpu: [x64] + os: [darwin] + + '@oxlint-tsgolint/linux-arm64@0.22.1': + resolution: {integrity: sha512-6LiUpP0Zir3+29FvBm7Y28q/dBjSHqTZ5MhG1Ckw4fGhI4cAvbcwXaKvbjx1TP7rRmBNOoq/M5xdpHjTb+GAew==} + cpu: [arm64] + os: [linux] + + '@oxlint-tsgolint/linux-x64@0.22.1': + resolution: {integrity: sha512-fuX1hEQfpHauUbXADsfqVhRzrUrGabzGXbj5wsp2vKhV5uk/Rze8Mba9GdjFGECzvXudMGqHqxB4r6jGRdhxVA==} + cpu: [x64] + os: [linux] + + '@oxlint-tsgolint/win32-arm64@0.22.1': + resolution: {integrity: sha512-8SZidAj+jrbZf9ZjBEYW0tiNZ+KasqB2zgW26qdiPpQSF/DzURnPmXz651IeA9YsmbVdHGIooEHUmev6QJdquA==} + cpu: [arm64] + os: [win32] + + '@oxlint-tsgolint/win32-x64@0.22.1': + resolution: {integrity: sha512-QweSk9H5lFh5Y+WUf2Kq/OAN88V6+62ZwGhP38gqdRotI90luXSMkruFTj7Q2rYrzH4ZVNaSqx7NY8JpSfIzqg==} + cpu: [x64] + os: [win32] + '@oxlint/binding-android-arm-eabi@1.63.0': resolution: {integrity: sha512-A9xLtQt7i0OA1PoB/meog6kikXI9CdwEp7ZwQqmgnpKn3G3b1orvTDy8CQ6T7w1HvDrgWGB78PkFKcWgibcTCg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1548,6 +1581,10 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + oxlint-tsgolint@0.22.1: + resolution: {integrity: sha512-YUSGSLUnoolsu8gxISEDio3q1rtsCozwfOzASUn3DT2mR2EeQ93uEEnen7s+6LpF+lyTQFln1pQfqwBh/fsVEg==} + hasBin: true + oxlint@1.63.0: resolution: {integrity: sha512-9TGXetdjgIHOJ9OiReomP7nnrMkV9HxC1xM2ramJSLQpzxjsAJtQwa4wqkJN2f/uCrqZuJseFuSlWDdvcruveg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2122,6 +2159,24 @@ snapshots: '@oxfmt/binding-win32-x64-msvc@0.48.0': optional: true + '@oxlint-tsgolint/darwin-arm64@0.22.1': + optional: true + + '@oxlint-tsgolint/darwin-x64@0.22.1': + optional: true + + '@oxlint-tsgolint/linux-arm64@0.22.1': + optional: true + + '@oxlint-tsgolint/linux-x64@0.22.1': + optional: true + + '@oxlint-tsgolint/win32-arm64@0.22.1': + optional: true + + '@oxlint-tsgolint/win32-x64@0.22.1': + optional: true + '@oxlint/binding-android-arm-eabi@1.63.0': optional: true @@ -2809,7 +2864,16 @@ snapshots: '@oxfmt/binding-win32-ia32-msvc': 0.48.0 '@oxfmt/binding-win32-x64-msvc': 0.48.0 - oxlint@1.63.0: + oxlint-tsgolint@0.22.1: + optionalDependencies: + '@oxlint-tsgolint/darwin-arm64': 0.22.1 + '@oxlint-tsgolint/darwin-x64': 0.22.1 + '@oxlint-tsgolint/linux-arm64': 0.22.1 + '@oxlint-tsgolint/linux-x64': 0.22.1 + '@oxlint-tsgolint/win32-arm64': 0.22.1 + '@oxlint-tsgolint/win32-x64': 0.22.1 + + oxlint@1.63.0(oxlint-tsgolint@0.22.1): optionalDependencies: '@oxlint/binding-android-arm-eabi': 1.63.0 '@oxlint/binding-android-arm64': 1.63.0 @@ -2830,6 +2894,7 @@ snapshots: '@oxlint/binding-win32-arm64-msvc': 1.63.0 '@oxlint/binding-win32-ia32-msvc': 1.63.0 '@oxlint/binding-win32-x64-msvc': 1.63.0 + oxlint-tsgolint: 0.22.1 pathe@2.0.3: {} diff --git a/src/app.ts b/src/app.ts index 068bd86..2f7d15b 100644 --- a/src/app.ts +++ b/src/app.ts @@ -9,13 +9,17 @@ import { handleError } from "./utils/errors.js"; const VALID_LOG_LEVELS = ["trace", "debug", "info", "warn", "error", "fatal", "silent"] as const; type LogLevel = (typeof VALID_LOG_LEVELS)[number]; +function isLogLevel(s: string): s is LogLevel { + return (VALID_LOG_LEVELS as readonly string[]).includes(s); +} + function resolveLogLevel(): LogLevel { const env = process.env["LOG_LEVEL"]; if (env !== undefined) { - if (!VALID_LOG_LEVELS.includes(env as LogLevel)) { + if (!isLogLevel(env)) { throw new Error(`Invalid LOG_LEVEL "${env}": must be one of ${VALID_LOG_LEVELS.join(", ")}`); } - return env as LogLevel; + return env; } return process.env["NODE_ENV"] === "production" ? "info" : "debug"; } diff --git a/src/index.ts b/src/index.ts index a14757b..47e40af 100644 --- a/src/index.ts +++ b/src/index.ts @@ -24,4 +24,4 @@ async function start(): Promise { } } -start(); +void start(); diff --git a/src/integration/e2e-sandbox.test.ts b/src/integration/e2e-sandbox.test.ts index 96db068..3e299d5 100644 --- a/src/integration/e2e-sandbox.test.ts +++ b/src/integration/e2e-sandbox.test.ts @@ -155,26 +155,28 @@ beforeAll(async () => { const SRC_MAKE_FAIL = "/tmp/tmc-langs-rust/sample_exercises/make/failing-exercise"; const { readFile: readFileAsync } = await import("node:fs/promises"); [passingMakeTar, failingMakeTar] = await Promise.all([ - Promise.all([ - readFileAsync(join(SRC_MAKE_PASS, "src/source.c"), "utf8"), - readFileAsync(join(SRC_MAKE_PASS, "src/main.c"), "utf8"), - ]).then(([srcC, mainC]) => - new SubmissionBuilder() + (async () => { + const [srcC, mainC] = await Promise.all([ + readFileAsync(join(SRC_MAKE_PASS, "src/source.c"), "utf8"), + readFileAsync(join(SRC_MAKE_PASS, "src/main.c"), "utf8"), + ]); + return new SubmissionBuilder() .withMakeTemplate() .addFile("src/source.c", srcC) .addFile("src/main.c", mainC) - .build("tar"), - ), - Promise.all([ - readFileAsync(join(SRC_MAKE_FAIL, "src/source.c"), "utf8"), - readFileAsync(join(SRC_MAKE_FAIL, "src/main.c"), "utf8"), - ]).then(([srcC, mainC]) => - new SubmissionBuilder() + .build("tar"); + })(), + (async () => { + const [srcC, mainC] = await Promise.all([ + readFileAsync(join(SRC_MAKE_FAIL, "src/source.c"), "utf8"), + readFileAsync(join(SRC_MAKE_FAIL, "src/main.c"), "utf8"), + ]); + return new SubmissionBuilder() .withMakeTemplate() .addFile("src/source.c", srcC) .addFile("src/main.c", mainC) - .build("tar"), - ), + .build("tar"); + })(), ]); corruptTar = join(tmpdir(), "corrupt.tar"); @@ -212,11 +214,15 @@ function sandboxSuiteBody(runtime: DockerRuntime) { let dockerRuntimeEnvWasConfigured = false; beforeEach(function (ctx) { - if (fixturesSkipAll || skipSuite) ctx.skip(); + if (fixturesSkipAll || skipSuite) { + ctx.skip(); + } }); beforeAll(async () => { - if (fixturesSkipAll) return; + if (fixturesSkipAll) { + return; + } previousDockerRuntime = process.env["DOCKER_RUNTIME"]; process.env["DOCKER_RUNTIME"] = runtime; dockerRuntimeEnvWasConfigured = true; @@ -449,9 +455,11 @@ function sandboxSuiteBody(runtime: DockerRuntime) { const beforeRes = await app.inject({ method: "GET", url: "/status.json" }); const before = (JSON.parse(beforeRes.body) as { busy_instances: number }).busy_instances; - await submitAndWait(corruptTar, PYTHON_IMAGE, { callbackTimeoutMs: 10_000 }).catch( - () => {}, - ); + try { + await submitAndWait(corruptTar, PYTHON_IMAGE, { callbackTimeoutMs: 10_000 }); + } catch { + // ignore — we only care about resource release + } await new Promise((resolve) => { setTimeout(resolve, 2000); }); @@ -495,7 +503,7 @@ function sandboxSuiteBody(runtime: DockerRuntime) { "fork bomb: status is finished or failed (does not hang)", { timeout: 60_000 }, async (ctx) => { - if (process.env.CI) { + if (process.env["CI"]) { ctx.skip(); } const { result } = await submitAndWait(forkBombPythonTar, PYTHON_IMAGE, { diff --git a/src/routes.ts b/src/routes.ts index 075bd9e..a65d9bf 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -52,8 +52,14 @@ function readDockerRuntimeFromEnv(): DockerRuntime { throw new Error(`Invalid DOCKER_RUNTIME value "${runtime}": expected "runc" or "runsc"`); } -function setMultipartField(fields: MultipartFields, name: string, value: unknown): void { - fields[name] = value === undefined || value === null ? undefined : String(value); +function multipartFieldValue(value: unknown): string | undefined { + if (value === undefined || value === null) { + return undefined; + } + if (typeof value === "string") { + return value; + } + return JSON.stringify(value); } function numberField(fields: MultipartFields, name: string): number | undefined { @@ -90,7 +96,11 @@ export function registerRoutes(app: FastifyInstance, executor?: SandboxExecutor) const cleanupUpload = async (): Promise => { if (uploadTmpDir) { - await rm(uploadTmpDir, { recursive: true, force: true }).catch(() => {}); + try { + await rm(uploadTmpDir, { recursive: true, force: true }); + } catch { + // temp dir may already be gone + } } }; @@ -117,7 +127,7 @@ export function registerRoutes(app: FastifyInstance, executor?: SandboxExecutor) uploadPath = join(uploadTmpDir, `${randomUUID()}.upload`); await pipeline(part.file, createWriteStream(uploadPath)); } else { - setMultipartField(fields, part.fieldname, part.value); + fields[part.fieldname] = multipartFieldValue(part.value); } } } catch (error) { @@ -207,69 +217,78 @@ export function registerRoutes(app: FastifyInstance, executor?: SandboxExecutor) const capturedUploadTmpDir = uploadTmpDir; const capturedResourceLimits = reservedLimits; - setImmediate(async () => { - let result: SubmissionResult | undefined; - let executionError: unknown; - try { - result = await exec.executeSubmission( - uploadPath, - executionId, - taskPayload.dockerImage, - mimeType, - resourceLimits, - ); - } catch (error) { - executionError = error; - log.error({ error }, "Submission processing failed"); - } finally { - // Release before notifying so the counter is accurate when the callback fires. - releaseResources(capturedResourceLimits); - // The executor unlinks the upload file; clean up the containing temp dir. - await rm(capturedUploadTmpDir, { recursive: true, force: true }).catch(() => {}); - } - - // Always notify the caller, even on internal failures. - const payload = result - ? { - token, - test_output: result.testOutput, - stdout: result.stdout, - stderr: result.stderr, - valgrind: result.valgrind, - validations: result.validations, - vm_log: result.vmLog, - status: result.status, - exit_code: result.exitCode, + setImmediate(() => { + void (async () => { + let result: SubmissionResult | undefined; + let executionError: unknown; + try { + result = await exec.executeSubmission( + uploadPath, + executionId, + taskPayload.dockerImage, + mimeType, + resourceLimits, + ); + } catch (error) { + executionError = error; + log.error({ error }, "Submission processing failed"); + } finally { + // Release before notifying so the counter is accurate when the callback fires. + releaseResources(capturedResourceLimits); + // The executor unlinks the upload file; clean up the containing temp dir. + try { + await rm(capturedUploadTmpDir, { recursive: true, force: true }); + } catch { + // temp dir may already be gone } - : { - token, - status: "failed" as const, - error: - executionError instanceof Error ? executionError.message : String(executionError), - }; - - const controller = new AbortController(); - const fetchTimeout = setTimeout(() => controller.abort(), NOTIFY_TIMEOUT_MS); - try { - const response = await fetch(notifyUrl, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify(payload), - signal: controller.signal, - redirect: "manual", - }); - if (response.status >= 300 && response.status < 400) { - throw new Error(`Redirects are not allowed for notify URL (HTTP ${response.status})`); } - if (!response.ok) { - throw new Error(`HTTP ${response.status}`); + + // Always notify the caller, even on internal failures. + const payload = result + ? { + token, + test_output: result.testOutput, + stdout: result.stdout, + stderr: result.stderr, + valgrind: result.valgrind, + validations: result.validations, + vm_log: result.vmLog, + status: result.status, + exit_code: result.exitCode, + } + : { + token, + status: "failed" as const, + error: + executionError instanceof Error ? executionError.message : String(executionError), + }; + + const controller = new AbortController(); + const fetchTimeout = setTimeout(() => controller.abort(), NOTIFY_TIMEOUT_MS); + try { + const response = await fetch(notifyUrl, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload), + signal: controller.signal, + redirect: "manual", + }); + if (response.status >= 300 && response.status < 400) { + throw new Error(`Redirects are not allowed for notify URL (HTTP ${response.status})`); + } + if (!response.ok) { + throw new Error(`HTTP ${response.status}`); + } + log.info( + { notifyUrl, status: result?.status ?? "failed" }, + "Notify callback succeeded", + ); + } catch (error) { + log.error({ notifyUrl, error }, "Notify callback failed"); + } finally { + clearTimeout(fetchTimeout); } - log.info({ notifyUrl, status: result?.status ?? "failed" }, "Notify callback succeeded"); - } catch (error) { - log.error({ notifyUrl, error }, "Notify callback failed"); - } finally { - clearTimeout(fetchTimeout); - } + })(); }); return { message: "ok" }; diff --git a/src/services/docker-image-maintenance.ts b/src/services/docker-image-maintenance.ts index d68584d..ac38900 100644 --- a/src/services/docker-image-maintenance.ts +++ b/src/services/docker-image-maintenance.ts @@ -44,7 +44,9 @@ async function listRegistrySandboxImages(fetchFn: typeof fetch): Promise typeof image === "string") @@ -105,22 +107,29 @@ export function startDockerImageMaintenance( } const runPull = (): void => { - if (pullRunning) return; + if (pullRunning) { + return; + } pullRunning = true; - void pullAllowedDockerImages(logger, pullOptions) - .catch((error: unknown) => { + void (async () => { + try { + await pullAllowedDockerImages(logger, pullOptions); + } catch (error: unknown) { logger.error({ error }, "Could not refresh allowed sandbox images"); - }) - .finally(() => { + } finally { pullRunning = false; - }); + } + })(); }; runPull(); const pullInterval = setInterval(runPull, pullIntervalMs); const pruneInterval = setInterval(() => { - void pruneOldDockerImages(logger, execFileFn).then(runPull); + void (async () => { + await pruneOldDockerImages(logger, execFileFn); + runPull(); + })(); }, pruneIntervalMs); return () => { diff --git a/src/services/file-extractor.test.ts b/src/services/file-extractor.test.ts index 6401e87..a93f623 100644 --- a/src/services/file-extractor.test.ts +++ b/src/services/file-extractor.test.ts @@ -31,7 +31,9 @@ function buildTarHeader(name: string, size: number): Buffer { h[263] = 0x30; // ustar version "0" h[264] = 0x30; // ustar version "0" let sum = 0; - for (let i = 0; i < 512; i++) sum += h[i]!; + for (let i = 0; i < 512; i++) { + sum += h[i]!; + } h.write(sum.toString(8).padStart(6, "0") + "\0 ", 148, "ascii"); // checksum return h; } @@ -49,7 +51,9 @@ function writeTar( if (content.length > 0) { out.write(content); const pad = (512 - (content.length % 512)) % 512; - if (pad > 0) out.write(Buffer.alloc(pad)); + if (pad > 0) { + out.write(Buffer.alloc(pad)); + } } } out.end(Buffer.alloc(1024)); // end-of-archive: two null 512-byte blocks @@ -76,7 +80,9 @@ function writeTarWithLargeEntry(outputPath: string, name: string, size: number): } } const pad = (512 - (size % 512)) % 512; - if (pad > 0) out.write(Buffer.alloc(pad)); + if (pad > 0) { + out.write(Buffer.alloc(pad)); + } out.end(Buffer.alloc(1024)); }; pump(); diff --git a/src/services/file-extractor.ts b/src/services/file-extractor.ts index 90ee9ee..dff6d7e 100644 --- a/src/services/file-extractor.ts +++ b/src/services/file-extractor.ts @@ -45,10 +45,18 @@ const extractTar = async (inputPath: string, outputPath: string): Promise const options: tar.ExtractOptions = { ignore: (_name: string, header: tar.Headers | undefined) => { - if (!header) return true; - if (header.type === "symlink" || header.type === "link") return true; - if (!isSafePath(header.name)) return true; - if (overLimit) return true; + if (!header) { + return true; + } + if (header.type === "symlink" || header.type === "link") { + return true; + } + if (!isSafePath(header.name)) { + return true; + } + if (overLimit) { + return true; + } entryCount++; totalBytes += header.size ?? 0; @@ -90,7 +98,11 @@ const extractZstd = async (inputPath: string, outputPath: string): Promise await execFile("zstd", ["-d", inputPath, "-o", tmpTar, "--force"]); await extractTar(tmpTar, outputPath); } finally { - await unlink(tmpTar).catch(() => {}); + try { + await unlink(tmpTar); + } catch { + // temp file may already be gone + } } }; diff --git a/src/services/resource-manager.ts b/src/services/resource-manager.ts index 1883b53..db1471c 100644 --- a/src/services/resource-manager.ts +++ b/src/services/resource-manager.ts @@ -48,7 +48,9 @@ function reserveResources(limits: ResourceLimits): void { // Atomically checks availability and reserves in one synchronous operation, // preventing TOCTOU races between concurrent requests. export function tryReserveResources(limits: ResourceLimits): boolean { - if (!hasAvailableResources(limits)) return false; + if (!hasAvailableResources(limits)) { + return false; + } reserveResources(limits); return true; } @@ -62,7 +64,9 @@ export function tryResizeReservedResources( memoryGB: Math.max(0, nextLimits.memoryGB - currentLimits.memoryGB), }; - if (!hasAvailableResources(additionalLimits)) return false; + if (!hasAvailableResources(additionalLimits)) { + return false; + } // busyInstances count doesn't change on resize — only the resource amounts do. reservedCpuCores += nextLimits.cpus - currentLimits.cpus; diff --git a/src/services/sandbox-executor.test.ts b/src/services/sandbox-executor.test.ts index 9bc9124..757310d 100644 --- a/src/services/sandbox-executor.test.ts +++ b/src/services/sandbox-executor.test.ts @@ -254,7 +254,7 @@ describe("SandboxExecutor", () => { mockExtractFile = vi.fn( (_i: string, _o: string, _m: SupportedMimeType): Promise => Promise.resolve(), ); - executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + executor = new SandboxExecutor(mockLogger, { dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, @@ -316,7 +316,7 @@ describe("SandboxExecutor", () => { return Promise.resolve({ stdout: "", stderr: "" }); }, ); - executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + executor = new SandboxExecutor(mockLogger, { dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, @@ -368,7 +368,7 @@ describe("SandboxExecutor", () => { (path: string, _encoding: BufferEncoding): Promise => Promise.resolve(path.endsWith("exit_code.txt") ? "137" : ""), ); - executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + executor = new SandboxExecutor(mockLogger, { dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, @@ -395,7 +395,7 @@ describe("SandboxExecutor", () => { stderr: "", }, }); - executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + executor = new SandboxExecutor(mockLogger, { dockerRuntime: "runc", taskTimeoutMs: 60_000, execFileFn: mockExecFile, @@ -417,12 +417,13 @@ describe("SandboxExecutor", () => { it("awaits container cleanup when docker cp fails after docker create", async () => { mockExecFile = vi.fn( (file: string, args: string[]): Promise<{ stdout: string; stderr: string }> => { - if (file === "docker" && args[0] === "cp") + if (file === "docker" && args[0] === "cp") { return Promise.reject(new Error("docker cp failed")); + } return Promise.resolve({ stdout: "", stderr: "" }); }, ); - executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + executor = new SandboxExecutor(mockLogger, { dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, @@ -481,7 +482,7 @@ describe("SandboxExecutor", () => { (path: string, _encoding: BufferEncoding): Promise => Promise.resolve(path.endsWith("exit_code.txt") ? "1" : ""), ); - executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + executor = new SandboxExecutor(mockLogger, { dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, @@ -505,7 +506,7 @@ describe("SandboxExecutor", () => { mockReadFile = vi.fn( (_path: string, _encoding: BufferEncoding): Promise => Promise.resolve(""), ); - executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + executor = new SandboxExecutor(mockLogger, { dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, @@ -558,17 +559,19 @@ describe("SandboxExecutor", () => { it("does not propagate chmod -R 777 failures (expected on AFS-mounted paths)", async () => { const afsExecFile = vi.fn( (file: string, args: string[]): Promise<{ stdout: string; stderr: string }> => { - if (file === "chmod" && args[0] === "-R") + if (file === "chmod" && args[0] === "-R") { return Promise.reject(new Error("chmod: not permitted on AFS")); - if (file === "docker" && args[0] === "inspect") + } + if (file === "docker" && args[0] === "inspect") { return Promise.resolve({ stdout: JSON.stringify([{ State: { OOMKilled: false } }]), stderr: "", }); + } return Promise.resolve({ stdout: "", stderr: "" }); }, ); - executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + executor = new SandboxExecutor(mockLogger, { dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: afsExecFile, @@ -591,7 +594,7 @@ describe("SandboxExecutor", () => { mockExecFile = makeExecFile({ "docker inspect": { stdout: "not-valid-json{{", stderr: "" }, }); - executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + executor = new SandboxExecutor(mockLogger, { dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, @@ -616,7 +619,7 @@ describe("SandboxExecutor", () => { it("propagates extraction errors from extractFileFn", async () => { mockExtractFile = vi.fn(() => Promise.reject(new Error("archive is corrupt"))); - executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + executor = new SandboxExecutor(mockLogger, { dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, @@ -652,11 +655,13 @@ describe("SandboxExecutor", () => { it("logs non-ENOENT errors when reading submission files", async () => { mockReadFile = vi.fn((path: string, _encoding: BufferEncoding): Promise => { - if (path.endsWith("exit_code.txt")) return Promise.resolve("0"); + if (path.endsWith("exit_code.txt")) { + return Promise.resolve("0"); + } const err = Object.assign(new Error("EACCES: permission denied"), { code: "EACCES" }); return Promise.reject(err); }); - executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + executor = new SandboxExecutor(mockLogger, { dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, @@ -680,11 +685,13 @@ describe("SandboxExecutor", () => { it("does not log when submission file is simply missing (ENOENT)", async () => { mockReadFile = vi.fn((path: string, _encoding: BufferEncoding): Promise => { - if (path.endsWith("exit_code.txt")) return Promise.resolve("0"); + if (path.endsWith("exit_code.txt")) { + return Promise.resolve("0"); + } const err = Object.assign(new Error("ENOENT: no such file"), { code: "ENOENT" }); return Promise.reject(err); }); - executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + executor = new SandboxExecutor(mockLogger, { dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, @@ -754,7 +761,7 @@ describe("SandboxExecutor", () => { }, ); - const executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + const executor = new SandboxExecutor(mockLogger, { dockerRuntime: "runc", taskTimeoutMs: 1000, execFileFn: mockExecFile, @@ -804,7 +811,7 @@ describe("SandboxExecutor", () => { }, ); - const executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + const executor = new SandboxExecutor(mockLogger, { dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, @@ -842,7 +849,7 @@ describe("SandboxExecutor", () => { }, }); - const executor = new SandboxExecutor(mockLogger as unknown as FastifyBaseLogger, { + const executor = new SandboxExecutor(mockLogger, { dockerRuntime: "runc", taskTimeoutMs: 5000, execFileFn: mockExecFile, diff --git a/src/services/sandbox-executor.ts b/src/services/sandbox-executor.ts index 1199c6f..f967099 100644 --- a/src/services/sandbox-executor.ts +++ b/src/services/sandbox-executor.ts @@ -27,14 +27,20 @@ export type ExtractFileFn = typeof extractFile; /** Error thrown by the default execFile implementation; carries stdout/stderr from the process. */ class ExecError extends Error { override name = "ExecError"; + readonly code: string | number | null | undefined; + readonly stdout: string; + readonly stderr: string; constructor( message: string, - public readonly code: string | number | null | undefined, - public readonly stdout: string, - public readonly stderr: string, + code: string | number | null | undefined, + stdout: string, + stderr: string, ) { super(message); + this.code = code; + this.stdout = stdout; + this.stderr = stderr; } } @@ -117,16 +123,15 @@ function defaultExecFile( } export class SandboxExecutor { + private logger: FastifyBaseLogger; private taskTimeoutMs: number; private execFileFn: ExecFileFn; private readFileFn: ReadFileFn; private extractFileFn: ExtractFileFn; private dockerRuntime: DockerRuntime; - constructor( - private logger: FastifyBaseLogger, - opts: SandboxExecutorOptions, - ) { + constructor(logger: FastifyBaseLogger, opts: SandboxExecutorOptions) { + this.logger = logger; this.taskTimeoutMs = opts.taskTimeoutMs ?? DEFAULT_TASK_TIMEOUT_MS; this.execFileFn = opts.execFileFn ?? defaultExecFile; this.readFileFn = opts.readFileFn ?? readFile; @@ -219,14 +224,16 @@ export class SandboxExecutor { } let timedOut = false; - const timeoutHandle = setTimeout(async () => { + const timeoutHandle = setTimeout(() => { timedOut = true; - try { - await this.execFileFn("docker", ["kill", containerId]); - log.warn({ containerId }, "Container killed due to timeout"); - } catch { - // Already dead - } + void (async () => { + try { + await this.execFileFn("docker", ["kill", containerId]); + log.warn({ containerId }, "Container killed due to timeout"); + } catch { + // Already dead + } + })(); }, timeoutMs); let result: SubmissionResult; @@ -285,8 +292,8 @@ export class SandboxExecutor { // Check for OOM try { const inspection = await this.execFileFn("docker", ["inspect", containerId]); - const info = JSON.parse(inspection.stdout) as Array<{ State?: { OOMKilled?: boolean } }>; - if (info[0]?.State?.OOMKilled) { + const parsed = JSON.parse(inspection.stdout); + if (Array.isArray(parsed) && Boolean(parsed[0]?.State?.OOMKilled)) { status = "out-of-memory"; log.warn({ containerId }, "Container killed by OOM"); } diff --git a/src/tests/helpers/create-callback-server.ts b/src/tests/helpers/create-callback-server.ts index ec61e01..b1dbd9d 100644 --- a/src/tests/helpers/create-callback-server.ts +++ b/src/tests/helpers/create-callback-server.ts @@ -40,7 +40,9 @@ export async function createCallbackServer(timeoutMs = 120_000): Promise { const chunks: Buffer[] = []; req.on("data", (chunk: unknown) => { - if (Buffer.isBuffer(chunk)) chunks.push(chunk); + if (Buffer.isBuffer(chunk)) { + chunks.push(chunk); + } }); req.on("end", () => { clearTimeout(timer); diff --git a/src/tests/helpers/tmc-langs.ts b/src/tests/helpers/tmc-langs.ts index 72787a1..785c278 100644 --- a/src/tests/helpers/tmc-langs.ts +++ b/src/tests/helpers/tmc-langs.ts @@ -15,7 +15,9 @@ const CHECKSUM_PATH = `${BINARY_PATH}.sha256`; async function verifyChecksum(binaryPath: string, checksumPath: string): Promise { const checksumContent = await readFile(checksumPath, "utf8"); const expectedHash = checksumContent.trim().split(/\s+/)[0]; - if (!expectedHash) throw new Error("Checksum file is empty or malformed"); + if (!expectedHash) { + throw new Error("Checksum file is empty or malformed"); + } const { stdout } = await execFile("sha256sum", [binaryPath]); const actualHash = stdout.trim().split(/\s+/)[0]; if (expectedHash !== actualHash) { @@ -26,7 +28,11 @@ async function verifyChecksum(binaryPath: string, checksumPath: string): Promise } export class TmcLangs { - private constructor(private readonly binaryPath: string) {} + private readonly binaryPath: string; + + private constructor(binaryPath: string) { + this.binaryPath = binaryPath; + } static async setup(): Promise { const missing = !existsSync(BINARY_PATH) || statSync(BINARY_PATH).size === 0; diff --git a/src/utils/errors.ts b/src/utils/errors.ts index 27e1714..e9c4759 100644 --- a/src/utils/errors.ts +++ b/src/utils/errors.ts @@ -2,12 +2,11 @@ import type { FastifyReply, FastifyRequest } from "fastify"; export class AppError extends Error { override name = "AppError"; + readonly statusCode: number; - constructor( - public readonly statusCode: number, - message: string, - ) { + constructor(statusCode: number, message: string) { super(message); + this.statusCode = statusCode; } } diff --git a/src/utils/hmac.ts b/src/utils/hmac.ts index 91f3122..8eded4a 100644 --- a/src/utils/hmac.ts +++ b/src/utils/hmac.ts @@ -5,9 +5,13 @@ const HEX_SHA256_RE = /^[0-9a-fA-F]{64}$/; // Verifies that `signature` is the hex-encoded HMAC-SHA256 of `message` under `secret`. // Uses constant-time comparison to prevent timing attacks. export function verifyHmacSha256(message: string, signature: string, secret: string): boolean { - if (!HEX_SHA256_RE.test(signature)) return false; + if (!HEX_SHA256_RE.test(signature)) { + return false; + } const expected = createHmac("sha256", secret).update(message, "utf8").digest(); const provided = Buffer.from(signature, "hex"); - if (expected.length !== provided.length) return false; + if (expected.length !== provided.length) { + return false; + } return timingSafeEqual(expected, provided); } diff --git a/src/utils/url-safety.ts b/src/utils/url-safety.ts index 4195505..e31591c 100644 --- a/src/utils/url-safety.ts +++ b/src/utils/url-safety.ts @@ -37,10 +37,14 @@ function normalizeHostname(hostname: string): string { function parseIpv4Address(hostname: string): number[] | undefined { const octets = hostname.split("."); - if (octets.length !== 4) return undefined; + if (octets.length !== 4) { + return undefined; + } const parsed = octets.map((octet) => { - if (!/^\d{1,3}$/.test(octet)) return Number.NaN; + if (!/^\d{1,3}$/.test(octet)) { + return Number.NaN; + } const value = Number(octet); return value >= 0 && value <= 255 ? value : Number.NaN; }); @@ -49,10 +53,14 @@ function parseIpv4Address(hostname: string): number[] | undefined { } function parseHextets(part: string): number[] | undefined { - if (!part) return []; + if (!part) { + return []; + } const hextets = part.split(":"); const parsed = hextets.map((hextet) => { - if (!/^[0-9a-f]{1,4}$/i.test(hextet)) return Number.NaN; + if (!/^[0-9a-f]{1,4}$/i.test(hextet)) { + return Number.NaN; + } return Number.parseInt(hextet, 16); }); return parsed.every((hextet) => Number.isInteger(hextet)) ? parsed : undefined; @@ -63,10 +71,14 @@ function parseIpv6Bytes(hostname: string): number[] | undefined { if (address.includes(".")) { const lastColonIndex = address.lastIndexOf(":"); - if (lastColonIndex === -1) return undefined; + if (lastColonIndex === -1) { + return undefined; + } const ipv4Bytes = parseIpv4Address(address.slice(lastColonIndex + 1)); - if (!ipv4Bytes) return undefined; + if (!ipv4Bytes) { + return undefined; + } const firstHextet = (ipv4Bytes[0]! << 8) + ipv4Bytes[1]!; const secondHextet = (ipv4Bytes[2]! << 8) + ipv4Bytes[3]!; @@ -76,41 +88,55 @@ function parseIpv6Bytes(hostname: string): number[] | undefined { } const compressionParts = address.split("::"); - if (compressionParts.length > 2) return undefined; + if (compressionParts.length > 2) { + return undefined; + } const left = parseHextets(compressionParts[0] ?? ""); const right = parseHextets(compressionParts[1] ?? ""); - if (!left || !right) return undefined; + if (!left || !right) { + return undefined; + } const missingHextets = compressionParts.length === 2 ? 8 - left.length - right.length : 0; - if (missingHextets < 0) return undefined; + if (missingHextets < 0) { + return undefined; + } const hextets = compressionParts.length === 2 ? [...left, ...Array.from({ length: missingHextets }, () => 0), ...right] : left; - if (hextets.length !== 8) return undefined; + if (hextets.length !== 8) { + return undefined; + } return hextets.flatMap((hextet) => [(hextet >> 8) & 0xff, hextet & 0xff]); } function ipv4MappedAddress(hostname: string): string | undefined { const ipv6Bytes = parseIpv6Bytes(hostname); - if (!ipv6Bytes) return undefined; + if (!ipv6Bytes) { + return undefined; + } const isMapped = ipv6Bytes.slice(0, 10).every((byte) => byte === 0) && ipv6Bytes[10] === 0xff && ipv6Bytes[11] === 0xff; - if (!isMapped) return undefined; + if (!isMapped) { + return undefined; + } return ipv6Bytes.slice(12).join("."); } function isPrivateIpv6Address(hostname: string): boolean { const ipv6Bytes = parseIpv6Bytes(hostname); - if (!ipv6Bytes) return false; + if (!ipv6Bytes) { + return false; + } const isUnspecified = ipv6Bytes.every((byte) => byte === 0); const isLoopback = ipv6Bytes.slice(0, 15).every((byte) => byte === 0) && ipv6Bytes[15] === 1; diff --git a/tsconfig.json b/tsconfig.json index 8704d38..f38f139 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,19 +6,36 @@ "moduleResolution": "bundler", "rootDir": "./src", "outDir": "./dist", + "strict": true, "noUncheckedIndexedAccess": true, + "noPropertyAccessFromIndexSignature": true, "noImplicitOverride": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "exactOptionalPropertyTypes": true, + "noUncheckedSideEffectImports": true, + + "noUnusedLocals": true, + "noUnusedParameters": true, + "allowUnreachableCode": false, + "allowUnusedLabels": false, + + "verbatimModuleSyntax": true, + "isolatedModules": true, + "erasableSyntaxOnly": true, + "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, + "declaration": true, "declarationMap": true, - "sourceMap": true + "sourceMap": true, + "noEmitOnError": true, + + "types": ["node"] }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"]