From d9911fbed81eec8898ca3dc06ae20854ca50b0c1 Mon Sep 17 00:00:00 2001 From: Yuriy Lesyuk Date: Tue, 27 Dec 2022 21:46:20 +0000 Subject: [PATCH 01/11] feat(references): hashicorp vault integration --- .cspell.json | 1 + CODEOWNERS | 1 + README.md | 2 + .../hashicorp-vault-integration/.gitignore | 1 + .../hashicorp-vault-integration/README.md | 47 + .../images/vault-facade-proxy-diagram.png | Bin 0 -> 123325 bytes .../package-lock.json | 5551 +++++++++++++++++ .../hashicorp-vault-integration/package.json | 11 + .../hashicorp-vault-integration/pipeline.sh | 73 + .../step_definitions/apickli-gherkin.js | 18 + .../features/step_definitions/jwt-steps.js | 75 + .../test/integration/features/support/init.js | 27 + .../features/vault-integration.feature | 30 + .../vault-facade-callout/.gitignore | 1 + .../jar-in-jar-loader.zip | Bin 0 -> 7686 bytes .../vault-facade-callout/pom.xml | 96 + .../exco/vaultkeystojwks/VaultKeysToJwks.java | 117 + .../VaultKeysToJwksCallout.java | 120 + .../vaultkeystojwks/VaultKeysToJwksTest.java | 138 + .../vaults-keys-to-jwks-jar-gen.xml | 41 + .../vault-facade-config/edge.json.tpl | 29 + .../policies/Assign-MessageReadVaultKeys.xml | 25 + .../AssignMessage.AssignVariablesFromForm.xml | 22 + .../AssignMessage.DefineJsonToSign.xml | 21 + ...AssignMessage.DefineJwtHeaderAndPaylod.xml | 25 + .../AssignMessage.JsonWithJwtToken.xml | 27 + ...signMessage.SetVaultTokenAndPathSuffix.xml | 28 + .../AssignMessageVaultSignPayload.xml | 33 + .../policies/ExtractVariables.Signature.xml | 21 + ...vaCallout.UrlEncodeJwsHeaderAndPayload.xml | 22 + .../policies/JavaCallout.UrlEncodePayload.xml | 22 + .../policies/JavaCalloutUrlEncodeHeader.xml | 22 + .../policies/JavaCalloutVaultKeysToJwks.xml | 22 + .../policies/KeyValueMapGetVaultToken.xml | 23 + .../apiproxy/proxies/default.xml | 84 + .../apiproxy/targets/default.xml | 34 + .../apiproxy/vault-facade.xml | 43 + .../policies/AssignMessage-TransitKeys.xml | 53 + .../policies/AssignMessage-TransitSign.xml | 31 + .../apiproxy/proxies/default.xml | 50 + .../vault-mock-proxy/apiproxy/vault-mock.xml | 26 + 41 files changed, 7013 insertions(+) create mode 100644 references/hashicorp-vault-integration/.gitignore create mode 100644 references/hashicorp-vault-integration/README.md create mode 100644 references/hashicorp-vault-integration/images/vault-facade-proxy-diagram.png create mode 100644 references/hashicorp-vault-integration/package-lock.json create mode 100644 references/hashicorp-vault-integration/package.json create mode 100755 references/hashicorp-vault-integration/pipeline.sh create mode 100644 references/hashicorp-vault-integration/test/integration/features/step_definitions/apickli-gherkin.js create mode 100644 references/hashicorp-vault-integration/test/integration/features/step_definitions/jwt-steps.js create mode 100644 references/hashicorp-vault-integration/test/integration/features/support/init.js create mode 100644 references/hashicorp-vault-integration/test/integration/features/vault-integration.feature create mode 100644 references/hashicorp-vault-integration/vault-facade-callout/.gitignore create mode 100644 references/hashicorp-vault-integration/vault-facade-callout/jar-in-jar-loader.zip create mode 100644 references/hashicorp-vault-integration/vault-facade-callout/pom.xml create mode 100644 references/hashicorp-vault-integration/vault-facade-callout/src/main/java/com/exco/vaultkeystojwks/VaultKeysToJwks.java create mode 100644 references/hashicorp-vault-integration/vault-facade-callout/src/main/java/com/exco/vaultkeystojwks/VaultKeysToJwksCallout.java create mode 100644 references/hashicorp-vault-integration/vault-facade-callout/src/test/java/com/exco/vaultkeystojwks/VaultKeysToJwksTest.java create mode 100644 references/hashicorp-vault-integration/vault-facade-callout/vaults-keys-to-jwks-jar-gen.xml create mode 100644 references/hashicorp-vault-integration/vault-facade-config/edge.json.tpl create mode 100644 references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/Assign-MessageReadVaultKeys.xml create mode 100644 references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.AssignVariablesFromForm.xml create mode 100644 references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.DefineJsonToSign.xml create mode 100644 references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.DefineJwtHeaderAndPaylod.xml create mode 100644 references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.JsonWithJwtToken.xml create mode 100644 references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.SetVaultTokenAndPathSuffix.xml create mode 100644 references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessageVaultSignPayload.xml create mode 100644 references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/ExtractVariables.Signature.xml create mode 100644 references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/JavaCallout.UrlEncodeJwsHeaderAndPayload.xml create mode 100644 references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/JavaCallout.UrlEncodePayload.xml create mode 100644 references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/JavaCalloutUrlEncodeHeader.xml create mode 100644 references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/JavaCalloutVaultKeysToJwks.xml create mode 100644 references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/KeyValueMapGetVaultToken.xml create mode 100644 references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/proxies/default.xml create mode 100644 references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/targets/default.xml create mode 100644 references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/vault-facade.xml create mode 100644 references/hashicorp-vault-integration/vault-mock-proxy/apiproxy/policies/AssignMessage-TransitKeys.xml create mode 100644 references/hashicorp-vault-integration/vault-mock-proxy/apiproxy/policies/AssignMessage-TransitSign.xml create mode 100644 references/hashicorp-vault-integration/vault-mock-proxy/apiproxy/proxies/default.xml create mode 100644 references/hashicorp-vault-integration/vault-mock-proxy/apiproxy/vault-mock.xml diff --git a/.cspell.json b/.cspell.json index a6bbced9b..9fbd34536 100644 --- a/.cspell.json +++ b/.cspell.json @@ -141,6 +141,7 @@ "Pluralsight", "PREEMPTIBLE", "printf", + "proxied", "proxiesremaining", "pushd", "queryparam", diff --git a/CODEOWNERS b/CODEOWNERS index 4ad530c5a..1fbb1acd8 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -13,6 +13,7 @@ /references/data-converters-shared-flow @tyayers /references/dutch-healthcare @seymen /references/gcp-sa-auth-shared-flow @danistrebel +/references/hashicorp-vault-integration @yuriylesyuk /references/identity-facade @joelgauci /references/java-callout @omidtahouri /references/js-callout @seymen diff --git a/README.md b/README.md index 041d5d2fa..a4b0b813b 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,8 @@ further to fit a particular use case. popular API auth schemes - [reCAPTCHA enterprise](references/recaptcha-enterprise) - A reference for API protection against bot leveraging reCAPTCHA enterprise +- [Hashicorp Vault Integration](references/hashicorp-vault-integration) - A reference for + integrating Apigee Proxies with Hashicorp Vault for EaaS services ## Tools diff --git a/references/hashicorp-vault-integration/.gitignore b/references/hashicorp-vault-integration/.gitignore new file mode 100644 index 000000000..c228e2c68 --- /dev/null +++ b/references/hashicorp-vault-integration/.gitignore @@ -0,0 +1 @@ +**/edge.json \ No newline at end of file diff --git a/references/hashicorp-vault-integration/README.md b/references/hashicorp-vault-integration/README.md new file mode 100644 index 000000000..3671f099e --- /dev/null +++ b/references/hashicorp-vault-integration/README.md @@ -0,0 +1,47 @@ + + +# Apigee Proxy and Hashicorp Vault Integration + +This repository demonstrates an interaction between an Apigee API proxy and Hashicorp Vault. The operation of signing JWT token is delegated to the Vault server that is used as an EaaS (Encryption as a Service) solution. The private key thus is locked in the Vault server and never exposed. The public keys used for signature verification are proxied from the Vault server and returned in a canonical JWKS format. + +## Technical Setup + +The vault-facade proxy exposes two endpoints: + +- /jwks -- returns a collection of public keys so that a client can verify the signature; +- /login -- models a typical authentication endpoint that returns a JWT ID token. + +The solution uses Java Callout to perform auxiliary operations of adding base64url encode operation, which is absent is Apigee templating functionality. + +The second operation is transforming a public key from a PEM format published by Vault to JWKS format, expected by a client application. + +Vault Facade Diagram + +## Deploy vs Mock Run + +The *pipeline.sh* script can be used to deploy the solution in both scenarios: a mocked Vault server and a real Vault server. + +The SKIP_MOCKING variable controls required changes and tweaks. + +Here is the list of environment variable to set up to configure setup environment: + +```sh +export APIGEE_X_ORG= +export APIGEE_X_ENV= + +export APIGEE_X_HOSTNAME= + +export SKIP_MOCKING=Y + +export VAULT_HOSTNAME= +export VAULT_PORT= +export VAULT_SSL_INFO='' + +export VAULT_TOKEN= +``` + +Then run pipeline.sh script. + +```sh +./pipeline.sh +``` diff --git a/references/hashicorp-vault-integration/images/vault-facade-proxy-diagram.png b/references/hashicorp-vault-integration/images/vault-facade-proxy-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..fa06ecfe4907013083ff69f4cdbe25c2bed4f77b GIT binary patch literal 123325 zcmcG$2RPep_W-P_LzlL?R9m`e&7x)ztu8eys7O9O&;7f{xz9f5KDP)XgA1EC?A^e_!?RiE z;#p%Jo(+3=c=!y~uLWA9v~uqP4Y@Ab+D1Cs+M-6@o=z_AjyyaUBjOU)8O3z%x;eg- z6@F*eJ)bk4w|san@@x2v*dIQ!>J0zEttO*{{tfxZ4jp>7-c0L_>G4-)XN#nHFBQpr zIP@(4!J5mL13)M4^dP2tQGQNM-JS+b8biaqNz<#f;+^>UbY7n1sbBE9`Z#N&^db5C zVL|*CwS+FNwz98w$l~9FL{{-UnP-kq6|K`!psyZCGGAKcgzgmDq8z!IXU9FSP2!O$ z4<`c7)^+k;RpZHichAO6zsx?&YFoVEp*4rPmEYZfsVlvcD}K1PSo7fN!u1WSZi*L~ zzg6M6c=EkLgMHn>8yB0_qo!2VHQ(~y*&h=FR#~5R+FWGvwEK&sxtT=#`v{KJ$2~Xn zc1aq1gjIgr&>NW`cG01L1Bx05)%A|Pt{E=#*9-sjD=m7>ACj0yGw1Fli42IGXjX5^ zUy`bOP;rKulrp?mv3XxSD$3t88b7XHH>IA~uQKxSalmk9>AL3P6Gty5OPYNpBs#}? z9Yi0KGjWfi%GXRP3~0Zls@~o`3~F|Xc%!*dv(Ta3XvdMlw1!z9ix2dJV;ZUqS?*L~ zf91&JLEHXbi;Ya!{KLD6F5CJ^D%Q%gYtoF0@S;8El64>NIL4xi1>9%22)zM%f4FPi zDSS-x9bdd(pZaaBzBR$CHYctYw%^>nYX6-K7%{W?WdGAc=Hi1jHCe5DK5QKLoEVI) zcX(QwQ>x0NFb*G6tH^4q(!Lky{6rndjV_W*Q4_#kfvY&8w!?W$#yt%hR!eq3F&&WpNGwb)> zJfH5@vU|^(7<*OoogH@*s(lhyajFkaTvFL$a981rl>ct)O;_G#^{t)T8@zigjPr#! z!MEYr5hIh>wS+zAE|mVoYjio=Ja#LFKkl}~8PmU9FE?f@wXHS*xo%<#MVOTDJBW0_4?uXnwpcVBT5BacX=fiEaTi(4tYu|su?L=4Np^rE8 zG=|q^3M<^1zgOdsW3G|ExnrYngno5l-SAZb2l~q^MJb)9NBOpdgWn5%+2^%NWtYtU zgve7jPu(rQMSr{bi{_W36EuHV#X8Lm&2^sdc7Ms6OqjHpySlLB^wVeBFAwu=Rk;Jd z6a4n_8HF#JSMQxT7kiMlZU4Q4@A>-89OR1P{cq33&e@(ha|Zm@%pr--(BZ+^qW3}( zR@+x^Pt$pIL_1p2WsS~R(mA!$WtRfa1{#XR!0Vd^k9n&F>@K|@oU)L-pc8$_ z;6;yksW|t?qtU^K&prP9#NlE=G$B?ZT1^~o=c@Nqv_O&}(HPx(#6|*fy6j5enXp3; zF+tH7sTgsvG|bBB>@M**xhZ!2y)Kub86`(V$5*AIMUa&6i$ z*NsnGys<#$J$`PK)lx8V?n&m?!o=*?7m6-VCT+K@H*!h(yf;Jpl5%Wq>`*Ktu8W{b zaE=qntCk3pI4wapeU#k|PBJnDGfj48A26ycRLeYX3NzC+k~AsLSIRZG>}NvF*_~^5 zIrLmimfUrn5(i63sI~UFce>gyE~kGgl*`D;63Q*rFE*G?+I9Is;m$nM?DoGD3kwPv zS(T^D&vS~loDMG(L>Jp-={p-=F;uqp3-@?Fb}#kT0kA9>eSSPg(}JP{GQ}G&rLXF^ z>GAlwSIe_^Ta`-WA1X^JR(SFWTL@1++_D!gQ!9nF`DkZd`kI({?c<526NPdIPNYAb zd+M&>ax$R!Y>-Y{w1zGzK3EweuP?9R%6_lc@saF~vMBC41=EIM19IlIH@>;W$Re7tpoc09stha@O(znQcdB_Eo9w*%AhT#2OgNy$;E(nmE=R3j>+VHbq%P~OG* zi{X6At=y-)*f*3UOcp0yAxBBITM=vmeMX+$&RpG){x+TRWOxt5zq5#<^Dbh@WMt;8 zMMKg+aCboB)#{7($qp4a#+g> z-nYvu9J1eGqr-*%ef_N3$l6miyKAB*tpko$;P`F%hxlV6Rz-+!&x&~)LyMlQ|5U$w z?$yHC5V!l51X8R4@`tXfOwHXC^ZkH0Y*FFzAg!m-z7jjeG!_N;5 z-QIR2TS*qj<5|6G@8GA1o1Fu%9k7bBZMLPnIt_W(v3a$ykg%lEX_SK!#=V1-j0w2@ zfEpiT6=5ZaTP$nzv3i3QAiu*YJLfn->-R3anGS#IUhjU@cYF(H{}AY}&_QlzRjUIP znL>f7sQP*9!yb6!hl{4i7Ot_tlZLJ34t^M_6;*^3+0#hrDXw#AuIEj<_3_r5%8(%8 z4K8<8?~1Srdi}~jyvhy+-N0WD4K4D#(YlJUx?CVwIzo0t27bIi5`3I&p%m~K_LBa1 zI-TU*KGi)X8y*nOkx-Z1D*=~$@W?*u+P;8*lcU$ka_pkqflGC;sL)eyK%YY8zg}~T z(>FE6T!M#ewmzIIq=D%-sdK@#>SJm#JK=3*-3omVzkbY1dmcKbN{3;G_HnHl0V> z%vg5v+U%<~@BAUbkWlb7Fm=uNM(IXYBNLyv;NAaMZOv!hse~z6L0M;;)T-zJ$Nt-q8`;!Nuh!WurLs80^!$Xu zgmdp`?@SL5AKraI9wLpfj6_mHlEDmemnlgOFZynkbkrZ=TI+t#57Rjeo3o zYQwXwcOg&a`+E3!K0M(uQsWVoNke5huX)N@n|O30&EI12T+VI-o=A3g#|m>B6Wk)UzWE* z3zvBP_N=xHOW&*nIIr=J<~mOL`aBZA^Lm~&tG4s32A);{zdWn<@~rvx%)@hOmGG}; z<5kCg^x@^<33uV)`_ab|_+I{b419pmKfYH-hw-cf{@M@p8z!QdtJ1E@$l?Ay8KzCV|-+ShljVz#l+mlTwhNO z;t7?xdd<_pQN|zYwLA}xy1yFm2zB(iD(Vk)_kgMSYaII4Lk)OdZk9bH`mKwPo5mq? zeIrqAPj5$2C7Ba4Ck|y8i%g?_;{(w%KG{F$@nSAczQd_ z%BiZV%ASyym6w+WdPu_pJbbSDOMAc$f1l*%JZBwY5N{VR9~Vy#(dBusI(Wi;G!7kF zUg+1)cQ_sWU4F0R0sFBnV1u&DZ)D|UPRRbJVLmQS|7FdTX<8M*j7 zx|^SMfdZ%oK+}|0R5_{sZJqz~>Nlj{hnm71y|q1|z(^m>-^BVcc;(B#5B#>K#qTxc z%6+@Rdp=Rs|^K^$VBhl2u#YYnu_Me*nKFZ?vFip9W!2Z4sTG{&d5$6AK z#LCvck1+Ih0T6L@88l6~A1kbE`_W%rcA5AqnBhC8eQO0+O>={~>@T*}+~9&D9OvQD z;?X&K+Qfg=XpiRyN3xB`gu=VcmPcLAesbLjCL8JAx97k9z|l!cS~|{kDR*wGHR zbF7R$R@tl>ng(OdyLT4Pb_Eqs*agj+)5+X?XAMp%Y}(zzV*OT8t(!cnc=`UtLu7T2 z6Gi6V_5C)Vy|n$UbYSM$cde_Vg{+d|jJ^Fhjnto9DH?03-u-7ht z*HUX7AM^cpNdAT&6|E1#dlg9x^^~80*G9#0^>Pz%2t**8uIXZDJPG+&{`GqF9k#mK7PngEcTHeT7vna^c95W%c?;(?#+P@S~bZW3(!V16OZ)ExA*Sfn7dHEgWwru{_@~G8!lQ-4gUrR6j*Bt-p z;q^XbU6hEO!7KTrzj(`Q#Yye4y;m=I{GNS)oQT)&cIKX@OBK^!Q`WFlQuZQGvK*LZ&?han~*Km29?z?Ms z9USu;(*KBQI8xj&HUE`Uz(__yht<*wjWv;bQ+!XA>(!`#0uCv;{lnnf3sDCOh>|pH z;ST`?)=UI^urKZsYyKM-uOQQR2&3`($c!_0CEW=kH{~O7pQUC^;d?bG3v z_I(A6)`1lB)&ESo6|?nC0hY0%!c7eFk5K-GZL6r44}iNUgZ%$Phd(y|$A|y`EZbhi z7`cBvMx|`o2NCc1uXFyA?w=2@)d8?%$Dh_G{_8ROmId&+pxb|8f-MIpKI_UB98mXv z83^dGgKs0`4sEroJ*={2rG~u8gOn8X|3YBrmH%g~dubu{*bRaAhXC71cUm?l_lMV# zvm^Wf@`)`j8*)x?@=t|e{ah<3s%NaZ=mYm!4>)rH%cPdv z_#h7rVJyl(OPFM?je`v&r6a$G((xBUU^plX60%eR^)Rhs`xVZcregV;PA{vN*BiW7 zko@;KPGDfaoVbdaa8kD)3ZXHK*@60rPWxgluDAZB zj>?H)OLXjq%D{H~oge}Mo=}AqOXwI^nuT?Ga-$7Kowp19Z5c92 zM=bC>zB!1;%1CW~Kt~+Yxv`QjwfYo!g>DkmW>!Dl=N9^askpQ9C!RK~Zxg_gMEp1J zfZh9s0QaMPFh@z5yUQxZ{tGYTPIdZ?9@QT7c+YUG22p;5Q^*AoHR~T#Yw|9hoze`X z{UN;79lSz`a;08wN;|&+P;I)g1k@?FZ7`RzLCx?NMeI#PDU#jY-49d!9E!Cz6?e?q zcMUVUGZ2ASX)|bQ?d3=R#bJKA2f2WC;|QZ4j3hq#riqc#e6(=+fLq#J7fO-HOOviU zXpyfU3lho<(=-vi=V{I<#U|x2h{?Q?Z;*R_Pi#GDSk>uMZBq!%ab#SY=HHajQ=u7V z(eG4{(IZ0hOlel)HX0K_Lv=Kh%2>n7Kn)X3M_MqMS~Pb&G&_S-;18S9?ULV9J_hYB zN^Ez+nuZv3VN(%+R+-^t!e3yy0qAeqxf-)!FeuUnB*Gb|6t)}T`K8YEb&Wz-2BLfh zG81!?0}B!(fsIu|fqW#lP>sso?pF5FgnP9I?CQ~F6!wj-N#%+T%~u*AB0X`c6xsPr z7n9t>X|wRDBuhA{6GKTDCzDM=rJ9U9Ontw?^0}jEZ-y^8wZ5F)l~6FywPmP1fpRoK zA09|dS0^nx;hQDp*zyeeV2f<~EY_Mq?KVo$tnH-VSBP~UmopK&0jucW1P!NQij;>a zwG7ArK0l&8jMyO6>sM4chhiGtY1bB!J$7(lpduzk@e^)hGTR%8o)qLkxPqj|%?$CTv z*hHi{#T7tP(8Mk=18E3!Fc=fFrz@0oJ0_PEe99Dbm&7Wj3@54QMs6@KZ5O1`=1fkt zpNEo_azmi>>CjxgnjAH*uZK*8U@;Bc-xe}-8I5y!uBa=_#pEQSNEcB82h`1(L!?>r zCPxP66SbT{f3HWzsB^x2aQ*u9;ZQ;#JjIpVA$wbbSXHPLj)gUBZiheop^Cg1yrp${ zLB*r9x?}U+c+5y@9-iVc@UTZ2>qz1fa+<|e2di+E;iL3+t}9^+Le^xcj`U%^bY3iq zrHOa&Bq$6SHd=7o7M7sshjVpFKvD^Dhmxz zYMH1AZLWF}+!N9iB@KpW(P}2Us+;MgTo$LS-GKH`dM8>ITqpRve}+-wC=n7jf~(hX z+uyv{Y0Pjef04oNwUW(=VxIwwjN8`i=A2*~5zbRvyXj&mXqr}B+$3(+%6KXDVW3JuwhgCXcvUV<=7dG2gRVLpm@O`;o@{GX%D2-Oc+XrHbEc8 zG7?w|<`4CWg^_Y?QB{rULXL`M{h_vTL6`)8SWjzI ztcYc9RF{WkCIQQJgF!hh9cV6gG?SGg-m!u2GRDuiYeU>$ z_8mIKk{ZE!3Z1N1j>L3moyBT%J=R&gN|Q(QR2;A*bwbM-li0@h^`)`Dn_V@)#)h^hECE{$kHk;QmU0hz99MgBJ8w0m9rV)08t zyR$RR0MUeD=8d&rBZ#n&Bw{W3}as3uP5{9(D|m#}@d4pk@mtaT(BJke%Z) zx1euBCk=<5KrsrYmC}?1x8@9i2x1{@+H+tAI)lz4WHQv!ux|B}6-}1Z7|;C;0UMDv zYe=*0g>oKwy%SenkqPHl`bO4~TAa-bpR10ivBioQerv@@83oGM~+PRIn zt<=lZ;>OZ8Mnl_VvTkyEaGqWhPS>sFKyyg@2szI?4o0#e$@@gccU<5CX^`sAYe>zn z7pKwVL5L7+S~^oTvH1?m-wvm#poIA}+*;Q_*JrkRU=(M%x`)ZsPHbgP3f4W%8TGEE zR4F{iH&+Dg_}L7lOQEv5jbuziN3ENjb+*JA+F_xPV?-<-eO7o0M__UHpeJcb1hjXy zxoR(U!L?wd3N!SIQajpg%7K&;=Lu-^xZ*bt_w{DL7xmOebU`~b46&uMB;NuyYAnat z!&QfSU(sjDl$zOJA{RC$PTtcc;wr9+y%EN4?==)iG3<7gq=tKskVhIyR38p?)pf?| zdef#|AUJOB0;l4$Q+(-srEwseqSRp|LLwDFQ9%T~6gS8WcOMPH1d;U{OuDcInw0lF zJ|SRoli;51*Oz2BrGTgqzcg<6tCi;CX7#EyshWtgM=bZ2A^2t3XqWPnW+Jxw`Gu$s zSy)K+STT}Dt;=(7M-w4%SVcS#?6r-Z#zJj5YxC7(224^-Jt(X;@o(;T_>SwK@-WQ? zGL|+C%kS=-#6~LhwuA^jM<>AQue$5Z=S)MGG=GZieo9G7E|KMYtf_N8ClQhSe$Ru} zg#CdUrl5dp1wl3G>^c>!{!%z8bfWK#+IX^XIdNYuuD+-;jSkB%Q|(Qo+X-M8dwxU_ z_Ab0|yOKsSFcgOB3sIV5QA&^qHY4HAnISNxoSOp%GeoylMJY zqd{c)a7$&-tQnlrwZmfEtSaDBhmI|@91@UeD|{GE3Iu$K)jjX-ZjbosC4aL7hm2Os3h~t2Ujl87 zhFH|C)%Espudlv>FPW^P4bK%*LaZFO7D91Ra56f^YKXYylBunB9W7b^_|{ zd%=$4_EUEvU69=u9FtGX+Ju*7xsI>lbihPxAu%Wt*{8WT)pL9^M~Op(mZR7yO2(NT z_uE-=)Xez%mmS$0l3FU1;FMBcf*7IC6k+9_-j7p(6p@0%ti7eiajKA3?EwnH)>cr| zD-gNcfbwG3%5eQ>BBOGoWnQy+#*u&~ zcq-%+1}|HI+AHBr&>$&>DZVwqrm(qN%_S@4eJQk%0N`LbT#a&;TzQspMdI_lm*ai+H z?P!t2Sh7kxEBO^7DUfh+tR~v8KwAzbMJ;ycXiva1hSO%y4vwf!PKChJ7GHo~Cyp7} z!PXk80f`f&)vi5dvrjJ_w`;}Dmzg;h7s$O_ec`RdE7vp`>s&Fg@Aqc*T^Rt zyX_$%<4NP|tmW+$X2WY3eNEAct>}Cqllx!>Q55WneNjdK7Cl&FwKR)q3L#)a8cce~ z*mLYN_6ZkCGZUVdDqw*_DG~NNaXn%l7S}*@tnScjXl2e+MCtJa8*;&7CbzqJ|3K=| z(kme-w%pK(S!?!X#x*>tiLZSjqC6*qrXQE2M(jWXUe1DCFnNx}zxA~YGSJ%uiq4x2 z)CK&2jf0CavzG8Q0KLMxQ^OE2W!YxUUu z7wd0cN@;kexA`SNrbX=74oA|Zu6$U+V34pbm#3VBX0(a6LkDy8zX|mTF(Z(c@F_b` zFqu_c8i~t^EE~_R-wvmIs!e3O7c^6_3o;zkl%DN;`jshnja+WdKI&j=FUOtz#S)YB zx*UrN)b5C*XYR}GZc_?yf^s?%JYm;uINmTj@$>9>deYJHFN;-*#1jFIs%Jx76mGn7 z%E9_oD$zw3myPpHEsi3ruS6T5srd`7F)B?nk73^f!OmK153$we*Tk{|p9b|-8Q41a z_~5&1F-w8SGEFq#-#+Q6suBrij6 zjw6=D|Dj9tkelN5Hn+6f>jc`ZRw#JiQlyr4y6k=7n=&<9a!#30qEJH~Ev*5&Ha^;r z?Q>7$eVQ(1@Y@kg!_E)XD~K?CgcvSufV}uJ%M+5D63n6oFTG1DP0K@6LJPYK1F+mA z6g9bmME{KaL`+d5CP3|g2yUtg~YJ^>TO8H2%bIg8CMkX*ffv;3Lor6f~5)q|6Ah>ec*V&~8?%BfAYTv)-lS1lg!-(e_viSd@})no`Fl zAPzT=AosRr^tK`T&AVYLy_O}u;L=8E<(HES7F1HYfU&w*|RV zX03!0wws=rpGt-LaLg|6qkiA#O9|4t4v$Ct+`-*zq4yRaaw6Gk^X07a?B z`y)Q?GYrC&nxsP0JWpkjXIhk&;j|9Z;=C(f3_mtDal36i++`s(dL=^TmJf{sUVBvKR zTM%g{%vk1id3JKS8O#DmSEhShGu=iUomqI72T2wL5XKtCtT>;oKC^}v{z6ElUR3wg z&1ml4>OAinBQ$upDdiNsOf`XMk!Sm8*-M9$mB6yAubScr86Kyy%|UJRmg zM20c5JoQDIQN>VtmUUb~^T7MOjHV$tDX$7kC2M*RiltH3uS%f#0;6+={UwvQ`i!UU zupBp(Ch>DEntnMmz=rrD3e4m{$>-@5Y-<@2(}0bSm2ObOj$?7|WZlt{D~Qo)-LCxh zv{-Vi-O_EsBD0En`FqF*Bz&Q~a9J~MuMfx!@HTQ#LH+rNZfx)vhju`&E{lL=ZYiZ; zLC(>(V~#P-SZEKy#R{k0Q`c0a+k|mPIk(es+}VSw6tzc~)?w5h?Rcmabc`_xovoYd zQZgXmxZN35YJ9s6PK-WzzU!wKvdn48)_q+9WuB=BFvhkRUozBXUq8KQ3L-O#k+E-N zJaZHFKx|R8;b6R8dwr=Ig^D89XMlQZ(ee?WWZ{K+VT2bz@RhG8!ZEf>sEHlPVCnY) zI_ULzBzscZY92>79TZWuuF~p>`4+TEvSw|#-1e4AYYeeg=K#2f4cqw~ z3(c=;gtDLd<_3#oF~~-mV7O$nJK4I}PFEPDI>We9>Q3HsoGiNdFQ(cPn(O_ zQb5*bbRTEoBh|B`w82~$Mar3OUYkc$#WGAi7)ohmh_3g=E*hlWts!d2!qJV~QIF7h zB#`3Pu>Wm7DH|$`r=Y8@p^gH+I(L5Nd7+Dyhs1bn117?y1KV5n3B(qM4p|dQbRRkP zI46}2?^JeVW9imd$0zd8QbGY1nvxD!V2dqru%G!PE&EihpwPIzV8gHEVHfXGYF<#a zX3RcM2vc=tD2k~z8w2-zD(*&wd%Gnhd%~d2N5}I~4l`Vh8HD=~k=lz3x=!syyANXp zarxRqoNmGL{pdn0X|n%d`1|HbcLB^1vySu%f%Y&Jz9ySK11I&=py-u{e)a*p^I;W> z$(A81BdF;in*r^a?6vV>YdKrCEhRg&rI~+Rx~mFm17&p&0hyq0#zG}tt4Ba=QL$U_ zK*MG0WvNlA(h@5fgh@USd4m>OD9+M~+TN|}g_eBTg_m7jzjt4&r9)3c3O zAmE{>hy)_$#h6h!%E62a#W66sW!#{@9ucvXPO9kc||x9cHZ%jshF)J*I^%CWHiOlz!S5t@LTglP)ua&*F=T@qkoSpmK=WJ-ttN9`eOH(xH3(JhT;udLlb zu33Lg^w?^xu8uza&05mWg35lLPl>*~tHsf_n!RIHef-i*;6Q*m^CDQbZ2a1t0^uu2 zfU1XiIo(Uwf(zn(@sAwIA(eUP+onoTVhCXvE{2Jejxcp2luR1S7LoiB$xybX;OKV9 zF{hfnYF8L$ga;%Q<{OE_zbstLeA-X|@JtC5n1D<3LG6QX8MK$7Z zgRVX@WhY<=SXF^a5N+?Hp=5K#dId+4f5B;jzI1z&d1;60jn4*C7(i973OzKx7hR_L z+jCG^joehx<|)JqCG>Cl9P?J1zXZS8=D0N}Z9{eiuBXFu*h#A)?P9N)VZe7?ZhxFt zd-nENRJ=EwdAoXk!!_R1+-Nc;SRkhzdDF8OcuE?GOThpuiDh&FUXEB>$=)vD`DW^dQmX?#(&-uWj_ z0UmmVS7Qp%??=}kQY4F9SZfz@FF6BC-@WXtes6xg0U5YgcX7d-Lv1YlYg+AZNBT`h zz@eH##WCYUKL;#_VTv0Q&HWp%*in9ZqIstJ^4GrehJp0NRD&$KmxaZplvyx-78NvE zR;OLmq&FN^{R66>XHdU|Lgj8Xr+2oh-48+ZD+pmZhx#%>OVlOxb1|f!os%m8ZgdWf zIP$-aw6nI(G3}O^?d849!uGT|!B7V#f-;N969}Dqm$x*#v`9Jrv}5fLkF-w;sBKek zXgGBIe?a(J9~l)g^E}V5VqkxsGJd`>PlWqP#0D`65h-ue*!N_ZMY=x))<5;RO95r4;m9V-NRRSL5ngxDYzdY-yOXfMT*)I6Ok5>xAGIX<*r9 zxRDtf6765NN#@!8XjsOgb*0wkub%8LZ_=OTR=z)FiV7##?E4K7gqMLBGf&!=R<=&_ z?8A~9_f%kzk0Y(g<~NdFbvgALdhfN2t~(A(qJgLUXTE+idWu%{9q+AdH=)4BMq0Db zISMoVK($d!6>y-kCzn+QnJ<0-X*dW=f~7<^bOwnrsWZo!S?pLKjawr4vHui2h4cy% zq8b8&DFmtod<khk?1x0)y1M&^s~T zB%|7G&G3S#h9WJz7G1z48+375iP$H+CmZK6OCvM=NSChm>awP-N3qZt|Ila>@ zw>zDE(%IqCRMOMLXmvx?NoQBy%htns)tx7kTwGu2+oZWG_gFQhB+9|@dnl?1LXaO# zt&!1sR3DqfSxlKq;iPuWFw?6j*C`^}9Izc^csTkss!9{s{gEaU&G36qls=;o3Bi#` zg5pc!S@EiJnKWXl>WwM569MPYwOz#-S(*lcid0Ps<8LrmgCBocgw zXC$k@wP0vPbdBVaLEI^T4&nyM4zKjtK?MG@;FxRC4aqtJD6z%lz*mhq?6xYyI##pG zE8t*9AtNpPE4W_|fk>RL(tW6JCo=p#iEtQtq_!I!a2$mF7$Ikd)6f)e%B)v{IlO2D z>x;T_oI^`_=kZF^r9tmC2Cc>VcCAy)tFB!>A-Ntw9^eDet|IRHM3~`8GyEeQ!gZD& z3{@Vg7;$sxcfbFHMcy~Xe9fNI2F+;a;VOot={`y|Nihv-E$=~4VaDRwxHsT>M*~eT zbg;XPOSXTvdL7K}M0=A~+#79#O!<4gl$@Z=stHEfGtl#n0=XO|o*%?mpIB)-)Jj)CmtZ2pt~u2Bt{}xurW)+NhM44&x~9oZVWwFW0cNgEJgsojInHB}IZw zrj!}FG#D^M4kc)_TqKC4R95AA7jXokY~1^vn@_&Aw}9pBJZRw^NWC0SZOhWOer`Pg zyAR8@#s-XgutU_wW7G>y&{4fJneeZG7Pqro*4-3Z=+gL7r9PPOGcJ}n516P2r6${d zSHS@$YJOvPZQs&--iOD_x^W8=e$60RH3o{UN92ztTi4P$CQId%;!eH4h8jHS%=;AZ=pHu?3aTa5aa_AG6^K$Wa|rEsr$_^GqW)>+yW&P~S?v@7iT zgYKz>PidT$8EHLO$V~5-l1u0`2ehM?46nA}COp#$&zyhp7Q}I08g(<~V(d7W_Sul} z*}}y>fyF+>x?lAdQaXK2#jE}TocxP+-<9h(i}ZREk~P9J|Av+xV&p4SDboB3;Z0N$ zGesAGL)R(@?pNY^!LvishLYtGDLKUON6PITN0Z$`?>*tyVqiw6n@e-1QH6drD2W6* zn3zov0N7ey{CvLwQ=Hm-yeZvV2QRfkk9AjRjZM<|!)lLtECqHut(C2s>!($YBgWYy zcbG5U271l}aEVK7J7Ua6{7i-{Gi%F~PX}=g{HGgn9r>`1Xoo2+83_am5I=cp)c@pZ zU`sFgkSr9T3WO3{m+7%2uC8#|jpm}FIQf#Wi5t<*S|?!&1cArUSP_PD9lV0JsfHX2 zBeN7o>kfOA%W&EXlw!0y5D9>x+CtqyH7Xr-%loN{zAwMeOccK`I}KWzri<_Dtqk%z zId?&G>Pb6=TOR5+Qz7^*le47zqBeL-XiwlkN%j0h)1mDuSip^_+qLUw?Eg&!1$i0Q z%J-Vrx6)ld+lwtZLd8c-U#A0EkJBiYi@#|VCDR&+s4zCGH6v1V!W8FUg3<<5&FVOv z5VRyU_X@+bNt?Ux0cLOjZnH)1vRAzU`}_|S{Sfgj$0u4r+*aXth`Dznwv_|>$2-jp zR`F(S|M1$>foH+4VINQs>!8xXeqHIlo`zaREMHbGZULu(CWJ)GB`RhzQo0gq*%|@DpyUKxLgmfh9MtrbJ`?}&v#cX z)T&j4R5B93-YDL_TrHfnTx@%?$?}(532e4HTZ=o=SEaRfJsqdY;SW=MtZ1UlB<07sjzA)mjw^ibd>N-12;h}!}>AY{1E8<;=yUa;j!xI$>UGb9m}iw=|C=Tw{IWc z6vC^@u3+4+`JlLJa#}T>i(B$#9tKSvejZUdqVKs^gUW~0-k3P*d;Qa-zoQNQp@!{e zA;1NZx&mm4AzLerpY>+T(|rVPc*q#?xr@(4W~j5QK0x4tL9Nkc5a3wbC|Mt#JJ#ZR ztkmOeAsKn#(E5&2e8smk~JikTW`PO>Sq##HxDVskmM&00m zdG$5i>e~i)rgf_YRSdR?dMPef2R3GOT>kA9@imz~<9<0O7VFq3pjf+h16juz+EWz@ zrW&&VRz}1z=|uy#@9tN>uce{*PH=zJTghWTJk}qKl_))dUSi^HxznMG&C2o0Z@dma z;pJ<(Bnruz9~$@VIhh)0w*U3xYnGHzP{_jE8TkaURlEfN?-ztE*DU=qHOc0pF>4f_ zOf0AQ6gd`IAqv^ZnNy@mdC!5-jBx`y=--P*w!Bu7tpoTq1nrWmI9 zK0Jvob{EX@6o(f(=~P$}*F6m-1u{aw*H|7jTvhl-eDLQeo7%nP?$7Cq>>14hyH%U! zXX-Nh2d&9bQ$ntJq){9MC@N^qK+}OU@z5g^quXBmiszTNvYg#ZJM%h#1+5QkTvU{4 zUvjV8l)5=KKk`*U1||;(WOF(06JHgx>KafM6>1&^6}NHy!1n%W{x!7C!IO52s-Y)2`Be$&cyhEWi7bmn=K z#t!G03qUF!iQps6&S>5M{xLw0^HRV{TLYL#2joJ>HRfI!2P11%_br(t$FoO%7LFsHc->OIy*0}e~&Fa^HqzouE{SuR9#c>2EihP58lXE&U zS3&86yeSU)?oW&KjV?~eS-^tk$p(MfNWay!)Ro5VYENT>Lumo$fD$)wrz#AoIuN1l zD1RUclX9=q7oKepRK+5DlWQ9iok3Ug9gd)j>;^r^`RX2SsD<#UoRDi|Ss>{qAJ7x8 zn`{|QcoZpulgqWOaY3|3En1q)BXITU4p+!sTcow;GrLw6I3NLPONHUblE>dg4tF~n7#Wl~D#3_+8#O`3~YFUD^a@&jhH^=qtD4x3X&{D9t zS-MEMhDJ6_P7e|DwQw$H$j4rALvd&FY>b_=ZLKnU(Eb?4K*lI=6@)B7=k8(YvaN1- zhaAIKHKp4UnFTB$XMHdsJ*1>4SA@&CmTgN(CH`kbpm>EUvXLp9ZViU-nFnvOC{C-t zi%3$UBGH7@^N%)BS-?(?h*dTiEmVm>io7dqj6JWv zb+D?{M7r(t|6+Nnkn&q*fCB(1a<6F4s;IpcA4GN5e)ZO@bA2YoVenjHxov&1f8oRA zrUjFQsx;KvC1ViOAkJ+%d(ISXOT<3%ypPLiyzjiC*l$@CZ;>{l*a;x;L0_@&%hi#A zfmeZ$W&pG}kU(4|B>0uDwsv!#dDSihgob;aR9;gz6j7N1t`ZRdDouk!zNnQtjmnWN zIj^V_YV)jyPRu>9RaMV8qy$~pUy~8}X$%KcdFQybQ;8j?-iJ)>xAacobWaE7FBm;k z!|JBwy6N_jmMi$Nl7;vcn@o<=S{v-z;(T57$nAaL)%#7A$yFgK^i%4-6$Gd&Y;*xz zmsjatN5eW6B0xlGK^+Bu+{j+r^0>v7UXQ)iDvC2y(pO^$G=UVz*PJbFE;zL?=7;A5 zsugBE*qQkBq*BMo!&6R;vg@78o1<@3+awg}K{#`WfmdU4Fo zKdj$Y^Gq#`%874TAo0*C@q{j&%0nkaAM0FU*y#%$^PbWcTKYKnMt|TMT$3CNN{9$! zCb(L@UMFy%L{@wjrvFHBt@_D&kKBSBSWJq_RDF8LAi`)oLcdX@)qlBc3JCbismaNI zxRcBIohy7aWwgQ`Uzyu~75?pNocXKjb)dO7?am-h7ksxyrC0qGOG+T}p@w5Wx#e0x zY~$c7ZNn2NVcF7l6^pdl7W%^ss6vG2v0BA_C_3KfLAuT}-SOhZZHb5b_`_hau`9hs zfX#4HkKeSG;$4Coa$Hltc>up;PwLFGRNFay%8Y)VUnSksx! zW95ia)FnjfYgzAB=?A%#cbqJC`6w0ORL~ujNa{$(B}oO)7P3BikL^p?!yFIa*TC^> z@^&3iRXwf^xRyZnFFa3l-Ab1TC<4(IUHwQ%wBhM#la+*9=0C4}NCCuG?YsoLkbwQ& ztsA2tQnY{#n>5}qCI{-AliVYtnBnFA@B294 zf%D;A`T|-AZ+F(5PGWviuUvK}ZTMyRrNH*r<-1zIqsC)OwVCocCm5MP=|z}WQp&rX z!UVUEa&>O{c*99}cI|$vypog%f6RN0x~71U6gu}aHF?(8vzvvH9aluU?E(Ugr|7Dx zm9l%Y`rO7n6J=i;#DC=BzroUU@tK%sGUr8v!XYak2_TXUB62xpXpWkpto2M>Rd>^7 z{bvLs+R~3cyX-MwYE^%33+J3hQX zTh6*<)~1m52;C;!$xqj@fR;kW1%~1^ar2vp5(6PIRHY&H4kuEhF`4;5XsHAe1f9eR zAU+PJ24AOn?CgZbMPx-FuQ zPrpK;P^-^w|9vI%yKEiV2<|DqzHGEnB`Eg*k8;c`2c#N zE~Z>xxQOKJZA+(F@ z1bvro+0*5c@D+%=a?opRwf~hH+kF1K8MsS)0tgX8tr0YEn&qsdq3psdSAC zgGMpc^66;Ac0fJ7PKTg&xbj+nuAV3w>nWcN_O>9ij6TMOvS&tGa^65--ug)kpP{vN z+k=jU-;dD=#(>)T+Dfs(7-FDF4+%R&9mNd<0hH~APB&wOtTLOJ@Xx+XRVr<7$BPe8 zc6Y*l0_3ZC8o1J+f{^tn5(-J43WyqYRo_Lv!AlhLqIT_G6Lsn}HgBa7Ytj;>v{9Q) zuT7GX&R(Zqc+q)*l1K~c9R zoob!vF*tIUtS3`3QK%aV6yv0t_>Inmzvjy#OeQk+DX{hp_`X7Dn4VDGJQSxB$dxxK zl!a|U%N}ipy^LOs1g^)wJo1O{|1zr@qmK0WiUWs#l{bn(X6w!sw5KopxXJMwtilU@ z%ektuV$Z- zzoj8;sk`aq`rC-4SbZD7Tr>d1NM5Bxv*wjkdHEnW?Ze#GZMWYnKcs9?JgjUZ0t&It zf<_(LI-5?v@nZPSADK)CzA3)NV8gg}Z^W{~M=uc2)=L3{bitP8dyM%V1NVij_OYe* zsdYS^Uo&m?P7^uA-)&=?F!TK~*H1bb9DTehD_wE*B@38LL+1a(*O!1pxxR6C9G#Q2 zSjrNi63G^_Md)agEy1v`yFHQlXdy0ryv|COHi8+JSYdDdP2ir zPL;!;O9@zgdWQm|t$xh5JZil@ib1X6Q3aZ#6AwWW+}c05&~|f!xI}@w8Ij7}$B^bL zybe!3Wx_cl8JEX9SJLtCTz5}JzmaUi!ebn*9|BP1S6|d)CRRE z^GAan5G$nB@IwUm4#tgyv$DMkxoeo)DJFM4$noe6TkMOP=T%AX6?n;AntvY@_K*5&n60dMkgc&P)y{@y2&@<5n5F5P4e7?|Y0|>{W z;n}>$0N~7M?!Idb!g?jn+DsEzO~pW>;y+tblE_w};@-Kv;BH!>p?=df|MgUct$?`P zUDX&uUc{o<125-SoodZ^g~brh7Oyr{PHA1K>M!DA+tRUYN{{a6a0_S}>HL_3O$+_b zwK6%$$6(|CKKTAinNDx3w_~4|?BMlwyEH;if@bOK7P}07kF%2#596FRsv@ns6@ntq zC~P-Yy;e3EGlu1^x)FxEzu?ysHs-9cy6Zh412UNcF8=y`)#%NobJIy|E?6mOF$Ah^ zd`w9d@f05QJ4zSZHF=Dz9{Y{hH0Dla^DF8`BU=9Ry#gfIN z4$rh5CR0oSB+)XcBDxkMT(5Sq205QX#f`-jPm#ZhT8SLGt&BbY!OM-2R-&Io{iOOjVK7|TP)ZxY&ob%p)GbB zM`FIbJ87;Qp4K)yhpaMcj%PG6K-em*{?M1M9&|#Hen?(@AUO7EQqFe_?@vo(BK#!8 zY3fTE$o%Dtekh9>r-rzFb|6D!EzMDr#{Gnm_FL6oqFMa<(7vO+0PmNl_Zlj?-1sso zMlHdlwdpwIRJq|r}GIHe176VR6$Sy zO{Q$q%Kn%i-08r#g||-ClhmJBU;Zng@F*xez<)APiBV@0#h z;RFo=Vb(S?24(&cs?Mv_d0LKM3R<{ivM~*cbkMvmsT7$A>dW`u`4I0NKj|>w7g#Ok zYTmMj)yke>ypF(+?f!a(#Rcbg>1*r!hw?PS2Tqm@QG0t)xJ7qzdrHWoa#+N@$^Wh} zE(wGgmw=G;v+HdEs03O1k2AvA=;t9}{%kGgW7~A@AcH^Bu(=2KV_KbN?@?8R>x1hB z!g~3kwP_Be^Iokd1zlb<)qgE^|IgzDc|VXxplJ)AW0Zdop=4;#dj8Q5>F>J6=!oOR zp0qslrTSyPn#Ug*o_N?+5$X4HQvFDv(B)*5*Y<%x_^5Mg;lR5rIj3!|mbvrtaCgS~ z!sI)_^>1ggf>xt8W+w@?Q-sbFD!H42Aa!Z@VVjmw_O`8Yy9`fu^M0RbYY7N{Y{#`8 zCAb&dV!(mbJ220MnSnURN)fBJbNzII(jr_;-*oy0WpTUuq#L08EHn#!CAnDR7#Eb*KY1QBxSLJc#zv z>s;;6slrRx0VPn^*tN_5ZP)%(J>aps&78J(rRj--&HQBz3+Wsv2{0HXa{HH6x$lS` z920xA-OLLWo`%ztI+W-8VRr@!1ef80rZsC*uGTlWDUUbR_!<~dzqLT-x6^sev|muo z0#Z|1SvhdN^tbd#q!5_ZC5?kW-D`y-oEurS#6XJh{X~&E&tRdSw%_=QuV+K`ARH?Q5d=|UubL(e!s=oQQ+;n4`-Z5C3&D}i4S_+a1vyI$Q z{mI`pe@SKo_dRk&rys-NZ{IJv9M%6<9|IaBGim@O+B{4p;mEhjE|?1izCXYw?d#Br zN{~H;dt=19x~!ol$R)z+-H*}h+3EQ;ro1OVANId`zQ0n2WXe|sU8 zuW$JiK!~)EqrS#J1u$S;OH*62YzYvBwF}}Wg0>$4qs93?W>Gy!ePabf8`@YetN)I` zs3pIyC4V^-^fhX&D5gC3+|L2(#hAhF9cbMG8g4#n)4p$RRMxKk#ctN_T=gZ=djEXw zT6@=OJJ^cNKkxeD&@4#(@K}oD9YCg3J4gR2e-=u>=`=vaHvo9Ark+mswZ4&{{zv?G zlpw=nDum(mvJrw_KqAN1k^F1zy+EvLuD_A7Rube*R^Eg@DoMk&1%ea-!`GlT15KJ+ z9Fu;!YGrF6`83><X!>uKhu2{ zA@pd_G|yjao7KY4~l&`ZD=LUNcYsLQ_vKuV13eh z4Pmpj_mOnkDfX)m87=_yVH1R(Xgyph88w>|*8D9ItaJ|!G9HzcW;rV(VbbaTRa zi+r$y-2M~7zuAF(qHf?YNpDmezbQXFyiI(SG~wU3X?@{s-JHpK>mz4exGOT<6+Z+a9LxbimuEqTQQ=M&| zGD%Amo1FQbg3?*?gIeP$^%uWY(cqq(@4HzyzU|*|ON-CpPA6cV{`8}T=jp5TF`{fP z`=?faJ@G+LwqNEy$L(fh_ykkk2CZ&mb>iW76ar?5Y92&BF|})p!3ywnse{|uLk3aX zKEw~xYeC1ynn=0T4s?Nu(IGHoW>9?zK*hBG45A=(5NJL*SMmSy^(`UV^;L*|!iODm zJx;Yz1jAHX z@%l2xJwSNm*nI#URMM@Z+u7?tW08*3>e|r8nimdi&!M3|He&(#~ak&Tt{!5~(|Dd|c#Meg_bNB;cE9grQn09q?Q;@{2pPFb#}O z@D=;5Ac4I24ECKo@vi*ZHfRmfP-tigkPPM1si@L+*yG8-aL`=Mta}{gCSSG0`B;}vhhuD z{oUcrS6dnD!YD9d+Ia47g;eC_dc!@aaa;1qpNjKc`al*K___h0|6U@%692`0e)rF5 z7y+=gPh5g!&To%bg?nFnp2O2AXSjL2_@O6@-0w3Goy_kfh8CeiXzHbnalt9U>&%;$ z23`ORZ-27R&dp!^n1!1q6U9Edo9zAevzOTTb`(JBHK7>RAkw`+`+*lgQ?FT>|CCNR z4$N)&#{S=_ZQ**)(yot-Jvtnjuw9N1(6dwo&>w)=4>Vu!<=%5!i&6lpP|ry(sUCRUuKe#VhA_YIHm1mFGvj&c1dwK-Fgiq@QKdA*fff1&yxo)- zjqy*W-y<61mBE~~b$j;1uj}=aZ1W-$f9%^^kE%>j#;=1%)XVIg z6nhld>#YMR+FA{`nCgD__9=BBR62Bh&wfqcDC zz0GoiL-}i`js*WL_n+*dKi9JF#8sdlTL6qdFLG@iz701poA(S1H>1?wW1;Wc0l&cV zCFG%^qGH%&_e-y_wV9xe$@z?p)iY3Vi!McoTL0L7n_PPGgwi_6%_yVWca$C&NL{Aa zWa&8ogy6=kVBNF!msf07=;4Pi=rR4Q-?Fq;`$%nxyGp*IX?;n+iW9WjaPC3P=8@(8 z{{w>y&7XqH^^=|%wEi>4^rcm^SdSe9@Tw-Uy#9MHxfGF(SEhN#pC4*L(VGaXVL^H+M9PUA| zSIZHOaL{FQYve90!b#MCkkwz<)`e~SwHmr(t=@MWL~lag5`a8E4lOvT=Pw(BeiVN)1^T*&=Nj4}r`0Iw zxsMp3S*tSqoKbaNh6kYYurto#$+_YWI$>TNNO$dCzZ%rkO7g)<*x`CyUG5RKel56S%$|ZAm5OK%K^rh+v=Nhs*HFu%hzL1LagP*oD5TAokT;S zC)K?J^-{zP^}q3j$$6`KDMo0HuJ#8;m6c2^C*pd)G=*n%%x^wh%tfsa4 z8gFP(ZiXSL`ywHys8;l1&_J|y>k=nNcaC>^5gsL~I!3u(hX{z%Qh7Xmuk5Dw@C`aB zC|bu=!yVXx3y8?!<_eXB|H-;1qWe~+QM!QA z=_2tC`?tMUYbtXiFuJeT&KEytaZACsyeP^`NIZD&m6h%(KF~#Br#ai*Ec4*`TwIV! zt#Kt~6j2AzH^q0NFzcyQBku$#K3%2qlt`Qt_34rgmcQ%9OiSyrN|Ti{@qT3sq)8tr zXGy%bt?l6wu=6T#Zh&Yyy^pB0oN`71|>$-pyK}L933yvfgGkH z0T|OyQd4_$Z)@|xR9-iv8;Y(hp*59_@?)W*)uTSGODp>-7bw&-A(#X}B2dS#y{ah@ zVi~i8(=~4f<}apF_96(=T-v>qRiNH8)8Ilb9nHae0isCoEwg^ zCeS4<=Q~WqUQ>g}C|x!}>^oEBgdt(5p@obN2nu{vK>zm%k}l`hM|ggxW6cDGrb%=& zVXd`1;;G%^@}k8T*hSg`{c{8v3zP%FeA>_$!s@E=^pSq@1ElZzisza1EMSjjR^p%$?atZ8z8n)Yr;i+@V#}p+H2pjdG6}A{zhs;NlI>VnM>i`d#4B1|sPl@h zhqBx{YAljf#)*97kvrd)z4}}PGOBeKSKQ#tS1vo$D2gk~xRv0e91poOH=s~i@SuG) z2Va1uIl`m}i?7q1O^XOD@tD9gCt8vR$O-PFU#@QQUtpLJFz{WlX-@ z@cACYUm333SlX!dBM=6SrJ*dTHT0-Lylze${O2nwo;l&@RZirX-q$=2BUi!4&s%QN z8dOMC@*kmhG6!V%@mk*Q4x)3Esl$GmmW_y|D->8Kg?A3LX`j}TmnqKfD%;n17!VJ| zdou3|r&BJw5ce>g@1+CFQve-*>>_vac4?5XuD9N)G$=nUYR`{)Ne)^47!`PzG8+{X zFz^}Nh&o&Y=P7rs^jZ3gHAGmk$=4lidrfc1-~8IkSt_gi^;&{XG5K&?!Hl6u3k6o7 z;4nl++ezS~Y)3Te=n>V4Pi$KSgtb%|)$G5IQq5)Ec5yKe@zXYidMb1oB(Z zaBL$=k4WdBGtUV1Ar36Rw5Gl^ zs<{VzBWisTReR;{G!eHeaH@I&^lY3w=UY6BjrpV-Yq=OP)fvk;(6wwmK^pcjaA-ATZQyVi+Se1oI`jwQ`0?+ZtF?Oy!Tg7mwTl^ z_4877cY?N+MozhdtIbytw|nJ|zr~thf17s71}BKdEI#Na%5U#62kpEd&K&yoND<_S zu1OaMroGf?f=uRmC;f-fe}s79InCDg;TF2IPjB&xc^vKtzIuuWmeE~@u4_Swyeq4W zv<%}%$?F*gt%$nQUe?9Kq+lyB>vDiUd^Hm?bf|+@TxWw5fwlwme}*EXB@4~Czt=SH z|G!>xQm8fD`)5)L{@!-@r;Gk@LeNTr34mbKRq4_1%6I@QAZTA~V@6)KxpU221Pb}r zq{*?^+Ue})!qGm6s{N~uhV}-OPAtOuqV8*LvymSC1w@DoRPeD#O=DIKmuAe&qscON z8k*pl0sz8GeXgRs`*e4I9pW~eDZmO*01qe3l|0qW?Zv{zLr)R(HZpeZ&|_c1L9C@T7rTDvdK33Vap@U@(%?xmm;x2?x|Q8D(|8;_cp2&$g7A|}~E z6ZZzgl(C0Oy-s@9K?wz(DeZZ5PQCe^)1A_JjJ3t@#^0t^LuJ<;8`s*DXa;A%W*Yh( zi(rJ60KOL&w1$&@=|nv@4A`Yt@?cf{sW0TxOJz-03@#}Q*=!}`!535cudM_=sr}SH!ba?A8?Ii`?d*RpZIi@H4F|Ngf zeMl+6V-Jjk%$;#2J)2LQTIfqamGIoFnc>%;IB;<`_{-ZWqf(Q2XxQ`hGYEB81WEM| zrWh9fPHfLnl21NCa9>;{WdyBP?bGaM#@-N$ zE?rz)yto7z$$3H!v5=`aQBqSg;5#GIdU`F^gHNyj@6a=S);%3xP)bAh!YZgPF-^TW z1GPnCy{!s%Un$g=+T8)?SMDIJP|oFn{G;80IX2L{lrGe-%xU!Kmn6p#~I8QmUN3paX<0qCTQcwoxX#+ zVmvb}PqF&*-YmGPIT&z+M&>WMt`D#8$_ zPpTm6kX5=k5eHW*NXkfF2AODzl53gw@Oq2%gOT#ATt4A!&pz^4mD#Vr#C%&?=#ATA z_Kn|CIp2-mvXvG~vdULbby3EskagwRA|6J>@NAlAKcS1NRlS9fdt}R@n%; zp?|_DOscKi@?Ndkvxz}->-jM*Zhr-9>F$Lak)H7g1wGENGt3HR8vlM4=|UF$c5^<+ z_TFgE{B3(*qU+ALoZBeY7k3_Q`79K&kG6O3s*rJv-vHT4@tRLhmVl8Z4UZG32>#5; z^GIWLLvDKGOQ=U>)JNRR-QlOqUwrw_j znW++22m9yG4YVkvGfvEgb7#I)MM#OG4s#Q0>A+Hma795ufup^>{X#I&&(=b?F>dKe z(~?3v$4%24@mi^3#VwJ_gT2j4^IoTWUbLoq`ZLXQ75@9V`eE5Gs`T%H#jfkGU%xi$ zUv_%^F?=)6^&`EbpgCON3Ui_)o7umSB-|o7&D+Rrc${a^ALi`pTF$j+Nw;nTyKp817ZtGs zzOvi&jazN)jo%}t-x3r;%!9L$_pYP-Fo=tGu-A|yhz0&=NRmxbNWOyyM=VIuwOTSKh$wrfTAN0M_p5IddrkrpKcHwt%cM>@k877(kZ#|&m zFgX%l7W!uLp_9DjzniHY9bsT4j{bOizz@m&VWA%EjupfnR`Je{w(+@YKw(IeCdS=g z5{=Og1nIt4R;wf2Q76;=rz5cfy*Br9Z?l^5 zSvNq1s)lGX()Pf(z?5D?=Ts zBT{yfv`{-f_z{-Nr}#fP^NDX4WK$WqMdP>LB0J1E*AvLz5C3U09%BSoq2K3=`lvVH zwyy!NP%JMgk*j~o2e@5{%=;q5htF&u3N^S^w&&1I&i7Ei7J4P81(Y54bu+1&`tOMjX(!_);S}@HmVYuY&@6&L!ZJ4z6r}~a1VGhsuG%vnIZplD?4KM{| z8UOsbX&Zk2g)BXsvO-pWe33zt>rXM~TPcP6DqQ(F4~^Z+Azxw(8EmP|6DD18j#zcy z!acD@;SRj}U{vSgP(Rq1+o!6hJMN7%gsc_LT z-=$@MnH%vlyKV8T@8WbxK!)^x@m|GUs`s8G%08;4jmrtRZy-^cO-Zm@t1H$0_u?c` z5I$ez>2adjB5(6YJyj826Kos06?B3taYx;GT^mO#b}>&1mqadkp~??-m2`zmcU~BR zt~FD%%D*17Q@dOpvsj=CFXOIQCOvlkHD7RTtf-%!c3I_`9A|HC>y^@DBSams3t1~3 z(Rz?w5r5dQ3GGO86C+7Qy>si2hqS>=YN*w>Xq5SnRwgQD(uH7u=x80=(K)uV@r$FMG)=twgQ0u}hnPrP-YoX$# zDC;A>3%rnIv|m1SG}C3`x?+oya;@KMhy|re*S)b4sn8T5K54IGpn%R^Ozw;;x;tIrvsVZ%4V%!$aDsHq$KYw;VoYY!`!C+FpJVp+_FgoBIfWjbjso+OoPHo*X0YL^ zLTJGZ;qhVfA8-3wBL|I3i^|F{y!T9K6es0Ja{&uxi+r#qr7UMym?xx9cCpwwHq6_@ z$q`W*cqxq_5K;S}W>dTRTtmJ}}4)9PbLb8lIt`_y@MsBB66`vPZC0;1e7zRPb^jT$0L#D|`N%EV1YfSz4qn9sW-Bd&)u zlQD#XC^@`jxu5z+Z$kWE?q`W7mdvDEy#`)Oz*^l$RTE^&BgAQ;uujW%-JTAr4BELw zB7KCv?T1pOhO z*kgrACXPKgudxP(YI;4Kc`o}O^J7G0ImRO^z*c&YBvu z3cqPlchgAPFtTJ&-+{p88FQ|OwW~i_m1xmtUCL?q$`#gRgyOVoU(5{T)vj?S%=8*~Zp;yEYzZ1cy-wK<9*>&RTPp|24#1u1QjX-=@)tOqc<;8)3JkjvA zd!GATO;Ig*vSY-ee>s>>bu??@c83HNAFJ>-r{$Ge*G)dfkV!&CiXr8UE(}9hs5TS& z+KTh$$E^{4R~NJhij^tm-rG^iW5;bMZ+%-F6Y4?RCQS^Yog`tDE*{n9f7^2Ed|GjV z`;ud8F(k-c6`A3;f+RuAKiaQUTS+5FYpN@nP3pS1N84m)Rbj2(%@j_GZJ0;jkZV`! zs;k5GsN=M$ZarReLPcwO+uZ0%ZS%)VkqG{G6;ui!IGPD9_=;F?aLgfF^ywK^%07Cq z(A|UfWL7vwzg4wo%51qK(CYeB!?)yFfo(>LEYvH_I#Oe$qZb^0QR+-~iYC!T>Vi4s ztwY9KU)|c9ovkY>K2FJuVV8Wv#lw?pB`jR+QqP$MS~!0+?z6%vwRsbLKCPsnGyLk(IeX8;HB*#M*fE5^ z_v>FUxqH4?-`ijDhr!_WJ5D8mC8CoJ$6US7tGM%%=58C;==FKWMqH}AFyK=PHBfU+ zY;Ye;YzZ8(P;He&#gXQe+M0Ed`8dUO=VMC-b>UFFcX168hEp9=YNdYe8GQl)w7g}$ z)8wLuma2GkaESo9;!L0Mf>GzaHTl@lNt$2ytg7vM<*2#YDrw>?oEYlDN`)0xnh-`j zVeKk632YLB|F>BLQ3?;s@uI`Z9=8?`-+8(N9j65|rU-dn^c=IYY#B)})>q08K zbp|?fxJXt=%yLq;nbryeWc3SaLX@9X2;gju4_o9CPfB z_iA(cXg#1p=&Wo(xA{@r8_7poN3$gOrXWKGos3Qk8mD7yOSdMM-1i*{=+}3wvc8Tcc<(O?6wJ%-zS|!c%uQ_dzh+imFjTG9p+;qC z_W5Eg(1ll|C1TWUJ628-)3evq>?AoiGV9d5S}R5>0tQ7pPYmT`s6oXvZ8(|r2>+eq z`I9kJqVB$X++6K4Ay@~D+YPcAFJXFSRqRQPEG&9|{itSo{O&!GJ z!RwG{5$LM1<871y#SS~ef!fhYJBu$7Fa509wa=z|IQ!a3cSZ2om10QpJ@=%thRmvw zS!uPX5FXDV+`Uq#ZTAfLI#ZF~XH*~sVXzayy?Dg$;&SxjYCk>|6uT!fB8`YsJtJ5)VqCuPnc*GoFGVdgdCaxT;hU;A9A zLDkgrqZO}zx~ro!5|X0aBq2!4?k%=xFrE=jZ>C5XqU9&tOW8xbC~B?VnL38ykfdy4 z?d*l2?rQHz5CMFu3@lg=NS=*_HuO%SQs(?R4SbOk6_SHmL?`hK&#SeOc&c+~mokG0 z?_wJl{RVoP?gdfa`bc{Nw9RYl3on6&ow@|CR*bc5mratKzJ!?(Yl7t{2}Ze_5BXmQ z_Q1+B65o(9%ML5Rpu47#t8 zqS3AUY_92_{yV{!eCiNfsrv|5O#E>9O^Sxbqy6ql~1MMLu+kSiBxB&5&`pA zKE+2O8QHx@kshh;sY7==d@?s=7gg0e)bP@r5@cxXyj7iXkX6Da`@>=`0y%ed(iqYzjKc8Mi%Uu6HmP!y2?c zpAjWxTJ!C?p#83Vghu~RtG`&$j3+8*^(ZuBE(YIlHotbMXcF2bn?4tKy);G7SKTEZ z<`r>_R*;aZK4Xrwa!n?UuKuUlpOcbviI*s06%-a)7EX|X>vAYTWB#(+%uIaOh{Ws9 zs%1F5msd~c!lOK4Wh>3Vsp=|1^PIW$Hcy_T$(_%*DQI)>$J5id0 zlRBzdjsG@;eX8vEpN|X%#99@h6dx+q$I2uo*yq51gLw>TxxWRpkBjY{H`7bljiwC_&8iz-VQ!;&Dw~ymzT# z-3qsRIi=5A4L<>lN5pG0BSHP{#H^uUWr0y+l(|*PLWSCpnL2fxpkHHgcF@@~9S}H> z?VOSk*?zk23YZ8FgF06}$ZMG)C^UXFTN&APsZ<7<+P#3<$7seL9c4psuLE4?(47in zY5vxHJ`&r`5i9NPwfIk&)m?HOHJQZ)W``4&M9E7n$<$!$$zTtP_4SrwnWo}2e$SPi z{cf%EW+(@1bobpFRg=gpRl#N$UaU>R!=;HLKP_(*>1EOPsd`Gyv(L)cqRDKdEWX%6 zAj&`Oma;#S<^iSC4d?h6VPWq$Pq?1{GEQ(AZiskHjfn8E8hr9zA$ieqG#QDB*_ndR z&p?3i$SO!+%^Q>3%r=_Ro;l#xhx9H9FgGVoVw*oM`I-lrsk?AZO-+qH3%KOFc<;$qJlei^xtPwfs>iOBZJmW2W6V(eNICu^AwVSC?S;S$6+qa zJ9f6Z)NwwPYB_s;2x3h!&766qj!Xm5K!i_~?IC%kv5Z&Nivt*|1ArIy(B_=z68-V6D5Ra>*tJBcazu z)F%96DEw2o2F;TXpWfn0!LaI6+#l78>}psmSq`!ow8P`^hX(XRH#SB${v_V;?E>m` zp~k3hG9-xIgf~bvYT1szQhq>Ayt(IeQ?>%Q-^IH?21L62_zcu+-%~542_a`dui@O98^W8?4uK7kN@AUIU26;>W>Df zCyFO0Nh#@<`g|5DD+|N-3&nr5pXkA5=gXmp)o+Z@g7aK5@#d;gmok(k$&$nhu_hk- zR98QkVp@vGv;)UdvTa(ns~5u_fNa++(`?E6r#3uG(M4t&d#oeon)9Wa@P-&bCSiU2RzWmVUtkc1@vdD^fh}@$Se7O05uUQr#=xe0# z-!ntEAtZ2jRda!3=W;Tnb+Yq>f`rra_EL9-+_RevyrNPjEQQtAZnXXn-4FE@YIYVB zS$DaYGuTlM92L0^nwc|9=N=ijSGc}Vy`zw$xjHQ$;jUv<~ytZX&Wr1Gju zH8l`XB$hav$|#dzY{5%LG1cWa&g+Ct9*brT`u0FDysE_Sb7l`k(?*%e9VI5<-h~j$ z70(PM&u+ZyMU8M3k?cOnG{B0AJ1aJ3NNbI5?`aLXQtbNiyoV2LEKt5W9!nt;jN=8% zyB4p+_@z}u9V&{0w9>*pUQ`;5$9)p-N}#>sjPfXZJLlJ~?H5ZDRqmuh`YBZQcPHzx z#DY~`dv~ZrI@%^nt)dX5KJi3ea zHEYd*j3GqL>UJB~q`7xxMP*lZraUNe^$1Nd8I3??2i`tQ(uIYqm_(^JaYSXyL^&a< z1)vLut%p1yv~GUIg4EuFIp^Oy#9|mM%rjjZgBci}YK>h1C|nW^!JY2j#Ea>(}2 zx}beuGr&D}vK8T1#&h`*f7JYqVZhcaiWU+)bvvCnstD@_!M5#f&A`oI9rN++Cf)|OtH5LTZwu&4r zrm0Y`WTy$v*)i-w#~{CJJa74oUqL+Vf=ZZ2a1oXymfpNVjK+qT$!?D$oY5Qw1fpEvu}qCZZW8~RhgU7MqBQcHifI{oxPNKU20 zrvv7tmgs|P7x;By7wbl`cjaE?T9pct=GmtbU>8#;y+GBdzU+8~!|95Z<78Q` zg?WlDMee2)$Mca2u@GqTe}&`Xwoaka(T!*{`eM{L%3)QvNTH0|%X5z}|5Ow~b`~L# zpyljdfGEhWf~e>=8{~)~6$t2g$k3?!f?3euf#x$AtaYj6-e#v0W4Zlrp-=be&L41Z z`rDG-nqRTetm*6aL>ZN(Ve;V+KyF=pSYXxLrLzhCtG~)D%(D-Y9l_9Cwqxfc%e8YK zVoQ52bjLT~%JqcLHD-y$-ysUIn1kYHgw`WUuWh?7@l}G8qx4ARG9mgPA-Xd;wL7z* zU_2;U5?|mdGpInQz;ao4t5S*(OX?^RyS9lc)XpU=$61_I)gm;R03qO0Mpt-1E|cC! zsXvjO+b{MomEjH!(pVSaH8nNB-_wa`jY;YLE_TYIENrIX8iQeB{&!{zLF}jsueg-7 zA&DNqSy|on6Dd>z<%qBnEGL7gvU1(IqMCC04}=)IBu61Wy3jTl)C(e5oJYSMJ95%x zSnzJxi|TBil7R|^mc-_=gsG-l#MHQF^nY(osOUzU5_+q2jxN5!^;p;5Zp|2oSh09n z0Ck3vUfV_$MWp1oC3^=}QKvm6sfQJjY8y3_32neW^2?;{F%mKc+!DAtwL`TS*2mP7 zr>2cK-_xQjmxN3tZ_l#zUjJj`tjlEkA)GMNV-c}@35J<7V=o8|F5o!dXKNh@Q#kr2 zS4W9#_k_jyX`%7puJFa9krjjJ3rSkkw%X#1S1DR%UJuY}ZSxS2lR>9IKHah)xSx$a zkyV5CZZf--p-T%E#}_oSL$O`*82v12*`0E=F~6ia--UzjIwct5*ZD&QxR$^+-!@MQ z%#ilcN_eg@vCX$NkSZ*MrSUGQ5(G@7kfe&%-d4Xp<7s*xn?c^)*x)`Hr~g|zM0dG# z9NXj@@Y;lP?|T5U_6mGCsH1c#A^YpKGTz;%2Ru`5&L`ixffG&IHqnor9Q-MT&7aKM*Sd<+Nm^<}3o#CK$9 z@W1shXg)jbZiKwC9B!|gAsC1HE~dtbi)x}F2nxAIn3 zMpr)^>$GPweuRk)Fp`deOqrMqjmer!i64U|6X&Se0?m%kKN}!9igN9?Wtq4{PsJ{^ z>j#W*BIspM3E){cU+qW8-jb^N}X{ zLP1oCF@%HEv5`c5bE6B0Lbj>-RpC789u*rNN9c z2;NAaqdF>vp|=?u*n>)Cc%{|mkmQrVi(1<2^>00tdDkARXFABq2kcrQz^cJQPnH~I zvJ}6a*fpegO@uH#HC6CFpJiJa9w80DNmd}ig%AM1S7c!Q(XHJvO$HT8t3x%6O3`}& zZgEbsxjXJaJmhv+l<>QN^C{pB3q10N#Rnn$zy@Uz1Jn?;WhFdtAJ}O1?I`!ofOX?z z{H9;T-)&1D5O>n+mnNV!-~Qsx0xP9K?M)zb{fC{ve6Jm}S!Gxkzo`(%YJ5$>KYQ8~ zdVAJ8rm{Qp-5D_@AmFP6Aa4|GY7ziY7d-y`uvL1l$L|6a&9bDE@GbYYP0%-kN*g~o zy=06LRbOc__|sTAbQ!Qx5NVeX7`uLhq#I+`IDf44CCe5 z1W4N)1(L_j5C+JK8FMi?MtL5=oq$7W;!F5a= zocsR;?ZPF&CioY<8}Uue9*zNsipz|M3LX~c)`SGBZ~t;%r}t@GvI_+lF_n(y2CI>+^IBtG9qsMX z+H}a9Yqg003Vtej@3wM%;`QNgpWnq8o2|@&1I$>T$N-_&D4>V^IT{?p@x-R$#{7{( zzg*CR1HIs`_oZTQ@(y?(>*bTFHMv|2T4U-8=dN3B#Qd%H4gOJRBs5je6zS<#SVt~37xWo)3Gub(6TpZfB^Z`mr`E2yi3ov5{__P zfYPg&kaG^$KBCQiCSw`?;TLpF#MWPOb^)miT5S$;ro1)0`zziUKPL31Fe+Mh>w`Zh zh2L%3=myQv8)of9#2RL@I6c z{BskA$vg6_|`p7UL3zUH*Moz_C|e4;Wo>E<1qi3$DHa zWFT%+xAp5cCxqbyV&La_^eE%(|7VnVVLGVgI3?hli}eN-XOeV)7ufWPD<)@rvVIlP zcuGM?e@?&d&HwDurbD4WwNQ+1N1tmx2DmV>7)SoinH&eWFpD|n@!wBwTXg#e)87Yu zhP@^9!h*su9xj{NoejsUb!L)XKCdHwXg4#;o@6AOwDU@};2 zJcgB4((&?EJAAVh1x(ZURDW#J>3zRO{yyw8Lm>`UqGozpTH47-1`P!=b^uO)qZWq# z)|ZcN^toA1Ii|>#mhm>rqkKEcLX4jMm>7T;U}tAei-Y$CP%`a*8y^7SM)QEcTL@Jn z8TKvlwFc6P=Pm-ZOfhh{%W^ZQfu!%4tq zzMx-#Gp78@{LUzicbhAtiv5`r2Fck@zpGRH85K(3W2YnIJi4fFH)*7NXxG zegJcQ1m_c*uN!|dAM8oHH|X0&w&>bCI%O8%{*>Q1Zm${xK+9RU$3ab&M+imrqgz1| z7~JCz1h<|`_FtQltPuoMf2|;vVFKS>1lB@`V~^dzcfGd9H5pmZn6YNV07Z!*TP;<6 zWD}sgx@3f_?DWF=D%oyBJ@NhBGMLDfoR1t7!eT*e$>22o_`5oy&+ByYinwo$9RytcVM7kpP*Xx zh`~PTYG5x@5zejKE-hd=xk(Rg+17h6AIb%dhZM;@3H#&(^z zz1f+2ey}6S^Xy5-^h z2tvX5f0SL~##zqhHHDYFE^Ize{D>QP@0+8mtLsAf#1-a+*FxY;fJ;W8t9(Po&wJ39 zWE2Egk!!Df4%w1Cn?LE;Wq6F^<^MSgFV5ioZe*>8v#KWbZEIB#+SOYhA&V8}1qFc^ z=B%}T=BBgEF98DUm43Ep^RPCj#f&w5)^+k8g8F9qPzfvjeK+3+veDg1Z}&Eq_WKxi z@uT|qx&3)AUI_DoiOc_OA!-Wsm;#Ubrrp-g-+K0sAL=c3PKu9rl$9vU3xHSRfLwBw z`sIP*8V8y*A#u#dcvipro>|V!GWS8(A)i(m38IgIKpRhr+Gd1O!bV57ZmiDRe|({^ zHPKz+2SJPze|bxVVy|rWM>2)^e!gC zsn41RLkMx2z2lf=r8xN*R-+dWfLejw#xv#o{;|@8SGcbAOg$XdSc=-|G1K&0`usb!nS3{ zT^mh3oUZVY^Z1~*U+a364D>cricxbnQlpvy9#Ec~p(22r3E>oNy*lQ{Z>NL$dZP0} zc%@e(pI1qsnJ9U2;9iGAsSF~J+SF|%HI^eeXcSuFvRz)Gvn(qd~jf~vq?&fMcYc-8D7oKOX*#(1;Ho@+)`NzWolDi zG})H{o3GVbl5!XC-laeG`)GJI@!Ic!j5lpToePt?(n`WlFEqMI-gqu z<@c4c@yJ@@4b|4UzbF0=W7i!|_5b}#lvOFS2&Ih77Rqc&8KI1s{w|u^z$FINcFzG>MwV3i$g$E%&#t-^9 zY;!qMByIH3&N$0>hr<&=er`03tuEj8CVbvvJS|qrlHtodXsbS77_GY3g9q)(hsOgl zp6%laR_?z9+b3ntt%R%ggbTVwzc}R${l5+Rb7t<9cUL^n#Iq3N{6=LiY1m;EQ8}mN^#fU?B9uYRp%KN=fBwSF62)T08 zT#rwqQ@h0AgSojL@W1xN!=%=q625OUGRn%aK#cmiHX8k@W8*(~WSkhjL(y<}9{>=> zs88|jCWg#B1!;@x8Q9##Pd4$X5kYNCSAp+77h=xX;>~M36))-s@u8t zV8wwdr@WZHQjaGJnpF|HECU`Lt?zM$dFjzJKJUIh7=Syhw-4Pf;(?GdZ?{CwE?> zUud)QQ>?fCABLwmj!O(&)lu^dp@S5_RAAK*R?vmpK4Qa;w<1G7RrW^u*wZBYWjJ6m^ zHU#jkhQ+ZziYt~#@{^0M6!(OV={_!{Pj~l?B3sG6`?wLwx6aL)g2IWWpxLtOAwz6s zJpZ|L&m#TEk0~xQp%S_tJ4S--&OmwBUgmM5rV&a1k<@V8L3>^6KK_|fIl##tFbg-H z-QwWQ^>)T_)U_smKuoc3U!ZYz!#(FMP&9@j+ch=tCl>_Y4AjyX#e1<0XXkUH0AZF# zaEd!CGgAJxz*+Ys=j2G7S@1eqbob^%O(uDR@k{Bv8m(p7wov9cZl_)JqtH9SjCP;z zoa{lv;WKx<%*Q|EUIQe@K_nE;h#)5)^)e$EJ@o@1kP6s8{DqGyzf77w;$QN?_vHFVuOv zSSWh*cEOa0$XihAd1d`hf|Fh8Q-^=deG=|3MleF5!(;Sion`6i9B#gGtj314Dndqn z!TZfbs!BFI)z#kqwS>cd|97EAA^M)w%AZlgOm1CK1HyfB5}n=VIx-I>Sq7EAT=!03 zJI+=T)uI&2-|5w3sr}VQ5b|6JG8~LnQ#|E|vcwo1h+UqN5s>H<40|&<=sQ*|bAzw5 zw7_l5I{Wtehl5?MKQ~w^qnW5r}?oVz<3m=&41WIUBQh0DjLYZF_J?t;IxpprB)ns%=`F!@~8Jbw;HH@BmR%% zFtWSf4p^w5!hm>`OgzxIG3BWo*e)HrKB@81ah&hon`tW@CT7|FO1=n-=3Stl0&hd( zhfNNE9dzN_S?uzxzF{FhjQgcl#v#SUKH@_u*>u3w*&z1ykGfO1{vsl4@0*v0 z|I&FVqR#6*{qgYqo{@XxA4b=G$<3epcoKCWW!o;{PYca`uXYzbk_A_d>z=JVeq?e& zGD9mvqCBH}pSmUSz`n@?RQpI}pypq+!$(s+rn>SZGb0UmP4WzH#b#+E=?x`Dam#RjRrCeK8|A;X*7bDy z9P@{vp`pu4`#&dp^Hvp&J08>(EtA1r@b4Ia}8qcqiPlp|*AL!`SG&O5kAUg^U2pSo?wU-S4Fb1MEA* z**DxzQVuU8a_F61HVx<2U-{dFTZ7l4e9ZArWu%lP@qYq`Bs-HmNftGW)NXxg42YyAQJb(xvUxr`T9K6H0GU~6;4(BD4ZF0l$Lh^A4gHq z`w=axusG^Xe9~?^H~fg2$i+lHguW%@-QzpC^hn5YXD5IT-4|zDIW}H@0#*2HEK6_O z3T~z3TDy;Z#5m58-S2A1@3Wep)x!m6`_$aOu+02ULi4o*YYL@xfA{f*i}*x#eqDO$ z6@Jtw0ImOk!W{yA14(*FtSRHj?7*9#vWHZzit^4~dvB%mwN+IqrKhJ~IQczh)NTEv z`IFymhZ7pqxdmpo)fH#<8*5{>of7!jj<4@Sz>tKD*zI15l2OtHd&$P@O+6cSHT^n~ zsv%sl`(4KFTycHwZQQ4KvlestZ!CZDPN2rL^_%s#9S&0EP#?4Mhze!6^K%yI|Cx(g zgLlItp=1CIA+2!|0Ui=MZ(c6>^CF+fBf3fGU2y-7W$B%iR0D2)rTxCP_wRQmDt`&W z@*g!2=MSw?6eKx{f7y=0Zsc^vLR#5swI=#Jww#DR#-be_K*og^VSi|mnUmvER(9w6 zx0mmHVT4kxO7kA#=A3Y3elducaC9+_;i3-UadxT!wiw?<(3 z%_vuH)p{fX9=mOiwp7B!h=;Tl7GgY3C>?(^T8qb}t=sp-~G zejW9o$-5y{^GAep<+RrCqT_HZx@$G^E_nBQyh64C%Ja0xI2XQ!8{Yx|wd0$R=6Gj7 zzvW(gZyUGHWGjxmA%IeI(~Du3NQEo3tuaSz-E~}z3osVz1_^89o^cTqn#;@q@l%fM zuDeEVGS^twcWsNDH}s4iRW^Nv>V|QGIdA&IaU{!@RGiJi_gsHQr?~B)4&H zDEu-{qd>L8j^Uvp-@Z#OS=C3LBnS7D6g?duK%Z%XWKc80R<&MO&r8SgqU)|+O8D>F z>1!Wt!?JAnca)O7^2)D~mY}}HIeX)nxfdoTuCr$h9oQm5zp?z*!{5yJZ(5e#ud+mT!x-@BR`$315$dV8{>z^oQL}BNYoq?fJ8#X-puwXI_UpVF^<#cv|=k! zZu!7eVl_HcBMvcnMT(BwNecVDH`ixNQ)<`jq(?VLMlNqRnkWQc|Ka8W-B#Z%6JM7`Q}bSwF0RWX5GwjwRZ1BRnIT;0ll z6yBcDu&%R1@9P4%B(vIls0b&@v!4w20%+`5Cy#0czCjHD*smQ0(g@;nTcS&Izq%hx z#}adhQ1ceZ53U{WiXW8<(9aJh(_~zEJi!}DwNa|B5}EkXbt2o*dkrxf?Y3>zj;EGJ z-~E#et4}P9e@u0IMEbR>Fk>83G4);JQ3EG8#tvp8h!1MJx6W^1P3DiXx797?-<-NEM>2rVD;9>wYefBd{{rj8q&Y%i?to2`^-X{~n%2CS}(0 zNRQlCNmCcL2unN7M%#Hcx=>(SOG=qR)zPrGC|Na;1`$Oe{eKku19j?c@bWUQO*Wg} zqxX|DIgkv2btJrCo|RuLu7)i^1(1fEFPm2Ri14nTr#S`uDUG@cFpyq8lOkfQuo6Ilp7C5&A@l0`y~B!jHnz+{Z*=BybEA)ULr8FPe=}FEg8*L$95WhO&GDsv3(rOp)mKE zUYb5FlE&NrOCl5Zx_tM1C?IMj_ZjAN*k&y3qBV{b-5x9k6I(SX`|Bycx;FHIcMvTmZf8jhd!cLI3L%j~ zqY_`ion*S0QsES_#_Qz$8U0hD*cooO3ccDoP`hukoNE)-~PbHtMfQOD_wY80{3ll1o5NPfaa>z2ibHKJW zf6bwNPl$0f{5zzZM$=#kT7d;{-0LZJtSjr!ua{^Fs%^zh_%YK@-) z1y`8Iq~!CJwbG|PpcU`Q+ab!&MGLKgNNy^!R8f6SX+n88rv!BW@7`QbiP7028S>_i zrDyf7CTIwUnt1L%ysxj=B_w82ti+EaslyiOEg^*5u@d9?c`s&;AJZA4<*DD@L(83= zq!PPalEi%{ipQVXW2Tf6gjyX_@0zY6e-`xsm;};IPtAF@lL#mfM^9b^`XKeiNgX;C za0mg3*P=g<9GUm0avcAWYim^h{rh(gmw0!UQkQYThKh-Db2Fx%r!$pD9zL%BYV}?H z!xn8fiednwq}KlwpV?72$rpfua9F59i~qi0px+HtRiJY<#XCwNpC*el? zu2I%6ucax!lp}O|Cf)g}f!ZV76CIX257)5hr+K<@uRFENKy4T9X&pUTzwP7sz>+7| zSh}JTe!hJ*oT`&&S&foc3F-G#%Kk?isXyf45|JV^BVb za?_qQ)<><(tUnaXfQA*AGPg`}66LH!MiVr^Jf-2>RM2o455 zHFC%61sm=4pKFN8R1oqWg=%5fu0gR!+lZig8plx-1B^FheKfZulMuqZ+ywK z$JacT-Jcj6!SAFA75(v!RpKwHB#V1OHe#R=|9T6@_34}DPYyh{#unL0AqpN6i!pcO zxbEj99X^r1Z~hC#<%)Wd18))vGA7TB(0^1ZFmv5fFsbifeRsurBP1i3P?rTCVoZ)m zb7&Yojn{Dh`1XU%H4=AR)=PHIdw2myWq{4-No?+7-iLHatAG~ z0(D0?hYyzptT&<{Bo&PW!vD`T>HvQRts?-5~`px}; zpH0%3{W1j0F3qP_W{hI_!}9^;$CJpg*DT9b!Xt{&+i#|B@=O0pC1JAUBV-||&Ib2P zRGZU=CHmy=bP1g7(0h^_TNNj6C3aE! zAJIrYWE7F4gy#pY{~g;e1ygc$23wo{8))P`xDZW_9uh^~?>f)p`f zULDP*Vf@wp?O2vQR)CC)Cm?x<`TfwDKq?M_-pp3ljd1$+@7glVsjaq4|GQr9+wYBy z5`3RU{HfpQ?4BBz7xK>MzArYD$g}fQtMTF^8apP`E1oCcG|nHxKs*A}C?w>9@0mFF z$-2eO3@tbSPsa*RBb;kfKtQJB409y)ALVZGIa}ZFKgE3Cb>wG5ssi_vaY5GbYi&I* zM&<)YZFIs_k_N=W+i7k8yM$*{l~jap!1_cXOEeoSLf{o$?Ab! zHCz8&nx-y(bpG1zTk^qAt96hO&2d%Yo!%;)J*C!t&|e@T!7oJ=3|;acF$M!?dwNbm9Z%P&HH8(9YL`88e!pHyLS}O%r(j zdtI8yy23+G^Lhu+a(z$cYqy!+;z_hSL?OqOBa-UdBSb@2J=`nd!kt)SXffeiTwf_7n41pLT+4vxzNe)y*wu zxVL$~o&TjjIu3SoeM)z32MAAh%`0`(c%qEYgxzYm-uj262iwvC&}y{70F2q&LAXri zcH+JucvV4x^v%Ce?b>}nZm?x>VG?Q2yl|!4?J_oHg>VG&2|6WO^rWTe$T5jfIy+fS z5_sy;si0S&m;sXyYR=*U zkdCBfZ@4g(WsEqx6SO}`1jRDXiJXFX$*-xAPNOq9B%x%|G{I%~RJL>U07 zmo;Fk(8zwHKq+#>I1_lQ!6ZZ)&sd7A?N+H|%xo`vR z0EJ;DN}5?jY=#%2$t@xgp;O7t&F330h4Lgzu3gj>s@7XV9w)buAM z&o{5ze-m6e?W8QC^#)>=5^&uAhEkEm-60!Ms|3yp}M^&82aX5$r zAHM#f-;fo7|l4Cq?ehOr#p|#EF35cZRkgYcEw>agemL7$vWN1JRm$bo~RroJ%OWwDHr}WvQzW=dJ z=DwOMoai&{=Tmn>GFx_t58TV48w? z1G&(tX~&Sw-M)$g)dS7lpupmqo0~sJIqX>(`im^g;sHE$<5Pv>L|`#dpWop*muM)S z`mM4~}0sDs_X_T?- z;^&{Jmq`$@Cuv7&3<5lH;47s!dP7$}h-BToK+7Yhh86(g4y?*rirGb+B6*fC7$QCQ z;>@sZEK{AZi+tBB5siI1CvMDOdr01dtP6l>&s1IltKHp3kCnshrDnTW6!GEjL7GT9 z6>0a&4>boSG3cloKn@}W#>l0FCS3MNeY(XE&Ij8Pfepaf;&M8QXkwFil1zK(sP3Q| z2@c&IxtU8@MybO;`#hEcOC&AMMNYu&JRWLqgh@_JJ`u%r@;fr53Ruv})~m0{uKJnt zi-($-(4N-$^#0JNDkq8L!5>0^e*c0hCO&8R$x0yC3!zleJj#EAZr-mSfl_~XGsoYv zrlPR^zj$l;b|t?;3S%m*uD@BTNyguCLb}?5()fCctr7bLts=<6PbN){*tH^33HwhL zFA1G6c)bsaU0=TT=3?GC!}dG*nzUX-_K64ri8EC6f^PZU7;$j(fWw!V?1hw#)uS)~uE>pt7dY&+#aghIQ zaNtfM7R!Mvq^T-(RVYTw1!SYP6oA%sN?9mK?%xjNE_cS?e?mMAA|rh|j+iczLn;@x z5Sb6@O!o^Z_MQQtg_Ng*UK}&h9UAGDNIW^hCnS_^S?m*pezp98=B`PlQ0b3m> z-h}JAbZMJz(|S>*)5(1~WLo$mf^!tOy-yT|mhVroenkG>f?p%Un{(Iq6n5os z(I_P?VSf&njS4$gHb7X56rC=ox+Ei_`>@wFkk6gC8sa^MeS_ZWK!J10LKTb~xZ)Mo z#PdwsdxVzW*EQzOQs-t?QdQO>KKdwy9!!i>N9OjOs)TMDvElABM?=n&Snv4ta4Z{n zl}Lg-#3R{RPA~D z2_1`ld8Y;c~8$I@tn`mVUCmtbQnheP+y+$HB zQIW8tXy{}hUHcfjCeV5U4n(c+6>43g$6>mbzbv6;K=G+gFc+^s?U+uD^w#yW7H;m` zhyAH%x%nr0HHauSSq@_6?U=go0KGp+jj*Uz+b8bLRrM%^&<{$`arJxIrBt=EN8a$_ zuPQ}W=gZ$#5q&gwHT_+^SZ(D$1YUjilCc=UMvH9G-YhV_3GSQ2g`9Mj`lsu+jXjhR3q1~5nQePE zc8?{x?Pf4hHOPAwAJoI63!~kb-#lwFb?GwaORAmRreCaCFhp$f6On`zY2NpMG07Fb0^Ou(u&jyec;MDpK;;= zqIQ(#Vf@uYSqd!LS)3af&h73mlKhZ+sY7o!&BU{itI{ElXm9Ut94tR#Hl07Xm#7Vc zPa#_5ceJqOc%j)Ek{(bZ(O~iNwVz+HFc!k|W*5_6#BbgpO{0DBVn4G$z?nn4&U;)w zcu{bDc}wGFAEvXnPpZ&v6y)Q3c>4Mxe#mO(?2WCrig5c_wr{`qc>PJ0IQ!wP_s{PN zxO|Xh@~m~PLuOU>wnxn1uLJq%rKhMqjB+ihxERWX(uJ~{T(Zm1=1GOrrr z;!mdd+y@Cd&l9W1`izENWr}o#QE%*YY6{7?_3o?mgsn{H7Hub)@*exBZ438C#@JMI z6N~%~&_?sEh=>T4wknC?_@VsSp_z-2;Qb=cb135vW-6lL717Ckg*gc;atGf+#mm%~ zrTy(vcoKVNetrvI)>j_k^%X`vCAwsyjDj&NX7NI{X~d;kT;NR5b1bCdfr5^>;2Bi^ z(*>)@;@iD(PqA-Sjt|-#78$-eCy;PP>~Yq(8@ozV(2!z9^x2077vG6A#O`_zlS4~t zq6}+!jx0Rv`IO>iLR^^#b(4LaZY|Va_XWe%FXai({WNupMDU7e!8Vo*XJ~af0btRjyd*T$Sp)%HTNF9AA>`SqoR>G$}qbhfIwcD z>U3}&FZ`WX`@&V1#0WjOmg3IwoT%|NV=3XW*;UoE%K97Baydq7n1oM@pul_haU;m2D zn`rNVGagIMz%ukW*LD?o`FDMa#tk6#q3XLEN20eBd{Ua^^_+{;wEhxEO{Nx-z~mc~ zqLw@Abi|sd6f|GR#_O=~vlKHGc_2gmn78Q(kQgLKAQxS)v^u$ingLKKKg4?j zdy_WfIb7z2qw}lww2t0!Af==)vXEE6b*lYt|MzDwNMc<`SCtYE^>l;hbi@7-<2{91 z4aJT%4c1*VY5A68_AALZmL%D^9?zVi?6~!rGktM!JyOF?okb$V3$w^1+v zXe@@P9EgUsERL6K5xV7RF*CJXEf-XaeL=9<`w;6{Ktl&ZO33IuP-)GXEDM)~<^uyU z_>9W)PdxY@$)3YY8A$sxT6hB=BzFMK~;MSiPFTEt#vier;giD!^O64&E5JV~AqOCu_a}@))Z51C(tLY1%t(F|C z_?E`VlJO-IC0Ozr`~}@Skr*ZpFIO0RFp~levTlB-#uA_rGGx@Wvvx_BR+-rKqIk2D zcl@L#>N9)>W@AOiofLk2qh>>3}J7Qp16YT8}uvAPr9;r0|$P=RXe`Td~er#B#IQU z>;1ddEA&KvIQ}2P{A8A(s4)-$vB@p_-=JCw{ zTEC88XuA{~D-w(M$vlQBB+Z+IA&L)lt8%EaI2;)m`p)yVrHG>*w}Hde2KNSv%PlM{ z&X1gKY-qU1xVbTfth5h;+2ci0E)!p8*KOGJ^-h*i=$jRR9w+$AL)i6sc2}Tw-)`Z& z-(Qv{Q(fT^kicXQ7X#ee!Vs&nRjegM_UhwO2Moq-*Vl%;QDi9EA?axI#zEWG;EKb~ zPtPkejE>x!PD)DRIMj9i981wZ2Ek!+ToiZYRGgLvr>m>BHJB$gSD3fvyM-Wg!qD5O zxnnKI!`vg2$5!M%@scb-Ga)~C09Y@4e!w(I$I3{am+@Obk-gEA8&6Fe=NhT^tI4=5 zFCTY^0zvw!i?zDiJ!{$%q@#*7Y|yDZ5ni!3pTlc0w@pSQen9XMnj;~IA}tnJZ9P^6 zk!X){deQ>E>#fGH`((~tk!LNH&l8dp9q6@e3R4~#F)$Yk&#hR6vWw(18O{b5ZI9$H z-XrzeH9<4^b}5DMte8KTtfC>~d3Nm!lXL$WTngFj0W2g+Cb$iVrJonFXmrNA1accH*AfzzQU0b>DKUNTHdzf z;+3G89n!9jV>+H18S*`9;jSE(YO`}un`*KyOT4WoZ?jlHSQ| zi+WQc*AQ!@;C(mIc0o^@1uwg>uW*E>HKTT5^!oH($D<4$CcRO^XHvymnZ*3IS$3#c z=|T;4M^K%yw5u1uQvQ8}z?g^0%Odm7JF4G#dR|-%jNu}) zy-H{6W|I95i!xGnXUV1L`m0sA)g|g)2(kQdFTbWkE=SWXIidOb_Sk8;OE)IDIY8vh`p|u>Rqa%NkYt^uG&t#Ilv;e@7v0Wl=2t zES-M8^PoCgtl%>*x4MK1{+aI1pt_vm+LcaZKZSllbGC%+_B*V7o0#<+4UmxTwc+?Z z#HAo+!!Da9U+*jDFcE@E4jKktn#!l1MWd1FxgtVUC1VU+zBMI7r?wcf^=Py6$Q1nS zJijKWM6pNJeL7vf#A%;#+F3jAF-5zI`LcYcO}2v4p5j%}g05xKy%!r|N22u8e0rt> zy=yeP#u528869{0iSl9hni9UAX<`~3TG5Ob7KwXe*93q~)U-jbEJ;nd6>Vur&+FBs z`tTyHCR1=%wc0~%hPac@wcITmAL(9glaCWSwb$T*=TPBJc1!J=^wc%UY)Rf1w)ad5 zH7ND#7l%ybdTaP{%$FZl@akQeawZZ&IKElxyzY(par;;rq09)RgvFF5;?N%i13OEu ze&Z@_$O%1%Q)LD8J%nY18UvhOFiv$C;T;AWE(CCF*2!q??NJe6b`q5`DV6Ft@mybP zAgD2*?n_g-yOXWy75@pveNU^RC%o!=rqg_Cue)#Q^jgut=fS?rqsFA|Z#A5QOidu^ zl2%R(A4L%&rg{A;|7N)!vugpBP6EV45+F1sR*)%9_O}FOX*_gO@Pz-4hiMs9H?Egx7o~ z!dO%!y`#tMAR}AxnH$E9yuN4Sc2uQq#YwBT`jwNt8;!cdQ<*d%@hV}(QwMYzj6fTh zHD6f*u;P0r&|QCgL)@4O)#H! z<@OlOIaZ_=g_cR11r+m^c@ILIbX>Y&&+Yn>r~&ON+dx0n#0^@b91pFZ*gc(mq_%H4 z-_DW?y^S{9@KQt(3%EA2l8vtJF{@-Rr^tSM%mwP(5reMNDFv^Bg=RjC#Cw=JwKqu4 z8#TF>drhlanT5X%xu#PkO$wuPUOIflh)c1}F8$F0-p1D}uTKxRI*_Tjr9#jbkG z)y!$^G+p-lpml-d=tr(vWa6ds-ju5b@i@{pd=dJH5olj<3G>~E+DhakC-vxPWG-K& zAD^TG#kCY+n&DmQS`X^a=VqAKC1zWzEt*X$>Abc_H6kQ9 zg=i$^a3pK(Die@ALp$QtM?vAI)D2B=hyb8?#`}lz3-hZ^pA z-pqB8x~Zr6nTxaPzv%Sy6mh>E4Lf2w5eudnPj>ISBQ;^DiQOtzg5y93@jtX$a& zVI)}&Sd_SRzum?Qrx||}tzsA}djqd47uGZ*v+)3`=K&mTO*V3N?sv*V+oovV2y45? zNS^u5ZaNRGR}mF{{&%jKmh1~UFUjKZkEQlPo_yN)LmPi#Cv066*o)a z+qkgP8x=I9AMnrUPkXTBTpxVh@o>Tac$kXTRI+E0hg1GCFc9YDKxAD-ho!M4&qd?# zg)GvD&Pm+l<9;EMyN*3LqK+)(%ejmA1Kf|OHyKfM{T})1gg1!SBVL7W`YGsidOojT zclfnL0pyS3kdmosvINbf-=#EW1%|!yD4^^nAp>lHCee%d)w~IH6cl(~5pOxY6D%du zW0J~o%-!2pmTo~-r(>r${xiz&+p{}q&d-N8o4D+_i~?_m8m6?eGS{4_%Qnwsy zb>K%WO%y?dG<$4B4{A3alaAs} zO5T96aGX%iKq|!voo2dxeXV8}E;PV~AA|>Ix@8bUWu%XXaia`fi2r$D=pmP!sNdM_ z%glb@@BWB2mG)&x5u9P}+ae}yB4UZSS637H0#^!?lGzY`gUPbGn?+$KMz^%*!>$~5 z_`r)joJrWGspGiks^lmTm!L#_qFqlC3X&upw!c~<((z)~`>fl&EB}>N6$v{-jr@fm zefMe3p35Z75Q>rhU?~M;6~x38@vK3vpCbb?)G+F*YTF*Tj%wu(wCZh$F_jO1sc&Pf zGkqSn^X_wF>7$6-0CSY!G{ekX^sulG1T`|V@xrC9x{Mk+BVQ@xuw7Epo&gxq?d)gV ztD?o6$@FAha+FC434U!>DLirs80yPT8JZ!5yKUuNU(7sZp=*;ZTAc-`s zXs6iRSf7xP6OHv{b2XV`-C^Ch<(TfBy-2(q0tm19lX9=VtT`x5;--W#B;R@-v>F;m zcu8JX+Y5)>B)%wLWNa(wImB(*JM%)^e`d1lBE!T+J z+g1yN3f>3I+q#P`I|Zly5)nRs*2DCb+lR)28#e++dsLx>}KLD5N@bZl1RwzdmVS`!2IvZb#T zj;0CrTr4i1jqa46k5ZJb{#vqZ^mwbZ6|-8$=R+Fqn;J)FpT~$4ewe0ss!WX7*A*g! z5L=mD2tmsYiHZUDm`o)(kU1fsfLAEIhr;r+Fk|D%quTC*BISkIDQki}Znkgj8MRbR z(T`_&qE4^iRu6f~I}cFn#~&D;#c}TRf~&s^2<>HFWhj z^oe`+mXYN>K3kD)o|vVg9iA~}mg}mYeX=!U!Kv}Gzf84JOlM{b6MuT?*>M5%oXt0UA zEI6aUZ)M(Jpw<)O$*Crka#g?gQDWEZ)hd7WIWNaoZVf#t4Zcy9kdN_iNH5a*FfHUH zV92&_`S$Onc>xW?rN+NrfmmK#=<6n;YXj_}89}h6@!qovHwpC8qxw-~u5#jA+9B}r zvZlmabCo}Mmb_rx9MTcgGaB5Lo+4#^@uUrVcm^YDNw?XuLc!_bL#*?&pf)o9yu(}P z_FPY5f(l;tGZy6FtW)bH)Vx6jE5xN^{N$^=8lHMmL}h}*=SjmA&3m&vNtmZY(TrNC_0z7BD>6Lt*N#Y}GRCD_gQjXsPWzq={Ad<8`U(Q#zYhr1Xc z)p0xN0d_;wkqqD7)*Yla;>s#4;$#_Oi?|ryMHglqysTFrSQRjvs_1zkqkqOVZa&sW zty?0&t#Q0b@T#v|X!+Z#@$yAJDmuYH`zXx=VI@X^f`*kf)`9!dmW8VkT_(hCUvFS{ zj0n2|8PvIv53< zmAPYTVXHU|Zw^m(bkx1;BSCiJAG;aN97M38W#Gb@gml^iQPt9gZSBFMgvmY3(?xCxL5}2#!L-yBk_vHGlh_MLWHYA~fWLC0| z0`GL(=gAObe-|)18?i;s6g$d(uxYQZ443sbYl)O73@+Kfb(TSWe z7y&Arf$9&&I$uP!tA1|GEx6{pFg77|#NQ~~^3Yob+dwwvLnhl@0_T-{rOt+Fo3Yv{ zv>xY+X!3l4TkQaSljm8V7?p;DF7GXD?h$?PzvF;{42JF|% z&-2}S8uIdRmcVakis>=4q7&ixs#&XV|NZMsh+D-0N90H|!*i~Ek(bk*M6**s$`Noj z*jlB;R(J>%Cx3h>SrUxm?c@MmjOxS^VR&0=_;rt)m^rqt)yoMXb7;2Lu!jWFj1#cs zXep1io*fCb2#yrj{T%vC&{`3azoCaNi!8xUX2CIzIU{%X#Bi&=zLvJOxmi1kO`evA+)l zV^F|I8-kcLpc`n;arm$`hGhM+e2~6nAokPy*GCXelN)vwYQ7W608j9%n(~g)3PsEb zgdX7FistZ|t+w4U>L6n$gxT5@51|d1poIpoMW(F6bJAsEzgRxi-zVE3mQ}0k(0n1* zWxQ5H1L?>-`zTuy6A^Tpk3fd)Im)^`j0lr$q}~Ne@VnYv;Z!UI z`}gai1jdrgq1Da79%=%=jU<7w+LuV%PLigJC?Lz34au$`S<}k9uOGuf(nVrl z{66$=OuUd2_`a{Mt}YJJ^j9n`6FmKbGB6#*f;dwpHbIsDV#uw5J`N{rZ!ZTDD!9<} zfAct!{zr-zoeF=F90P%p93bwuLM&G2<`byd03M+CYLB`_%D6@w0u+e@X}1`+(6)IY z!udUG%cs`+A6Lrb>mNZ(x2F>^_tU`|oj%f!38;uzIDHrA&KIkU9uU*e za~&YcWRGu$xq-STKfhcFg|LJZ@+Mofo84yz$3G-xc6jyyPJ3jEt~)ek_-@ZXHE6^H zB3aVAvg+O{kFLJ6*f-fU(5x>fAQ1b8@_YaopsQ++(W?p{xacy6^JiZ-TID2!^>zj6 z>mhX&T*2vlB$1h9Mo1rOf3Eo(^GwQNvdZM~diDOSdx#T%;Mx4ULGpT7-8qjj-D>u< zxQk`+f0hg7#5;d4*UQ-P{vJuIBN%PXz_MxJ&eK2U;r{hhyed>pM*q?F``VUsxcZaw ztp6otq!=CB@EcxhTV+L8EqpmEoB(}ZG=5*>{zAgxxbJYtL4sD2|Mj4=41jAfOy0~U zer~WKJctYbkMRtwigS{!jo*hmRvi#LYWJQM9gNEm zYJJ37G?m*Ty@Xy@NzV=}D4ilzzXQP_y>>*2p-2@{re3)L_`xl3Bomo2FCpI6`w0u< z6C%K8-83`t6w5sjZ3*--gnDu$N}wUuWOH0<5Gu8kkMxAv6`x8L9Mjd-ZVb%4g`K3P zF1Q0QL{UW=n@d(JIcDznspU3ST1@n1i=wSgj zr#1;Qs-FSwI@7$Vl;kj1bC*6`kg>*I(u3-CK+`(L_4c92ARK8AtSPWJO`P=nUQ%4QTTM%nZz67xA(KAiO4wcEm71XFJ?jR<@Lq2i zwJj|l5k=ibLKQ-rX&26Q|3#YvG_GyyI9|?%+EpE{^B3b9kBZ>unO?CQND=k9x zhP?eq5wo?l1L@_5Vi33UrU)iKkP%ORBEmS6caY`0<$AfCGF`<- zE3XnzM`oI~ZIH>__Iq)@VDYWf0E`p_!5gv;DxWObC9n;{C^Ud0<-O@9B@xP3%O6B| z@#aZ+88hvhZ-~D5VZYljQXEHxX}6+}NC~c0REe04d3m zPvCjN93v69K%jW!^QYttjH0hlOgE>6bcqh~C`%qr z(R)nt;{*@|eKq!9fTk$zBHj|?zs^6O-*uMo%jdD8c%R>TbQ(?mRP1fzdSuF2gK4eR zk_EUDR$}eeuRVSbnPe3xo=WOYu;hSX`}af#x)NM81?2jW#>(S7H%58*pT+$kAs0&^ zJi(w@`OV+tCH+4Smb$3)wcq7PG);q`&)UigQj72BZFq)s)1JeazQkBzg?YS@bj?&G zbKcAB4p075X1FgTG#?0s2RwTt_Ahl#DAVB8@kq%}ErR&bf9q_(?~he1LeX**VaU>3 z5OYA$-;sQP~LI(%pQkL&Hc2O?Om?`ZVS=>iZt zugvXZ>CpE#v0-}okJ=yfm|J11U|@0H`1eAvze3<>Cmssp-D+=dmew?dxq^(@`&6-m z6*&gCk}J12W;H4Zl_tsAOYwKWt0VFEyzKjBSV1v(XCP_Aff zT$gZN@5Q`iVF$%9Y>jvLfgYKY-ztc7#QubSYyYbe)yR}NUzh= zHeG~HIneV>D&J2PQz;_55eb(a()}Mf!B1!Lh|@7s$ee$!hdquNN_=vH#vYI|>HDo< z9mUU@iT=F@61J6MK*CP0qoo%ZSkNhB$p25K205hBF7$CVBo$?5TpHQi7H9Ku=wOo{ zwg~WwIC>>|8NL`!KEpYeM3n zw}XS^NiGh(BBTGf~pslf<{LtOr1^ znVr58uaS;8_R=ZN2CgSk|1dq{U?(=UL-$<&`XNex_^@6W34xD%poePPsT|8&*j{Jg zx+ND(Dv>%?B>P)pbt#6Wz$6r1)ja_|2eh>6X49RXq&RNK@L$N` z8pRlgcx_RBVTqT$n1>inAf0i;srNDK|NnFQH4X5{ob07h$4B0S9sO8MNvqu=8Z!gH z=zFb-`*~s2i_sMT+<*!Zrz}X~?kvk^I_zMer|?r?^n~f&RbeI4pT8y`ouvDq`+#G! z5S;P&SGCxQ&*<$&K1c`xgTxNs93c^JB#&77zw3n|Cikw@5Us3$cPT-sAld?(NwSTc=0>LxP+>;;B@7hMd zABlxS{j(DL#pdm@rcA;o5^Me4P>NpKU>R)ufzG+XV)8iyN!M&(6AxklzU|F z6{$C%G+xIDj=;LSl$ih8;TQtnsx;X;J2BWOd7bnq@zRuT-BJ`-G{ z*GOuiYSwz8+xqo^D)A@>y9d8g$e@Py@Wcy}j@#?^0@LDKG;2tLJ%1b}JilHGVhBU= z1)oVyvpyT)6jo2t)sbF*gi>w1c*yF!%?63qZ-?}A)XjtH4C%gX9@0gFrRH~f=)LYE zwCMjzC1=Mv2fE6DRr9eK85+RC|!~V$y7f6%C5^xtPw|SW{LEgmA)50 zx#0p>DP6>50B7_N&SP7#m9@8g)DVW8 z*0B1q-keCX4V&0rcBH_+$Zcmxuy7p^d=aWrMJJb$oId{^8_41;HEQMV{u)hbYq*Aa znRoDtcqDhdRDjeIq~~ll4lSPz$DZD9r(~0M%{=1x3pdYF6<>j+prErN*}ryHgud{{ zaH?zDVN~2eAH?gne~?sME}DwJ1)lU@HVFPCq@r|Q#AyBt8>lOAQqv+M?L|$-5q=oS z^|vJ5 zUv`9Xv`CQjy{@PnrZ_qg_*}k=Rq^VzanWDiyBkXG4#Yu2DH*mW|MV`M5yTj$$~5v- zo3GU<+W%TA4yrWQdn2{(J_ddTRj>zf!S`pjuM%63J=MlREN3RKbv7^Rj^*AXlCSYA zw^G&=Zu|9^FC;984+CRt;QK~@%)&wmfOjGW0%KXF1?a7<#tt+e?zK z5LO}VCpTmaKvYLLOBo9}o%-EJcfp8s|R7?^vf@=uip-hmnV@aA{RlaM&*r@TGt?9k2BxX|KW~w z(w{k4>4#J^A)rP%VO>f(me;a#rvKdKaCdxJb0BF4(>=cjJFejWkFhs_N-}N#$7h_H z7T+0LEL%(~E7MXlb4x>KnpRUwbIA?Uaw9Y~cY&dK+gvM4&5g>`%!N$F1qCY=cXGu* z#atjoBtbDi;CItZX|cWY2Q~fl#_)!(W4OfiS`imB^-s&w%-Mo@$=2t)(YyC5bNTH7$kOWRYSyGi z7D^)MRTX!t{uEKoSQO9H-INi%J~Gn(>aY3BuErf31|0C&@LjOnzxIbZ`lG_~{JIaI za+xXg`R!qWd7)GIhvApS?NOAD$!oRvi+_WTt@H+A z`YmrJuf+zlVNXEFudnZXb8pQQ@^3Skysxu=I(`HEl82fMU2I-@8YkYd1xoYbtUse=qFsQd$*3P%NYP! zb7~2TkgV%6#e$|V%3}86KNrSp{YNlV4+m6$WKwC9vO&9Tx>q&;I@5YhZDsx;1C!5- zfrc)h`tj@5`5JnCxjn$A26(9niD2wO0OWa5p>$0n7Jv7u#>y zU0-f3)pA%yCj~_e9h9K8fcP<%n5y-AALuzB`4wb9#P(fZGM5h)pjl%o=Zi)7mk)rS z3hqiR(bUGQH1bi(V&PCvnFs^l;rFiy@3%q9rIo*-&tC$HMHU4>qL)~hC|KI-TFxm+U3QwS4NNGhJwp@CSM2F<0K#2o9{Cr;Lo$i1%NFhAi4te=f@>5|K<^ zV3OOaW5%dnyZ9;_(!rvZ3zf61o=k>v3n9Ihjp=Mc^z;0GWU6bI4vB{5?PcT6CJpR$GLDZgo-wEfnDFnG2UKhPA2$Oa z&L_R~T{V4ueO>SB#WmtxKW6eqG{^Td6(iqj0TlhJQq4mdt31+p+20<>9S_(rm98&F z{!bTavDOGg{pBEH5bTbfOIu@ndAQC?^q!VuZJTimRYuF&zcd-R{{}3}u`8vPivX`r24zEXU9l_v+3W`AJHMR!y(H<# zwg~M&v+XIBs-Adt*CE#`JI#l;f@OM$dw+EY4(ZsnTUTHEI={_Tfa29iA2&UF>PsDD zhaLhC3h;hxHPBDNhjhi%CCRxuoVfNimw(6sq$J4q-=4O{-4AycJUjWvi|0VF=QmOK z-WTCJJnlDW_-1TC-SNE7n_%%iG*|e}YXy8FwI(fT@xaW^RhnWv?m-i&)Es`nb9(bt zpVT;0#SZynyS_EdoqWWI`A#Gf9- zkGwtkmx9}$2i8OlKnIzDhMJ#E|7SDleqOFr(RS~pH(5*4?3YyD_r14A>1bi45@Pr1 zw=Feu;0Vi_>z+N0SnU>Ff~m@q3_;7#x?}HSWrmrCijeUfz~gp0@*rw z?Qm5-W07Y7y@^0OgXXjJD*@my-*ky+?$)zPH7V81V=l+nc?goglZ)*!T$#1q-X#$s zIL=HL=5EMGZPLlAfUj0Bw-DiQaAtRSM2S6U@7M5}@*cDq$R(Wd*{>0*L`oIyAeqvA zQnnHBo*0a~_35pHXMYinZ&(y%A(a6AoWauW(p-O>~2J_~|(S~GhR)|Uj z@n(_-li9r?@DQBWp(i{tG@;wBRvwG+OAm?-wyerg<{^Lv0VlQY+43=z;Zds@Y6p}q z2y`KvsZ>okMK4@79YL%WMem_8DeEJYJyn5f_0!wBWFw`-ppIkuvtzr_C_xG;A0icy zDNGQ$LB+k$L;paxwq7m+W@r@JL6!PnQ^c-LR zQg%!3$%(+n&Mt{^cx~Oy*EcTY7bl!IYS%3s&H4>*cZE(!RxRaY>}C zX5(#mYB8iHbK#)>sAc=jg$Tu8pLpE#J!yIEw~M+*Z6BSfPkdDn{+sB9bsViHzzGsd zP}yUG1FbW&sUZW36&j&25BNzQH=L*Y6|v2_M0&)6B6b4#8(zENz@5V_8iVxcxLl(^ ze#z*ll;HK7%`2oILnAw-L;GK}5-NAc2 zkBNNJJ5r2uSb;jW=?9Kh1+-}BG+LB+(0g!k4x1Y1a>FnBuQp+n^=e7`XZG7mBr!8- zLG7Y@6y8Em?9Fs2EanciqFpbptHm$hvi_8KyH_{DikUaa^r7TfmX)q{yolz849pJ2 z&ihM-PVjEwW*{dyt5G@v1YpkY?mWBWOcpF=-O}}E%I?{_?TO9l>bLaFg?Z9% zSXN$pw}Yg8-BMyXuhljhT_1N$nS^MoxY;{C#6YAaq$BgQ8ntPp)H~#|qKWdiJ=lz> zv95dMvKcN**D5L4Z!IM~=mdp_cmPEfwFP&jcIps^49HD;RP~gzp_}#;GXuHNBTl9s zuvk?JH>!L69_riWg)!!mteY7l`WeK8QI|+IDew|7inRK<1=hv45~bROx65Qz&VYr+ z0KocHFg%rDqJ5j7eq6N0`nVjBGsISvskYZ!-uu(QJ+GTy*J0_mIFA3*cw94IxOgW)w=vADRjQoNeRsc6V_w&42wS5<9wp@6-;xaa^Ob_xa}0nJw}~t-kfBv|9$_sOT6h3Wr>Nr4}_4<|c63 zEp>Ali)-y=w)W3ZOGDP)j8aNmK%_~E)^d7})I!zc*FMnpE6fetj!d(y$yF-Rf@K^T z)BF*b&19|TQEz|P^tS-()55t!&>zo-5z57@4(TYKWM^}pK)07Qw1|$yovpdop>R<( zcn>PVz5{+2`WDBIfLJM$UyKu#({ku#xI4#8lLG@@U%nfhbYiS`ZuEGzbo+Gofzm68 zuJG12wehv0+<8<+da^aLb^^yGHt&wwKK^z#3@RwcMPsa^P*3`Op?sau zyinKq8A-bSjpC9U1KJ=Ih7tKN0A_RJ4Jx$cPwn~8LR{8FTz}+_H4@%>YdJtgTshDo zfBfAT-4Xioq(-iAGS{qmzuwB=`euVWTZRfmC($HZZ!Jdb7 zZH&tpRrnoG4K(WvH)S) z10u##TM(t6l_!anm~8bRiLL-%N1!7rE|``v`JNwWa?yVt-MOxAo#!Fg9eN+?A z$^WE=eNPFofO|i%u6OG*a%Db}X>QwtHG21KXk)~pB;e05Y$dwp=6Rbl?pOB6@95H5 zm4*!L=Kt`~XEX7M4|PN-e@4EspQOM|A2FEQJX&>v_`GQgt&rA+^MJ628dGOBr7?$& zPNh0@8)z|SBmE|6<1P}Fi7sT8fk4@QCS__SvNbr)xDjy)uU_?wBt(sqgo;n)m#Zf- zQ|mOB*Tc+I#zl|WVpQqgk5@g0)cUBWHCe*Yw@glV4Pq=Q zsFiF|{0x{D>_Q9HvG$F;$0NC!tj#SVZNl|2Xu+DZZCEzzqMxU=`yM&BDCf?oX93;B z???QEo7Qngb2(;RB8U_z&3{T#DHo@QP>oh=G{%JHvr9TL2fO*zH`jNXF_MB%&nP;L zH<_-?(!xNl@)nTl0(6fwrym&cP1f7EYn9o;bajZ}5u!fr?B1T));~Zis2wPu<~y8> zQKg1$$%73YzT_YoQEN+nXEZUlpFMOG={gNhF>tQUYu0oN>sILu-9y_^T2!wkVi2El z4th~WniuAhr>)~U$5SrlBgWF1_Y((qS{XyhE2hfKyXhfGZml!rPx7rZ_Fx;LcA|*& zF4?XUBp60*+F`xPkZMV@$?#>nNUznAApDX^fPY^R?*J$nn=XMLShD=U@_SIy;}gO( zC1?fr*x|6eeTi=>>NzKu|6C&EJ)Ds|tQGqwA$iEOhqFa3y4y*5^*_ zztRv867?@>QGJzSHsH_QO{>@Wxdm!^U@kUzJUp;C-+g-rxm3TwI&hb(1)MQh(eQHt zd$$`*xbu`^%KiD=)@bhIvK|5)5(q(_Tcet}QPh-O1h01*t7Qu}Sp=uzF!$!m2&Hah z`3Wz!iG^rELe}#dGE+5_E=iV936S@C@_q*hYMDfix`BO$KHcuaDzupvZv zF?u#Jxa9r}ciysEMf}*BU@h*hx>EbIu+^-qQiHxf^ne9CEvVJg7zxl{zZt1+B z$eFXRZgjK5!e-;)v80-LERg4)vV9qTT?qCIk7m$veQhsqiAx8*nY z$Lso zN#k!H3=v2UNwdu6U@_pH|E8!=B0&Yn5Jlt z?l>GJ+iR}Fl>}>Z$v;B~bjgZ)W)B0>Q47N+(syBR{cSRGk>d)(YHr{Yp^J3x%zs4@#;H-RBs<-Lg(Y-wXpg6&AaVLV)a4RjVl{E5h_RglkxG|9N^=um}4eSd`8ZQ?b zIzGR5#NdJc+p>7wiRifA19?U%=?BUmC|1-YGdH_g&fFa>3k*)Y=}egBmTb4L&n&yo z&W0oXZJ-nx46;&AI-@E*gIE|<#oFE)c|`~FrChI-js5AdaCYugqG;DoS<-a10Lm=q z-a=%`D3`7dm#Sz;lU!5!^DQa5Hlk>=R$>TlzZE1`hFi^Ax`)x%B+GQA{)WK-v5Rp9 zdaJ6BHP;7b!d~{iQ-^v$eD{&55}c>Z8@)$+5*{Jy(bh>lsmpjvQs#c-)%Tyoq*|M{ zD33%$6t@~R=hZAr5?=pBV)5vNZc8P+iX@1JMHP*~M=D|Xk2ed#f4X;coTo_4@H}Y7 zg0vedkKAFLOV~UL4~gxsI%e!u&)M&f49K$iz4t*MTx| zaZBcHlBWC^UGLtJLo=pC72ZwG(ysX*W)7W{AWkBSGJ;jq1C+$w^I3t)l*dMz0no;i zg>jhFbPR0qTi7 z)9yp31gE0dIicf_jFCGd4T1jMbNY8ia>FMghRli^#JfpN%=^OjY8_I%Bxxj9kQ>;- zoQUp*3SkU1rSblJ6qQ8b^>^{gteLFXx2l#^PauI>xCPG5D_ZiM)LeMm ziC`a=Z31Q1bUc|4&(&>wqUaa4C+!}F8ubtEUBw}1}6kh{1_A(9FT+ybVWliM< zj)Zq5SHvq{dac;R;qCMGu{Y7Ujf!{jQke_hD6Mt($T%wOzL?AOEj&@eCdABP+3#KVQ%~V4b{b(x5>0JyySL8tHa@&sdpTxBM~X=X6U9KX}6g; zKzj3muw#?XoW&>u_|$&G_HD{EDifi;C2WgXV>9Vwg2s&nr;VlX1w}pO;8q_xfIzG& zf6I7}35p5TxN*-RGRxx$Zz6(95~!n&S5IVmT#?P&v@1Eu8RF ztMOFg%?FKB``!9UYPjO6Blz%o#LZ)ueA~3=_ebO!h5Vju_88uR&1q�IcwY=Owo* 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 z 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 A`v3p{ literal 0 HcmV?d00001 diff --git a/references/hashicorp-vault-integration/package-lock.json b/references/hashicorp-vault-integration/package-lock.json new file mode 100644 index 000000000..7d3c6affd --- /dev/null +++ b/references/hashicorp-vault-integration/package-lock.json @@ -0,0 +1,5551 @@ +{ + "name": "js-callout", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "js-callout", + "devDependencies": { + "@cucumber/cucumber": "^7.3.0", + "@panva/jose": "^1.9.3", + "apickli": "^3.0.1" + } + }, + "node_modules/@cucumber/create-meta": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@cucumber/create-meta/-/create-meta-5.0.0.tgz", + "integrity": "sha512-Z5kMZkUff00S3/KSnKzB/KOm2UIxMXY1xXmj2dQMlD49lV6v/W8EEvgDMNtQotQNSOQU5bDupmWQpk+o16tXIw==", + "dev": true, + "dependencies": { + "@cucumber/messages": "^16.0.0" + } + }, + "node_modules/@cucumber/cucumber": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@cucumber/cucumber/-/cucumber-7.3.2.tgz", + "integrity": "sha512-qqptM9w+UqXEYBAkrIGpIVPXDWv+zp0LrS89LiwHZwBp0cJg00su/iPMZ4j8TvCJiKfAwJXsAI1yjrd1POtU+w==", + "dev": true, + "dependencies": { + "@cucumber/create-meta": "^5.0.0", + "@cucumber/cucumber-expressions": "^12.1.1", + "@cucumber/gherkin": "^19.0.3", + "@cucumber/gherkin-streams": "^2.0.2", + "@cucumber/html-formatter": "^15.0.2", + "@cucumber/messages": "^16.0.1", + "@cucumber/tag-expressions": "^3.0.1", + "assertion-error-formatter": "^3.0.0", + "bluebird": "^3.7.2", + "capital-case": "^1.0.4", + "cli-table3": "0.6.1", + "colors": "1.4.0", + "commander": "^7.0.0", + "create-require": "^1.1.1", + "duration": "^0.2.2", + "durations": "^3.4.2", + "figures": "^3.2.0", + "glob": "^7.1.6", + "indent-string": "^4.0.0", + "is-generator": "^1.0.3", + "is-stream": "^2.0.0", + "knuth-shuffle-seeded": "^1.0.6", + "lodash": "^4.17.21", + "mz": "^2.7.0", + "progress": "^2.0.3", + "resolve": "^1.19.0", + "resolve-pkg": "^2.0.0", + "stack-chain": "^2.0.0", + "stacktrace-js": "^2.0.2", + "string-argv": "^0.3.1", + "tmp": "^0.2.1", + "util-arity": "^1.1.0", + "verror": "^1.10.0" + }, + "bin": { + "cucumber-js": "bin/cucumber-js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@cucumber/cucumber-expressions": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/@cucumber/cucumber-expressions/-/cucumber-expressions-12.1.3.tgz", + "integrity": "sha512-LB8MAzE4F/t2KIgsDEz4gZH0xSI4aG0/LmYUPyISPPjUS1pI/yGWWyeX2WsiUQxpSs765WcNIq5Bggt7gGGO3Q==", + "dev": true, + "dependencies": { + "regexp-match-indices": "1.0.2" + } + }, + "node_modules/@cucumber/gherkin": { + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@cucumber/gherkin/-/gherkin-19.0.3.tgz", + "integrity": "sha512-gWdMm8mfRk3P+VugJWvNALaQV5QnT+5RkqWy3tO+4NsMSQZPo5p4V4vXwriQZ/sZR1Wni5TDRztuRsKLgZ3XHA==", + "dev": true, + "dependencies": { + "@cucumber/message-streams": "^2.0.0", + "@cucumber/messages": "^16.0.1" + } + }, + "node_modules/@cucumber/gherkin-streams": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@cucumber/gherkin-streams/-/gherkin-streams-2.0.2.tgz", + "integrity": "sha512-cKmXOBz4OwGlrHMBCc4qCC3KzLaqcEZ11nWWskIbv6jyfvlIRuM2OgEF6VLcNVewczifW1p6DrDj0OO+BeXocA==", + "dev": true, + "dependencies": { + "@cucumber/gherkin": "^19.0.1", + "@cucumber/message-streams": "^2.0.0", + "@cucumber/messages": "^16.0.0", + "commander": "7.2.0", + "source-map-support": "0.5.19" + }, + "bin": { + "gherkin-javascript": "bin/gherkin" + } + }, + "node_modules/@cucumber/html-formatter": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@cucumber/html-formatter/-/html-formatter-15.0.2.tgz", + "integrity": "sha512-j+YGY4ytj78G/v1gZo53D+vuKXlTg/oxNwSCCGvRQo75+AqYDJSkm/vexXJQ5lY1rXAvlbZ9KI6jhg6LDs0YdQ==", + "dev": true, + "dependencies": { + "@cucumber/messages": "^16.0.1", + "commander": "7.2.0", + "source-map-support": "0.5.19" + }, + "bin": { + "cucumber-html-formatter": "bin/cucumber-html-formatter.js" + } + }, + "node_modules/@cucumber/message-streams": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@cucumber/message-streams/-/message-streams-2.1.0.tgz", + "integrity": "sha512-Yh3mw3qv6QL9NI/ihkZF8V9MX2GbnR6oktv34kC3uAbrQy9d/b2SZ3HNjG3J9JQqpV4B7Om3SPElJYIeo66TrA==", + "dev": true, + "dependencies": { + "@cucumber/messages": "^16.0.1" + } + }, + "node_modules/@cucumber/messages": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/@cucumber/messages/-/messages-16.0.1.tgz", + "integrity": "sha512-80JcaAfQragFqR1rMhRwiqWL9HcR6Z4LDD2mfF0Lxg/lFkCNvmWa9Jl10NUNfFXYD555NKPzP/8xFo55abw8TQ==", + "dev": true, + "dependencies": { + "@types/uuid": "8.3.0", + "class-transformer": "0.4.0", + "reflect-metadata": "0.1.13", + "uuid": "8.3.2" + } + }, + "node_modules/@cucumber/tag-expressions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@cucumber/tag-expressions/-/tag-expressions-3.0.1.tgz", + "integrity": "sha512-OGCXaJ1BQXmQ5b9pw+JYsBGumK2/LPZiLmbj1o1JFVeSNs2PY8WPQFSyXrskhrHz5Nd/6lYg7lvGMtFHOncC4w==", + "dev": true + }, + "node_modules/@panva/asn1.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz", + "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@panva/jose": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@panva/jose/-/jose-1.9.3.tgz", + "integrity": "sha512-oKzjM5YsCSaL+/7NDQhfqeu0xj7owqRduNLM/W+dtIyGI7/AIaPue/bz4fqjYVDTpmRtrlsserR6kiqJucmbjA==", + "deprecated": "@panva/jose has moved. It is now called just \"jose\", no further updates will be made under the @panva/jose package name.", + "dev": true, + "dependencies": { + "jose": "^1.15.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@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 + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.6.tgz", + "integrity": "sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/apickli": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/apickli/-/apickli-3.0.2.tgz", + "integrity": "sha512-iYD2t5ZtT7o1XANeqZCff0LktSvMzI3mXlQiMwpUyfTdvmi3ArwsMfjmhldAtFuu0kAwsH95TvcKp3X12eihhA==", + "dev": true, + "dependencies": { + "@xmldom/xmldom": "0.x", + "is-my-json-valid": "2.x", + "jsonpath-plus": "6.x", + "path": "0.x", + "prettyjson": "1.x", + "request": "2.x", + "swagger-tools": "0.x", + "xpath.js": "1.x" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error-formatter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/assertion-error-formatter/-/assertion-error-formatter-3.0.0.tgz", + "integrity": "sha512-6YyAVLrEze0kQ7CmJfUgrLHb+Y7XghmL2Ie7ijVa2Y9ynP3LV+VDiwFk62Dn0qtqbmY0BT0ss6p1xxpiF2PYbQ==", + "dev": true, + "dependencies": { + "diff": "^4.0.1", + "pad-right": "^0.2.2", + "repeat-string": "^1.6.1" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha512-XIXhPptoLGNcvFyyOzjNXCjDYIbYj4iuXO0VU9lM0f3kYdG0ar5yg7C+pIc3OyoTlZXDu5ObpLTmS2Cgp89oDg==", + "dev": true, + "dependencies": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.1", + "http-errors": "~1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "~2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "~1.6.15" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/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, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha512-InWFDomvlkEj+xWLBfU3AvnbVYqeTWmQopiW0tWWEy5yehYm2YkGEc59sUmw/4ty5Zj/b0WHGs1LgecuBSBGrg==", + "dev": true, + "dependencies": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/capital-case": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/class-transformer": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.4.0.tgz", + "integrity": "sha512-ETWD/H2TbWbKEi7m9N4Km5+cw1hNcqJSxlSYhsLsNjQzWWiZIYA1zafxpK9PwVfaZ6AqR5rrjPVUBGESm5tQUA==", + "dev": true + }, + "node_modules/cli-table3": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", + "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "colors": "1.4.0" + } + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/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, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/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 + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/concat-stream/node_modules/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==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/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==", + "dev": true + }, + "node_modules/concat-stream/node_modules/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==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", + "dev": true + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/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 + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha512-FDvbtnq7dzlPz0wyYlOExifDEZcu8h+rErEXgfxqmLfRfC/kJidEFh4+effJRO3P0xmfqyPbSMG0LveNRfTKVg==", + "dev": true, + "dependencies": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/duration": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", + "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.46" + } + }, + "node_modules/durations": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/durations/-/durations-3.4.2.tgz", + "integrity": "sha512-V/lf7y33dGaypZZetVI1eu7BmvkbC4dItq12OElLRpKuaU5JxQstV2zHwLv8P7cNbQ+KL1WD80zMCTx5dNC4dg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/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 + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/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, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/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 + }, + "node_modules/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 + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/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, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/formidable": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", + "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", + "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau", + "dev": true, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dev": true, + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==", + "dev": true, + "dependencies": { + "is-property": "^1.0.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graphlib": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", + "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", + "integrity": "sha512-G56jBpbJeg7ds83HW1LuShNs8J73Fv3CPz/bmROHOHlnKkN8sWb9ujiagjmxxMUywftgq48HlBZELKKqFLk0oA==", + "dev": true + }, + "node_modules/is-my-ip-valid": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz", + "integrity": "sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==", + "dev": true + }, + "node_modules/is-my-json-valid": { + "version": "2.20.6", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz", + "integrity": "sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==", + "dev": true, + "dependencies": { + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^5.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "dev": true + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/jose": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/jose/-/jose-1.28.2.tgz", + "integrity": "sha512-wWy51U2MXxYi3g8zk2lsQ8M6O1lartpkxuq1TYexzPKYLgHLZkCjklaATP36I5BUoWjF2sInB9U1Qf18fBZxNA==", + "dev": true, + "dependencies": { + "@panva/asn1.js": "^1.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/json-refs": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/json-refs/-/json-refs-3.0.15.tgz", + "integrity": "sha512-0vOQd9eLNBL18EGl5yYaO44GhixmImes2wiYn9Z3sag3QnehWrYWlB9AFtMxCL2Bj3fyxgDYkxGFEU/chlYssw==", + "dev": true, + "dependencies": { + "commander": "~4.1.1", + "graphlib": "^2.1.8", + "js-yaml": "^3.13.1", + "lodash": "^4.17.15", + "native-promise-only": "^0.8.1", + "path-loader": "^1.0.10", + "slash": "^3.0.0", + "uri-js": "^4.2.2" + }, + "bin": { + "json-refs": "bin/json-refs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/json-refs/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/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 + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/jsonpath-plus": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz", + "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/jsprim/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/jsprim/node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/knuth-shuffle-seeded": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz", + "integrity": "sha512-9pFH0SplrfyKyojCLxZfMcvkhf5hH0d+UwR9nTVJ/DDQJGuzcXjTwB7TP7sDfehSudlGGaOLblmEWqv04ERVWg==", + "dev": true, + "dependencies": { + "seed-random": "~2.2.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash._arraypool": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._arraypool/-/lodash._arraypool-2.4.1.tgz", + "integrity": "sha512-tC2aLC7bbkDXKNrjDu9OLiVx9pFIvjinID2eD9PzNdAQGZScWUd/h8faqOw5d6oLsOvFRCRbz1ASoB+deyMVUw==", + "dev": true + }, + "node_modules/lodash._basebind": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._basebind/-/lodash._basebind-2.4.1.tgz", + "integrity": "sha512-VGHm6DH+1UiuafQdE/DNMqxOcSyhRu0xO9+jPDq7xITRn5YOorGrHVQmavMVXCYmTm80YRTZZCn/jTW7MokwLg==", + "dev": true, + "dependencies": { + "lodash._basecreate": "~2.4.1", + "lodash._setbinddata": "~2.4.1", + "lodash._slice": "~2.4.1", + "lodash.isobject": "~2.4.1" + } + }, + "node_modules/lodash._baseclone": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-2.4.1.tgz", + "integrity": "sha512-+zJVXs0VxC/Au+/7foiKzw8UaWvfSfPh20XhqK/6HFQiUeclL5fz05zY7G9yDAFItAKKZwB4cgpzGvxiwuG1wQ==", + "dev": true, + "dependencies": { + "lodash._getarray": "~2.4.1", + "lodash._releasearray": "~2.4.1", + "lodash._slice": "~2.4.1", + "lodash.assign": "~2.4.1", + "lodash.foreach": "~2.4.1", + "lodash.forown": "~2.4.1", + "lodash.isarray": "~2.4.1", + "lodash.isobject": "~2.4.1" + } + }, + "node_modules/lodash._basecreate": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-2.4.1.tgz", + "integrity": "sha512-8JJ3FnMPm54t3BwPLk8q8mPyQKQXm/rt9df+awr4NGtyJrtcCXM3Of1I86S6jVy1b4yAyFBb8wbKPEauuqzRmQ==", + "dev": true, + "dependencies": { + "lodash._isnative": "~2.4.1", + "lodash.isobject": "~2.4.1", + "lodash.noop": "~2.4.1" + } + }, + "node_modules/lodash._basecreatecallback": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._basecreatecallback/-/lodash._basecreatecallback-2.4.1.tgz", + "integrity": "sha512-SLczhg860fGW7AKlYcuOFstDtJuQhaANlJ4Y/jrOoRxhmVtK41vbJDH3OefVRSRkSCQo4HI82QVkAVsoGa5gSw==", + "dev": true, + "dependencies": { + "lodash._setbinddata": "~2.4.1", + "lodash.bind": "~2.4.1", + "lodash.identity": "~2.4.1", + "lodash.support": "~2.4.1" + } + }, + "node_modules/lodash._basecreatewrapper": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._basecreatewrapper/-/lodash._basecreatewrapper-2.4.1.tgz", + "integrity": "sha512-x2ja1fa/qmzbizuXgVM4QAP9svtMbdxjG8Anl9bCeDAwLOVQ1vLrA0hLb/NkpbGi9evjtkl0aWLTEoOlUdBPQA==", + "dev": true, + "dependencies": { + "lodash._basecreate": "~2.4.1", + "lodash._setbinddata": "~2.4.1", + "lodash._slice": "~2.4.1", + "lodash.isobject": "~2.4.1" + } + }, + "node_modules/lodash._createwrapper": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._createwrapper/-/lodash._createwrapper-2.4.1.tgz", + "integrity": "sha512-5TCfLt1haQpsa7bgLYRKNNE4yqhO4ZxIayN1btQmazMchO6Q8JYFRMqbJ3W+uNmMm4R0Jw7KGkZX5YfDDnywuw==", + "dev": true, + "dependencies": { + "lodash._basebind": "~2.4.1", + "lodash._basecreatewrapper": "~2.4.1", + "lodash._slice": "~2.4.1", + "lodash.isfunction": "~2.4.1" + } + }, + "node_modules/lodash._getarray": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._getarray/-/lodash._getarray-2.4.1.tgz", + "integrity": "sha512-iIrScwY3atGvLVbQL/+CNUznaPwBJg78S/JO4cTUFXRkRsZgEBhscB27cVoT4tsIOUyFu/5M/0umfHNGJ6wYwg==", + "dev": true, + "dependencies": { + "lodash._arraypool": "~2.4.1" + } + }, + "node_modules/lodash._isnative": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz", + "integrity": "sha512-BOlKGKNHhCHswGOWtmVb5zBygyxN7EmTuzVOSQI6QSoGhG+kvv71gICFS1TBpnqvT1n53txK8CDK3u5D2/GZxQ==", + "dev": true + }, + "node_modules/lodash._maxpoolsize": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._maxpoolsize/-/lodash._maxpoolsize-2.4.1.tgz", + "integrity": "sha512-xKDem1BxoIfcCtaJHotjtyfdIvZO9qrF+mv3G1+ngQmaI3MJt3Qm46i9HLk/CbzABbavUrr1/EomQT8KxtsrYA==", + "dev": true + }, + "node_modules/lodash._objecttypes": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", + "integrity": "sha512-XpqGh1e7hhkOzftBfWE7zt+Yn9mVHFkDhicVttvKLsoCMLVVL+xTQjfjB4X4vtznauxv0QZ5ZAeqjvat0dh62Q==", + "dev": true + }, + "node_modules/lodash._releasearray": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._releasearray/-/lodash._releasearray-2.4.1.tgz", + "integrity": "sha512-wwCwWX8PK/mYR5VZjcU5JFl6py/qrfLGMxzpKOfSqgA1PaZ6Z625CZLCxH1KsqyxSkOFmNm+mEYjeDpXlM4hrg==", + "dev": true, + "dependencies": { + "lodash._arraypool": "~2.4.1", + "lodash._maxpoolsize": "~2.4.1" + } + }, + "node_modules/lodash._setbinddata": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._setbinddata/-/lodash._setbinddata-2.4.1.tgz", + "integrity": "sha512-Vx0XKzpg2DFbQw4wrp1xSWd2sfl3W/BG6bucSRZmftS1AzbWRemCmBQDxyQTNhlLNec428PXkuuja+VNBZgu2A==", + "dev": true, + "dependencies": { + "lodash._isnative": "~2.4.1", + "lodash.noop": "~2.4.1" + } + }, + "node_modules/lodash._shimkeys": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", + "integrity": "sha512-lBrglYxLD/6KAJ8IEa5Lg+YHgNAL7FyKqXg4XOUI+Du/vtniLs1ZqS+yHNKPkK54waAgkdUnDOYaWf+rv4B+AA==", + "dev": true, + "dependencies": { + "lodash._objecttypes": "~2.4.1" + } + }, + "node_modules/lodash._slice": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._slice/-/lodash._slice-2.4.1.tgz", + "integrity": "sha512-+odPJa4PE2UgYnQgJgkLs0UD03QU78R2ivhrFnG9GdtYOZdE6ObxOj7KiUEUlqOOgatFT+ZqSypFjDSduTigKg==", + "dev": true + }, + "node_modules/lodash.assign": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-2.4.1.tgz", + "integrity": "sha512-AqQ4AJz5buSx9ELXWt5dONwJyVPd4NTADMKhoVYWCugjoVf172/LpvVhwmSJn4g8/Dc0S8hxTe8rt5Dob3X9KQ==", + "dev": true, + "dependencies": { + "lodash._basecreatecallback": "~2.4.1", + "lodash._objecttypes": "~2.4.1", + "lodash.keys": "~2.4.1" + } + }, + "node_modules/lodash.bind": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-2.4.1.tgz", + "integrity": "sha512-hn2VWYZ+N9aYncRad4jORvlGgpFrn+axnPIWRvFxjk6CWcZH5b5alI8EymYsHITI23Z9wrW/+ORq+azrVFpOfw==", + "dev": true, + "dependencies": { + "lodash._createwrapper": "~2.4.1", + "lodash._slice": "~2.4.1" + } + }, + "node_modules/lodash.clonedeep": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-2.4.1.tgz", + "integrity": "sha512-zj5vReFLkR+lJOBKP1wyteZ13zut/KSmXtdCBgxcy/m4UTitcBxpeVZT7gwk8BQrztPI5dIgO4bhBppXV4rpTQ==", + "dev": true, + "dependencies": { + "lodash._baseclone": "~2.4.1", + "lodash._basecreatecallback": "~2.4.1" + } + }, + "node_modules/lodash.foreach": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-2.4.1.tgz", + "integrity": "sha512-AvOobAkE7qBtIiHU5QHQIfveWH5Usr9pIcFIzBv7u4S6bvb3FWpFrh9ltqBY7UeL5lw6e8d+SggiUXQVyh+FpA==", + "dev": true, + "dependencies": { + "lodash._basecreatecallback": "~2.4.1", + "lodash.forown": "~2.4.1" + } + }, + "node_modules/lodash.forown": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.forown/-/lodash.forown-2.4.1.tgz", + "integrity": "sha512-VC+CKm/zSs5t3i/MHv71HZoQphuqOvez1xhjWBwHU5zAbsCYrqwHr+MyQyMk14HzA3hSRNA5lCqDMSw5G2Qscg==", + "dev": true, + "dependencies": { + "lodash._basecreatecallback": "~2.4.1", + "lodash._objecttypes": "~2.4.1", + "lodash.keys": "~2.4.1" + } + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true + }, + "node_modules/lodash.identity": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.identity/-/lodash.identity-2.4.1.tgz", + "integrity": "sha512-VRYX+8XipeLjorag5bz3YBBRJ+5kj8hVBzfnaHgXPZAVTYowBdY5l0M5ZnOmlAMCOXBFabQtm7f5VqjMKEji0w==", + "dev": true + }, + "node_modules/lodash.isarray": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-2.4.1.tgz", + "integrity": "sha512-yRDd0z+APziDqbk0MqR6Qfwj/Qn3jLxFJbI9U8MuvdTnqIXdZ5YXyGLnwuzCpZmjr26F1GNOjKLMMZ10i/wy6A==", + "dev": true, + "dependencies": { + "lodash._isnative": "~2.4.1" + } + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "dev": true + }, + "node_modules/lodash.isfunction": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-2.4.1.tgz", + "integrity": "sha512-6XcAB3izeQxPOQQNAJbbdjXbvWEt2Pn9ezPrjr4CwoLwmqsLVbsiEXD19cmmt4mbzOCOCdHzOQiUivUOJLra7w==", + "dev": true + }, + "node_modules/lodash.isobject": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", + "integrity": "sha512-sTebg2a1PoicYEZXD5PBdQcTlIJ6hUslrlWr7iV0O7n+i4596s2NQ9I5CaZ5FbXSfya/9WQsrYLANUJv9paYVA==", + "dev": true, + "dependencies": { + "lodash._objecttypes": "~2.4.1" + } + }, + "node_modules/lodash.keys": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", + "integrity": "sha512-ZpJhwvUXHSNL5wYd1RM6CUa2ZuqorG9ngoJ9Ix5Cce+uX7I5O/E06FCJdhSZ33b5dVyeQDnIlWH7B2s5uByZ7g==", + "dev": true, + "dependencies": { + "lodash._isnative": "~2.4.1", + "lodash._shimkeys": "~2.4.1", + "lodash.isobject": "~2.4.1" + } + }, + "node_modules/lodash.noop": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.noop/-/lodash.noop-2.4.1.tgz", + "integrity": "sha512-uNcV98/blRhInPUGQEnj9ekXXfG+q+rfoNSFZgl/eBfog9yBDW9gfUv2AHX/rAF7zZRlzWhbslGhbGQFZlCkZA==", + "dev": true + }, + "node_modules/lodash.support": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.support/-/lodash.support-2.4.1.tgz", + "integrity": "sha512-6SwqWwGFHhTXEiqB/yQgu8FYd//tm786d49y7kizHVCJH7zdzs191UQn3ES3tkkDbUddNRfkCRYqJFHtbLnbCw==", + "dev": true, + "dependencies": { + "lodash._isnative": "~2.4.1" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/multer": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz", + "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==", + "deprecated": "Multer 1.x is affected by CVE-2022-24434. This is fixed in v1.4.4-lts.1 which drops support for versions of Node.js before 6. Please upgrade to at least Node.js 6 and version 1.4.4-lts.1 of Multer. If you need support for older versions of Node.js, we are open to accepting patches that would fix the CVE on the main 1.x release line, whilst maintaining compatibility with Node.js 0.10.", + "dev": true, + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/native-promise-only": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/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, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/pad-right": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", + "integrity": "sha512-4cy8M95ioIGolCoMmm2cMntGR1lPLEbOMzOKu8bzjuJP6JpzEMQcDHmh7hHLYGgob+nKe1YHFMaG4V59HQa89g==", + "dev": true, + "dependencies": { + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "dev": true, + "dependencies": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-loader": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/path-loader/-/path-loader-1.0.12.tgz", + "integrity": "sha512-n7oDG8B+k/p818uweWrOixY9/Dsr89o2TkCm6tOTex3fpdo2+BFDgR+KpB37mGKBRsBAlR8CIJMFN0OEy/7hIQ==", + "dev": true, + "dependencies": { + "native-promise-only": "^0.8.1", + "superagent": "^7.1.6" + } + }, + "node_modules/path-loader/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/path-loader/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/path-loader/node_modules/formidable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.1.tgz", + "integrity": "sha512-0EcS9wCFEzLvfiks7omJ+SiYJAiD+TzK4Pcw1UlUoGnhUxDcMKjt0P7x8wEb0u6OHu8Nb98WG3nxtlF5C7bvUQ==", + "dev": true, + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/path-loader/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/path-loader/node_modules/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 + }, + "node_modules/path-loader/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/path-loader/node_modules/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==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/path-loader/node_modules/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==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/path-loader/node_modules/superagent": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.6.tgz", + "integrity": "sha512-gZkVCQR1gy/oUXr+kxJMLDjla434KmSOKbx5iGD30Ql+AkJQ/YlPKECJy2nhqOsHLjGHzoDTXNSjhnvWhzKk7g==", + "deprecated": "Please downgrade to v7.1.5 if you need IE/ActiveXObject support OR upgrade to v8.0.0 as we no longer support IE and published an incorrect patch version (see https://github.com/visionmedia/superagent/issues/1731)", + "dev": true, + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.3", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.10.3", + "readable-stream": "^3.6.0", + "semver": "^7.3.7" + }, + "engines": { + "node": ">=6.4.0 <13 || >=14" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.4.0.tgz", + "integrity": "sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/prettyjson": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.5.tgz", + "integrity": "sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==", + "dev": true, + "dependencies": { + "colors": "1.4.0", + "minimist": "^1.2.0" + }, + "bin": { + "prettyjson": "bin/prettyjson" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha512-Ss0DsBxqLxCmQkfG5yazYhtbVVTJqS9jTsZG2lhrNwqzOk2SUC7O/NB/M//CkEBqsrtmlNgJCPccJGuYSFr6Vg==", + "dev": true, + "dependencies": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha512-Jlk9xvkTDGXwZiIDyoM7+3AsuvJVoyOpRupvEVy9nX3YO3/ieZxhlgh8GpLNZ8AY7HjO6y2YwpMSh1ejhu3uIw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body/node_modules/http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha512-STnYGcKMXL9CGdtpeTFnLmgMSHTTNQJSHxiC4DETHKf934Q160Ht5pljrNeH24S0O9xUN+9vsDJZdZtk5js6Ww==", + "dev": true, + "dependencies": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/raw-body/node_modules/setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha512-9jphSf3UbIgpOX/RKvX02iw/rN2TKdusnsPpGfO/rkcsrd+IRqgHZb4VGnmL0Cynps8Nj2hN45wsi30BzrHDIw==", + "dev": true + }, + "node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "node_modules/regexp-match-indices": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regexp-match-indices/-/regexp-match-indices-1.0.2.tgz", + "integrity": "sha512-DwZuAkt8NF5mKwGGER1EGh2PRqyvhRhhLviH+R8y8dIuaQROlUfXjt4s9ZTXstIsSkptf06BSvwcEmmfheJJWQ==", + "dev": true, + "dependencies": { + "regexp-tree": "^0.1.11" + } + }, + "node_modules/regexp-tree": { + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz", + "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==", + "dev": true, + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-2.0.0.tgz", + "integrity": "sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/seed-random": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", + "integrity": "sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==", + "dev": true + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spark-md5": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-chain": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-2.0.0.tgz", + "integrity": "sha512-GGrHXePi305aW7XQweYZZwiRwR7Js3MWoK/EHzzB9ROdc75nCnjSJVi21rdAGxFl+yCx2L2qdfl5y7NO4lTyqg==", + "dev": true + }, + "node_modules/stack-generator": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", + "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "node_modules/stacktrace-gps": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz", + "integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==", + "dev": true, + "dependencies": { + "source-map": "0.5.6", + "stackframe": "^1.3.4" + } + }, + "node_modules/stacktrace-gps/node_modules/source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stacktrace-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", + "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", + "dev": true, + "dependencies": { + "error-stack-parser": "^2.0.6", + "stack-generator": "^2.0.5", + "stacktrace-gps": "^3.0.4" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/superagent": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", + "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", + "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at .", + "dev": true, + "dependencies": { + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "form-data": "^2.3.1", + "formidable": "^1.2.0", + "methods": "^1.1.1", + "mime": "^1.4.1", + "qs": "^6.5.1", + "readable-stream": "^2.3.5" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/superagent/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/superagent/node_modules/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==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/superagent/node_modules/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==", + "dev": true + }, + "node_modules/superagent/node_modules/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==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swagger-converter": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/swagger-converter/-/swagger-converter-0.1.7.tgz", + "integrity": "sha512-O2hZbWqq8x6j0uZ4qWj5dw45WPoAxKsJLJZqOgTqRtPNi8IqA+rDkDV/48S8qanS3KGv1QcVoPNLivMbyHHdAQ==", + "dev": true, + "dependencies": { + "lodash.clonedeep": "^2.4.1" + } + }, + "node_modules/swagger-tools": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/swagger-tools/-/swagger-tools-0.10.4.tgz", + "integrity": "sha512-VQpijIi8cpB/frUZOZlVpS7U3CrdSAZBfiHu448R1njiNXUnE7heF3Svz3qFBr5SYtaPvaqWpHMbvboirCXVzA==", + "dev": true, + "dependencies": { + "async": "^2.5.0", + "body-parser": "1.18.2", + "commander": "~2.11.0", + "debug": "^3.1.0", + "js-yaml": "^3.3.1", + "json-refs": "^3.0.2", + "lodash": "^4.17.4", + "multer": "^1.1.0", + "parseurl": "^1.3.0", + "path-to-regexp": "^2.0.0", + "qs": "^6.0.3", + "serve-static": "^1.10.0", + "spark-md5": "^3.0.0", + "superagent": "^3.5.2", + "swagger-converter": "^0.1.7", + "traverse": "^0.6.6", + "z-schema": "^3.15.4" + }, + "bin": { + "swagger-tools": "bin/swagger-tools" + } + }, + "node_modules/swagger-tools/node_modules/commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/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, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/traverse": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/upper-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-arity": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz", + "integrity": "sha512-kkyIsXKwemfSy8ZEoaIz06ApApnWsk5hQO0vLjZS6UkBiGiW++Jsyb8vSBoc0WKlffGoGs5yYy/j5pp8zckrFA==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validator": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", + "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xpath.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz", + "integrity": "sha512-jg+qkfS4K8E7965sqaUl8mRngXiKb3WZGfONgE18pr03FUQiuSV6G+Ej4tS55B+rIQSFEIw3phdVAQ4pPqNWfQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/z-schema": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.25.1.tgz", + "integrity": "sha512-7tDlwhrBG+oYFdXNOjILSurpfQyuVgkRe3hB2q8TEssamDHB7BbLWYkYO98nTn0FibfdFroFKDjndbgufAgS/Q==", + "dev": true, + "dependencies": { + "core-js": "^2.5.7", + "lodash.get": "^4.0.0", + "lodash.isequal": "^4.0.0", + "validator": "^10.0.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, + "optionalDependencies": { + "commander": "^2.7.1" + } + }, + "node_modules/z-schema/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "optional": true + } + }, + "dependencies": { + "@cucumber/create-meta": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@cucumber/create-meta/-/create-meta-5.0.0.tgz", + "integrity": "sha512-Z5kMZkUff00S3/KSnKzB/KOm2UIxMXY1xXmj2dQMlD49lV6v/W8EEvgDMNtQotQNSOQU5bDupmWQpk+o16tXIw==", + "dev": true, + "requires": { + "@cucumber/messages": "^16.0.0" + } + }, + "@cucumber/cucumber": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@cucumber/cucumber/-/cucumber-7.3.2.tgz", + "integrity": "sha512-qqptM9w+UqXEYBAkrIGpIVPXDWv+zp0LrS89LiwHZwBp0cJg00su/iPMZ4j8TvCJiKfAwJXsAI1yjrd1POtU+w==", + "dev": true, + "requires": { + "@cucumber/create-meta": "^5.0.0", + "@cucumber/cucumber-expressions": "^12.1.1", + "@cucumber/gherkin": "^19.0.3", + "@cucumber/gherkin-streams": "^2.0.2", + "@cucumber/html-formatter": "^15.0.2", + "@cucumber/messages": "^16.0.1", + "@cucumber/tag-expressions": "^3.0.1", + "assertion-error-formatter": "^3.0.0", + "bluebird": "^3.7.2", + "capital-case": "^1.0.4", + "cli-table3": "0.6.1", + "colors": "1.4.0", + "commander": "^7.0.0", + "create-require": "^1.1.1", + "duration": "^0.2.2", + "durations": "^3.4.2", + "figures": "^3.2.0", + "glob": "^7.1.6", + "indent-string": "^4.0.0", + "is-generator": "^1.0.3", + "is-stream": "^2.0.0", + "knuth-shuffle-seeded": "^1.0.6", + "lodash": "^4.17.21", + "mz": "^2.7.0", + "progress": "^2.0.3", + "resolve": "^1.19.0", + "resolve-pkg": "^2.0.0", + "stack-chain": "^2.0.0", + "stacktrace-js": "^2.0.2", + "string-argv": "^0.3.1", + "tmp": "^0.2.1", + "util-arity": "^1.1.0", + "verror": "^1.10.0" + } + }, + "@cucumber/cucumber-expressions": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/@cucumber/cucumber-expressions/-/cucumber-expressions-12.1.3.tgz", + "integrity": "sha512-LB8MAzE4F/t2KIgsDEz4gZH0xSI4aG0/LmYUPyISPPjUS1pI/yGWWyeX2WsiUQxpSs765WcNIq5Bggt7gGGO3Q==", + "dev": true, + "requires": { + "regexp-match-indices": "1.0.2" + } + }, + "@cucumber/gherkin": { + "version": "19.0.3", + "resolved": "https://registry.npmjs.org/@cucumber/gherkin/-/gherkin-19.0.3.tgz", + "integrity": "sha512-gWdMm8mfRk3P+VugJWvNALaQV5QnT+5RkqWy3tO+4NsMSQZPo5p4V4vXwriQZ/sZR1Wni5TDRztuRsKLgZ3XHA==", + "dev": true, + "requires": { + "@cucumber/message-streams": "^2.0.0", + "@cucumber/messages": "^16.0.1" + } + }, + "@cucumber/gherkin-streams": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@cucumber/gherkin-streams/-/gherkin-streams-2.0.2.tgz", + "integrity": "sha512-cKmXOBz4OwGlrHMBCc4qCC3KzLaqcEZ11nWWskIbv6jyfvlIRuM2OgEF6VLcNVewczifW1p6DrDj0OO+BeXocA==", + "dev": true, + "requires": { + "@cucumber/gherkin": "^19.0.1", + "@cucumber/message-streams": "^2.0.0", + "@cucumber/messages": "^16.0.0", + "commander": "7.2.0", + "source-map-support": "0.5.19" + } + }, + "@cucumber/html-formatter": { + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/@cucumber/html-formatter/-/html-formatter-15.0.2.tgz", + "integrity": "sha512-j+YGY4ytj78G/v1gZo53D+vuKXlTg/oxNwSCCGvRQo75+AqYDJSkm/vexXJQ5lY1rXAvlbZ9KI6jhg6LDs0YdQ==", + "dev": true, + "requires": { + "@cucumber/messages": "^16.0.1", + "commander": "7.2.0", + "source-map-support": "0.5.19" + } + }, + "@cucumber/message-streams": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@cucumber/message-streams/-/message-streams-2.1.0.tgz", + "integrity": "sha512-Yh3mw3qv6QL9NI/ihkZF8V9MX2GbnR6oktv34kC3uAbrQy9d/b2SZ3HNjG3J9JQqpV4B7Om3SPElJYIeo66TrA==", + "dev": true, + "requires": { + "@cucumber/messages": "^16.0.1" + } + }, + "@cucumber/messages": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/@cucumber/messages/-/messages-16.0.1.tgz", + "integrity": "sha512-80JcaAfQragFqR1rMhRwiqWL9HcR6Z4LDD2mfF0Lxg/lFkCNvmWa9Jl10NUNfFXYD555NKPzP/8xFo55abw8TQ==", + "dev": true, + "requires": { + "@types/uuid": "8.3.0", + "class-transformer": "0.4.0", + "reflect-metadata": "0.1.13", + "uuid": "8.3.2" + } + }, + "@cucumber/tag-expressions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@cucumber/tag-expressions/-/tag-expressions-3.0.1.tgz", + "integrity": "sha512-OGCXaJ1BQXmQ5b9pw+JYsBGumK2/LPZiLmbj1o1JFVeSNs2PY8WPQFSyXrskhrHz5Nd/6lYg7lvGMtFHOncC4w==", + "dev": true + }, + "@panva/asn1.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz", + "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==", + "dev": true + }, + "@panva/jose": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@panva/jose/-/jose-1.9.3.tgz", + "integrity": "sha512-oKzjM5YsCSaL+/7NDQhfqeu0xj7owqRduNLM/W+dtIyGI7/AIaPue/bz4fqjYVDTpmRtrlsserR6kiqJucmbjA==", + "dev": true, + "requires": { + "jose": "^1.15.0" + } + }, + "@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 + }, + "@xmldom/xmldom": { + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.6.tgz", + "integrity": "sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==", + "dev": true + }, + "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-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "apickli": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/apickli/-/apickli-3.0.2.tgz", + "integrity": "sha512-iYD2t5ZtT7o1XANeqZCff0LktSvMzI3mXlQiMwpUyfTdvmi3ArwsMfjmhldAtFuu0kAwsH95TvcKp3X12eihhA==", + "dev": true, + "requires": { + "@xmldom/xmldom": "0.x", + "is-my-json-valid": "2.x", + "jsonpath-plus": "6.x", + "path": "0.x", + "prettyjson": "1.x", + "request": "2.x", + "swagger-tools": "0.x", + "xpath.js": "1.x" + } + }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "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" + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "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": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + }, + "assertion-error-formatter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/assertion-error-formatter/-/assertion-error-formatter-3.0.0.tgz", + "integrity": "sha512-6YyAVLrEze0kQ7CmJfUgrLHb+Y7XghmL2Ie7ijVa2Y9ynP3LV+VDiwFk62Dn0qtqbmY0BT0ss6p1xxpiF2PYbQ==", + "dev": true, + "requires": { + "diff": "^4.0.1", + "pad-right": "^0.2.2", + "repeat-string": "^1.6.1" + } + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "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 + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha512-XIXhPptoLGNcvFyyOzjNXCjDYIbYj4iuXO0VU9lM0f3kYdG0ar5yg7C+pIc3OyoTlZXDu5ObpLTmS2Cgp89oDg==", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.1", + "http-errors": "~1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "~2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "~1.6.15" + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + } + } + }, + "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" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha512-InWFDomvlkEj+xWLBfU3AvnbVYqeTWmQopiW0tWWEy5yehYm2YkGEc59sUmw/4ty5Zj/b0WHGs1LgecuBSBGrg==", + "dev": true, + "requires": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "capital-case": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "class-transformer": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.4.0.tgz", + "integrity": "sha512-ETWD/H2TbWbKEi7m9N4Km5+cw1hNcqJSxlSYhsLsNjQzWWiZIYA1zafxpK9PwVfaZ6AqR5rrjPVUBGESm5tQUA==", + "dev": true + }, + "cli-table3": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", + "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", + "dev": true, + "requires": { + "colors": "1.4.0", + "string-width": "^4.2.0" + } + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "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": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "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": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "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==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "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==", + "dev": true, + "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" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "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==", + "dev": true + }, + "cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", + "dev": true + }, + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "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 + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha512-FDvbtnq7dzlPz0wyYlOExifDEZcu8h+rErEXgfxqmLfRfC/kJidEFh4+effJRO3P0xmfqyPbSMG0LveNRfTKVg==", + "dev": true, + "requires": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "duration": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", + "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.46" + } + }, + "durations": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/durations/-/durations-3.4.2.tgz", + "integrity": "sha512-V/lf7y33dGaypZZetVI1eu7BmvkbC4dItq12OElLRpKuaU5JxQstV2zHwLv8P7cNbQ+KL1WD80zMCTx5dNC4dg==", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "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": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "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 + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "requires": { + "stackframe": "^1.3.4" + } + }, + "es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "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 + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "requires": { + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "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 + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "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-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-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "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" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "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.6", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", + "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": 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 + }, + "generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dev": true, + "requires": { + "is-property": "^1.0.2" + } + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==", + "dev": true, + "requires": { + "is-property": "^1.0.0" + } + }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graphlib": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", + "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "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-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "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 + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "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==", + "dev": true + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "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 + }, + "is-generator": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", + "integrity": "sha512-G56jBpbJeg7ds83HW1LuShNs8J73Fv3CPz/bmROHOHlnKkN8sWb9ujiagjmxxMUywftgq48HlBZELKKqFLk0oA==", + "dev": true + }, + "is-my-ip-valid": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz", + "integrity": "sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==", + "dev": true + }, + "is-my-json-valid": { + "version": "2.20.6", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz", + "integrity": "sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==", + "dev": true, + "requires": { + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^5.0.0", + "xtend": "^4.0.0" + } + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "jose": { + "version": "1.28.2", + "resolved": "https://registry.npmjs.org/jose/-/jose-1.28.2.tgz", + "integrity": "sha512-wWy51U2MXxYi3g8zk2lsQ8M6O1lartpkxuq1TYexzPKYLgHLZkCjklaATP36I5BUoWjF2sInB9U1Qf18fBZxNA==", + "dev": true, + "requires": { + "@panva/asn1.js": "^1.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "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": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "json-refs": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/json-refs/-/json-refs-3.0.15.tgz", + "integrity": "sha512-0vOQd9eLNBL18EGl5yYaO44GhixmImes2wiYn9Z3sag3QnehWrYWlB9AFtMxCL2Bj3fyxgDYkxGFEU/chlYssw==", + "dev": true, + "requires": { + "commander": "~4.1.1", + "graphlib": "^2.1.8", + "js-yaml": "^3.13.1", + "lodash": "^4.17.15", + "native-promise-only": "^0.8.1", + "path-loader": "^1.0.10", + "slash": "^3.0.0", + "uri-js": "^4.2.2" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + } + } + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "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-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "jsonpath-plus": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz", + "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==", + "dev": true + }, + "jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true + }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + } + } + }, + "knuth-shuffle-seeded": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz", + "integrity": "sha512-9pFH0SplrfyKyojCLxZfMcvkhf5hH0d+UwR9nTVJ/DDQJGuzcXjTwB7TP7sDfehSudlGGaOLblmEWqv04ERVWg==", + "dev": true, + "requires": { + "seed-random": "~2.2.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash._arraypool": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._arraypool/-/lodash._arraypool-2.4.1.tgz", + "integrity": "sha512-tC2aLC7bbkDXKNrjDu9OLiVx9pFIvjinID2eD9PzNdAQGZScWUd/h8faqOw5d6oLsOvFRCRbz1ASoB+deyMVUw==", + "dev": true + }, + "lodash._basebind": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._basebind/-/lodash._basebind-2.4.1.tgz", + "integrity": "sha512-VGHm6DH+1UiuafQdE/DNMqxOcSyhRu0xO9+jPDq7xITRn5YOorGrHVQmavMVXCYmTm80YRTZZCn/jTW7MokwLg==", + "dev": true, + "requires": { + "lodash._basecreate": "~2.4.1", + "lodash._setbinddata": "~2.4.1", + "lodash._slice": "~2.4.1", + "lodash.isobject": "~2.4.1" + } + }, + "lodash._baseclone": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-2.4.1.tgz", + "integrity": "sha512-+zJVXs0VxC/Au+/7foiKzw8UaWvfSfPh20XhqK/6HFQiUeclL5fz05zY7G9yDAFItAKKZwB4cgpzGvxiwuG1wQ==", + "dev": true, + "requires": { + "lodash._getarray": "~2.4.1", + "lodash._releasearray": "~2.4.1", + "lodash._slice": "~2.4.1", + "lodash.assign": "~2.4.1", + "lodash.foreach": "~2.4.1", + "lodash.forown": "~2.4.1", + "lodash.isarray": "~2.4.1", + "lodash.isobject": "~2.4.1" + } + }, + "lodash._basecreate": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-2.4.1.tgz", + "integrity": "sha512-8JJ3FnMPm54t3BwPLk8q8mPyQKQXm/rt9df+awr4NGtyJrtcCXM3Of1I86S6jVy1b4yAyFBb8wbKPEauuqzRmQ==", + "dev": true, + "requires": { + "lodash._isnative": "~2.4.1", + "lodash.isobject": "~2.4.1", + "lodash.noop": "~2.4.1" + } + }, + "lodash._basecreatecallback": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._basecreatecallback/-/lodash._basecreatecallback-2.4.1.tgz", + "integrity": "sha512-SLczhg860fGW7AKlYcuOFstDtJuQhaANlJ4Y/jrOoRxhmVtK41vbJDH3OefVRSRkSCQo4HI82QVkAVsoGa5gSw==", + "dev": true, + "requires": { + "lodash._setbinddata": "~2.4.1", + "lodash.bind": "~2.4.1", + "lodash.identity": "~2.4.1", + "lodash.support": "~2.4.1" + } + }, + "lodash._basecreatewrapper": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._basecreatewrapper/-/lodash._basecreatewrapper-2.4.1.tgz", + "integrity": "sha512-x2ja1fa/qmzbizuXgVM4QAP9svtMbdxjG8Anl9bCeDAwLOVQ1vLrA0hLb/NkpbGi9evjtkl0aWLTEoOlUdBPQA==", + "dev": true, + "requires": { + "lodash._basecreate": "~2.4.1", + "lodash._setbinddata": "~2.4.1", + "lodash._slice": "~2.4.1", + "lodash.isobject": "~2.4.1" + } + }, + "lodash._createwrapper": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._createwrapper/-/lodash._createwrapper-2.4.1.tgz", + "integrity": "sha512-5TCfLt1haQpsa7bgLYRKNNE4yqhO4ZxIayN1btQmazMchO6Q8JYFRMqbJ3W+uNmMm4R0Jw7KGkZX5YfDDnywuw==", + "dev": true, + "requires": { + "lodash._basebind": "~2.4.1", + "lodash._basecreatewrapper": "~2.4.1", + "lodash._slice": "~2.4.1", + "lodash.isfunction": "~2.4.1" + } + }, + "lodash._getarray": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._getarray/-/lodash._getarray-2.4.1.tgz", + "integrity": "sha512-iIrScwY3atGvLVbQL/+CNUznaPwBJg78S/JO4cTUFXRkRsZgEBhscB27cVoT4tsIOUyFu/5M/0umfHNGJ6wYwg==", + "dev": true, + "requires": { + "lodash._arraypool": "~2.4.1" + } + }, + "lodash._isnative": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz", + "integrity": "sha512-BOlKGKNHhCHswGOWtmVb5zBygyxN7EmTuzVOSQI6QSoGhG+kvv71gICFS1TBpnqvT1n53txK8CDK3u5D2/GZxQ==", + "dev": true + }, + "lodash._maxpoolsize": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._maxpoolsize/-/lodash._maxpoolsize-2.4.1.tgz", + "integrity": "sha512-xKDem1BxoIfcCtaJHotjtyfdIvZO9qrF+mv3G1+ngQmaI3MJt3Qm46i9HLk/CbzABbavUrr1/EomQT8KxtsrYA==", + "dev": true + }, + "lodash._objecttypes": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", + "integrity": "sha512-XpqGh1e7hhkOzftBfWE7zt+Yn9mVHFkDhicVttvKLsoCMLVVL+xTQjfjB4X4vtznauxv0QZ5ZAeqjvat0dh62Q==", + "dev": true + }, + "lodash._releasearray": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._releasearray/-/lodash._releasearray-2.4.1.tgz", + "integrity": "sha512-wwCwWX8PK/mYR5VZjcU5JFl6py/qrfLGMxzpKOfSqgA1PaZ6Z625CZLCxH1KsqyxSkOFmNm+mEYjeDpXlM4hrg==", + "dev": true, + "requires": { + "lodash._arraypool": "~2.4.1", + "lodash._maxpoolsize": "~2.4.1" + } + }, + "lodash._setbinddata": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._setbinddata/-/lodash._setbinddata-2.4.1.tgz", + "integrity": "sha512-Vx0XKzpg2DFbQw4wrp1xSWd2sfl3W/BG6bucSRZmftS1AzbWRemCmBQDxyQTNhlLNec428PXkuuja+VNBZgu2A==", + "dev": true, + "requires": { + "lodash._isnative": "~2.4.1", + "lodash.noop": "~2.4.1" + } + }, + "lodash._shimkeys": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", + "integrity": "sha512-lBrglYxLD/6KAJ8IEa5Lg+YHgNAL7FyKqXg4XOUI+Du/vtniLs1ZqS+yHNKPkK54waAgkdUnDOYaWf+rv4B+AA==", + "dev": true, + "requires": { + "lodash._objecttypes": "~2.4.1" + } + }, + "lodash._slice": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._slice/-/lodash._slice-2.4.1.tgz", + "integrity": "sha512-+odPJa4PE2UgYnQgJgkLs0UD03QU78R2ivhrFnG9GdtYOZdE6ObxOj7KiUEUlqOOgatFT+ZqSypFjDSduTigKg==", + "dev": true + }, + "lodash.assign": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-2.4.1.tgz", + "integrity": "sha512-AqQ4AJz5buSx9ELXWt5dONwJyVPd4NTADMKhoVYWCugjoVf172/LpvVhwmSJn4g8/Dc0S8hxTe8rt5Dob3X9KQ==", + "dev": true, + "requires": { + "lodash._basecreatecallback": "~2.4.1", + "lodash._objecttypes": "~2.4.1", + "lodash.keys": "~2.4.1" + } + }, + "lodash.bind": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-2.4.1.tgz", + "integrity": "sha512-hn2VWYZ+N9aYncRad4jORvlGgpFrn+axnPIWRvFxjk6CWcZH5b5alI8EymYsHITI23Z9wrW/+ORq+azrVFpOfw==", + "dev": true, + "requires": { + "lodash._createwrapper": "~2.4.1", + "lodash._slice": "~2.4.1" + } + }, + "lodash.clonedeep": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-2.4.1.tgz", + "integrity": "sha512-zj5vReFLkR+lJOBKP1wyteZ13zut/KSmXtdCBgxcy/m4UTitcBxpeVZT7gwk8BQrztPI5dIgO4bhBppXV4rpTQ==", + "dev": true, + "requires": { + "lodash._baseclone": "~2.4.1", + "lodash._basecreatecallback": "~2.4.1" + } + }, + "lodash.foreach": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-2.4.1.tgz", + "integrity": "sha512-AvOobAkE7qBtIiHU5QHQIfveWH5Usr9pIcFIzBv7u4S6bvb3FWpFrh9ltqBY7UeL5lw6e8d+SggiUXQVyh+FpA==", + "dev": true, + "requires": { + "lodash._basecreatecallback": "~2.4.1", + "lodash.forown": "~2.4.1" + } + }, + "lodash.forown": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.forown/-/lodash.forown-2.4.1.tgz", + "integrity": "sha512-VC+CKm/zSs5t3i/MHv71HZoQphuqOvez1xhjWBwHU5zAbsCYrqwHr+MyQyMk14HzA3hSRNA5lCqDMSw5G2Qscg==", + "dev": true, + "requires": { + "lodash._basecreatecallback": "~2.4.1", + "lodash._objecttypes": "~2.4.1", + "lodash.keys": "~2.4.1" + } + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true + }, + "lodash.identity": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.identity/-/lodash.identity-2.4.1.tgz", + "integrity": "sha512-VRYX+8XipeLjorag5bz3YBBRJ+5kj8hVBzfnaHgXPZAVTYowBdY5l0M5ZnOmlAMCOXBFabQtm7f5VqjMKEji0w==", + "dev": true + }, + "lodash.isarray": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-2.4.1.tgz", + "integrity": "sha512-yRDd0z+APziDqbk0MqR6Qfwj/Qn3jLxFJbI9U8MuvdTnqIXdZ5YXyGLnwuzCpZmjr26F1GNOjKLMMZ10i/wy6A==", + "dev": true, + "requires": { + "lodash._isnative": "~2.4.1" + } + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "dev": true + }, + "lodash.isfunction": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-2.4.1.tgz", + "integrity": "sha512-6XcAB3izeQxPOQQNAJbbdjXbvWEt2Pn9ezPrjr4CwoLwmqsLVbsiEXD19cmmt4mbzOCOCdHzOQiUivUOJLra7w==", + "dev": true + }, + "lodash.isobject": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", + "integrity": "sha512-sTebg2a1PoicYEZXD5PBdQcTlIJ6hUslrlWr7iV0O7n+i4596s2NQ9I5CaZ5FbXSfya/9WQsrYLANUJv9paYVA==", + "dev": true, + "requires": { + "lodash._objecttypes": "~2.4.1" + } + }, + "lodash.keys": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", + "integrity": "sha512-ZpJhwvUXHSNL5wYd1RM6CUa2ZuqorG9ngoJ9Ix5Cce+uX7I5O/E06FCJdhSZ33b5dVyeQDnIlWH7B2s5uByZ7g==", + "dev": true, + "requires": { + "lodash._isnative": "~2.4.1", + "lodash._shimkeys": "~2.4.1", + "lodash.isobject": "~2.4.1" + } + }, + "lodash.noop": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.noop/-/lodash.noop-2.4.1.tgz", + "integrity": "sha512-uNcV98/blRhInPUGQEnj9ekXXfG+q+rfoNSFZgl/eBfog9yBDW9gfUv2AHX/rAF7zZRlzWhbslGhbGQFZlCkZA==", + "dev": true + }, + "lodash.support": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.support/-/lodash.support-2.4.1.tgz", + "integrity": "sha512-6SwqWwGFHhTXEiqB/yQgu8FYd//tm786d49y7kizHVCJH7zdzs191UQn3ES3tkkDbUddNRfkCRYqJFHtbLnbCw==", + "dev": true, + "requires": { + "lodash._isnative": "~2.4.1" + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "multer": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz", + "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==", + "dev": true, + "requires": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + } + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "native-promise-only": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==", + "dev": true + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "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": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "pad-right": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", + "integrity": "sha512-4cy8M95ioIGolCoMmm2cMntGR1lPLEbOMzOKu8bzjuJP6JpzEMQcDHmh7hHLYGgob+nKe1YHFMaG4V59HQa89g==", + "dev": true, + "requires": { + "repeat-string": "^1.5.2" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "dev": true, + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-loader": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/path-loader/-/path-loader-1.0.12.tgz", + "integrity": "sha512-n7oDG8B+k/p818uweWrOixY9/Dsr89o2TkCm6tOTex3fpdo2+BFDgR+KpB37mGKBRsBAlR8CIJMFN0OEy/7hIQ==", + "dev": true, + "requires": { + "native-promise-only": "^0.8.1", + "superagent": "^7.1.6" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "formidable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.1.tgz", + "integrity": "sha512-0EcS9wCFEzLvfiks7omJ+SiYJAiD+TzK4Pcw1UlUoGnhUxDcMKjt0P7x8wEb0u6OHu8Nb98WG3nxtlF5C7bvUQ==", + "dev": true, + "requires": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + } + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "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 + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "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==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "superagent": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.6.tgz", + "integrity": "sha512-gZkVCQR1gy/oUXr+kxJMLDjla434KmSOKbx5iGD30Ql+AkJQ/YlPKECJy2nhqOsHLjGHzoDTXNSjhnvWhzKk7g==", + "dev": true, + "requires": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.3", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.10.3", + "readable-stream": "^3.6.0", + "semver": "^7.3.7" + } + } + } + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.4.0.tgz", + "integrity": "sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "prettyjson": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.5.tgz", + "integrity": "sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==", + "dev": true, + "requires": { + "colors": "1.4.0", + "minimist": "^1.2.0" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "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==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "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 + }, + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha512-Ss0DsBxqLxCmQkfG5yazYhtbVVTJqS9jTsZG2lhrNwqzOk2SUC7O/NB/M//CkEBqsrtmlNgJCPccJGuYSFr6Vg==", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha512-Jlk9xvkTDGXwZiIDyoM7+3AsuvJVoyOpRupvEVy9nX3YO3/ieZxhlgh8GpLNZ8AY7HjO6y2YwpMSh1ejhu3uIw==", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha512-STnYGcKMXL9CGdtpeTFnLmgMSHTTNQJSHxiC4DETHKf934Q160Ht5pljrNeH24S0O9xUN+9vsDJZdZtk5js6Ww==", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha512-9jphSf3UbIgpOX/RKvX02iw/rN2TKdusnsPpGfO/rkcsrd+IRqgHZb4VGnmL0Cynps8Nj2hN45wsi30BzrHDIw==", + "dev": true + } + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "regexp-match-indices": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regexp-match-indices/-/regexp-match-indices-1.0.2.tgz", + "integrity": "sha512-DwZuAkt8NF5mKwGGER1EGh2PRqyvhRhhLviH+R8y8dIuaQROlUfXjt4s9ZTXstIsSkptf06BSvwcEmmfheJJWQ==", + "dev": true, + "requires": { + "regexp-tree": "^0.1.11" + } + }, + "regexp-tree": { + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz", + "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "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": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.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-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-2.0.0.tgz", + "integrity": "sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "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" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "seed-random": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", + "integrity": "sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==", + "dev": true + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.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" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "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-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" + } + }, + "spark-md5": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "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-chain": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-2.0.0.tgz", + "integrity": "sha512-GGrHXePi305aW7XQweYZZwiRwR7Js3MWoK/EHzzB9ROdc75nCnjSJVi21rdAGxFl+yCx2L2qdfl5y7NO4lTyqg==", + "dev": true + }, + "stack-generator": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", + "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", + "dev": true, + "requires": { + "stackframe": "^1.3.4" + } + }, + "stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "stacktrace-gps": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz", + "integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==", + "dev": true, + "requires": { + "source-map": "0.5.6", + "stackframe": "^1.3.4" + }, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", + "dev": true + } + } + }, + "stacktrace-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", + "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", + "dev": true, + "requires": { + "error-stack-parser": "^2.0.6", + "stack-generator": "^2.0.5", + "stacktrace-gps": "^3.0.4" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true + }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, + "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-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "superagent": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", + "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", + "dev": true, + "requires": { + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "form-data": "^2.3.1", + "formidable": "^1.2.0", + "methods": "^1.1.1", + "mime": "^1.4.1", + "qs": "^6.5.1", + "readable-stream": "^2.3.5" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "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==", + "dev": true, + "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" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "swagger-converter": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/swagger-converter/-/swagger-converter-0.1.7.tgz", + "integrity": "sha512-O2hZbWqq8x6j0uZ4qWj5dw45WPoAxKsJLJZqOgTqRtPNi8IqA+rDkDV/48S8qanS3KGv1QcVoPNLivMbyHHdAQ==", + "dev": true, + "requires": { + "lodash.clonedeep": "^2.4.1" + } + }, + "swagger-tools": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/swagger-tools/-/swagger-tools-0.10.4.tgz", + "integrity": "sha512-VQpijIi8cpB/frUZOZlVpS7U3CrdSAZBfiHu448R1njiNXUnE7heF3Svz3qFBr5SYtaPvaqWpHMbvboirCXVzA==", + "dev": true, + "requires": { + "async": "^2.5.0", + "body-parser": "1.18.2", + "commander": "~2.11.0", + "debug": "^3.1.0", + "js-yaml": "^3.3.1", + "json-refs": "^3.0.2", + "lodash": "^4.17.4", + "multer": "^1.1.0", + "parseurl": "^1.3.0", + "path-to-regexp": "^2.0.0", + "qs": "^6.0.3", + "serve-static": "^1.10.0", + "spark-md5": "^3.0.0", + "superagent": "^3.5.2", + "swagger-converter": "^0.1.7", + "traverse": "^0.6.6", + "z-schema": "^3.15.4" + }, + "dependencies": { + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + } + } + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "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" + } + }, + "traverse": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", + "dev": true + }, + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "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": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "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==", + "dev": true, + "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": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "upper-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + } + } + }, + "util-arity": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz", + "integrity": "sha512-kkyIsXKwemfSy8ZEoaIz06ApApnWsk5hQO0vLjZS6UkBiGiW++Jsyb8vSBoc0WKlffGoGs5yYy/j5pp8zckrFA==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "validator": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", + "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==", + "dev": true + }, + "verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "xpath.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xpath.js/-/xpath.js-1.1.0.tgz", + "integrity": "sha512-jg+qkfS4K8E7965sqaUl8mRngXiKb3WZGfONgE18pr03FUQiuSV6G+Ej4tS55B+rIQSFEIw3phdVAQ4pPqNWfQ==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "z-schema": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.25.1.tgz", + "integrity": "sha512-7tDlwhrBG+oYFdXNOjILSurpfQyuVgkRe3hB2q8TEssamDHB7BbLWYkYO98nTn0FibfdFroFKDjndbgufAgS/Q==", + "dev": true, + "requires": { + "commander": "^2.7.1", + "core-js": "^2.5.7", + "lodash.get": "^4.0.0", + "lodash.isequal": "^4.0.0", + "validator": "^10.0.0" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "optional": true + } + } + } + } +} diff --git a/references/hashicorp-vault-integration/package.json b/references/hashicorp-vault-integration/package.json new file mode 100644 index 000000000..3ddb50fc6 --- /dev/null +++ b/references/hashicorp-vault-integration/package.json @@ -0,0 +1,11 @@ +{ + "name": "js-callout", + "scripts": { + "test": "npm i --no-fund && npx cucumber-js test/integration/features" + }, + "devDependencies": { + "@cucumber/cucumber": "^7.3.0", + "apickli": "^3.0.1", + "@panva/jose": "^1.9.3" + } +} diff --git a/references/hashicorp-vault-integration/pipeline.sh b/references/hashicorp-vault-integration/pipeline.sh new file mode 100755 index 000000000..0cab426ec --- /dev/null +++ b/references/hashicorp-vault-integration/pipeline.sh @@ -0,0 +1,73 @@ +#!/bin/sh +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +# +# this script cater for CI/CD and integrated testing based on vault mock server +# +# adjusted artifacts are put into a ./generated directory + + +SCRIPTPATH="$( cd "$(dirname "$0")" || exit >/dev/null 2>&1 ; pwd -P )" +export PATH="$PATH:$SCRIPTPATH/../../tools/apigee-sackmesser/bin" + +TOKEN="$(gcloud config config-helper --force-auth-refresh --format json | jq -r '.credential.access_token')" + + + +mkdir -p "$SCRIPTPATH/generated" + +## vault mock +export MOCK_PROXY=vault-mock-proxy + +export VAULT_CONFIG=generated/vault-facade-config +mkdir -p $VAULT_CONFIG + +export VAULT_PROXY=vault-facade-proxy + +if [ -z "$SKIP_MOCKING" ]; then + ## GENERATED: generate config objects [targetserver and kvm] + export VAULT_HOSTNAME=$APIGEE_X_HOSTNAME + export VAULT_PORT=443 + export VAULT_SSL_INFO='"sSLInfo": { + "enabled": true, + "ignoreValidationErrors": false + },' + + export VAULT_TOKEN=dummy-token + + ## GENERATED: configure and deploy Vault Facade API Proxy + export VAULT_PROXY=generated/vault-facade-proxy + mkdir -p $VAULT_PROXY + + cp -R "$SCRIPTPATH"/vault-facade-proxy/* $VAULT_PROXY + + # adjuct for mocking + export TARGET_SERVER_DEF=$SCRIPTPATH/$VAULT_PROXY/apiproxy/targets/default.xml + # shellcheck disable=2005 + echo "$(awk '//{gsub(//,"/vault-mock");print;next} //' "$TARGET_SERVER_DEF" )" > "$TARGET_SERVER_DEF" + + sackmesser deploy --googleapi -o "$APIGEE_ORG" -e "$APIGEE_ENV" -t "$TOKEN" -d "$SCRIPTPATH/$MOCK_PROXY" +fi + +envsubst < "$SCRIPTPATH/vault-facade-config/edge.json.tpl" > "$SCRIPTPATH/$VAULT_CONFIG/edge.json" + +sackmesser deploy --googleapi -o "$APIGEE_ORG" -e "$APIGEE_ENV" -t "$TOKEN" -d "$SCRIPTPATH/$VAULT_CONFIG" + +sackmesser deploy --googleapi -o "$APIGEE_ORG" -e "$APIGEE_ENV" -t "$TOKEN" -d "$SCRIPTPATH/$VAULT_PROXY" + +## integration tests +(cd "$SCRIPTPATH" && npm install --no-fund && TEST_HOSTNAME="$APIGEE_X_HOSTNAME" npm run test) diff --git a/references/hashicorp-vault-integration/test/integration/features/step_definitions/apickli-gherkin.js b/references/hashicorp-vault-integration/test/integration/features/step_definitions/apickli-gherkin.js new file mode 100644 index 000000000..117c335e1 --- /dev/null +++ b/references/hashicorp-vault-integration/test/integration/features/step_definitions/apickli-gherkin.js @@ -0,0 +1,18 @@ +/** + Copyright 2020 Google LLC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ +module.exports = require('apickli/apickli-gherkin') + diff --git a/references/hashicorp-vault-integration/test/integration/features/step_definitions/jwt-steps.js b/references/hashicorp-vault-integration/test/integration/features/step_definitions/jwt-steps.js new file mode 100644 index 000000000..4ba450cba --- /dev/null +++ b/references/hashicorp-vault-integration/test/integration/features/step_definitions/jwt-steps.js @@ -0,0 +1,75 @@ +/** + Copyright 2020 Google LLC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +const { + Given, + When, + Then, + After +} = require('@cucumber/cucumber') + +const jose = require('jose') +const {JSONPath: jsonPath} = require('jsonpath-plus'); +const assert = require('assert'); + +Then(/^I clear request$/, async function() { + + this.apickli.headers = {}; + this.apickli.formParameters = {}; + this.apickli.requestBody = ''; + this.apickli.httpRequestOptions = {}; + this.apickli.queryParameters = {}; +}); + +Then('I store JWKS in global scope', async function() { + + this.apickli.setGlobalVariable('jwks', this.apickli.getResponseObject().body) +}) + + +Then(/^scenario variable (.*) path (.*) should be (.*)/, async function( varjson, path, regexp){ + + const json = this.apickli.scenarioVariables[ varjson ]; + const val = jsonPath( path, json)[0]; + + const regexpObj = new RegExp( regexp ); + assert.ok( regexpObj.test( val ) ) +}) + +Then(/^I decode JWT token value of scenario variable (.*) as (.*) in scenario scope$/, async function(varJwt, varJson) { + + this.apickli.storeValueInScenarioScope(varJson, jose.JWT.decode( this.apickli.scenarioVariables[varJwt] )); +}) + +Then(/^value of scenario variable (.*) is valid JWT token$/, async function(variable) { + + const jwks = JSON.parse( this.apickli.getGlobalVariable( 'jwks') ); + + const publicKeys = jose.JWKS.asKeyStore(jwks, 'ES256') + + const jwt = this.apickli.scenarioVariables[variable] + jose.JWT.verify( + jwt, + publicKeys, + { + issuer: this.apickli.scenarioVariables['issuer'], + audience: this.apickli.scenarioVariables['audience'], + clockTolerance: "5s" + //, maxTokenAge: 31536000 + } + ) +}) diff --git a/references/hashicorp-vault-integration/test/integration/features/support/init.js b/references/hashicorp-vault-integration/test/integration/features/support/init.js new file mode 100644 index 000000000..c9ad01081 --- /dev/null +++ b/references/hashicorp-vault-integration/test/integration/features/support/init.js @@ -0,0 +1,27 @@ +/** + Copyright 2020 Google LLC + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ +const apickli = require('apickli') +const { + Before, + setDefaultTimeout +} = require('@cucumber/cucumber') + +const hostname = process.env.TEST_HOSTNAME + +Before(function() { + this.apickli = new apickli.Apickli('https', hostname ) +}) diff --git a/references/hashicorp-vault-integration/test/integration/features/vault-integration.feature b/references/hashicorp-vault-integration/test/integration/features/vault-integration.feature new file mode 100644 index 000000000..b01561f25 --- /dev/null +++ b/references/hashicorp-vault-integration/test/integration/features/vault-integration.feature @@ -0,0 +1,30 @@ +Feature: + As a Client App + I want to access the jwks and jwt endpoints functionality + So that I can validate JWT token signature path + + Scenario: Validate jwks endpoint response + Given I clear request + When I GET /vault-facade/jwks + Then response body should be valid json + And response body path $.keys[0].crv should be P-256 + And response body path $.keys[0].x should be i5_DX1VZnVW7WTHk8tlHntfPASgmblQWSfTC9orCHJk + And response body path $.keys[0].y should be qaYrjldDYeCLM5ruVU8i0SkE73yTcs-c3dUCeWmivU0 + And I store JWKS in global scope + + Scenario: Perform login via vault server + Given I clear request + And I set form parameters to + | parameter | value | + | username | user | + | password | pass | + When I POST to /vault-facade/login + Then response body should be valid json + And I store the value of body path $.jwt-token as jwt in scenario scope + And I decode JWT token value of scenario variable jwt as json in scenario scope + + And scenario variable json path $.iss should be ^https://35-201-121-246.nip.io$ + And scenario variable json path $.aud should be ^urn://c60511c0-12a2-473c-80fd-42528eb65a6a$ + # And I store the raw value https://35-201-121-246.nip.io as issuer in scenario scope + # And I store the raw value urn://c60511c0-12a2-473c-80fd-42528eb65a6a as audience in scenario scope + # And value of scenario variable jwt is valid JWT token diff --git a/references/hashicorp-vault-integration/vault-facade-callout/.gitignore b/references/hashicorp-vault-integration/vault-facade-callout/.gitignore new file mode 100644 index 000000000..b83d22266 --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-callout/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/references/hashicorp-vault-integration/vault-facade-callout/jar-in-jar-loader.zip b/references/hashicorp-vault-integration/vault-facade-callout/jar-in-jar-loader.zip new file mode 100644 index 0000000000000000000000000000000000000000..4ee2ee69266dd427cc229c23e3fff1454116e0fe GIT binary patch literal 7686 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 literal 0 HcmV?d00001 diff --git a/references/hashicorp-vault-integration/vault-facade-callout/pom.xml b/references/hashicorp-vault-integration/vault-facade-callout/pom.xml new file mode 100644 index 000000000..610e4bae3 --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-callout/pom.xml @@ -0,0 +1,96 @@ + + + 4.0.0 + + com.apigee.devrel + vault-keys-to-jwks + 0.0.1 + jar + + vault-keys-to-jwks + http://maven.apache.org + + 1.8 + 1.8 + UTF-8 + + + + + com.apigee + expressions + 1.0.0 + provided + + + com.apigee + message-flow + 1.0.0 + provided + + + + + org.bouncycastle + bcprov-jdk15on + 1.70 + provided + + + + org.bouncycastle + bcpkix-jdk15on + 1.70 + provided + + + + com.nimbusds + nimbus-jose-jwt + 9.25.4 + provided + + + + com.google.code.gson + gson + 2.8.6 + provided + + + + junit + junit + 4.11 + test + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + com.exco.vaultkeystojwks.VaultKeysToJwks + + + + + + + diff --git a/references/hashicorp-vault-integration/vault-facade-callout/src/main/java/com/exco/vaultkeystojwks/VaultKeysToJwks.java b/references/hashicorp-vault-integration/vault-facade-callout/src/main/java/com/exco/vaultkeystojwks/VaultKeysToJwks.java new file mode 100644 index 000000000..0fa002db8 --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-callout/src/main/java/com/exco/vaultkeystojwks/VaultKeysToJwks.java @@ -0,0 +1,117 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.exco.vaultkeystojwks; + +import java.util.Base64; +import java.util.Iterator; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.nimbusds.jose.JOSEException; +import com.nimbusds.jose.jwk.JWK; + +public class VaultKeysToJwks { + + /** + * Base 64 URL encoding. + * + * @param str + * @return encoded string + * @throws JOSEException + */ + public String base64UrlEncode(final String str) throws JOSEException { + + return Base64.getUrlEncoder() + .withoutPadding() + .encodeToString(str.getBytes()); + } + + /** + * Transform to JWKS representation. + * + * @param keysJson + * @return JWKS string + * @throws JOSEException + */ + public String getJwks(final String keysJson) throws JOSEException { + + JsonObject vaultKeysObject = JsonParser.parseString(keysJson) + .getAsJsonObject(); + + JsonObject dataObject = vaultKeysObject.getAsJsonObject("data"); + JsonObject keysObject = dataObject.getAsJsonObject("keys"); + + JsonObject jwksObject = new JsonObject(); + + JsonArray jwksArray = new JsonArray(); + + Iterator keys = keysObject.keySet().iterator(); + while (keys.hasNext()) { + + String key = keys.next(); + if (keysObject.get(key) instanceof JsonObject) { + JsonObject jwk = (JsonObject) keysObject.get(key); + + String publicKey = jwk.get("public_key").getAsString(); + + JsonObject jwkObject = new JsonObject(); + + jwkObject.addProperty("kid", key); + + // public key + JWK jwkPublicKey; + jwkPublicKey = JWK.parseFromPEMEncodedObjects(publicKey); + + // Convert to JWK format + String publicJwkJson = jwkPublicKey.toPublicJWK() + .toJSONString(); + +// todo: [] refactor/simplify after upgraded to 9.24.2; +// version 9.24.2 (2022-08-19): JSON Smart -> GSON + JsonObject publicJwk = JsonParser.parseString(publicJwkJson) + .getAsJsonObject(); + Iterator keysPublicJwk = publicJwk.keySet().iterator(); + + while (keysPublicJwk.hasNext()) { + + String keyPublicJwk = keysPublicJwk.next(); + if (keysObject.get(key) instanceof JsonObject) { + + jwkObject.addProperty(keyPublicJwk, + publicJwk.get(keyPublicJwk).getAsString()); + + } + + } + jwksArray.add(jwkObject); + } + } + + // jwk loop + + jwksObject.add("keys", jwksArray); + + Gson gson = new GsonBuilder().setPrettyPrinting() + .disableHtmlEscaping() + .create(); + + return gson.toJson(jwksObject); + } +} diff --git a/references/hashicorp-vault-integration/vault-facade-callout/src/main/java/com/exco/vaultkeystojwks/VaultKeysToJwksCallout.java b/references/hashicorp-vault-integration/vault-facade-callout/src/main/java/com/exco/vaultkeystojwks/VaultKeysToJwksCallout.java new file mode 100644 index 000000000..e0dccc2ee --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-callout/src/main/java/com/exco/vaultkeystojwks/VaultKeysToJwksCallout.java @@ -0,0 +1,120 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.exco.vaultkeystojwks; + +import java.util.Arrays; +import java.util.Map; + +import com.apigee.flow.execution.Action; +import com.apigee.flow.execution.ExecutionContext; +import com.apigee.flow.execution.ExecutionResult; +import com.apigee.flow.execution.spi.Execution; +import com.apigee.flow.message.MessageContext; + +public class VaultKeysToJwksCallout implements Execution { + + /** + * Array for properties parameters passed from context. + */ + private Map properties; + + /** + * Constructor. + * + * @param props properties + */ + public VaultKeysToJwksCallout(final Map props) { + + this.properties = props; + } + + /** + * + * Implements callout logic. + * + */ + @Override + public ExecutionResult execute( + final MessageContext messageContext, + final ExecutionContext executionContext) { + + String operation = null; + + VaultKeysToJwks vktj = new VaultKeysToJwks(); + + try { + operation = (this.properties.get("operation")); + + if (operation == null) { + throw new RuntimeException( + "VaultKeysToJwks: operation is not set. " + + "Supported operations: keys|base64url-encode"); + } + + if (operation.equals("keys")) { + + String keys = null; + + String input = (this.properties.get("input")); + String output = (this.properties.get("output")); + + keys = messageContext.getVariable(input); + + if (keys == null) { + throw new RuntimeException( + "VaultKeysToJwks: no keys json string is provided" + ); + } + + messageContext.setVariable(output, vktj.getJwks(keys)); + + } else if (operation.equals("base64url-encode")) { + + String input = (this.properties.get("input")); + String output = (this.properties.get("output")); + + String json = messageContext.getVariable(input); + + messageContext.setVariable(output, vktj.base64UrlEncode(json)); + + } else { + throw new RuntimeException(String.format( + "VaultKeysToJwks: Not supported operation: %s. " + + "Supported operations: keys|base64url-encode", + operation)); + } + + return ExecutionResult.SUCCESS; + + } catch (Exception e) { + + ExecutionResult executionResult = new ExecutionResult( + false, Action.ABORT); + + executionResult.setErrorResponse(e.getMessage()); + executionResult.addErrorResponseHeader("ExceptionClass", + e.getClass().getName()); + + messageContext.setVariable("JAVA_ERROR", e.getMessage()); + messageContext.setVariable("JAVA_STACKTRACE", + Arrays.toString(Thread.currentThread().getStackTrace())); + return executionResult; + + } + } + +} diff --git a/references/hashicorp-vault-integration/vault-facade-callout/src/test/java/com/exco/vaultkeystojwks/VaultKeysToJwksTest.java b/references/hashicorp-vault-integration/vault-facade-callout/src/test/java/com/exco/vaultkeystojwks/VaultKeysToJwksTest.java new file mode 100644 index 000000000..7899bb8ee --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-callout/src/test/java/com/exco/vaultkeystojwks/VaultKeysToJwksTest.java @@ -0,0 +1,138 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.exco.vaultkeystojwks; + +import static org.junit.Assert.assertEquals; + +import java.security.Provider; +import java.security.Security; + +import org.junit.Test; + +import com.nimbusds.jose.crypto.bc.BouncyCastleProviderSingleton; +//import com.nimbusds.jose.jwk.JWK; + +/** + * Unit test for Vault Keys to JWKs callout. + */ +public class VaultKeysToJwksTest { + + /** + * Test base64UrlEncode. + * + * @throws Exception + */ + @Test + public void testBase64UrlEncode() throws Exception { + + VaultKeysToJwks vktj = new VaultKeysToJwks(); + + // + // base64UrlEncode + // + + String str = "{\"kid\":\"key:1\"," + + "\"alg\":\"ES256\",\"typ\":\"JWT\",\"pad\":\".....\"}"; + + String strencoded = vktj.base64UrlEncode(str); + + assertEquals(strencoded, + "eyJraWQiOiJrZXk6MSIsImFsZyI6IkVTMjU2Ii" + + "widHlwIjoiSldUIiwicGFkIjoiLi4uLi4ifQ"); + } + + /** + * Test Keys to JWKs. + * + * @throws Exception + */ + @Test + public void testKeysToJWKs() throws Exception { + + Provider bc = BouncyCastleProviderSingleton.getInstance(); + Security.addProvider(bc); + + String keys = "{\n" + + " \"request_id\":" + + " \"f5ed789c-d421-f39f-31cd-796ab5f2de0a\",\n" + + " \"lease_id\": \"\",\n" + + " \"lease_duration\": 0,\n" + + " \"renewable\": false,\n" + + " \"data\": {\n" + + " \"allow_plaintext_backup\": false,\n" + + " \"auto_rotate_period\": 0,\n" + + " \"deletion_allowed\": false,\n" + + " \"derived\": false,\n" + + " \"exportable\": true,\n" + + " \"imported_key\": false,\n" + + " \"keys\": {\n" + + " \"1\": {\n" + + " \"creation_time\":" + + " \"2022-10-01T17:21:14.580334+01:00\",\n" + + " \"name\": \"P-256\",\n" + + " \"public_key\": \"-----BEGIN PUBLIC KEY-----\\nMFkw" + + "EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZdq4eql8uVh2L964iWA9pFBaFuS" + + "e\\n449K6kPHmn55GVEbaBhKH4bulG3Ch++xY1NfuMZNUG/E9b6f672xwji" + + "7rg==\\n-----END PUBLIC KEY-----\\n\"\n" + + " }\n" + + " },\n" + + " \"latest_version\": 1,\n" + + " \"min_available_version\": 0,\n" + + " \"min_decryption_version\": 1,\n" + + " \"min_encryption_version\": 0,\n" + + " \"name\": \"mykey\",\n" + + " \"supports_decryption\": false,\n" + + " \"supports_derivation\": false,\n" + + " \"supports_encryption\": false,\n" + + " \"supports_signing\": true,\n" + + " \"type\": \"ecdsa-p256\"\n" + + " },\n" + + " \"warnings\": null\n" + + "}"; + + // // public key pem <-> jwks format transformations: + // + // String publicKeyPEM= "-----BEGIN PUBLIC KEY-----\n" + // + "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZdq4eql8uVh2L964iWA9pFBaFuSe + // + "\n" + // + "449K6kPHmn55GVEbaBhKH4bulG3Ch++xY1NfuMZNUG/E9b6f672xwji7rg==\n" + // + "-----END PUBLIC KEY-----\n"; + + // Convert to JWK format + // JWK jwk = JWK.parseFromPEMEncodedObjects( publicKeyPEM ); + // String publicJWK = jwk.toPublicJWK().toJSONString(); + + VaultKeysToJwks vktj = new VaultKeysToJwks(); + + String jwks = vktj.getJwks(keys); + + assertEquals(jwks, + "{\n" + " \"keys\": [\n" + + " {\n" + + " \"kid\": \"1\",\n" + + " \"kty\": \"EC\",\n" + + " \"crv\": \"P-256\",\n" + + " \"x\":" + + " \"Zdq4eql8uVh2L964iWA9pFBaFuSe449K6kPHmn55GVE\",\n" + + " \"y\":" + + " \"G2gYSh-G7pRtwofvsWNTX7jGTVBvxPW-n-u9scI4u64\"\n" + + " }\n" + + " ]\n" + + "}"); + } + +} diff --git a/references/hashicorp-vault-integration/vault-facade-callout/vaults-keys-to-jwks-jar-gen.xml b/references/hashicorp-vault-integration/vault-facade-callout/vaults-keys-to-jwks-jar-gen.xml new file mode 100644 index 000000000..9ac7b2005 --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-callout/vaults-keys-to-jwks-jar-gen.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/references/hashicorp-vault-integration/vault-facade-config/edge.json.tpl b/references/hashicorp-vault-integration/vault-facade-config/edge.json.tpl new file mode 100644 index 000000000..cc7d16206 --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-config/edge.json.tpl @@ -0,0 +1,29 @@ +{ + "version": "1.0", + "envConfig": { + "$APIGEE_X_ENV": { + "targetServers": [ + { + "name": "VaultServer", + "host": "$VAULT_HOSTNAME", + "port": $VAULT_PORT, + "isEnabled": true, + $VAULT_SSL_INFO + "protocol": "HTTP" + } + ], + "kvms": [ + { + "name": "vault-config", + "encrypted": "true", + "entry": [ + { + "name": "vault-token", + "value": "$VAULT_TOKEN" + } + ] + } + ] + } + } +} diff --git a/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/Assign-MessageReadVaultKeys.xml b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/Assign-MessageReadVaultKeys.xml new file mode 100644 index 000000000..cf4a2b014 --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/Assign-MessageReadVaultKeys.xml @@ -0,0 +1,25 @@ + + + + Assign Message.ReadVaultKeys + + vault-path + keys/sign-key + + + GET + + true + + \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.AssignVariablesFromForm.xml b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.AssignVariablesFromForm.xml new file mode 100644 index 000000000..d255e4e11 --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.AssignVariablesFromForm.xml @@ -0,0 +1,22 @@ + + + + + input.username + + request.formparam.username + + true + + \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.DefineJsonToSign.xml b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.DefineJsonToSign.xml new file mode 100644 index 000000000..f5a749485 --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.DefineJsonToSign.xml @@ -0,0 +1,21 @@ + + + + + header-and-payload + + + true + + \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.DefineJwtHeaderAndPaylod.xml b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.DefineJwtHeaderAndPaylod.xml new file mode 100644 index 000000000..eb5af3749 --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.DefineJwtHeaderAndPaylod.xml @@ -0,0 +1,25 @@ + + + + + header + + + + payload + + + true + + \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.JsonWithJwtToken.xml b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.JsonWithJwtToken.xml new file mode 100644 index 000000000..745e8e923 --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.JsonWithJwtToken.xml @@ -0,0 +1,27 @@ + + + + + signatureregex + ^vault:v1: + + + { + "jwt-token":"{jws-header}.{jws-payload}.{replaceAll(jwtsignature,signatureregex,'')}" +} + + + true + + \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.SetVaultTokenAndPathSuffix.xml b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.SetVaultTokenAndPathSuffix.xml new file mode 100644 index 000000000..ba869a331 --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessage.SetVaultTokenAndPathSuffix.xml @@ -0,0 +1,28 @@ + + + + AssignMessage.SetVaultTokenAndPathSuffix + + +
{vault-token}
+
+ false +
+ + target.copy.pathsuffix + false + + true + +
\ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessageVaultSignPayload.xml b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessageVaultSignPayload.xml new file mode 100644 index 000000000..15552ed85 --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/AssignMessageVaultSignPayload.xml @@ -0,0 +1,33 @@ + + + + + header-and-payload + + + + header-and-payload-base64 + + + + vault-path + sign/sign-key + + + POST + {"hash_algorithm":"sha2-256","marshaling_algorithm":"jws","input":"{header-and-payload-base64}"} + + true + + \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/ExtractVariables.Signature.xml b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/ExtractVariables.Signature.xml new file mode 100644 index 000000000..b79fba6f3 --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/ExtractVariables.Signature.xml @@ -0,0 +1,21 @@ + + + + true + + + $.data.signature + + + \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/JavaCallout.UrlEncodeJwsHeaderAndPayload.xml b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/JavaCallout.UrlEncodeJwsHeaderAndPayload.xml new file mode 100644 index 000000000..3efd114de --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/JavaCallout.UrlEncodeJwsHeaderAndPayload.xml @@ -0,0 +1,22 @@ + + + + + base64url-encode + header-and-payload + jws-header-and-payload + + com.exco.vaultkeystojwks.VaultKeysToJwksCallout + java://vault-keys-to-jwks-0.0.1.jar + \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/JavaCallout.UrlEncodePayload.xml b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/JavaCallout.UrlEncodePayload.xml new file mode 100644 index 000000000..cc30d923b --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/JavaCallout.UrlEncodePayload.xml @@ -0,0 +1,22 @@ + + + + + base64url-encode + payload + jws-payload + + com.exco.vaultkeystojwks.VaultKeysToJwksCallout + java://vault-keys-to-jwks-0.0.1.jar + \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/JavaCalloutUrlEncodeHeader.xml b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/JavaCalloutUrlEncodeHeader.xml new file mode 100644 index 000000000..6267cb876 --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/JavaCalloutUrlEncodeHeader.xml @@ -0,0 +1,22 @@ + + + + + base64url-encode + header + jws-header + + com.exco.vaultkeystojwks.VaultKeysToJwksCallout + java://vault-keys-to-jwks-0.0.1.jar + \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/JavaCalloutVaultKeysToJwks.xml b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/JavaCalloutVaultKeysToJwks.xml new file mode 100644 index 000000000..0f48f747b --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/JavaCalloutVaultKeysToJwks.xml @@ -0,0 +1,22 @@ + + + + + keys + response.content + response.content + + com.exco.vaultkeystojwks.VaultKeysToJwksCallout + java://vault-keys-to-jwks-0.0.1.jar + \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/KeyValueMapGetVaultToken.xml b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/KeyValueMapGetVaultToken.xml new file mode 100644 index 000000000..a515cb1c5 --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/policies/KeyValueMapGetVaultToken.xml @@ -0,0 +1,23 @@ + + + + + 300 + + + vault-token + + + environment + \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/proxies/default.xml b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/proxies/default.xml new file mode 100644 index 000000000..483639439 --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/proxies/default.xml @@ -0,0 +1,84 @@ + + + + + + + KeyValueMapGetVaultToken + + + + + + + (proxy.pathsuffix MatchesPath "/jwks") and (request.verb = "GET") + + + + Assign-MessageReadVaultKeys + + + + + JavaCalloutVaultKeysToJwks + + + + + (proxy.pathsuffix MatchesPath "/login") and (request.verb = "POST") + + + + AssignMessage.AssignVariablesFromForm + + + AssignMessage.DefineJwtHeaderAndPaylod + + + JavaCalloutUrlEncodeHeader + + + JavaCallout.UrlEncodePayload + + + AssignMessage.DefineJsonToSign + + + JavaCallout.UrlEncodeJwsHeaderAndPayload + + + AssignMessageVaultSignPayload + + + + + ExtractVariables.Signature + + + AssignMessage.JsonWithJwtToken + + + + + + + + + + /vault-facade + + + default + + \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/targets/default.xml b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/targets/default.xml new file mode 100644 index 000000000..1107abd66 --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/targets/default.xml @@ -0,0 +1,34 @@ + + + + + + + AssignMessage.SetVaultTokenAndPathSuffix + + + + + + + + + + + + + + /v1/transit/{vault-path} + + \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/vault-facade.xml b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/vault-facade.xml new file mode 100644 index 000000000..456a19d9a --- /dev/null +++ b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/vault-facade.xml @@ -0,0 +1,43 @@ + + + vault-facade + + 1665254225947 + 1665254225947 + /vault-facade + + Assign-MessageReadVaultKeys + KeyValueMapGetVaultToken + JavaCalloutVaultKeysToJwks + JavaCalloutUrlEncodeHeader + AssignMessage.DefineJwtHeaderAndPaylod + JavaCallout.UrlEncodePayload + AssignMessage.DefineJsonToSign + JavaCallout.UrlEncodeJwsHeaderAndPayload + AssignMessage.SetVaultTokenAndPathSuffix + ExtractVariables.Signature + AssignMessage.JsonWithJwtToken + AssignMessageVaultSignPayload + AssignMessage.AssignVariablesFromForm + + + default + + + java://vault-keys-to-jwks-0.0.1.jar + + + default + + \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-mock-proxy/apiproxy/policies/AssignMessage-TransitKeys.xml b/references/hashicorp-vault-integration/vault-mock-proxy/apiproxy/policies/AssignMessage-TransitKeys.xml new file mode 100644 index 000000000..4b8b7cd1b --- /dev/null +++ b/references/hashicorp-vault-integration/vault-mock-proxy/apiproxy/policies/AssignMessage-TransitKeys.xml @@ -0,0 +1,53 @@ + + + + + { + "request_id": "c16e3769-3c19-6541-ae98-c0295d140bfe", + "lease_id": "", + "renewable": false, + "lease_duration": 0, + "data": { + "allow_plaintext_backup": false, + "auto_rotate_period": 0, + "deletion_allowed": false, + "derived": false, + "exportable": true, + "imported_key": false, + "keys": { + "1": { + "creation_time": "2022-10-04T21:09:31.687664826Z", + "name": "P-256", + "public_key": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEi5/DX1VZnVW7WTHk8tlHntfPASgm\nblQWSfTC9orCHJmppiuOV0Nh4Iszmu5VTyLRKQTvfJNyz5zd1QJ5aaK9TQ==\n-----END PUBLIC KEY-----\n" + } + }, + "latest_version": 1, + "min_available_version": 0, + "min_decryption_version": 1, + "min_encryption_version": 0, + "name": "sign-key", + "supports_decryption": false, + "supports_derivation": false, + "supports_encryption": false, + "supports_signing": true, + "type": "ecdsa-p256" + }, + "wrap_info": null, + "warnings": null, + "auth": null +} + + + + \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-mock-proxy/apiproxy/policies/AssignMessage-TransitSign.xml b/references/hashicorp-vault-integration/vault-mock-proxy/apiproxy/policies/AssignMessage-TransitSign.xml new file mode 100644 index 000000000..b2609ba83 --- /dev/null +++ b/references/hashicorp-vault-integration/vault-mock-proxy/apiproxy/policies/AssignMessage-TransitSign.xml @@ -0,0 +1,31 @@ + + + + + { + "request_id": "6dcdd067-111b-8dfd-f16e-01cefb72d938", + "lease_id": "", + "renewable": false, + "lease_duration": 0, + "data": { + "key_version": 1, + "signature": "vault:v1:mCWue4BkGAHqcp-1vduPPoyY1i5L1qgdpe3YRpsOC-lAZYG1DK3sKHJ3HpeiTMDTd2n2EYWfvi4e1752nZI2GA" + }, + "wrap_info": null, + "warnings": null, + "auth": null +} + + + \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-mock-proxy/apiproxy/proxies/default.xml b/references/hashicorp-vault-integration/vault-mock-proxy/apiproxy/proxies/default.xml new file mode 100644 index 000000000..c98bab47b --- /dev/null +++ b/references/hashicorp-vault-integration/vault-mock-proxy/apiproxy/proxies/default.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + AssignMessage-TransitSign + + + (proxy.pathsuffix MatchesPath "/v1/transit/sign/sign-key") and (request.verb = "POST") + + + + + + + AssignMessage-TransitKeys + + + (proxy.pathsuffix MatchesPath "/v1/transit/keys/sign-key") and (request.verb = "GET") + + + + + + + + /vault-mock + + + \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-mock-proxy/apiproxy/vault-mock.xml b/references/hashicorp-vault-integration/vault-mock-proxy/apiproxy/vault-mock.xml new file mode 100644 index 000000000..fa6ceab1e --- /dev/null +++ b/references/hashicorp-vault-integration/vault-mock-proxy/apiproxy/vault-mock.xml @@ -0,0 +1,26 @@ + + + + + 1671920403281 + 1671920403281 + /vault-mock + + AssignMessage-TransitSign + AssignMessage-TransitKeys + + + default + + \ No newline at end of file From a368b78459b579b5f3decff0fc2a0c7daa036283 Mon Sep 17 00:00:00 2001 From: Yuriy Lesyuk Date: Wed, 28 Dec 2022 17:35:01 +0000 Subject: [PATCH 02/11] fix: wrong APIGEE_ platform variables --- references/hashicorp-vault-integration/pipeline.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/references/hashicorp-vault-integration/pipeline.sh b/references/hashicorp-vault-integration/pipeline.sh index 0cab426ec..5bea60624 100755 --- a/references/hashicorp-vault-integration/pipeline.sh +++ b/references/hashicorp-vault-integration/pipeline.sh @@ -60,14 +60,14 @@ if [ -z "$SKIP_MOCKING" ]; then # shellcheck disable=2005 echo "$(awk '//{gsub(//,"/vault-mock");print;next} //' "$TARGET_SERVER_DEF" )" > "$TARGET_SERVER_DEF" - sackmesser deploy --googleapi -o "$APIGEE_ORG" -e "$APIGEE_ENV" -t "$TOKEN" -d "$SCRIPTPATH/$MOCK_PROXY" + sackmesser deploy --googleapi -o "$APIGEE_X_ORG" -e "$APIGEE_X_ENV" -t "$TOKEN" -d "$SCRIPTPATH/$MOCK_PROXY" fi envsubst < "$SCRIPTPATH/vault-facade-config/edge.json.tpl" > "$SCRIPTPATH/$VAULT_CONFIG/edge.json" -sackmesser deploy --googleapi -o "$APIGEE_ORG" -e "$APIGEE_ENV" -t "$TOKEN" -d "$SCRIPTPATH/$VAULT_CONFIG" +sackmesser deploy --googleapi -o "$APIGEE_X_ORG" -e "$APIGEE_X_ENV" -t "$TOKEN" -d "$SCRIPTPATH/$VAULT_CONFIG" -sackmesser deploy --googleapi -o "$APIGEE_ORG" -e "$APIGEE_ENV" -t "$TOKEN" -d "$SCRIPTPATH/$VAULT_PROXY" +sackmesser deploy --googleapi -o "$APIGEE_X_ORG" -e "$APIGEE_X_ENV" -t "$TOKEN" -d "$SCRIPTPATH/$VAULT_PROXY" ## integration tests (cd "$SCRIPTPATH" && npm install --no-fund && TEST_HOSTNAME="$APIGEE_X_HOSTNAME" npm run test) From 701b3a98151477624a8343d19e87c9c5116c7664 Mon Sep 17 00:00:00 2001 From: Yuriy Lesyuk Date: Wed, 28 Dec 2022 17:51:49 +0000 Subject: [PATCH 03/11] fix: ignore devrel's .gitignore for *.jar files --- .../hashicorp-vault-integration/.gitignore | 3 ++- .../resources/java/vault-keys-to-jwks-0.0.1.jar | Bin 0 -> 6281 bytes 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/resources/java/vault-keys-to-jwks-0.0.1.jar diff --git a/references/hashicorp-vault-integration/.gitignore b/references/hashicorp-vault-integration/.gitignore index c228e2c68..0b68beda9 100644 --- a/references/hashicorp-vault-integration/.gitignore +++ b/references/hashicorp-vault-integration/.gitignore @@ -1 +1,2 @@ -**/edge.json \ No newline at end of file +**/edge.json +!*.jar \ No newline at end of file diff --git a/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/resources/java/vault-keys-to-jwks-0.0.1.jar b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/resources/java/vault-keys-to-jwks-0.0.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..63b7bd22ce6eee7d36bf36018ced74a37a35214e GIT binary patch literal 6281 zcmbtZ2UL@5(hdknuc1jtdZ<#Qi69W^J@g)m)C58aO*+z%A}CF&bfh;y1Pnz$r3eU! zbPz&siUJGks&}t<@7aI<$@$7TnR(`&_sf~*nkez(2aF%V{Ws6?OIa)xnB!)%cx)K*b~3Qq*u(vL*17nfJ>3VvEKE?voDM&_MP+nV2<8Sh@WA&0Q%reNcS>Sx;0YT#_hWOK{Jg+-;9J>JKG3o)48YmhJA($X^Ieh=;vi{X82gAS1re`*}lo zB)vezjf3;q*R9i!r)jXGk1&mZV~Lyi(Nd&am?0 zD3ZEIeoP}i8JuegF(q=r%%bQ{N#vp_+<7^>8aAN2M!l+|1%6MTcCEVIl7Y2+z`%5b zhds0Ak|M5|2`r3t>N`ORnSHyS<1>Ia9B z7PU4Yp>HMwNuOLPaTV#dp%THM{4)amk_Pq)AzB5Hq^HL$Z}8Y1-f`mKTF*PUT!8~g z^u@s2g*R+ssaEB=T$bW)y{=Lh%_eJTzO3fk&JqxTmjjcblv&HxP4Fu)?HVghwBI_t z(;@^?{3PDpq=v3+P%c}1)#Yk2($b6`w5x0oYq*c1{q*)!hKL$hfqKn`6!ex>HjGV+ zPzb1XS%1Nrh#HT#R5d+bv?*+dDXsDa`;f;~ZU?($CHcDe=kG=xSENbHYHTJ;hN~0(&Nlaw`}D*>q&GvmKE`Lbl|`6fv7S|qJ~oJppMpy{Oa*ROM$A;6 zCYY7t2gvyfmuhI5YujvnqO@*iW7ED^dBAK03GM zvZgey@!3wLs;Bi2uyJ?bHzKJ-j0EX#zayA2xNJp$g}a64puo_?$<`3VO+@KlVWrZ; zVw){VeF?11b2Wao>5_L1ISmx*2}a-Vepsj3|1EG@*n4Cr>!kT~O6SplB}b5-L(uit z#0Q+-M7GDtCCr;Wp;s7-pUK@Lo|snckw-qH_IPeRRkNrc9ye5`@)bCcFUi=opqC?T zG~TO8{2rV=7q0;Qx`r-OFT}4=vgElLRU|46sqFyaoHV%5Tlr^q)W$w_f_%`K5kQ*? zTA*4o5-6Q=J(DAPBaXSM4%JFae3=KJI#Z(sQY>%VW-o^fYaf*cS+b=Su2_ku@g^SF zr$}t)4TMPU`QqADL}#Tm*keK?IaO*y zMpfGu)kf9Ou?aOCW;nyjC6RDM>6{AK5hx5rxURjdj?G7umc7p=K(_6*nsuVroy(G# z{di{$Uk7du@5b8`yz~`sN3Lmd_8g^5VP%FumHMj&NLrBZ^buFb*R2DNii`KePgR* z6>nodCz+_}IgV+dG&%zX$skqA0Jq?HWHgn4T9Y!)#L_yie5zgc67ECGeH~vsc6eBUqUNtLUi}t)P6j|-DrB* zM+fUNgbUp0jtrX@UngQHcnK{Q^!@uy&ZMT}w}hgZCe9M2&SKrZVN$e{&s}e5r&t0; z=Y>-{-QQqMLAlcdK|UE?)f>SJZc8lgu@X<+!rNB1Tjz281ZEXc($&Od^o1}6Ya;W` z{>4df!KV&wcO>1()XVJ0=H-R$xBK$04=wch*BxVOE*EWNAyFA8;f(FkA)|5En8VMh zisziF`2P=7^_`>Q^p)X22+gUau<{!ZNdh5oI$u)<8}HS~JYiCGX59BQnKbXKg-1BD z)Sf`SN!YprEZ`O$0dl7NzO=HXya#uTP!JfSw9!%@4=noQdNy9vCk5e>qnWeQvw*YX z)A5_%P7baE#O4TSDaoyAop@c(p-0K>3Z$CEUX8zf|Rc$g*%Lk?aBA0 zHk**AypD<$+DzBaju%zBL*=-)JYm_}Ncv@9d>$c^|RSHqYBy8PTwhZy+X_0&S|HZ&BjN7Y z)_$bROAgv`Rl}B`htYKKtNkH34N}(aruiW2j%}Hnv>ob%`ug6U*m%x~iJ3i|7Usq8 zdFEQqHc)lxCdFXAIxUI^Lo9LxNw7wj03A80yjxYeDB|hvnC@hU&>7xzh|#o)K9st} z)}tEVUPy00Cym{zC8FY4Dj&Jb9=dW^2Ez-Q5DV0mNh_Q8Dsb?bd6;w9Juwi%-OPb* zl}82jdPdGASPE=SAgu)L?c(3MCbpmO5YI9@b*O4KQ`vPr=%neenvYF43ieCGX9$(< zp}SvG;nwBF$zDzzc~@2j2WaEgNSF^?dvA~#z&_(?-x$q8D7<8zxLH+Et!Mu;p-P}{RN;~Y933HWp(V8*d5 z838)ymamG1Ks|bt&@f?A*n?_pSaPHaX7YS*8@U*cqWj#!wM~Mis7AL{u7?t00@%8F z$fE6>=zH6OPGdsTDK1T$HqrQ|0tbT_jqW&Loy2};A8cl?vhzS~o3 zjX69@&3SI~_*j=!{@PX~qgLLH(1mN+wtd(;5b1j>QC;_wcYQ}ggmBkl$=n)G7CdkF zKZP`3<})c4-L8o|)J=te?dkPit{ZUVg=`;Rq9Bc26~ddK@pyx(xP}x_pb7axU1x&E zovk5%us+H@HjMr10YlH_xtLi$#;hlO6n6{whj>2G+8}$ShJcxZ9S;w31trW+4I{BX zH`uy@C&PRk4Bo^Zt}PVit4#7t&_eHVM|KAW=$2EHiXaSRU=vgBEenzMdi-s@P2{ok zFD)WLcR#>Wlu;6@nIMxl%)6A-lv?8YJ{cgbLG1%<@p1UFYOJKnI|KtqeQ)Te1r6+# z$=arJTo-jRP;}FBze6j|D@;DU85Ojsg5yqA#y4Gd=j!Oht7?u}W$b!A2dwE@wadK4 z*794E5rc};(~Xt6ak{Mjj8OshaHqUo>B;7a)Z*bzMdzFMvdGDI9sG0qR^D>XnTT+* z8XLv{ht3$tIk(-TK2t?0=*5Ul_j!_iC0C)XHZF4&XH$s3^UBDEyz~i`6_rqG@sOiG zl)T<}qpqf9#IWd{I;iY%Nx62}*jl}D#f$-~Ah!hn+#-s=_<_Dz7zn*Dc6jFjk&7{e zjABJdQFT*bKA4q}d)`fwbciPgd8{g+z}n0Cr4Y-R!;_+`o|eq(l_cAjxJF8l8^NWi z*DLLz(;MGBtx1?xV8vv<^iA?`L7x64H+{E( zcnIusRX~E=x85(9M}f;y`vld2T{Ne&6x(T4Oh-yAhC1x@0`C=5F_H~5#0&(GeeqiJ zijJi@^??hvmAC4?Xts7j9;TjY5SUwIG|U>bf>ldbQJVWJM83@oumyE@*8N58%pB8{ zQ+g<`F%1QsPb;d;@!0cW(w5edo9_{Sv#7#ar{Ch(aIILYW~=0J118gb6U_|P>9fd% zp2AxP_1Ss)7N@|an=CNQxfnu6g$TBMBfAo_V_4dk!#P&>;>QVQGy6TxJ{?d#Y99=$ zphEScwjEvnZX+w+v~B1aLg5VK2ci8w=8~Kf+Rri9#mdXp_2;1WyEDu0&gWAhzZKlU z-qx1i#@5T-*7)g-#O@{y^CEFuehSPY3M#IeQPl~LJgA;u(o?-gqfmX zhK{lyUPGCqF%C07V5bg|Jm2c5=M{@CBEj*^GAB7rxi&}&&UYdKOM`QTf_2!6Uq~|( z;!}-0on_qmRux&5b8U%CCSOn)Hi9+?}&a^0Fe z_WI@}&M*_-=X*JH#~yi;zP$}l0MrJWQkPn50(~CHsBsxkybRq&d|F+_gvzW4MUgx7 z>4fR=YvT=LVwYyFmxiVHvNPI9uSC#3gXeK=`?qf?h9?ok5|!_%t$v*H978lH3=Mp} z*~rw{pF`m>*&t07P(SA1m|r@wW*@WRDfwahBS}7<%j-vP!o?t}qf(;n!(&28)k}v& za&z1-jX7P18k>U9ULU)o+#gx$H+p>Z&EK{hL^SF3)zEMRteHtZDvFc~Q4Kc&x|$L9 zrpzIz=!^|(t_h!Bb*+OHv>V=7<8p3dxNFo?g7nOXJ4tdXBW<`L744Qh_(yhwDpmAv zBC3h+aYM!eS%tI>CDyf6bnI#3Tej+1@0IiOn3+-1Jkb$3aoy&?fAdV^=#Eh-&6~{< zv$~?qGE4nk-jZ>c0&lX);>muNX2xTb_^wrQn~6%5tfL*-lxT6_*CnFxj}_VajoM>3 z%C%dMCH2#mtBU>h8&b^1ARvg8p1d|x26HEhyAuKIsKk`9#Q1T6G`G@%gA+>W-GjiQ zS(DYrpRRW78I@23Oe(AI5-$l9fPK9O-s?{eor$it;qzNC=NvwMC#RAPl4ED7e=NGc z%0^Sr@@hla79M1u^pRi&tG$)$YX!o4Hq6VZ$449Al~}1EozUrs1vM7`(e|y2M#8J5 zNSe`QWu4oPKHPYa7~r&VDeHj;KVB;O;QEt-FVVErO`84L?*6i1YS_rdx*uOLwjo9Heyly2Y&67oHNa#BY=zpLf33 zxX!}t7Mwq>EPNenh>vnVh#irCx5)xWeWdmNPHDTlMOX1!UhTVgO{j>tztVs!>ef(9TB;bBz)SyG#XPU-+(-c%au?U1&Hh)|U#prI z&KFh?%z1wP8TJQ_^B2PJis6N(_}wlNubmRFYYp-TP(iTM-@*KyBKd1e{(5%&m4XWQ4+Z{trGHBCeUkiz{W~*X z(D-*F1)QC&5dYzU{UG%pwf`Q>@+0>AM{;%sJjeR^w7&=c70Lf+xC@&9ZWnO6{|($f z>;E(9|Hyy~_$%7~k)t5E@PEwkua|&d+xpiX;a8$PivMC~{-TtNM8EojmMZqSm;e9} Qo`0U6zsJ11_zMB>5BJAsKL7v# literal 0 HcmV?d00001 From 873ae5c24271ea4b8a0307499b0c950a54f28a9e Mon Sep 17 00:00:00 2001 From: Yuriy Lesyuk Date: Thu, 29 Dec 2022 12:06:52 +0000 Subject: [PATCH 04/11] fix: refactor .jar binary removal --- .../hashicorp-vault-integration/.gitignore | 1 - .../hashicorp-vault-integration/pipeline.sh | 26 +++++++++++++----- .../jar-in-jar-loader.zip | Bin 7686 -> 0 bytes .../java/vault-keys-to-jwks-0.0.1.jar | Bin 6281 -> 0 bytes 4 files changed, 19 insertions(+), 8 deletions(-) delete mode 100644 references/hashicorp-vault-integration/vault-facade-callout/jar-in-jar-loader.zip delete mode 100644 references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/resources/java/vault-keys-to-jwks-0.0.1.jar diff --git a/references/hashicorp-vault-integration/.gitignore b/references/hashicorp-vault-integration/.gitignore index 0b68beda9..4ed1f3cb5 100644 --- a/references/hashicorp-vault-integration/.gitignore +++ b/references/hashicorp-vault-integration/.gitignore @@ -1,2 +1 @@ **/edge.json -!*.jar \ No newline at end of file diff --git a/references/hashicorp-vault-integration/pipeline.sh b/references/hashicorp-vault-integration/pipeline.sh index 5bea60624..606864c0d 100755 --- a/references/hashicorp-vault-integration/pipeline.sh +++ b/references/hashicorp-vault-integration/pipeline.sh @@ -24,9 +24,18 @@ set -e SCRIPTPATH="$( cd "$(dirname "$0")" || exit >/dev/null 2>&1 ; pwd -P )" export PATH="$PATH:$SCRIPTPATH/../../tools/apigee-sackmesser/bin" -TOKEN="$(gcloud config config-helper --force-auth-refresh --format json | jq -r '.credential.access_token')" +# +# Java Callout +# + +(cd "$SCRIPTPATH"/vault-facade-callout && mvn package) + +# +# Vault Proxy +# +TOKEN="$(gcloud config config-helper --force-auth-refresh --format json | jq -r '.credential.access_token')" mkdir -p "$SCRIPTPATH/generated" @@ -36,7 +45,15 @@ export MOCK_PROXY=vault-mock-proxy export VAULT_CONFIG=generated/vault-facade-config mkdir -p $VAULT_CONFIG -export VAULT_PROXY=vault-facade-proxy + +## GENERATED: configure and deploy Vault Facade API Proxy +export VAULT_PROXY=generated/vault-facade-proxy +mkdir -p $VAULT_PROXY + +cp -R "$SCRIPTPATH"/vault-facade-proxy/* $VAULT_PROXY + +mkdir -p $VAULT_PROXY/apiproxy/resources/java +cp vault-facade-callout/target/vault-keys-to-jwks-0.0.1.jar $VAULT_PROXY/apiproxy/resources/java if [ -z "$SKIP_MOCKING" ]; then ## GENERATED: generate config objects [targetserver and kvm] @@ -49,11 +66,6 @@ if [ -z "$SKIP_MOCKING" ]; then export VAULT_TOKEN=dummy-token - ## GENERATED: configure and deploy Vault Facade API Proxy - export VAULT_PROXY=generated/vault-facade-proxy - mkdir -p $VAULT_PROXY - - cp -R "$SCRIPTPATH"/vault-facade-proxy/* $VAULT_PROXY # adjuct for mocking export TARGET_SERVER_DEF=$SCRIPTPATH/$VAULT_PROXY/apiproxy/targets/default.xml diff --git a/references/hashicorp-vault-integration/vault-facade-callout/jar-in-jar-loader.zip b/references/hashicorp-vault-integration/vault-facade-callout/jar-in-jar-loader.zip deleted file mode 100644 index 4ee2ee69266dd427cc229c23e3fff1454116e0fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7686 zcmbtZ1z1$u+NOpa$)P)ip+q_*B&EB1XoeV4N{|o`kd!VZC8a@-ZlyuGq`O0f-#OlU z&(Z&$^WSs-cb;eOHP5rY_g(AR-`e|I>s5V(jDm>($A}`I;%|+ATu{E>om{OsRsXaH z@E<)O77n(~Fvwr@#QmkGou%7f^d|i`y=|dx5Lc*~!(W6k|5ccsnX4`I`^CY@%o5`I zFBbIQrk$nEb}od3fN+hBfFOhb`fb|(oD_Vh{}TU&ML}Lc$_WZ{GlROpI4m5@U@$}k z+}~Kf4+R0v2uDVoqso{nsOQ$RRhz0iKB$m+NfmKEA|g1O%eGOu(QR+k)1yTZn#nXkwEy3Fp=b;N~llNw*TIorurUIm0$kPWQZ9SbY z!@g-^=Z?qFQ}s(xq2c+p;~jjdoEuNuW>!$A%9F>a0=|*D2_K-1L47+xdEK0lV{Y$0 zKdGtn#-}((AbLuB4y!yb`LPtta7a_1tfTQrcvPOHZ|RQImCV<;Fbk7*k&cLr&gNpW zV}_zy@5j8Qi|TH$I7KIVH$k6MHu^NOeboHWAeDYM)n*B}LjvAVwd z_yw`etIv!g9kA49yoW7<2BXrvV(Zd{ zml%y{4R+$^cFt7(x%7Ty=?%xRu_+<~LjU)?lKVSZYUZjAbG1g@i3`^cU8sA6ByU(lDK-e~cI0?m@gf}LE7 zw((T(LlsW2#`qqJ38X(^TS`r%l{$lxfdd#4d3u1;GsE_5&F@MwN7zb>fsbS&{E;Ll(yGhk1WVEZ$MCbtZ^6zh95fB1`@PGSce}9;88aUvTaFps`c!AbP{ckPfryWqyu@Hk0>2e+L z`B=5p2(k^sOQ4brv|JLb@gEpS=Q8eaS0#&=*5-LWGBB7`z^T!%7+rMt&AA<_g>3d zbXSyyou3QScDT6>jGN~)r$UmyhBH?C&tn=D=?OcslDWJGd7*&M?Y`8gDsrPq316RY ztI3Lock|2|yXUli?H%9NmUqBs-XY=5pq=N+MatW`Gv>^P2|}}LLJ=___|_QXQ3QU+ zOpr{>rP$0)dN5Y1T*{e`bx9vyNVJoybu27(Dj*fg?ri(nyFnsN#O1?101?1rgJf>m zdB`-LXK+dce7w&!A{2 z7O~Z9vC*vCqbP%+Y!}qC`O$RCg|)By%SgGp*-d6=vU;Sn3JR8Oj=Y8lyb=VmqG&5} zRWl03jpS(0lPY``aw%&?df6uz+%C*S?29X)(gjW*0;xH@u_8lm+zb8?7%cuM`}~U0 zT&padiCX)Wwge51d4^O{+1Z;yspeJ+AqZEhZEmY1IP>Fn1V*uqxLkHzEmUbZ0k22N zK)+O6YoR+mj|pH8s1?(3dd=G8A%jj~6zMcIc#{mRu~EBg7Ip1RYs{eLSJ^t+$~I%y z>vG`bHrcxSXa4qqaT^Kq~k?LFr0HAzAYTnW>41ZDbu3|%eXv= zec9Z<=Yo`m`KiLEd*9G|x-2b8yp6MK05r!?VaZ2D$iGSyG+>(566kM|`G#AR{lv{m zu7+ElLT&fZt&$mv?%+dv%?gpW2%cwiu{MQ#^wi_B%izDG#Rf^GZ70oln;x1cpE#K* zUJ5o5@q*=tMh94oq}u`OIw9`#~Ax5cic7~;}s z%OJ(EdKf1ZY7ISHfhNK1VH@kF^`(sCjScK`qjMwE!!s)#l$TE;d|VQwp3Hb`d(hb) ziL}zU?jp(w$*_$(9J`q{patc-`l4U3TslvdYyrVyK{1#KX>8Z)$s8(-W5PP9K5t=u zhFx59L&*%En8sd(4EMPXj0Fm&yNzPaRZ!vdhn~J@B@84+dQ)SBsXkqH@VMPEhbgRicM6TtFnx#}%$ibduiB-QO_<wPFlnAJm^ zEb1d*B|zDciWM^vVo99b<%%Al*7cI1SCpZPahVmI*{(BPa_T3qH0cWow9=YoH9K=B zTx{jHU3_6x$HXRzOg$^weUY?0ds!BA@HysEZFXc8+!A&W|ENxvFfl&du0U)0q4$wg zV6=8et*vboA88-iq>2)iq#dw|De_5bYxP`7Q3_F$KDGbzEbyiL$8bK`@`$Xyr$P7G zt{4(6FDx7X;?;4<^@V-176#m_puq8O;? zuk6;Iliy>TwN<$nidh-wf8t($r>@JHGu=De{ssOf>=Tdsfb>f?5#BnzWkVtxu2z$B z3aBsmMF1m*w6ZAmdr4nR`BHMJt8cz6?G!gjjh!d=UcR?WMLbb$vnE~dP$>iWmS^{d z=ms#nQ-@yOn5^li{n5u8k-ayyp*z)V9$oTO}mStU9ety zuxMFo)5itTz@5iItM&dszbGnwjWv0Rjg=P#5m{V1#m2{Cr8;iI{N_ z@+%i@`$hE*E*7ddIFs2F64wh)2!ShC?{s)g**Q9-H@mw?X!o=zbn8~sDQM4(7t*O@ z=&5Am$;a$TWo6Jgdzi#T1)_A85}(5ask&(Q*>cCf9NN7LWibqAHjbQ%eS@g8a#kPM zP@i~zQCtj%vAmr;r5wM%+!VUd>6s;xZ|$ntzoBj=$Mgjuug}o=!F-}IQ=f~T83VG!9MSp0}B+!01no9lgRTH`2;3+z%3|a*mTEhkI zbqf1@)R4#Hvik?`JIgP%y3)Uqz0X-+n>#W18lAe+uxh)Kn|z#h@0?uL0O%7(u8Lg1YV)M$5V1gp|1+d-xL-pFFTRHB%H_K9Jwiv z8Yn)HkoGe=dkgxQiQ6T;X}msNm7`xa?|xo%eNE8L>Wn|D{Op)69seX+NxNO>!ZW$? zd;}?yYPvJ4Lx9l*`<(kd|NTY!YL^6F=NI*!6@>f^nNxY}Ai`>@*A6{n=3;y0;*p00 zTha-t^hAfHB+`;ArE;1P(sEfslTy#R4!;rqT!)@(G!LA7-w7-O5D*^xjXD&*z0guu z{Js~4LM+^DouI$hqHroW;IwdLXc%aWsp8&XgOF$eEUNDeK2MTA#3Qt67Dtpuer_n# zVIiktFGRb=P_*iFIJNmah@Sg;^ZA2*7ZrVloVBj7^xe$)Z|Ae3O#wGIm*L8TrjI1i zI&xQ&G@-gyU8{BtOK9q!okR&{ROJpH7=A7z$l063?09l)CX5v*@+CoyP+g zRBh`gT+vaY_7w`oN*QX>l>6~`Nq2hTL+=3rH~Fui4*YB=8Y?%UMn%_6Edyutb`~Nz zydpz)QjE8|C;?I=NiH}R_~t+bZUEqdOPL4Vc^=e-oka_{!$dO10eO6{Z@A`tomdr( z1sMj$5x1Rtx)xM*#|R+*dUFpmu)hM=31HuB8?TlxsL42Z|9Q0^6o7O1LIC%Ga$itu zYH46Wk00OhZS6r!uq@D%Jj7vJd&DKiD-di~ZP312kkWzyo%i(V~|c zI*khi6ltTV?yG-I+$-yeY~=;)nA1J>EwGB`3X|3k%GEP?K_p_JEyBW%2iQY6=;NsD|u)#rBl%tbC>!W`*8j!Fr`Pv8vKMx82G^4{4jra&byNGnB z0?6<32CzcFh}&1yS6=V;yeT&PAbC^{qaZqVLGiZxl4TuRnJWO-+chX8)qv@Eg=C;d zSG4Vo$<|QRu9_r4b-P@=h!m-HT#4eVM`8;D9s3k*DdXL#~DE&&0Wl&zF$T z9s&kS+ek{*PS)zT+C)m5Ti6EX2WjcWkvFD8_@`e|1%#Sh0sJRmJg1*vUlDJZV_;7A zsu^r1a2irxT3cnNWcUQ!u1+oD_E50h;cCy_I7rQ1|MWpT+2?GydS3OiY%SR*$*IX# zAXAIDrGeA+uBKL;t6Daf&TyT_UzOQG_R1bgx6P@g)JUXaiI zqAArzfpOS5)>)a>afq$lLzJu=qwa>WZxzh)eEE)G5x-B$w+{&{D<6%e2~P9Z(1IZC zr&~o{;<@rcv&$OoAr4O6b4iN# z?P+3=%x}ZHE{@+piq5Oev=@Dsx#LE$|#7 zihTwUmiD>^5$tMvo_mcCD))%sC`+@EUCN!m#;Pk58a?DPJGD#{R(nP3OX@t^O3B9c z#yW{0d;--h-z3UkDal#Ke{oGCR6Fq*Au`1GBc-m=!lY2nFwTs{_Mrx^mxD=fNqjZM88J}@i<8AzG{~R2iY@K_74}g^*nx)o9^PbALuSbsIIUH za8h%b7Q?B4<>mU1ZYm&2ls=1Af+MPt@%k5Z@0o-Qcoq))nEQj1KTok>ACktafF8Ld z@oxHJzpWiSC%G-K!nt~R3)srija&w1b%0&*F$}GCK{C4Jd)Y2Tq~h}TS;yK1)2$Z) zwT!ydTGLKdY)4zfB(sA3~9&50VCslTgc zk@5vVXen1$4Rk(r5Ido%BBCc#!LO-w5s9Y@y&UAuK=Ksn`5ciP+IMjc-al#xw7(>q zs*EDHS;@C6ZL3aktE(Yu(JYm>B`_#HB5G+T;5{Jfd9Yk7tNSIiSw8c|WK=M{AJ86+?-s!e}4TtE1H~9*Js9>nb;&(GI`b+7R6K=w>ev(xD^Mf`^dp`1G)t;*}Y;CyIzX9 zzo3Vnjrt`!W!HD!XQ<&~uFwDW=!!M2KJp70J}^q$gMHa+Uz)kZ`0iW72l%5KnG>s{ zXST;k3wWbK7kqTw~s^C-rd)5^%@t*xN_rf`f-fru%apY&UjUxzH$Wtm*_B>!X zK2Ak|N@{`DfWiO5yuyl=E^WtiXWdt6n{+N0$jG%_A4Pd*_Wh}Suxa)aqd28^WX>@P zdRdI5HPz6T@roYjQ%>n^=G@nvd5m^t+7kN`(_7Z=R!4w7=w7Lte$u8&?P_E3Q=5UiS^pRAlxbzPg&X@Rg zP8xh}$-d0Jreb~hiF#E3M#ivuTr4N9^~IgL3Em2%pXeL?a+%GrAQZ#N>S+Xa1X|uBx=+#1M+Xw`^VHzFV7Kk9;CM^s8oy!Fi?j;y0|X-cO$i)kgqSI62n$-^%x-z$SzL`ycti_on~= diff --git a/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/resources/java/vault-keys-to-jwks-0.0.1.jar b/references/hashicorp-vault-integration/vault-facade-proxy/apiproxy/resources/java/vault-keys-to-jwks-0.0.1.jar deleted file mode 100644 index 63b7bd22ce6eee7d36bf36018ced74a37a35214e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6281 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 Qo`0U6zsJ11_zMB>5BJAsKL7v# From 770ed454d3fa473f161b253d3ee2b8134f290a85 Mon Sep 17 00:00:00 2001 From: Yuriy Lesyuk Date: Thu, 29 Dec 2022 13:15:47 +0000 Subject: [PATCH 05/11] fix: refactor .jar binary removal --- .../apigee-lib-install.sh | 39 +++++++++++++++++++ .../hashicorp-vault-integration/pipeline.sh | 8 ++-- 2 files changed, 44 insertions(+), 3 deletions(-) create mode 100755 references/hashicorp-vault-integration/apigee-lib-install.sh diff --git a/references/hashicorp-vault-integration/apigee-lib-install.sh b/references/hashicorp-vault-integration/apigee-lib-install.sh new file mode 100755 index 000000000..9d1f723ee --- /dev/null +++ b/references/hashicorp-vault-integration/apigee-lib-install.sh @@ -0,0 +1,39 @@ +#!/bin/sh +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +export APIGEE_LIB="$1" +if [ -z "$APIGEE_LIB" ]; then + echo "No apigee lib directory is provided as an expected argument." + exit 1 +fi + + +if [ ! -f "$APIGEE_LIB/message-flow-1.0.0.jar" ]; then + mkdir -p "$APIGEE_LIB" + + curl --output-dir "$APIGEE_LIB" -LO https://github.com/apigee/api-platform-samples/raw/master/doc-samples/java-hello/lib/message-flow-1.0.0.jar + + mvn install:install-file -Dfile="$APIGEE_LIB/message-flow-1.0.0.jar" \ + -DgroupId=com.apigee.edge -DartifactId=message-flow -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true +fi + +if [ ! -f "$APIGEE_LIB/expressions-1.0.0.jar" ]; then + mkdir -p "$APIGEE_LIB" + + curl --output-dir "$APIGEE_LIB" -LO https://github.com/apigee/api-platform-samples/raw/master/doc-samples/java-hello/lib/expressions-1.0.0.jar + + mvn install:install-file -Dfile="$APIGEE_LIB/expressions-1.0.0.jar" \ + -DgroupId=com.apigee.edge -DartifactId=expressions -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true +fi diff --git a/references/hashicorp-vault-integration/pipeline.sh b/references/hashicorp-vault-integration/pipeline.sh index 606864c0d..a144e6daf 100755 --- a/references/hashicorp-vault-integration/pipeline.sh +++ b/references/hashicorp-vault-integration/pipeline.sh @@ -29,6 +29,8 @@ export PATH="$PATH:$SCRIPTPATH/../../tools/apigee-sackmesser/bin" # Java Callout # +"$SCRIPTPATH"/apigee-lib-install.sh "$SCRIPTPATH"/generated/apigee-lib + (cd "$SCRIPTPATH"/vault-facade-callout && mvn package) # @@ -48,7 +50,7 @@ mkdir -p $VAULT_CONFIG ## GENERATED: configure and deploy Vault Facade API Proxy export VAULT_PROXY=generated/vault-facade-proxy -mkdir -p $VAULT_PROXY +mkdir -p "$SCRIPTPATH"/ -p $VAULT_PROXY cp -R "$SCRIPTPATH"/vault-facade-proxy/* $VAULT_PROXY @@ -57,7 +59,7 @@ cp vault-facade-callout/target/vault-keys-to-jwks-0.0.1.jar $VAULT_PROXY/apiprox if [ -z "$SKIP_MOCKING" ]; then ## GENERATED: generate config objects [targetserver and kvm] - export VAULT_HOSTNAME=$APIGEE_X_HOSTNAME + export VAULT_HOSTNAME="$APIGEE_X_HOSTNAME" export VAULT_PORT=443 export VAULT_SSL_INFO='"sSLInfo": { "enabled": true, @@ -68,7 +70,7 @@ if [ -z "$SKIP_MOCKING" ]; then # adjuct for mocking - export TARGET_SERVER_DEF=$SCRIPTPATH/$VAULT_PROXY/apiproxy/targets/default.xml + export TARGET_SERVER_DEF="$SCRIPTPATH/$VAULT_PROXY/apiproxy/targets/default.xml" # shellcheck disable=2005 echo "$(awk '//{gsub(//,"/vault-mock");print;next} //' "$TARGET_SERVER_DEF" )" > "$TARGET_SERVER_DEF" From 3fc2497956461019433032d255d5aebe2c024d47 Mon Sep 17 00:00:00 2001 From: Yuriy Lesyuk Date: Thu, 29 Dec 2022 13:31:52 +0000 Subject: [PATCH 06/11] fix: refactor .jar binary removal --- .../hashicorp-vault-integration/vault-facade-callout/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/references/hashicorp-vault-integration/vault-facade-callout/pom.xml b/references/hashicorp-vault-integration/vault-facade-callout/pom.xml index 610e4bae3..7d675be0d 100644 --- a/references/hashicorp-vault-integration/vault-facade-callout/pom.xml +++ b/references/hashicorp-vault-integration/vault-facade-callout/pom.xml @@ -30,13 +30,13 @@ - com.apigee + com.apigee.edge expressions 1.0.0 provided - com.apigee + com.apigee.edge message-flow 1.0.0 provided From b824944f17a573b97cb4460b762336ff48932269 Mon Sep 17 00:00:00 2001 From: Yuriy Lesyuk Date: Thu, 29 Dec 2022 13:47:20 +0000 Subject: [PATCH 07/11] fix: refactor .jar binary removal --- references/hashicorp-vault-integration/apigee-lib-install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/references/hashicorp-vault-integration/apigee-lib-install.sh b/references/hashicorp-vault-integration/apigee-lib-install.sh index 9d1f723ee..c11e9346e 100755 --- a/references/hashicorp-vault-integration/apigee-lib-install.sh +++ b/references/hashicorp-vault-integration/apigee-lib-install.sh @@ -23,7 +23,7 @@ fi if [ ! -f "$APIGEE_LIB/message-flow-1.0.0.jar" ]; then mkdir -p "$APIGEE_LIB" - curl --output-dir "$APIGEE_LIB" -LO https://github.com/apigee/api-platform-samples/raw/master/doc-samples/java-hello/lib/message-flow-1.0.0.jar + curl --output-dir "$APIGEE_LIB" -LO https://github.com/apigee/api-platform-samples/blob/5b67fe2c3ab23514b67d458a19b63159a2e3f2ab/doc-samples/java-hello/lib/message-flow-1.0.0.jar mvn install:install-file -Dfile="$APIGEE_LIB/message-flow-1.0.0.jar" \ -DgroupId=com.apigee.edge -DartifactId=message-flow -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true @@ -32,7 +32,7 @@ fi if [ ! -f "$APIGEE_LIB/expressions-1.0.0.jar" ]; then mkdir -p "$APIGEE_LIB" - curl --output-dir "$APIGEE_LIB" -LO https://github.com/apigee/api-platform-samples/raw/master/doc-samples/java-hello/lib/expressions-1.0.0.jar + curl --output-dir "$APIGEE_LIB" -LO https://github.com/apigee/api-platform-samples/blob/5b67fe2c3ab23514b67d458a19b63159a2e3f2ab/doc-samples/java-hello/lib/expressions-1.0.0.jar mvn install:install-file -Dfile="$APIGEE_LIB/expressions-1.0.0.jar" \ -DgroupId=com.apigee.edge -DartifactId=expressions -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true From 96d9785bf175e15d8ab016a6d3cd10c4691921d7 Mon Sep 17 00:00:00 2001 From: Yuriy Lesyuk Date: Thu, 29 Dec 2022 13:56:09 +0000 Subject: [PATCH 08/11] fix: refactor .jar binary removal --- references/hashicorp-vault-integration/apigee-lib-install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/references/hashicorp-vault-integration/apigee-lib-install.sh b/references/hashicorp-vault-integration/apigee-lib-install.sh index c11e9346e..b80456b45 100755 --- a/references/hashicorp-vault-integration/apigee-lib-install.sh +++ b/references/hashicorp-vault-integration/apigee-lib-install.sh @@ -23,7 +23,7 @@ fi if [ ! -f "$APIGEE_LIB/message-flow-1.0.0.jar" ]; then mkdir -p "$APIGEE_LIB" - curl --output-dir "$APIGEE_LIB" -LO https://github.com/apigee/api-platform-samples/blob/5b67fe2c3ab23514b67d458a19b63159a2e3f2ab/doc-samples/java-hello/lib/message-flow-1.0.0.jar + curl --output-dir "$APIGEE_LIB" -LO https://github.com/apigee/api-platform-samples/blob/5b67fe2c3ab23514b67d458a19b63159a2e3f2ab/doc-samples/java-hello/lib/message-flow-1.0.0.jar?raw=true mvn install:install-file -Dfile="$APIGEE_LIB/message-flow-1.0.0.jar" \ -DgroupId=com.apigee.edge -DartifactId=message-flow -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true @@ -32,7 +32,7 @@ fi if [ ! -f "$APIGEE_LIB/expressions-1.0.0.jar" ]; then mkdir -p "$APIGEE_LIB" - curl --output-dir "$APIGEE_LIB" -LO https://github.com/apigee/api-platform-samples/blob/5b67fe2c3ab23514b67d458a19b63159a2e3f2ab/doc-samples/java-hello/lib/expressions-1.0.0.jar + curl --output-dir "$APIGEE_LIB" -LO https://github.com/apigee/api-platform-samples/blob/5b67fe2c3ab23514b67d458a19b63159a2e3f2ab/doc-samples/java-hello/lib/expressions-1.0.0.jar?raw=true mvn install:install-file -Dfile="$APIGEE_LIB/expressions-1.0.0.jar" \ -DgroupId=com.apigee.edge -DartifactId=expressions -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true From eef0996290a926bc2f0d62069b7dd1fdfa2ddcb6 Mon Sep 17 00:00:00 2001 From: Yuriy Lesyuk Date: Thu, 29 Dec 2022 14:03:30 +0000 Subject: [PATCH 09/11] fix: refactor .jar binary removal --- references/hashicorp-vault-integration/apigee-lib-install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/references/hashicorp-vault-integration/apigee-lib-install.sh b/references/hashicorp-vault-integration/apigee-lib-install.sh index b80456b45..e68326043 100755 --- a/references/hashicorp-vault-integration/apigee-lib-install.sh +++ b/references/hashicorp-vault-integration/apigee-lib-install.sh @@ -23,7 +23,7 @@ fi if [ ! -f "$APIGEE_LIB/message-flow-1.0.0.jar" ]; then mkdir -p "$APIGEE_LIB" - curl --output-dir "$APIGEE_LIB" -LO https://github.com/apigee/api-platform-samples/blob/5b67fe2c3ab23514b67d458a19b63159a2e3f2ab/doc-samples/java-hello/lib/message-flow-1.0.0.jar?raw=true + curl --output-dir "$APIGEE_LIB" -L -o message-flow-1.0.0.jar https://github.com/apigee/api-platform-samples/blob/5b67fe2c3ab23514b67d458a19b63159a2e3f2ab/doc-samples/java-hello/lib/message-flow-1.0.0.jar?raw=true mvn install:install-file -Dfile="$APIGEE_LIB/message-flow-1.0.0.jar" \ -DgroupId=com.apigee.edge -DartifactId=message-flow -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true @@ -32,7 +32,7 @@ fi if [ ! -f "$APIGEE_LIB/expressions-1.0.0.jar" ]; then mkdir -p "$APIGEE_LIB" - curl --output-dir "$APIGEE_LIB" -LO https://github.com/apigee/api-platform-samples/blob/5b67fe2c3ab23514b67d458a19b63159a2e3f2ab/doc-samples/java-hello/lib/expressions-1.0.0.jar?raw=true + curl --output-dir "$APIGEE_LIB" -L -o expressions-1.0.0.jar https://github.com/apigee/api-platform-samples/blob/5b67fe2c3ab23514b67d458a19b63159a2e3f2ab/doc-samples/java-hello/lib/expressions-1.0.0.jar?raw=true mvn install:install-file -Dfile="$APIGEE_LIB/expressions-1.0.0.jar" \ -DgroupId=com.apigee.edge -DartifactId=expressions -Dversion=1.0.0 -Dpackaging=jar -DgeneratePom=true From 3a62a2ec2ba2b4c531a54c0ff7149ad6152b7b22 Mon Sep 17 00:00:00 2001 From: Yuriy Lesyuk Date: Fri, 30 Dec 2022 09:24:36 +0000 Subject: [PATCH 10/11] fix: HashiCorp spelling mistake --- README.md | 4 ++-- references/hashicorp-vault-integration/README.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a4b0b813b..a828d8a7e 100644 --- a/README.md +++ b/README.md @@ -59,8 +59,8 @@ further to fit a particular use case. popular API auth schemes - [reCAPTCHA enterprise](references/recaptcha-enterprise) - A reference for API protection against bot leveraging reCAPTCHA enterprise -- [Hashicorp Vault Integration](references/hashicorp-vault-integration) - A reference for - integrating Apigee Proxies with Hashicorp Vault for EaaS services +- [HashiCorp Vault Integration](references/hashicorp-vault-integration) - A reference for + integrating Apigee Proxies with HashiCorp Vault for EaaS services ## Tools diff --git a/references/hashicorp-vault-integration/README.md b/references/hashicorp-vault-integration/README.md index 3671f099e..bbeafadcf 100644 --- a/references/hashicorp-vault-integration/README.md +++ b/references/hashicorp-vault-integration/README.md @@ -1,8 +1,8 @@ -# Apigee Proxy and Hashicorp Vault Integration +# Apigee Proxy and HashiCorp Vault Integration -This repository demonstrates an interaction between an Apigee API proxy and Hashicorp Vault. The operation of signing JWT token is delegated to the Vault server that is used as an EaaS (Encryption as a Service) solution. The private key thus is locked in the Vault server and never exposed. The public keys used for signature verification are proxied from the Vault server and returned in a canonical JWKS format. +This repository demonstrates an interaction between an Apigee API proxy and HashiCorp Vault. The operation of signing JWT token is delegated to the Vault server that is used as an EaaS (Encryption as a Service) solution. The private key thus is locked in the Vault server and never exposed. The public keys used for signature verification are proxied from the Vault server and returned in a canonical JWKS format. ## Technical Setup From a03bf6b280e71c0c078f2a2f4b79029e7360ed89 Mon Sep 17 00:00:00 2001 From: Yuriy Lesyuk Date: Mon, 2 Jan 2023 20:45:51 +0000 Subject: [PATCH 11/11] fix: typo --- references/hashicorp-vault-integration/pipeline.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/references/hashicorp-vault-integration/pipeline.sh b/references/hashicorp-vault-integration/pipeline.sh index a144e6daf..6a03b8afe 100755 --- a/references/hashicorp-vault-integration/pipeline.sh +++ b/references/hashicorp-vault-integration/pipeline.sh @@ -69,7 +69,7 @@ if [ -z "$SKIP_MOCKING" ]; then export VAULT_TOKEN=dummy-token - # adjuct for mocking + # adjust for mocking export TARGET_SERVER_DEF="$SCRIPTPATH/$VAULT_PROXY/apiproxy/targets/default.xml" # shellcheck disable=2005 echo "$(awk '//{gsub(//,"/vault-mock");print;next} //' "$TARGET_SERVER_DEF" )" > "$TARGET_SERVER_DEF"