diff --git a/App.tsx b/App.tsx
index 2c1bdd4b..6dfe535a 100644
--- a/App.tsx
+++ b/App.tsx
@@ -1,3 +1,7 @@
+import { Buffer } from 'buffer';
+import RNBlob from 'react-native-blob-util';
+global.Buffer = Buffer;
+
import React, { useContext } from 'react';
import AppLoading from 'expo-app-loading';
import { AppLayout } from './screens/AppLayout';
diff --git a/babel.config.js b/babel.config.js
index 5de19159..a6c4cbc0 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -1,11 +1,22 @@
-module.exports = function(api) {
+module.exports = function (api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
plugins: [
['babel-plugin-inline-import', {
extensions: ['.md']
- }]
- ]
+ }],
+ [
+ 'module-resolver',
+ {
+ alias: {
+ 'isomorphic-webcrypto': 'isomorphic-webcrypto/src/react-native',
+ 'fast-text-encoding': 'fast-text-encoding/text',
+ 'jsonld': '@digitalcredentials/jsonld',
+ 'jsonld-signatures': '@digitalcredentials/jsonld-signatures',
+ },
+ },
+ ],
+ ],
};
};
diff --git a/components/VcDetails.tsx b/components/VcDetails.tsx
index d9b180b0..4e6f5e06 100644
--- a/components/VcDetails.tsx
+++ b/components/VcDetails.tsx
@@ -1,10 +1,21 @@
import React from 'react';
import { Image } from 'react-native';
-import { ListItem } from 'react-native-elements';
+import { Icon, ListItem } from 'react-native-elements';
import { VC, CredentialSubject } from '../types/vc';
import { Column, Row, Text } from './ui';
import { Colors } from './ui/styleUtils';
+const VerifiedIcon: React.FC = () => {
+ return (
+
+ );
+};
+
export const VcDetails: React.FC = (props) => {
return (
@@ -18,20 +29,26 @@ export const VcDetails: React.FC = (props) => {
-
- {props.vid?.idType}
+
+ {props.vc?.idType}
{props.vc?.id}
-
+
Status
-
- Valid
-
+
+
+ Valid
+
+ {props.vc?.isVerified && }
+
diff --git a/lib/jsonld-signatures/purposes/AssertionProofPurpose.ts b/lib/jsonld-signatures/purposes/AssertionProofPurpose.ts
new file mode 100644
index 00000000..2693400a
--- /dev/null
+++ b/lib/jsonld-signatures/purposes/AssertionProofPurpose.ts
@@ -0,0 +1,13 @@
+/*!
+ * Copyright (c) 2018 Digital Bazaar, Inc. All rights reserved.
+ */
+
+import { ControllerProofPurpose } from './ControllerProofPurpose';
+
+export class AssertionProofPurpose extends ControllerProofPurpose {
+ constructor({
+ term = 'assertionMethod', controller,
+ date, maxTimestampDelta = Infinity}: any = {}) {
+ super({term, controller, date, maxTimestampDelta});
+ }
+}
diff --git a/lib/jsonld-signatures/purposes/ControllerProofPurpose.ts b/lib/jsonld-signatures/purposes/ControllerProofPurpose.ts
new file mode 100644
index 00000000..b87ced6e
--- /dev/null
+++ b/lib/jsonld-signatures/purposes/ControllerProofPurpose.ts
@@ -0,0 +1,138 @@
+/*!
+ * Copyright (c) 2018 Digital Bazaar, Inc. All rights reserved.
+ */
+
+import constants from 'jsonld-signatures/lib/constants';
+import jsonld from 'jsonld';
+import { ProofPurpose } from './ProofPurpose';
+
+// DID documents can be specially optimized
+const DID_CONTEXT_V1 = 'https://www.w3.org/ns/did/v1';
+// verification relationship terms that are known to appear in DID documents
+const DID_VR_TERMS = [
+ 'assertionMethod',
+ 'authentication',
+ 'capabilityInvocation',
+ 'capabilityDelegation',
+ 'keyAgreement',
+ 'verificationMethod'
+];
+
+export class ControllerProofPurpose extends ProofPurpose {
+ /**
+ * Creates a proof purpose that will validate whether or not the verification
+ * method in a proof was authorized by its declared controller for the
+ * proof's purpose.
+ *
+ * @param term {string} the `proofPurpose` term, as defined in the
+ * SECURITY_CONTEXT_URL `@context` or a URI if not defined in such.
+ * @param [controller] {object} the description of the controller, if it
+ * is not to be dereferenced via a `documentLoader`.
+ * @param [date] {string or Date or integer} the expected date for
+ * the creation of the proof.
+ * @param [maxTimestampDelta] {integer} a maximum number of seconds that
+ * the date on the signature can deviate from, defaults to `Infinity`.
+ */
+ constructor({term, controller, date, maxTimestampDelta = Infinity}: any = {}) {
+ super({term, date, maxTimestampDelta});
+ if(controller !== undefined) {
+ if(typeof controller !== 'object') {
+ throw new TypeError('"controller" must be an object.');
+ }
+ this.controller = controller;
+ }
+ this._termDefinedByDIDContext = DID_VR_TERMS.includes(term);
+ }
+
+ /**
+ * Validates the purpose of a proof. This method is called during
+ * proof verification, after the proof value has been checked against the
+ * given verification method (e.g. in the case of a digital signature, the
+ * signature has been cryptographically verified against the public key).
+ *
+ * @param proof
+ * @param verificationMethod
+ * @param documentLoader
+ * @param expansionMap
+ *
+ * @throws {Error} If verification method not authorized by controller
+ * @throws {Error} If proof's created timestamp is out of range
+ *
+ * @returns {Promise<{valid: boolean, error: Error}>}
+ */
+ async validate(proof, {verificationMethod, documentLoader, expansionMap}) {
+ try {
+ const result = await super.validate(
+ proof, {verificationMethod, documentLoader, expansionMap});
+ if(!result.valid) {
+ throw result.error;
+ }
+
+ const {id: verificationId} = verificationMethod;
+ const {term, _termDefinedByDIDContext} = this;
+
+ // if no `controller` specified, use verification method's
+ if(this.controller) {
+ result.controller = this.controller;
+ } else {
+ const {controller} = verificationMethod;
+ let controllerId;
+ if(controller) {
+ if(typeof controller === 'object') {
+ controllerId = controller.id;
+ } else if(typeof controller !== 'string') {
+ throw new TypeError(
+ '"controller" must be a string representing a URL.');
+ } else {
+ controllerId = controller;
+ }
+ }
+
+ // apply optimization to controller documents that are DID documents;
+ // if `term` is one of those defined by the DID context
+ let {document} = await documentLoader(controllerId);
+
+ // Try to parse document to JSON
+ if (typeof document !== 'object') {
+ try {
+ document = JSON.parse(document);
+ } catch (e) {
+ throw new Error(`Controller ${controllerId} document JSON parse error: ` + e);
+ }
+ }
+ const mustFrame = !(_termDefinedByDIDContext &&
+ document['@context'] === DID_CONTEXT_V1 ||
+ (Array.isArray(document['@context']) &&
+ document['@context'][0] === DID_CONTEXT_V1));
+ if(mustFrame) {
+ // Note: `expansionMap` is intentionally not passed; we can safely
+ // drop properties here and must allow for it
+ document = await jsonld.frame(document, {
+ '@context': constants.SECURITY_CONTEXT_URL,
+ id: controllerId,
+ // this term must be in the JSON-LD controller document or
+ // verification will fail
+ [term]: {
+ '@embed': '@never',
+ id: verificationId
+ }
+ }, {documentLoader, compactToRelative: false});
+ }
+ result.controller = document;
+ }
+
+ const verificationMethods = jsonld.getValues(result.controller, term);
+ result.valid = verificationMethods.some(vm =>
+ vm === verificationId ||
+ (typeof vm === 'object' && vm.id === verificationId));
+ if(!result.valid) {
+ throw new Error(
+ `Verification method "${verificationMethod.id}" not authorized ` +
+ `by controller for proof purpose "${this.term}".`);
+ }
+ return result;
+ } catch(error) {
+ return {valid: false, error};
+ }
+ }
+}
\ No newline at end of file
diff --git a/lib/jsonld-signatures/purposes/ProofPurpose.ts b/lib/jsonld-signatures/purposes/ProofPurpose.ts
new file mode 100644
index 00000000..5e0875e3
--- /dev/null
+++ b/lib/jsonld-signatures/purposes/ProofPurpose.ts
@@ -0,0 +1,92 @@
+/*!
+ * Copyright (c) 2018 Digital Bazaar, Inc. All rights reserved.
+ */
+
+export class ProofPurpose {
+ /**
+ * @param term {string} the `proofPurpose` term, as defined in the
+ * SECURITY_CONTEXT_URL `@context` or a URI if not defined in such.
+ * @param [date] {string or Date or integer} the expected date for
+ * the creation of the proof.
+ * @param [maxTimestampDelta] {integer} a maximum number of seconds that
+ * the date on the signature can deviate from, defaults to `Infinity`.
+ */
+ constructor({term, date, maxTimestampDelta = Infinity}: any = {}) {
+ if(term === undefined) {
+ throw new Error('"term" is required.');
+ }
+ if(maxTimestampDelta !== undefined &&
+ typeof maxTimestampDelta !== 'number') {
+ throw new TypeError('"maxTimestampDelta" must be a number.');
+ }
+ this.term = term;
+ if(date !== undefined) {
+ this.date = new Date(date);
+ if(isNaN(this.date)) {
+ throw TypeError(`"date" "${date}" is not a valid date.`);
+ }
+ }
+ this.maxTimestampDelta = maxTimestampDelta;
+ }
+
+ /**
+ * Called to validate the purpose of a proof. This method is called during
+ * proof verification, after the proof value has been checked against the
+ * given verification method (e.g. in the case of a digital signature, the
+ * signature has been cryptographically verified against the public key).
+ *
+ * @param proof {object} the proof, in the `constants.SECURITY_CONTEXT_URL`,
+ * with the matching purpose to validate.
+ *
+ * @return {Promise} resolves to an object with `valid` and `error`.
+ */
+ async validate(
+ proof, {/*document, suite, verificationMethod,
+ documentLoader, expansionMap*/}) {
+ try {
+ // check expiration
+ if(this.maxTimestampDelta !== Infinity) {
+ const expected = (this.date || new Date()).getTime();
+ const delta = this.maxTimestampDelta * 1000;
+ const created = new Date(proof.created).getTime();
+ // comparing this way handles NaN case where `created` is invalid
+ if(!(created >= (expected - delta) && created <= (expected + delta))) {
+ throw new Error('The proof\'s created timestamp is out of range.');
+ }
+ }
+ return {valid: true};
+ } catch(error) {
+ return {valid: false, error};
+ }
+ }
+
+ /**
+ * Called to update a proof when it is being created, adding any properties
+ * specific to this purpose. This method is called prior to the proof
+ * value being generated such that any properties added may be, for example,
+ * included in a digital signature value.
+ *
+ * @param proof {object} the proof, in the `constants.SECURITY_CONTEXT_URL`
+ * to update.
+ *
+ * @return {Promise} resolves to the proof instance (in the
+ * `constants.SECURITY_CONTEXT_URL`.
+ */
+ async update(proof, {/*document, suite, documentLoader, expansionMap */}) {
+ proof.proofPurpose = this.term;
+ return proof;
+ }
+
+ /**
+ * Determines if the given proof has a purpose that matches this instance,
+ * i.e. this ProofPurpose instance should be used to validate the given
+ * proof.
+ *
+ * @param proof {object} the proof to check.
+ *
+ * @return {Promise} `true` if there's a match, `false` if not.
+ */
+ async match(proof, {/* document, documentLoader, expansionMap */}) {
+ return proof.proofPurpose === this.term;
+ }
+};
diff --git a/lib/jsonld-signatures/purposes/PublicKeyProofPurpose.ts b/lib/jsonld-signatures/purposes/PublicKeyProofPurpose.ts
new file mode 100644
index 00000000..837af7d3
--- /dev/null
+++ b/lib/jsonld-signatures/purposes/PublicKeyProofPurpose.ts
@@ -0,0 +1,22 @@
+/*!
+ * Copyright (c) 2018 Digital Bazaar, Inc. All rights reserved.
+ */
+
+import { ControllerProofPurpose } from './ControllerProofPurpose';
+
+export class PublicKeyProofPurpose extends ControllerProofPurpose {
+ constructor({ controller, date, maxTimestampDelta = Infinity }: any = {}) {
+ super({ term: 'publicKey', controller, date, maxTimestampDelta });
+ }
+
+ async update(proof) {
+ // do not add `term` to proof
+ return proof;
+ }
+
+ async match(proof) {
+ // `proofPurpose` must not be present in the proof to match as this
+ // proof purpose is a legacy, non-descript purpose for signing
+ return proof.proofPurpose === undefined;
+ }
+}
diff --git a/lib/jsonld-signatures/sha256digest.ts b/lib/jsonld-signatures/sha256digest.ts
new file mode 100644
index 00000000..284fcb4a
--- /dev/null
+++ b/lib/jsonld-signatures/sha256digest.ts
@@ -0,0 +1,15 @@
+import crypto from 'isomorphic-webcrypto';
+import 'fast-text-encoding';
+
+/**
+ * Hashes a string of data using SHA-256.
+ *
+ * @param {string} string - the string to hash.
+ *
+ * @return {Uint8Array} the hash digest.
+ */
+export async function sha256digest({ string }: any) {
+ const bytes = new TextEncoder().encode(string);
+
+ return new Uint8Array(await crypto.subtle.digest({ name: 'SHA-256' }, bytes));
+}
diff --git a/lib/jsonld-signatures/suites/JwsLinkedDataSignature.ts b/lib/jsonld-signatures/suites/JwsLinkedDataSignature.ts
new file mode 100644
index 00000000..50fbe0cc
--- /dev/null
+++ b/lib/jsonld-signatures/suites/JwsLinkedDataSignature.ts
@@ -0,0 +1,233 @@
+/*!
+ * Copyright (c) 2020-2021 Digital Bazaar, Inc. All rights reserved.
+ */
+import { Buffer } from 'buffer';
+import 'fast-text-encoding';
+import jsonld from 'jsonld';
+import LinkedDataSignature from 'jsonld-signatures/lib/suites/LinkedDataSignature';
+import { encode, decode } from 'base64url-universal';
+
+export interface JwsLinkedDataSignature {
+ [key: string]: any;
+}
+
+export class JwsLinkedDataSignature extends LinkedDataSignature {
+ /**
+ * @param type {string} Provided by subclass.
+ * @param alg {string} JWS alg provided by subclass.
+ * @param [LDKeyClass] {LDKeyClass} provided by subclass or subclass
+ * overrides `getVerificationMethod`.
+ *
+ * @param [verificationMethod] {string} A key id URL to the paired public key.
+ *
+ * This parameter is required for signing:
+ *
+ * @param [signer] {function} an optional signer.
+ *
+ * Advanced optional parameters and overrides:
+ *
+ * @param [proof] {object} a JSON-LD document with options to use for
+ * the `proof` node (e.g. any other custom fields can be provided here
+ * using a context different from security-v2).
+ * @param [date] {string|Date} signing date to use if not passed.
+ * @param [key] {LDKeyPair} an optional crypto-ld KeyPair.
+ * @param [useNativeCanonize] {boolean} true to use a native canonize
+ * algorithm.
+ */
+ constructor({
+ type,
+ alg,
+ LDKeyClass,
+ verificationMethod,
+ signer,
+ key,
+ proof,
+ date,
+ useNativeCanonize,
+ }: any = {}) {
+ super({ type, verificationMethod, proof, date, useNativeCanonize });
+ this.alg = alg;
+ this.LDKeyClass = LDKeyClass;
+ this.signer = signer;
+ if (key) {
+ if (verificationMethod === undefined) {
+ const publicKey = key.export({ publicKey: true });
+ this.verificationMethod = publicKey.id;
+ }
+ this.key = key;
+ if (typeof key.signer === 'function') {
+ this.signer = key.signer();
+ }
+ if (typeof key.verifier === 'function') {
+ this.verifier = key.verifier();
+ }
+ }
+ }
+
+ /**
+ * @param verifyData {Uint8Array}.
+ * @param proof {object}
+ *
+ * @returns {Promise<{object}>} the proof containing the signature value.
+ */
+ async sign({ verifyData, proof }) {
+ if (!(this.signer && typeof this.signer.sign === 'function')) {
+ throw new Error('A signer API has not been specified.');
+ }
+ // JWS header
+ const header = {
+ alg: this.alg,
+ b64: false,
+ crit: ['b64'],
+ };
+
+ /*
+ +-------+-----------------------------------------------------------+
+ | "b64" | JWS Signing Input Formula |
+ +-------+-----------------------------------------------------------+
+ | true | ASCII(BASE64URL(UTF8(JWS Protected Header)) || '.' || |
+ | | BASE64URL(JWS Payload)) |
+ | | |
+ | false | ASCII(BASE64URL(UTF8(JWS Protected Header)) || '.') || |
+ | | JWS Payload |
+ +-------+-----------------------------------------------------------+
+ */
+
+ // create JWS data and sign
+ const encodedHeader = encode(JSON.stringify(header));
+
+ const data = _createJws({ encodedHeader, verifyData });
+
+ const signature = await this.signer.sign({ data });
+
+ // create detached content signature
+ const encodedSignature = encode(signature);
+ proof.jws = encodedHeader + '..' + encodedSignature;
+ return proof;
+ }
+
+ /**
+ * @param verifyData {Uint8Array}.
+ * @param verificationMethod {object}.
+ * @param document {object} the document the proof applies to.
+ * @param proof {object} the proof to be verified.
+ * @param purpose {ProofPurpose}
+ * @param documentLoader {function}
+ * @param expansionMap {function}
+ *
+ * @returns {Promise<{boolean}>} Resolves with the verification result.
+ */
+ async verifySignature({ verifyData, verificationMethod, proof }) {
+ if (
+ !(proof.jws && typeof proof.jws === 'string' && proof.jws.includes('.'))
+ ) {
+ throw new TypeError('The proof does not include a valid "jws" property.');
+ }
+ // add payload into detached content signature
+ const [encodedHeader /*payload*/, , encodedSignature] =
+ proof.jws.split('.');
+
+ let header;
+ try {
+ header = JSON.parse(Buffer.from(encodedHeader, 'base64').toString());
+ } catch (e) {
+ throw new Error(`Could not parse JWS header; ${e}`);
+ }
+ if (!(header && typeof header === 'object')) {
+ throw new Error('Invalid JWS header.');
+ }
+
+ // confirm header matches all expectations
+ if (
+ !(
+ header.alg === this.alg &&
+ header.b64 === false &&
+ Array.isArray(header.crit) &&
+ header.crit.length === 1 &&
+ header.crit[0] === 'b64'
+ ) &&
+ Object.keys(header).length === 3
+ ) {
+ throw new Error(`Invalid JWS header parameters for ${this.type}.`);
+ }
+
+ // do signature verification
+ const signature = Buffer.from(encodedSignature, 'base64');
+
+ const data = _createJws({ encodedHeader, verifyData });
+
+ let { verifier } = this;
+ if (!verifier) {
+ const key = await this.LDKeyClass.from(verificationMethod);
+ verifier = key.verifier();
+ }
+ return verifier.verify({ data, signature });
+ }
+
+ async assertVerificationMethod({ verificationMethod }) {
+ if (!jsonld.hasValue(verificationMethod, 'type', this.requiredKeyType)) {
+ throw new Error(
+ `Invalid key type. Key type must be "${this.requiredKeyType}".`
+ );
+ }
+ }
+
+ async getVerificationMethod({ proof, documentLoader }) {
+ if (this.key) {
+ return this.key.export({ publicKey: true });
+ }
+
+ const verificationMethod = await super.getVerificationMethod({
+ proof,
+ documentLoader,
+ });
+ await this.assertVerificationMethod({ verificationMethod });
+ return verificationMethod;
+ }
+
+ async matchProof({ proof, document, purpose, documentLoader, expansionMap }) {
+ if (
+ !(await super.matchProof({
+ proof,
+ document,
+ purpose,
+ documentLoader,
+ expansionMap,
+ }))
+ ) {
+ return false;
+ }
+ // NOTE: When subclassing this suite: Extending suites will need to check
+ // for the presence their contexts here and in sign()
+
+ if (!this.key) {
+ // no key specified, so assume this suite matches and it can be retrieved
+ return true;
+ }
+
+ const { verificationMethod } = proof;
+
+ // only match if the key specified matches the one in the proof
+ if (typeof verificationMethod === 'object') {
+ return verificationMethod.id === this.key.id;
+ }
+ return verificationMethod === this.key.id;
+ }
+}
+
+/**
+ * Creates the bytes ready for signing.
+ *
+ * @param {string} encodedHeader - base64url encoded JWT header.
+ * @param {Uint8Array} verifyData - Payload to sign/verify.
+ * @returns {Uint8Array} A combined byte array for signing.
+ */
+function _createJws({ encodedHeader, verifyData }) {
+ const encodedHeaderBytes = new TextEncoder().encode(encodedHeader + '.');
+
+ // concatenate the two uint8arrays
+ const data = new Uint8Array(encodedHeaderBytes.length + verifyData.length);
+ data.set(encodedHeaderBytes, 0);
+ data.set(verifyData, encodedHeaderBytes.length);
+ return data;
+}
diff --git a/lib/jsonld-signatures/suites/LinkedDataSignature.ts b/lib/jsonld-signatures/suites/LinkedDataSignature.ts
new file mode 100644
index 00000000..e00738f9
--- /dev/null
+++ b/lib/jsonld-signatures/suites/LinkedDataSignature.ts
@@ -0,0 +1,468 @@
+/*!
+ * Copyright (c) 2017-2021 Digital Bazaar, Inc. All rights reserved.
+ */
+
+import { sha256digest } from '../sha256digest';
+import jsonld from 'jsonld';
+
+import constants from 'jsonld-signatures/lib/constants';
+import util from 'jsonld-signatures/lib/util';
+import LinkedDataProof from 'jsonld-signatures/lib/suites/LinkedDataProof';
+
+export interface LinkedDataSignature {
+ [key: string]: any;
+}
+
+export class LinkedDataSignature extends LinkedDataProof {
+ /**
+ * Parent class from which the various LinkDataSignature suites (such as
+ * `Ed25519Signature2020`) inherit.
+ * NOTE: Developers are never expected to use this class directly, but to
+ * only work with individual suites.
+ *
+ * @param {object} options - Options hashmap.
+ * @param {string} options.type - Suite name, provided by subclass.
+ * @typedef LDKeyPair
+ * @param {LDKeyPair} LDKeyClass - The crypto-ld key class that this suite
+ * will use to sign/verify signatures. Provided by subclass. Used
+ * during the `verifySignature` operation, to create an instance (containing
+ * a `verifier()` property) of a public key fetched via a `documentLoader`.
+ *
+ * @param {string} contextUrl - JSON-LD context URL that corresponds to this
+ * signature suite. Provided by subclass. Used for enforcing suite context
+ * during the `sign()` operation.
+ *
+ * For `sign()` operations, either a `key` OR a `signer` is required.
+ * For `verify()` operations, you can pass in a verifier (from KMS), or
+ * the public key will be fetched via documentLoader.
+ *
+ * @param {object} [options.key] - An optional key object (containing an
+ * `id` property, and either `signer` or `verifier`, depending on the
+ * intended operation. Useful for when the application is managing keys
+ * itself (when using a KMS, you never have access to the private key,
+ * and so should use the `signer` param instead).
+ *
+ * @param {{sign: Function, id: string}} [options.signer] - Signer object
+ * that has two properties: an async `sign()` method, and an `id`. This is
+ * useful when interfacing with a KMS (since you don't get access to the
+ * private key and its `signer`, the KMS client gives you only the signer
+ * object to use).
+ *
+ * @param {{verify: Function, id: string}} [options.verifier] - Verifier
+ * object that has two properties: an async `verify()` method, and an `id`.
+ * Useful when working with a KMS-provided verifier.
+ *
+ * Advanced optional parameters and overrides:
+ *
+ * @param {object} [options.proof] - A JSON-LD document with options to use
+ * for the `proof` node (e.g. any other custom fields can be provided here
+ * using a context different from security-v2). If not provided, this is
+ * constructed during signing.
+ * @param {string|Date} [options.date] - Signing date to use (otherwise
+ * defaults to `now()`).
+ * @param {boolean} [options.useNativeCanonize] - Whether to use a native
+ * canonize algorithm.
+ */
+ constructor({
+ type,
+ proof,
+ LDKeyClass,
+ date,
+ key,
+ signer,
+ verifier,
+ useNativeCanonize,
+ contextUrl,
+ }: any = {}) {
+ super({ type });
+ this.LDKeyClass = LDKeyClass;
+ this.contextUrl = contextUrl;
+ this.proof = proof;
+ const vm = _processSignatureParams({ key, signer, verifier });
+ this.verificationMethod = vm.verificationMethod;
+ this.key = vm.key;
+ this.signer = vm.signer;
+ this.verifier = vm.verifier;
+ if (date) {
+ this.date = new Date(date);
+ if (isNaN(this.date)) {
+ throw TypeError(`"date" "${date}" is not a valid date.`);
+ }
+ }
+ this.useNativeCanonize = useNativeCanonize;
+ this._hashCache = null;
+ }
+
+ /**
+ * @param document {object} to be signed.
+ * @param purpose {ProofPurpose}
+ * @param documentLoader {function}
+ * @param expansionMap {function}
+ *
+ * @returns {Promise} Resolves with the created proof object.
+ */
+ async createProof({ document, purpose, documentLoader, expansionMap }) {
+ // build proof (currently known as `signature options` in spec)
+ let proof;
+ if (this.proof) {
+ // shallow copy
+ proof = { ...this.proof };
+ } else {
+ // create proof JSON-LD document
+ proof = {};
+ }
+
+ // ensure proof type is set
+ proof.type = this.type;
+
+ // set default `now` date if not given in `proof` or `options`
+ let date = this.date;
+ if (proof.created === undefined && date === undefined) {
+ date = new Date();
+ }
+
+ // ensure date is in string format
+ if (date && typeof date !== 'string') {
+ date = util.w3cDate(date);
+ }
+
+ // add API overrides
+ if (date) {
+ proof.created = date;
+ }
+
+ proof.verificationMethod = this.verificationMethod;
+
+ // add any extensions to proof (mostly for legacy support)
+ proof = await this.updateProof({
+ document,
+ proof,
+ purpose,
+ documentLoader,
+ expansionMap,
+ });
+
+ // allow purpose to update the proof; the `proof` is in the
+ // SECURITY_CONTEXT_URL `@context` -- therefore the `purpose` must
+ // ensure any added fields are also represented in that same `@context`
+ proof = await purpose.update(proof, {
+ document,
+ suite: this,
+ documentLoader,
+ expansionMap,
+ });
+
+ // create data to sign
+ const verifyData = await this.createVerifyData({
+ document,
+ proof,
+ documentLoader,
+ expansionMap,
+ });
+
+ // sign data
+ proof = await this.sign({
+ verifyData,
+ document,
+ proof,
+ documentLoader,
+ expansionMap,
+ });
+
+ return proof;
+ }
+
+ /**
+ * @param document {object} to be signed.
+ * @param purpose {ProofPurpose}
+ * @param documentLoader {function}
+ * @param expansionMap {function}
+ *
+ * @returns {Promise} Resolves with the created proof object.
+ */
+ async updateProof({ proof }: any) {
+ // extending classes may do more
+ return proof;
+ }
+
+ /**
+ * @param proof {object} the proof to be verified.
+ * @param document {object} the document the proof applies to.
+ * @param documentLoader {function}
+ * @param expansionMap {function}
+ *
+ * @returns {Promise<{object}>} Resolves with the verification result.
+ */
+ async verifyProof({ proof, document, documentLoader, expansionMap }) {
+ try {
+ // create data to verify
+ const verifyData = await this.createVerifyData({
+ document,
+ proof,
+ documentLoader,
+ expansionMap,
+ });
+
+ // fetch verification method
+ const verificationMethod = await this.getVerificationMethod({
+ proof,
+ document,
+ documentLoader,
+ expansionMap,
+ });
+
+ // verify signature on data
+ const verified = await this.verifySignature({
+ verifyData,
+ verificationMethod,
+ document,
+ proof,
+ documentLoader,
+ expansionMap,
+ });
+ if (!verified) {
+ throw new Error('Invalid signature.');
+ }
+
+ return { verified: true, verificationMethod };
+ } catch (error) {
+ return { verified: false, error };
+ }
+ }
+
+ async canonize(input, { documentLoader, expansionMap, skipExpansion }: any) {
+ return jsonld.canonize(input, {
+ algorithm: 'URDNA2015',
+ format: 'application/n-quads',
+ documentLoader,
+ expansionMap,
+ skipExpansion,
+ useNative: this.useNativeCanonize,
+ });
+ }
+
+ async canonizeProof(proof, { document, documentLoader, expansionMap }) {
+ // `jws`,`signatureValue`,`proofValue` must not be included in the proof
+ // options
+ proof = {
+ '@context': document['@context'] || constants.SECURITY_CONTEXT_URL,
+ ...proof,
+ };
+ delete proof.jws;
+ delete proof.signatureValue;
+ delete proof.proofValue;
+ return this.canonize(proof, {
+ documentLoader,
+ expansionMap,
+ skipExpansion: false,
+ });
+ }
+
+ /**
+ * @param document {object} to be signed/verified.
+ * @param proof {object}
+ * @param documentLoader {function}
+ * @param expansionMap {function}
+ *
+ * @returns {Promise<{Uint8Array}>}.
+ */
+ async createVerifyData({ document, proof, documentLoader, expansionMap }) {
+ // get cached document hash
+ let cachedDocHash;
+ const { _hashCache } = this;
+ if (_hashCache && _hashCache.document === document) {
+ cachedDocHash = _hashCache.hash;
+ } else {
+ this._hashCache = {
+ document,
+ // canonize and hash document
+ hash: (cachedDocHash = this.canonize(document, {
+ documentLoader,
+ expansionMap,
+ }).then((c14nDocument) => {
+ return sha256digest({ string: c14nDocument });
+ })),
+ };
+ }
+
+ // await both c14n proof hash and c14n document hash
+ const [proofHash, docHash] = await Promise.all([
+ // canonize and hash proof
+ this.canonizeProof(proof, {
+ document,
+ documentLoader,
+ expansionMap,
+ }).then((c14nProofOptions) => {
+ return sha256digest({ string: c14nProofOptions });
+ }),
+ cachedDocHash,
+ ]);
+
+ // concatenate hash of c14n proof options and hash of c14n document
+ return util.concat(proofHash, docHash);
+ }
+
+ /**
+ * @param document {object} to be signed.
+ * @param proof {object}
+ * @param documentLoader {function}
+ */
+ async getVerificationMethod({ proof, documentLoader }: any) {
+ let { verificationMethod } = proof;
+
+ if (typeof verificationMethod === 'object') {
+ verificationMethod = verificationMethod.id;
+ }
+
+ if (!verificationMethod) {
+ throw new Error('No "verificationMethod" found in proof.');
+ }
+
+ // Note: `expansionMap` is intentionally not passed; we can safely drop
+ // properties here and must allow for it
+ const framed = await jsonld.frame(
+ verificationMethod,
+ {
+ '@context': constants.SECURITY_CONTEXT_URL,
+ '@embed': '@always',
+ 'id': verificationMethod,
+ },
+ { documentLoader, compactToRelative: false }
+ );
+ if (!framed) {
+ throw new Error(`Verification method ${verificationMethod} not found.`);
+ }
+
+ // ensure verification method has not been revoked
+ if (framed.revoked !== undefined) {
+ throw new Error('The verification method has been revoked.');
+ }
+
+ return framed;
+ }
+
+ /**
+ * @param verifyData {Uint8Array}.
+ * @param document {object} to be signed.
+ * @param proof {object}
+ * @param documentLoader {function}
+ * @param expansionMap {function}
+ *
+ * @returns {Promise<{object}>} the proof containing the signature value.
+ */
+ async sign(params?: any) {
+ throw new Error('Must be implemented by a derived class.');
+ }
+
+ /**
+ * @param verifyData {Uint8Array}.
+ * @param verificationMethod {object}.
+ * @param document {object} to be signed.
+ * @param proof {object}
+ * @param documentLoader {function}
+ * @param expansionMap {function}
+ *
+ * @returns {Promise}
+ */
+ async verifySignature(params?: any): Promise {
+ throw new Error('Must be implemented by a derived class.');
+ }
+
+ /**
+ * Ensures the document to be signed contains the required signature suite
+ * specific `@context`, by either adding it (if `addSuiteContext` is true),
+ * or throwing an error if it's missing.
+ *
+ * @param {object} options - Options hashmap.
+ * @param {object} options.document - JSON-LD document to be signed.
+ * @param {boolean} options.addSuiteContext - Add suite context?
+ */
+ ensureSuiteContext({ document, addSuiteContext }) {
+ const { contextUrl } = this;
+
+ if (_includesContext({ document, contextUrl })) {
+ // document already includes the required context
+ return;
+ }
+
+ if (!addSuiteContext) {
+ throw new TypeError(
+ `The document to be signed must contain this suite's @context, ` +
+ `"${contextUrl}".`
+ );
+ }
+
+ // enforce the suite's context by adding it to the document
+ const existingContext = document['@context'] || [];
+
+ document['@context'] = Array.isArray(existingContext)
+ ? [...existingContext, contextUrl]
+ : [existingContext, contextUrl];
+ }
+}
+
+/**
+ * Tests whether a provided JSON-LD document includes a context URL in its
+ * `@context` property.
+ *
+ * @param {object} options - Options hashmap.
+ * @param {object} options.document - A JSON-LD document.
+ * @param {string} options.contextUrl - A context URL.
+ *
+ * @returns {boolean} Returns true if document includes context.
+ */
+function _includesContext({ document, contextUrl }) {
+ const context = document['@context'];
+ return (
+ context === contextUrl ||
+ (Array.isArray(context) && context.includes(contextUrl))
+ );
+}
+
+/**
+ * See constructor docstring for param details.
+ *
+ * @returns {{verificationMethod: string, key: LDKeyPair,
+ * signer: {sign: Function, id: string},
+ * verifier: {verify: Function, id: string}}} - Validated and initialized
+ * key-related parameters.
+ */
+function _processSignatureParams({ key, signer, verifier }) {
+ // We are explicitly not requiring a key or signer/verifier param to be
+ // present, to support the verify() use case where the verificationMethod
+ // is being fetched by the documentLoader
+
+ const vm: any = {};
+ if (key) {
+ vm.key = key;
+ vm.verificationMethod = key.id;
+ if (typeof key.signer === 'function') {
+ vm.signer = key.signer();
+ }
+ if (typeof key.verifier === 'function') {
+ vm.verifier = key.verifier();
+ }
+ if (!(vm.signer || vm.verifier)) {
+ throw new TypeError(
+ 'The "key" parameter must contain a "signer" or "verifier" method.'
+ );
+ }
+ } else {
+ vm.verificationMethod = (signer && signer.id) || (verifier && verifier.id);
+ vm.signer = signer;
+ vm.verifier = verifier;
+ }
+
+ if (vm.signer) {
+ if (typeof vm.signer.sign !== 'function') {
+ throw new TypeError('A signer API has not been specified.');
+ }
+ }
+ if (vm.verifier) {
+ if (typeof vm.verifier.verify !== 'function') {
+ throw new TypeError('A verifier API has not been specified.');
+ }
+ }
+
+ return vm;
+}
diff --git a/lib/jsonld-signatures/suites/ed255192018/Ed25519Signature2018.ts b/lib/jsonld-signatures/suites/ed255192018/Ed25519Signature2018.ts
new file mode 100644
index 00000000..38f3dbb6
--- /dev/null
+++ b/lib/jsonld-signatures/suites/ed255192018/Ed25519Signature2018.ts
@@ -0,0 +1,53 @@
+/*!
+ * Copyright (c) 2018 Digital Bazaar, Inc. All rights reserved.
+ */
+
+// import { Ed25519KeyPair } from 'crypto-ld';
+import { Ed25519VerificationKey2018 } from './Ed25519VerificationKey2018';
+import { JwsLinkedDataSignature } from '../JwsLinkedDataSignature';
+
+export class Ed25519Signature2018 extends JwsLinkedDataSignature {
+ /**
+ * @param type {string} Provided by subclass.
+ *
+ * One of these parameters is required to use a suite for signing:
+ *
+ * @param [creator] {string} A key id URL to the paired public key.
+ * @param [verificationMethod] {string} A key id URL to the paired public key.
+ *
+ * This parameter is required for signing:
+ *
+ * @param [signer] {function} an optional signer.
+ *
+ * Advanced optional parameters and overrides:
+ *
+ * @param [proof] {object} a JSON-LD document with options to use for
+ * the `proof` node (e.g. any other custom fields can be provided here
+ * using a context different from security-v2).
+ * @param [date] {string|Date} signing date to use if not passed.
+ * @param [key] {LDKeyPair} an optional crypto-ld KeyPair.
+ * @param [useNativeCanonize] {boolean} true to use a native canonize
+ * algorithm.
+ */
+ constructor({
+ signer,
+ key,
+ verificationMethod,
+ proof,
+ date,
+ useNativeCanonize,
+ }: any = {}) {
+ super({
+ type: 'Ed25519Signature2018',
+ alg: 'EdDSA',
+ LDKeyClass: Ed25519VerificationKey2018,
+ verificationMethod,
+ signer,
+ key,
+ proof,
+ date,
+ useNativeCanonize,
+ });
+ this.requiredKeyType = 'Ed25519VerificationKey2018';
+ }
+}
diff --git a/lib/jsonld-signatures/suites/ed255192018/Ed25519VerificationKey2018.ts b/lib/jsonld-signatures/suites/ed255192018/Ed25519VerificationKey2018.ts
new file mode 100644
index 00000000..6d259b29
--- /dev/null
+++ b/lib/jsonld-signatures/suites/ed255192018/Ed25519VerificationKey2018.ts
@@ -0,0 +1,370 @@
+/*!
+ * Copyright (c) 2018-2020 Digital Bazaar, Inc. All rights reserved.
+ */
+import * as bs58 from 'base58-universal/main';
+import * as util from './util';
+import ed25519 from './ed25519';
+import {LDKeyPair} from 'crypto-ld';
+
+const SUITE_ID = 'Ed25519VerificationKey2018';
+
+class Ed25519VerificationKey2018 extends LDKeyPair {
+ /**
+ * An implementation of the Ed25519VerificationKey spec, for use with
+ * Linked Data Proofs.
+ * @see https://w3c-dvcg.github.io/lds-ed25519-2018/
+ * @see https://github.com/digitalbazaar/jsonld-signatures
+ * @example
+ * > const privateKeyBase58 =
+ * '3Mmk4UzTRJTEtxaKk61LxtgUxAa2Dg36jF6VogPtRiKvfpsQWKPCLesKSV182RMmvM'
+ * + 'JKk6QErH3wgdHp8itkSSiF';
+ * > const options = {
+ * publicKeyBase58: 'GycSSui454dpYRKiFdsQ5uaE8Gy3ac6dSMPcAoQsk8yq',
+ * privateKeyBase58
+ * };
+ * > const EDKey = new Ed25519VerificationKey2018(options);
+ * > EDKey
+ * Ed25519VerificationKey2018 { ...
+ * @param {object} options - Options hashmap.
+ * @param {string} options.controller - Controller DID or document url.
+ * @param {string} [options.id] - The key ID. If not provided, will be
+ * @param {string} options.publicKeyBase58 - Base58btc encoded Public Key.
+ * @param {string} [options.privateKeyBase58] - Base58btc Private Key.
+ * @param {string} [options.revoked] - Timestamp of when the key has been
+ * revoked, in RFC3339 format. If not present, the key itself is considered
+ * not revoked. Note that this mechanism is slightly different than DID
+ * Document key revocation, where a DID controller can revoke a key from
+ * that DID by removing it from the DID Document.
+ */
+ constructor(options: any = {}) {
+ super(options);
+ this.type = SUITE_ID;
+ this.publicKeyBase58 = options.publicKeyBase58;
+ if(!this.publicKeyBase58) {
+ throw new TypeError('The "publicKeyBase58" property is required.');
+ }
+ this.privateKeyBase58 = options.privateKeyBase58;
+ if(this.controller && !this.id) {
+ this.id = `${this.controller}#${this.fingerprint()}`;
+ }
+ }
+
+ /**
+ * Creates an instance of LDKeyPair from a key fingerprint.
+ * Note: Only key types that use their full public key in the fingerprint
+ * are supported (so, currently, only 'ed25519').
+ *
+ * @param {string} fingerprint
+ * @returns {LDKeyPair}
+ * @throws Unsupported Fingerprint Type.
+ */
+ static fromFingerprint({fingerprint} = {}) {
+ if(!fingerprint ||
+ !(typeof fingerprint === 'string' && fingerprint[0] === 'z')) {
+ throw new Error('`fingerprint` must be a multibase encoded string.');
+ }
+
+ // skip leading `z` that indicates base58 encoding
+ const buffer = bs58.decode(fingerprint.substr(1));
+
+ // buffer is: 0xed 0x01
+ if(buffer[0] === 0xed && buffer[1] === 0x01) {
+ return new Ed25519VerificationKey2018({
+ publicKeyBase58: bs58.encode(buffer.slice(2))
+ });
+ }
+
+ throw new Error(`Unsupported fingerprint "${fingerprint}".`);
+ }
+
+ /**
+ * Generates a KeyPair with an optional deterministic seed.
+ * @example
+ * > const keyPair = await Ed25519VerificationKey2018.generate();
+ * > keyPair
+ * Ed25519VerificationKey2018 { ...
+ * @param {object} [options={}] - See LDKeyPair
+ * docstring for full list.
+ * @param {Uint8Array|Buffer} [options.seed] -
+ * a 32-byte array seed for a deterministic key.
+ *
+ * @returns {Promise} Generates a key pair.
+ */
+ static async generate(options = {}) {
+ let keyObject;
+ if(options.seed) {
+ keyObject = await ed25519.generateKeyPairFromSeed(options.seed);
+ } else {
+ keyObject = await ed25519.generateKeyPair();
+ }
+ return new Ed25519VerificationKey2018({
+ publicKeyBase58: bs58.encode(keyObject.publicKey),
+ privateKeyBase58: bs58.encode(keyObject.secretKey),
+ ...options
+ });
+ }
+
+ /**
+ * Creates an Ed25519 Key Pair from an existing serialized key pair.
+ * @example
+ * > const keyPair = await Ed25519VerificationKey2018.from({
+ * controller: 'did:ex:1234',
+ * type: 'Ed25519VerificationKey2018',
+ * publicKeyBase58,
+ * privateKeyBase58
+ * });
+ *
+ * @returns {Promise} An Ed25519 Key Pair.
+ */
+ static async from(options) {
+ return new Ed25519VerificationKey2018(options);
+ }
+
+ /**
+ * Returns a signer object for use with Linked Data Proofs.
+ * @see https://github.com/digitalbazaar/jsonld-signatures
+ * @example
+ * > const signer = keyPair.signer();
+ * > signer
+ * { sign: [AsyncFunction: sign] }
+ * > signer.sign({data});
+ *
+ * @returns {{sign: Function}} A signer for the json-ld block.
+ */
+ signer() {
+ const signer = ed25519SignerFactory(this);
+ signer.id = this.id;
+ return signer;
+ }
+
+ /**
+ * Returns a verifier object for use with signature suites.
+ * @see https://github.com/digitalbazaar/jsonld-signatures
+ *
+ * @example
+ * > const verifier = keyPair.verifier();
+ * > verifier
+ * { verify: [AsyncFunction: verify] }
+ * > verifier.verify(key);
+ *
+ * @returns {{verify: Function}} Used to verify jsonld-signatures.
+ */
+ verifier() {
+ const verifier = ed25519VerifierFactory(this);
+ verifier.id = this.id;
+ return verifier;
+ }
+
+ /**
+ * Exports the serialized representation of the KeyPair
+ * and other information that json-ld Signatures can use to form a proof.
+ *
+ * @param {object} [options={}] - Options hashmap.
+ * @param {boolean} [options.publicKey] - Export public key material?
+ * @param {boolean} [options.privateKey] - Export private key material?
+ * @param {boolean} [options.includeContext] - Include JSON-LD context?
+ *
+ * @returns {object} A public key object
+ * information used in verification methods by signatures.
+ */
+ export({publicKey = false, privateKey = false, includeContext = false} = {}) {
+ if(!(publicKey || privateKey)) {
+ throw new TypeError(
+ 'Export requires specifying either "publicKey" or "privateKey".');
+ }
+ const exportedKey = {
+ id: this.id,
+ type: this.type
+ };
+ if(includeContext) {
+ exportedKey['@context'] = Ed25519VerificationKey2018.SUITE_CONTEXT;
+ }
+ if(this.controller) {
+ exportedKey.controller = this.controller;
+ }
+ if(publicKey) {
+ exportedKey.publicKeyBase58 = this.publicKeyBase58;
+ }
+ if(privateKey) {
+ exportedKey.privateKeyBase58 = this.privateKeyBase58;
+ }
+ if(this.revoked) {
+ exportedKey.revoked = this.revoked;
+ }
+ return exportedKey;
+ }
+
+ /**
+ * Generates and returns a multiformats encoded
+ * ed25519 public key fingerprint (for use with cryptonyms, for example).
+ * @see https://github.com/multiformats/multicodec
+ *
+ * @param {string} publicKeyBase58 - The base58 encoded public key material.
+ *
+ * @returns {string} The fingerprint.
+ */
+ static fingerprintFromPublicKey({publicKeyBase58} = {}) {
+ // ed25519 cryptonyms are multicodec encoded values, specifically:
+ // (multicodec ed25519-pub 0xed01 + key bytes)
+ const pubkeyBytes = util.base58Decode({
+ decode: bs58.decode,
+ keyMaterial: publicKeyBase58,
+ type: 'public'
+ });
+ const buffer = new Uint8Array(2 + pubkeyBytes.length);
+ buffer[0] = 0xed;
+ buffer[1] = 0x01;
+ buffer.set(pubkeyBytes, 2);
+ // prefix with `z` to indicate multi-base base58btc encoding
+ return `z${bs58.encode(buffer)}`;
+ }
+
+ /**
+ * Generates and returns a multiformats encoded
+ * ed25519 public key fingerprint (for use with cryptonyms, for example).
+ * @see https://github.com/multiformats/multicodec
+ *
+ * @returns {string} The fingerprint.
+ */
+ fingerprint() {
+ const {publicKeyBase58} = this;
+ return Ed25519VerificationKey2018
+ .fingerprintFromPublicKey({publicKeyBase58});
+ }
+
+ /**
+ * Tests whether the fingerprint was generated from a given key pair.
+ * @example
+ * > edKeyPair.verifyFingerprint({fingerprint: 'z2S2Q6MkaFJewa'});
+ * {valid: true};
+ * @param {string} fingerprint - A Base58 public key.
+ *
+ * @returns {object} An object indicating valid is true or false.
+ */
+ verifyFingerprint({fingerprint} = {}) {
+ // fingerprint should have `z` prefix indicating
+ // that it's multi-base encoded
+ if(!(typeof fingerprint === 'string' && fingerprint[0] === 'z')) {
+ return {
+ error: new Error('`fingerprint` must be a multibase encoded string.'),
+ valid: false
+ };
+ }
+ let fingerprintBuffer;
+ try {
+ fingerprintBuffer = util.base58Decode({
+ decode: bs58.decode,
+ keyMaterial: fingerprint.slice(1),
+ type: `fingerprint's`
+ });
+ } catch(e) {
+ return {error: e, valid: false};
+ }
+ let publicKeyBuffer;
+ try {
+ publicKeyBuffer = util.base58Decode({
+ decode: bs58.decode,
+ keyMaterial: this.publicKeyBase58,
+ type: 'public'
+ });
+ } catch(e) {
+ return {error: e, valid: false};
+ }
+
+ const buffersEqual = _isEqualBuffer(
+ publicKeyBuffer, fingerprintBuffer.slice(2));
+
+ // validate the first two multicodec bytes 0xed01
+ const valid = fingerprintBuffer[0] === 0xed &&
+ fingerprintBuffer[1] === 0x01 &&
+ buffersEqual;
+ if(!valid) {
+ return {
+ error: new Error('The fingerprint does not match the public key.'),
+ valid: false
+ };
+ }
+ return {valid};
+ }
+}
+
+/**
+ * @ignore
+ * Returns an object with an async sign function.
+ * The sign function is bound to the KeyPair
+ * and then returned by the KeyPair's signer method.
+ * @param {Ed25519VerificationKey2018} key - A key par instance.
+ * @example
+ * > const mySigner = ed25519SignerFactory(edKeyPair);
+ * > await mySigner.sign({data})
+ *
+ * @returns {{sign: Function}} An object with an async function sign
+ * using the private key passed in.
+ */
+function ed25519SignerFactory(key) {
+ if(!key.privateKeyBase58) {
+ return {
+ async sign() {
+ throw new Error('No private key to sign with.');
+ }
+ };
+ }
+ const privateKeyBytes = util.base58Decode({
+ decode: bs58.decode,
+ keyMaterial: key.privateKeyBase58,
+ type: 'private'
+ });
+ return {
+ async sign({data}) {
+ const signature = ed25519.sign(privateKeyBytes, data);
+ return signature;
+ }
+ };
+}
+
+/**
+ * @ignore
+ * Returns an object with an async verify function.
+ * The verify function is bound to the KeyPair
+ * and then returned by the KeyPair's verifier method.
+ * @param {Ed25519VerificationKey2018} key - An Ed25519VerificationKey2018.
+ * @example
+ * > const myVerifier = ed25519Verifier(edKeyPair);
+ * > await myVerifier.verify({data, signature});
+ *
+ * @returns {{verify: Function}} An async verifier specific
+ * to the key passed in.
+ */
+function ed25519VerifierFactory(key) {
+ const publicKeyBytes = util.base58Decode({
+ decode: bs58.decode,
+ keyMaterial: key.publicKeyBase58,
+ type: 'public'
+ });
+ return {
+ async verify({data, signature}) {
+ return ed25519.verify(publicKeyBytes, data, signature);
+ }
+ };
+}
+
+function _isEqualBuffer(buf1, buf2) {
+ if(buf1.length !== buf2.length) {
+ return false;
+ }
+ for(let i = 0; i < buf1.length; i++) {
+ if(buf1[i] !== buf2[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+// Used by CryptoLD harness for dispatching.
+Ed25519VerificationKey2018.suite = SUITE_ID;
+// Used by CryptoLD harness's fromKeyId() method.
+Ed25519VerificationKey2018.SUITE_CONTEXT =
+ 'https://w3id.org/security/suites/ed25519-2018/v1';
+
+export {
+ Ed25519VerificationKey2018
+};
diff --git a/lib/jsonld-signatures/suites/ed255192018/ed25519.ts b/lib/jsonld-signatures/suites/ed255192018/ed25519.ts
new file mode 100644
index 00000000..90f5bb82
--- /dev/null
+++ b/lib/jsonld-signatures/suites/ed255192018/ed25519.ts
@@ -0,0 +1,143 @@
+/*!
+ * Copyright (c) 2020 Digital Bazaar, Inc. All rights reserved.
+ */
+import { Buffer } from 'buffer';
+
+// FIXME: Some methods is missing from crypto-js.
+import {
+ sign,
+ verify,
+ createPrivateKey,
+ createPublicKey,
+ randomBytes
+} from 'crypto-js';
+
+// used to export node's public keys to buffers
+const publicKeyEncoding = {format: 'der', type: 'spki'};
+// used to turn private key bytes into a buffer in DER format
+const DER_PRIVATE_KEY_PREFIX = Buffer.from(
+ '302e020100300506032b657004220420', 'hex');
+// used to turn public key bytes into a buffer in DER format
+const DER_PUBLIC_KEY_PREFIX = Buffer.from('302a300506032b6570032100', 'hex');
+
+const api = {
+ /**
+ * Generates a key using a 32 byte Uint8Array.
+ *
+ * @param {Uint8Array} seedBytes - The bytes for the private key.
+ *
+ * @returns {object} The object with the public and private key material.
+ */
+ async generateKeyPairFromSeed(seedBytes) {
+ const privateKey = await createPrivateKey({
+ // node is more than happy to create a new private key using a DER
+ key: _privateKeyDerEncode({seedBytes}),
+ format: 'der',
+ type: 'pkcs8'
+ });
+ // this expects either a PEM encoded key or a node privateKeyObject
+ const publicKey = await createPublicKey(privateKey);
+ const publicKeyBuffer = publicKey.export(publicKeyEncoding);
+ const publicKeyBytes = getKeyMaterial(publicKeyBuffer);
+ return {
+ publicKey: publicKeyBytes,
+ secretKey: Buffer.concat([seedBytes, publicKeyBytes])
+ };
+ },
+ // generates an ed25519 key using a random seed
+ async generateKeyPair() {
+ const seed = randomBytes(32);
+ return api.generateKeyPairFromSeed(seed);
+ },
+ async sign(privateKeyBytes, data) {
+ const privateKey = await createPrivateKey({
+ key: _privateKeyDerEncode({privateKeyBytes}),
+ format: 'der',
+ type: 'pkcs8'
+ });
+ return sign(null, data, privateKey);
+ },
+ async verify(publicKeyBytes, data, signature) {
+ const publicKey = await createPublicKey({
+ key: _publicKeyDerEncode({publicKeyBytes}),
+ format: 'der',
+ type: 'spki'
+ });
+ return verify(null, data, publicKey, signature);
+ }
+};
+
+export default api;
+
+/**
+ * The key material is the part of the buffer after the DER Prefix.
+ *
+ * @param {Buffer} buffer - A DER encoded key buffer.
+ *
+ * @throws {Error} If the buffer does not contain a valid DER Prefix.
+ *
+ * @returns {Buffer} The key material part of the Buffer.
+*/
+function getKeyMaterial(buffer) {
+ if(buffer.indexOf(DER_PUBLIC_KEY_PREFIX) === 0) {
+ return buffer.slice(DER_PUBLIC_KEY_PREFIX.length, buffer.length);
+ }
+ if(buffer.indexOf(DER_PRIVATE_KEY_PREFIX) === 0) {
+ return buffer.slice(DER_PRIVATE_KEY_PREFIX.length, buffer.length);
+ }
+ throw new Error('Expected Buffer to match Ed25519 Public or Private Prefix');
+}
+/**
+ * Takes a Buffer or Uint8Array with the raw private key and encodes it
+ * in DER-encoded PKCS#8 format.
+ * Allows Uint8Arrays to be interoperable with node's crypto functions.
+ *
+ * @param {object} options - Options to use.
+ * @param {Buffer} [options.privateKeyBytes] - Required if no seedBytes.
+ * @param {Buffer} [options.seedBytes] - Required if no privateKeyBytes.
+ *
+ * @throws {TypeError} Throws if the supplied buffer is not of the right size
+ * or not a Uint8Array or Buffer.
+ *
+ * @returns {Buffer} DER private key prefix + key bytes.
+*/
+export function _privateKeyDerEncode({privateKeyBytes, seedBytes}) {
+ if(!(privateKeyBytes || seedBytes)) {
+ throw new TypeError('`privateKeyBytes` or `seedBytes` is required.');
+ }
+ if(!privateKeyBytes && !(seedBytes instanceof Uint8Array &&
+ seedBytes.length === 32)) {
+ throw new TypeError('`seedBytes` must be a 32 byte Buffer.');
+ }
+ if(!seedBytes && !(privateKeyBytes instanceof Uint8Array &&
+ privateKeyBytes.length === 64)) {
+ throw new TypeError('`privateKeyBytes` must be a 64 byte Buffer.');
+ }
+ let p;
+ if(seedBytes) {
+ p = seedBytes;
+ } else {
+ // extract the first 32 bytes of the 64 byte private key representation
+ p = privateKeyBytes.slice(0, 32);
+ }
+ return Buffer.concat([DER_PRIVATE_KEY_PREFIX, p]);
+}
+
+/**
+ * Takes a Uint8Array of public key bytes and encodes it in DER-encoded
+ * SubjectPublicKeyInfo (SPKI) format.
+ * Allows Uint8Arrays to be interoperable with node's crypto functions.
+ *
+ * @param {object} options - Options to use.
+ * @param {Uint8Array} options.publicKeyBytes - The keyBytes.
+ *
+ * @throws {TypeError} Throws if the bytes are not Uint8Array or of length 32.
+ *
+ * @returns {Buffer} DER Public key Prefix + key bytes.
+*/
+export function _publicKeyDerEncode({publicKeyBytes}) {
+ if(!(publicKeyBytes instanceof Uint8Array && publicKeyBytes.length === 32)) {
+ throw new TypeError('`publicKeyBytes` must be a 32 byte Buffer.');
+ }
+ return Buffer.concat([DER_PUBLIC_KEY_PREFIX, publicKeyBytes]);
+}
diff --git a/lib/jsonld-signatures/suites/ed255192018/util.ts b/lib/jsonld-signatures/suites/ed255192018/util.ts
new file mode 100644
index 00000000..df999f5d
--- /dev/null
+++ b/lib/jsonld-signatures/suites/ed255192018/util.ts
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2018-2020 Digital Bazaar, Inc. All rights reserved.
+ */
+
+/**
+ * Wraps Base58 decoding operations in
+ * order to provide consistent error messages.
+ * @ignore
+ * @example
+ * > const pubkeyBytes = _base58Decode({
+ * decode: base58.decode,
+ * keyMaterial: this.publicKeyBase58,
+ * type: 'public'
+ * });
+ * @param {object} options - The decoder options.
+ * @param {Function} options.decode - The decode function to use.
+ * @param {string} options.keyMaterial - The Base58 encoded
+ * key material to decode.
+ * @param {string} options.type - A description of the
+ * key material that will be included
+ * in an error message (e.g. 'public', 'private').
+ *
+ * @returns {object} - The decoded bytes. The data structure for the bytes is
+ * determined by the provided decode function.
+ */
+export function base58Decode({decode, keyMaterial, type}) {
+ let bytes;
+ try {
+ bytes = decode(keyMaterial);
+ } catch(e) {
+ // do nothing
+ // this helper throws when no result is produced
+ }
+ if(bytes === undefined) {
+ throw new TypeError(`The ${type} key material must be Base58 encoded.`);
+ }
+ return bytes;
+}
diff --git a/lib/jsonld-signatures/suites/rsa2018/RsaSignature2018.ts b/lib/jsonld-signatures/suites/rsa2018/RsaSignature2018.ts
new file mode 100644
index 00000000..b4ebffbc
--- /dev/null
+++ b/lib/jsonld-signatures/suites/rsa2018/RsaSignature2018.ts
@@ -0,0 +1,57 @@
+/*!s
+ * Copyright (c) 2017-2018 Digital Bazaar, Inc. All rights reserved.
+ */
+
+// import { RSAKeyPair } from 'crypto-ld';
+import { RsaVerificationKey2018 } from '@digitalbazaar/rsa-verification-key-2018/lib/RsaVerificationKey2018';
+import { JwsLinkedDataSignature } from '../JwsLinkedDataSignature';
+
+export interface RsaSignature2018 {
+ [key: string]: any;
+}
+
+export class RsaSignature2018 extends JwsLinkedDataSignature {
+ /**
+ * @param type {string} Provided by subclass.
+ *
+ * One of these parameters is required to use a suite for signing:
+ *
+ * @param [creator] {string} A key id URL to the paired public key.
+ * @param [verificationMethod] {string} A key id URL to the paired public key.
+ *
+ * This parameter is required for signing:
+ *
+ * @param [signer] {function} an optional signer.
+ *
+ * Advanced optional parameters and overrides:
+ *
+ * @param [proof] {object} a JSON-LD document with options to use for
+ * the `proof` node (e.g. any other custom fields can be provided here
+ * using a context different from security-v2).
+ * @param [date] {string|Date} signing date to use if not passed.
+ * @param [key] {LDKeyPair} an optional crypto-ld KeyPair.
+ * @param [useNativeCanonize] {boolean} true to use a native canonize
+ * algorithm.
+ */
+ constructor({
+ signer,
+ key,
+ verificationMethod,
+ proof,
+ date,
+ useNativeCanonize,
+ }: any = {}) {
+ super({
+ type: 'RsaSignature2018',
+ alg: 'PS256',
+ LDKeyClass: RsaVerificationKey2018,
+ verificationMethod,
+ signer,
+ key,
+ proof,
+ date,
+ useNativeCanonize,
+ });
+ this.requiredKeyType = 'RsaVerificationKey2018';
+ }
+}
diff --git a/machines/vcItem.ts b/machines/vcItem.ts
index 81b77f96..6d94bc7b 100644
--- a/machines/vcItem.ts
+++ b/machines/vcItem.ts
@@ -11,6 +11,7 @@ import {
} from '../types/vc';
import { StoreEvents } from './store';
import { ActivityLogEvents } from './activityLog';
+import { verifyCredential } from '../shared/verifyCredential';
const model = createModel(
{
@@ -22,6 +23,8 @@ const model = createModel(
credential: null as DecodedCredential,
verifiableCredential: null as VerifiableCredential,
requestId: '',
+ isVerified: false,
+ lastVerifiedOn: null,
},
{
events: {
@@ -34,6 +37,7 @@ const model = createModel(
POLL: () => ({}),
DOWNLOAD_READY: () => ({}),
GET_VC_RESPONSE: (vc: VC) => ({ vc }),
+ VERIFY: () => ({}),
},
}
);
@@ -53,246 +57,309 @@ type RequestVcDataEvent =
| CredentialDownloadedEvent
| GetVcResponseEvent;
-export const vcItemMachine = model.createMachine(
- {
- id: 'vc-item',
- context: model.initialContext,
- initial: 'checkingVc',
- states: {
- checkingVc: {
- entry: ['requestVcContext'],
- on: {
- GET_VC_RESPONSE: [
- {
- cond: 'hasCredential',
- target: 'idle',
- actions: ['setCredential'],
- },
- {
- target: 'checkingStore',
- },
- ],
- },
- },
- checkingStore: {
- entry: ['requestStoredContext'],
- on: {
- STORE_RESPONSE: [
- {
- cond: 'hasCredential',
- target: 'idle',
- actions: ['setCredential', 'updateVc'],
- },
- {
- target: 'checkingServerData',
- },
- ],
- },
- },
- checkingServerData: {
- initial: 'checkingStatus',
- states: {
- checkingStatus: {
- invoke: {
- id: 'checkStatus',
- src: 'checkStatus',
- },
- on: {
- POLL: {
- actions: [send('POLL_STATUS', { to: 'checkStatus' })],
- },
- DOWNLOAD_READY: 'downloadingCredential',
- },
- },
- downloadingCredential: {
- invoke: {
- id: 'downloadCredential',
- src: 'downloadCredential',
- },
- on: {
- POLL: {
- actions: [send('POLL_DOWNLOAD', { to: 'downloadCredential' })],
- },
- CREDENTIAL_DOWNLOADED: {
- target: '#idle',
- actions: [
- 'setCredential',
- 'storeContext',
- 'updateVc',
- 'logDownloaded',
- ],
- },
- },
- },
- },
- },
- idle: {
- id: 'idle',
- on: {
- EDIT_TAG: 'editingTag',
- },
- },
- editingTag: {
- on: {
- DISMISS: 'idle',
- SAVE_TAG: {
- target: 'storingTag',
- actions: ['setTag'],
- },
- },
- },
- storingTag: {
- entry: ['storeTag'],
- on: {
- STORE_RESPONSE: 'idle',
- },
- },
- },
- },
- {
- actions: {
- updateVc: send(
- (context) => {
- const { serviceRefs, ...vc } = context;
- return { type: 'VC_DOWNLOADED', vc };
- },
- { to: (context) => context.serviceRefs.vc }
- ),
-
- requestVcContext: send(
- (context) => ({
- type: 'GET_VC_ITEM',
- vcKey: VC_ITEM_STORE_KEY(context),
- }),
- {
- to: (context) => context.serviceRefs.vc,
- }
- ),
-
- requestStoredContext: send(
- (context) => StoreEvents.GET(VC_ITEM_STORE_KEY(context)),
- {
- to: (context) => context.serviceRefs.store,
- }
- ),
-
- storeContext: send(
- (context) => {
- const { serviceRefs, ...data } = context;
- return StoreEvents.SET(VC_ITEM_STORE_KEY(context), data);
- },
- {
- to: (context) => context.serviceRefs.store,
- }
- ),
-
- setTag: model.assign({
- tag: (_, event: SaveTagEvent) => event.tag,
- }),
-
- storeTag: send(
- (context) => {
- const { serviceRefs, ...data } = context;
- return StoreEvents.SET(VC_ITEM_STORE_KEY(context), data);
- },
- { to: (context) => context.serviceRefs.store }
- ),
-
- setCredential: model.assign((_, event: RequestVcDataEvent) => {
- switch (event.type) {
- case 'STORE_RESPONSE':
- return event.response;
- case 'GET_VC_RESPONSE':
- case 'CREDENTIAL_DOWNLOADED':
- return event.vc;
- }
- }),
-
- logDownloaded: send(
- (_, event: CredentialDownloadedEvent) =>
- ActivityLogEvents.LOG_ACTIVITY({
- _vcKey: VC_ITEM_STORE_KEY(event.vc),
- action: 'downloaded',
- timestamp: Date.now(),
- deviceName: '',
- vcLabel: event.vc.tag || event.vc.id,
- }),
- { to: (context) => context.serviceRefs.activityLog }
- ),
- },
-
- services: {
- checkStatus: (context) => (callback, onReceive) => {
- const pollInterval = setInterval(
- () => callback(model.events.POLL()),
- 5000
- );
-
- onReceive(async (event) => {
- if (event.type === 'POLL_STATUS') {
- const response = await request(
- 'GET',
- `/credentialshare/request/status/${context.requestId}`
- );
- switch (response.response?.statusCode) {
- case 'NEW':
- break;
- case 'ISSUED':
- case 'printing':
- callback(model.events.DOWNLOAD_READY());
- break;
- }
- }
- });
-
- return () => clearInterval(pollInterval);
- },
-
- downloadCredential: (context) => (callback, onReceive) => {
- const pollInterval = setInterval(
- () => callback(model.events.POLL()),
- 5000
- );
-
- onReceive(async (event) => {
- if (event.type === 'POLL_DOWNLOAD') {
- const response: CredentialDownloadResponse = await request(
- 'POST',
- '/credentialshare/download',
+export const vcItemMachine =
+ /** @xstate-layout N4IgpgJg5mDOIC5QDcDGBaAlgFzAWwDpUALMVAa0wDsoA1VAYgHEBRAFQH1aBhDgJRYBlAAoB5AHKCWiUAAcA9rByZ5VGSAAeiAMwAWAEwFtABmMB2ABwBGfQFYANCACeiK29sEAbLasBOMwbe2r5WFgC+YY5oWLiEJGSUNILY8gBOYAyCbKIC-EJiktJIIApK2CpqxVoI+v4Evr6elsbBtrbmFo4uCBZmZl4+DbbBtbqeEVEYOPhEpBTUUIJgqcjLACIAhtgbswkLyVsArrAMYgAyZ+qlyqrq1Vaehp5WxrX6umZW2mb6D12Inm02gItnepj6r10FlsExA0WmcTmiUWy1WqU22128yS22wxwYa1EAHVxGdRABBNZ5SkATSuihulVA1T0ngIAVsnmMtjGvQczkQAQsXjBLwsFg61lh8NiWORSxW6y2Owg8gA7lQADbyDYQBbcdIQMBUcobTWnUQXellCp3AG2YVNNpmJpc369f4ITy6KwgzwS-TGXTmfzSqay+LYlGK9HKgiqjXa3X6w3G03m7gCNYscRsACS5LOHEJJLJlJYa2tjLtCBCvuMoWM4uhBhd+k9ZhaA0DVkswf8+m0YZiM0wEE1GQrec4bHJTCr5VuVUQdYIDYlzZ5+jbnodugIVlBDf9jTGZl8w4RBDHE4YtBYfDzADE6cVroumZpXH5hZ8bHpjF8bcbF0T0TH3Q9A2MZ4TF8UErEvWVIGUGg2A2KACTzQQAFksMEBdbWXBBQn3CwDG0MigQsb4LF8T03GBNooL8YYbBhSI4XDGZkPKVD0Mycl7w4Wd5zfBkPxrVd1ybcUtx3AUam0NlvCgwJfF0YZ9EQmZYBSVIFjQjCshyFg8hECQpAIpdmW-XxfzcQd+2A95PTsNlINMAwfXUoFxg4mUZjRTAADMnBTSA00wM0GFVKgwGvKhkHkch4oCwggtC8KjRNKLNQQagktQLYKgAbWMABdKzP3uED6kHT5tHeEYoTA0EDyPJsGwaLlwn8rj0uWEKwpoA0Ipy6LllSNICFkTUtmCtJ0v6ggMuGqBRuy9N8sS+Qio-MrKrEm1rK-YjaqA74viaoCWoU3Q6g8w9oPeSxesmEdET2GhaEG4LMD2ioDjxE4qprKwoQghsvjcDSIU6BTrEMUEuW5OxaO3CIOKoeQjXgYo0rlBZ6FBoiDHow9+m8BoW1PD52Peq9I3lPSwBJmyEDJhTfD0dqGhCXpelGbTPqjBU0QxHYmf2XFjjZ06+g7OwQTBQDhm9AIEL6j7CaSVElUxBMtR1PURtTcbNTl6phl8AhoQ3QZfk8Tw6IUswgT9AN9HeFigOFnXo3F5VLcQYZd1eZXgj6Z2yMHC8tavG9WaO6siKem2XgYmHbDh+jtxBaxTG8Xs+k7Mw-Z4gz0ODjn2wUtz2X9Lqnc7Cj6c47XdLSSuoGrl4lK8blnm3HkLHdVz3dR0x9Fottub8hnZVWrLIrNaupMbTdW0eMCzA8SfALsUU24JqXvt+-7itUIHZeTiTU+L23uf-IFGs7eHul3m2+glEMAgacHha93fjoEER5gKHg0u0D4mMwhAA */
+ model.createMachine(
+ {
+ context: model.initialContext,
+ description: 'VC',
+ id: 'vc-item',
+ initial: 'checkingVc',
+ states: {
+ checkingVc: {
+ entry: 'requestVcContext',
+ description:
+ 'Check if the VC data is in VC list already (in memory).',
+ on: {
+ GET_VC_RESPONSE: [
{
- individualId: context.id,
- requestId: context.requestId,
- }
- );
+ actions: 'setCredential',
+ cond: 'hasCredential',
+ target: 'checkingVerificationStatus',
+ },
+ {
+ target: 'checkingStore',
+ },
+ ],
+ },
+ },
+ checkingStore: {
+ entry: 'requestStoredContext',
+ description: 'Check if VC data is in secured local storage.',
+ on: {
+ STORE_RESPONSE: [
+ {
+ actions: ['setCredential', 'updateVc'],
+ cond: 'hasCredential',
+ target: 'checkingVerificationStatus',
+ },
+ {
+ target: 'checkingServerData',
+ },
+ ],
+ },
+ },
+ checkingServerData: {
+ description:
+ "Download VC data from the server. Uses polling method to check when it's available.",
+ initial: 'checkingStatus',
+ states: {
+ checkingStatus: {
+ invoke: {
+ src: 'checkStatus',
+ id: 'checkStatus',
+ },
+ on: {
+ POLL: {
+ actions: send('POLL_STATUS', { to: 'checkStatus' }),
+ },
+ DOWNLOAD_READY: {
+ target: 'downloadingCredential',
+ },
+ },
+ },
+ downloadingCredential: {
+ invoke: {
+ src: 'downloadCredential',
+ id: 'downloadCredential',
+ },
+ on: {
+ POLL: {
+ actions: send('POLL_DOWNLOAD', { to: 'downloadCredential' }),
+ },
+ CREDENTIAL_DOWNLOADED: {
+ actions: [
+ 'setCredential',
+ 'storeContext',
+ 'updateVc',
+ 'logDownloaded',
+ ],
+ target: '#vc-item.checkingVerificationStatus',
+ },
+ },
+ },
+ },
+ },
+ idle: {
+ on: {
+ EDIT_TAG: {
+ target: 'editingTag',
+ },
+ VERIFY: {
+ target: 'verifyingCredential',
+ },
+ },
+ },
+ editingTag: {
+ on: {
+ DISMISS: {
+ target: 'idle',
+ },
+ SAVE_TAG: {
+ actions: 'setTag',
+ target: 'storingTag',
+ },
+ },
+ },
+ storingTag: {
+ entry: 'storeTag',
+ on: {
+ STORE_RESPONSE: {
+ target: 'idle',
+ },
+ },
+ },
+ verifyingCredential: {
+ invoke: {
+ src: 'verifyCredential',
+ onDone: [
+ {
+ actions: ['markVcValid', 'storeContext', 'updateVc'],
+ target: 'idle',
+ },
+ ],
+ onError: [
+ {
+ actions: 'logError',
+ target: 'idle',
+ },
+ ],
+ },
+ },
+ checkingVerificationStatus: {
+ description:
+ 'Check if VC verification is still valid. VCs stored on the device must be re-checked once every [N] time has passed.',
+ always: [
+ {
+ cond: 'isVcValid',
+ target: 'idle',
+ },
+ {
+ target: 'verifyingCredential',
+ },
+ ],
+ },
+ },
+ },
+ {
+ actions: {
+ updateVc: send(
+ (context) => {
+ const { serviceRefs, ...vc } = context;
+ return { type: 'VC_DOWNLOADED', vc };
+ },
+ { to: (context) => context.serviceRefs.vc }
+ ),
- callback(
- model.events.CREDENTIAL_DOWNLOADED({
- credential: response.credential,
- verifiableCredential: response.verifiableCredential,
- generatedOn: new Date(),
- id: context.id,
- idType: context.idType,
- tag: '',
- requestId: context.requestId,
- })
- );
+ requestVcContext: send(
+ (context) => ({
+ type: 'GET_VC_ITEM',
+ vcKey: VC_ITEM_STORE_KEY(context),
+ }),
+ {
+ to: (context) => context.serviceRefs.vc,
}
- });
+ ),
- return () => clearInterval(pollInterval);
- },
- },
+ requestStoredContext: send(
+ (context) => StoreEvents.GET(VC_ITEM_STORE_KEY(context)),
+ {
+ to: (context) => context.serviceRefs.store,
+ }
+ ),
- guards: {
- hasCredential: (_, event: StoreResponseEvent) => {
- return (
- event.response?.credential != null &&
- event.response?.verifiableCredential != null
- );
+ storeContext: send(
+ (context) => {
+ const { serviceRefs, ...data } = context;
+ return StoreEvents.SET(VC_ITEM_STORE_KEY(context), data);
+ },
+ {
+ to: (context) => context.serviceRefs.store,
+ }
+ ),
+
+ setTag: model.assign({
+ tag: (_, event: SaveTagEvent) => event.tag,
+ }),
+
+ storeTag: send(
+ (context) => {
+ const { serviceRefs, ...data } = context;
+ return StoreEvents.SET(VC_ITEM_STORE_KEY(context), data);
+ },
+ { to: (context) => context.serviceRefs.store }
+ ),
+
+ setCredential: model.assign((_, event: RequestVcDataEvent) => {
+ switch (event.type) {
+ case 'STORE_RESPONSE':
+ return event.response;
+ case 'GET_VC_RESPONSE':
+ case 'CREDENTIAL_DOWNLOADED':
+ return event.vc;
+ }
+ }),
+
+ logDownloaded: send(
+ (_, event: CredentialDownloadedEvent) =>
+ ActivityLogEvents.LOG_ACTIVITY({
+ _vcKey: VC_ITEM_STORE_KEY(event.vc),
+ action: 'downloaded',
+ timestamp: Date.now(),
+ deviceName: '',
+ vcLabel: event.vc.tag || event.vc.id,
+ }),
+ { to: (context) => context.serviceRefs.activityLog }
+ ),
+
+ markVcValid: model.assign({
+ isVerified: true,
+ lastVerifiedOn: () => Date.now(),
+ }),
},
- },
- }
-);
+
+ services: {
+ checkStatus: (context) => (callback, onReceive) => {
+ const pollInterval = setInterval(
+ () => callback(model.events.POLL()),
+ 5000
+ );
+
+ onReceive(async (event) => {
+ if (event.type === 'POLL_STATUS') {
+ const response = await request(
+ 'GET',
+ `/credentialshare/request/status/${context.requestId}`
+ );
+ switch (response.response?.statusCode) {
+ case 'NEW':
+ break;
+ case 'ISSUED':
+ case 'printing':
+ callback(model.events.DOWNLOAD_READY());
+ break;
+ }
+ }
+ });
+
+ return () => clearInterval(pollInterval);
+ },
+
+ downloadCredential: (context) => (callback, onReceive) => {
+ const pollInterval = setInterval(
+ () => callback(model.events.POLL()),
+ 5000
+ );
+
+ onReceive(async (event) => {
+ if (event.type === 'POLL_DOWNLOAD') {
+ const response: CredentialDownloadResponse = await request(
+ 'POST',
+ '/credentialshare/download',
+ {
+ individualId: context.id,
+ requestId: context.requestId,
+ }
+ );
+
+ callback(
+ model.events.CREDENTIAL_DOWNLOADED({
+ credential: response.credential,
+ verifiableCredential: response.verifiableCredential,
+ generatedOn: new Date(),
+ id: context.id,
+ idType: context.idType,
+ tag: '',
+ requestId: context.requestId,
+ isVerified: false,
+ lastVerifiedOn: null,
+ })
+ );
+ }
+ });
+
+ return () => clearInterval(pollInterval);
+ },
+
+ verifyCredential: async (context) => {
+ return verifyCredential(context.verifiableCredential);
+ },
+ },
+
+ guards: {
+ hasCredential: (_, event: StoreResponseEvent) => {
+ return (
+ event.response?.credential != null &&
+ event.response?.verifiableCredential != null
+ );
+ },
+
+ isVcValid: (context) => {
+ return context.isVerified;
+ },
+ },
+ }
+ );
export const createVcItemMachine = (
serviceRefs: AppServices,
diff --git a/package-lock.json b/package-lock.json
index 53db8522..68535e11 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,6 +8,11 @@
"name": "mosip-resident-app",
"version": "1.0.0",
"dependencies": {
+ "@digitalbazaar/ed25519-signature-2018": "digitalbazaar/ed25519-signature-2018",
+ "@digitalbazaar/ed25519-verification-key-2018": "digitalbazaar/ed25519-verification-key-2018",
+ "@digitalbazaar/rsa-signature-2018": "digitalbazaar/rsa-signature-2018#initial",
+ "@digitalbazaar/rsa-verification-key-2018": "digitalbazaar/rsa-verification-key-2018#initial",
+ "@digitalcredentials/vc": "^1.1.2",
"@expo-google-fonts/poppins": "^0.2.0",
"@idpass/smartshare-react-native": "^0.2.0",
"@react-native-async-storage/async-storage": "~1.15.0",
@@ -17,6 +22,8 @@
"@react-navigation/native": "^6.0.2",
"@react-navigation/native-stack": "^6.1.0",
"@xstate/react": "^1.6.1",
+ "base64url-universal": "^1.1.0",
+ "buffer": "^6.0.3",
"crypto-js": "^3.3.0",
"date-fns": "^2.26.0",
"expo": "^43.0.0",
@@ -32,12 +39,14 @@
"react-dom": "17.0.1",
"react-native": "0.64.3",
"react-native-app-intro-slider": "^4.0.4",
+ "react-native-blob-util": "^0.14.1",
"react-native-bluetooth-state-manager": "^1.3.2",
"react-native-device-info": "^8.4.8",
"react-native-elements": "^3.4.2",
"react-native-gesture-handler": "~1.10.2",
"react-native-keychain": "^8.0.0",
"react-native-location-enabler": "^4.1.0",
+ "react-native-polyfill-globals": "^3.1.0",
"react-native-qrcode-svg": "^6.1.1",
"react-native-reanimated": "~2.2.0",
"react-native-safe-area-context": "3.3.2",
@@ -55,6 +64,7 @@
"@types/react": "~17.0.21",
"@types/react-native": "~0.64.12",
"babel-plugin-inline-import": "^3.0.0",
+ "babel-plugin-module-resolver": "^4.1.0",
"eas-cli": "^0.37.0",
"expo-cli": "^4.13.0",
"sharp": "^0.29.3",
@@ -93,17 +103,17 @@
}
},
"node_modules/@babel/core": {
- "version": "7.17.7",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.7.tgz",
- "integrity": "sha512-djHlEfFHnSnTAcPb7dATbiM5HxGOP98+3JLBZtjRb5I7RXrw7kFRoG2dXM8cm3H+o11A8IFH/uprmJpwFynRNQ==",
+ "version": "7.17.8",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz",
+ "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==",
"dependencies": {
"@ampproject/remapping": "^2.1.0",
"@babel/code-frame": "^7.16.7",
"@babel/generator": "^7.17.7",
"@babel/helper-compilation-targets": "^7.17.7",
"@babel/helper-module-transforms": "^7.17.7",
- "@babel/helpers": "^7.17.7",
- "@babel/parser": "^7.17.7",
+ "@babel/helpers": "^7.17.8",
+ "@babel/parser": "^7.17.8",
"@babel/template": "^7.16.7",
"@babel/traverse": "^7.17.3",
"@babel/types": "^7.17.0",
@@ -435,9 +445,9 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.17.7",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.7.tgz",
- "integrity": "sha512-TKsj9NkjJfTBxM7Phfy7kv6yYc4ZcOo+AaWGqQOKTPDOmcGkIFb5xNA746eKisQkm4yavUYh4InYM9S+VnO01w==",
+ "version": "7.17.8",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz",
+ "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==",
"dependencies": {
"@babel/template": "^7.16.7",
"@babel/traverse": "^7.17.3",
@@ -461,9 +471,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.17.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.7.tgz",
- "integrity": "sha512-bm3AQf45vR4gKggRfvJdYJ0gFLoCbsPxiFLSH6hTVYABptNHY6l9NrhnucVjQ/X+SPtLANT9lc0fFhikj+VBRA==",
+ "version": "7.17.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.8.tgz",
+ "integrity": "sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==",
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -549,11 +559,11 @@
}
},
"node_modules/@babel/plugin-proposal-decorators": {
- "version": "7.17.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz",
- "integrity": "sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==",
+ "version": "7.17.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.8.tgz",
+ "integrity": "sha512-U69odN4Umyyx1xO1rTII0IDkAEC+RNlcKXtqOblfpzqy1C+aOplb76BQNq0+XdpVkOaPlpEDwd++joY8FNFJKA==",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.17.1",
+ "@babel/helper-create-class-features-plugin": "^7.17.6",
"@babel/helper-plugin-utils": "^7.16.7",
"@babel/helper-replace-supers": "^7.16.7",
"@babel/plugin-syntax-decorators": "^7.17.0",
@@ -1258,12 +1268,12 @@
}
},
"node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz",
- "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==",
+ "version": "7.17.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz",
+ "integrity": "sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==",
"dependencies": {
"@babel/helper-hoist-variables": "^7.16.7",
- "@babel/helper-module-transforms": "^7.16.7",
+ "@babel/helper-module-transforms": "^7.17.7",
"@babel/helper-plugin-utils": "^7.16.7",
"@babel/helper-validator-identifier": "^7.16.7",
"babel-plugin-dynamic-import-node": "^2.3.3"
@@ -1751,9 +1761,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.17.7",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.7.tgz",
- "integrity": "sha512-L6rvG9GDxaLgFjg41K+5Yv9OMrU98sWe+Ykmc6FDJW/+vYZMhdOMKkISgzptMaERHvS2Y2lw9MDRm2gHhlQQoA==",
+ "version": "7.17.8",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.8.tgz",
+ "integrity": "sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==",
"dependencies": {
"regenerator-runtime": "^0.13.4"
},
@@ -1821,6 +1831,245 @@
"node": ">=0.1.95"
}
},
+ "node_modules/@digitalbazaar/ed25519-signature-2018": {
+ "version": "2.1.1-0",
+ "resolved": "git+ssh://git@github.com/digitalbazaar/ed25519-signature-2018.git#759369965b5273f037e6a32f5da42ff9d2e14c60",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@digitalbazaar/ed25519-verification-key-2018": "^3.1.1",
+ "@digitalbazaar/ed25519-verification-key-2020": "^3.2.0",
+ "@digitalbazaar/jws-linked-data-signature": "^1.0.1",
+ "base58-universal": "^1.0.0",
+ "ed25519-signature-2018-context": "^1.0.1",
+ "ed25519-signature-2020-context": "^1.1.0",
+ "esm": "^3.2.25",
+ "jsonld": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@digitalbazaar/ed25519-signature-2018/node_modules/@digitalbazaar/ed25519-verification-key-2018": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@digitalbazaar/ed25519-verification-key-2018/-/ed25519-verification-key-2018-3.1.2.tgz",
+ "integrity": "sha512-UD7rETyyaHtKYeKfQu/FoeZ00EmANInX0ftmMKQJsI1q8YcRHUAiMF0sIbVM/T73+VBR2dObtfLnZTNM+PkXug==",
+ "dependencies": {
+ "@stablelib/ed25519": "^1.0.1",
+ "base58-universal": "^1.0.0",
+ "crypto-ld": "^5.0.0",
+ "esm": "^3.2.25"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@digitalbazaar/ed25519-verification-key-2018": {
+ "version": "3.1.3-0",
+ "resolved": "git+ssh://git@github.com/digitalbazaar/ed25519-verification-key-2018.git#c106fc01108963b789b3366bc587d4992fe3770d",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@stablelib/ed25519": "^1.0.1",
+ "base58-universal": "^1.0.0",
+ "crypto-ld": "^5.0.0",
+ "esm": "^3.2.25"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@digitalbazaar/ed25519-verification-key-2020": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@digitalbazaar/ed25519-verification-key-2020/-/ed25519-verification-key-2020-3.2.0.tgz",
+ "integrity": "sha512-A+17sRJ+rRNuN6yG0zZMucbVUpxUkBRLTb503caoJv0GB5853HXSaZbl83kKl9LCh02ExbQWxD6o/aqeR012uA==",
+ "dependencies": {
+ "@stablelib/ed25519": "^1.0.1",
+ "base58-universal": "^1.0.0",
+ "base64url-universal": "^1.1.0",
+ "crypto-ld": "^5.1.0",
+ "esm": "^3.2.25"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@digitalbazaar/http-client": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-1.2.0.tgz",
+ "integrity": "sha512-W9KQQ5pUJcaR0I4c2HPJC0a7kRbZApIorZgPnEDwMBgj16iQzutGLrCXYaZOmxqVLVNqqlQ4aUJh+HBQZy4W6Q==",
+ "dependencies": {
+ "esm": "^3.2.22",
+ "ky": "^0.25.1",
+ "ky-universal": "^0.8.2"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/@digitalbazaar/jws-linked-data-signature": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@digitalbazaar/jws-linked-data-signature/-/jws-linked-data-signature-1.0.1.tgz",
+ "integrity": "sha512-6bj1q/gQgk7rCKGJqwIF7rrSHcqCl049hNwIoNRVHOJpD5pOdTVlJqjdd1/a49UFcoYqiIpb1Bq/5xg/iAsWbQ==",
+ "dependencies": {
+ "base64url-universal": "^1.1.0",
+ "esm": "^3.2.25",
+ "jsonld-signatures": "^9.0.2"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@digitalbazaar/rsa-signature-2018": {
+ "version": "0.0.1",
+ "resolved": "git+ssh://git@github.com/digitalbazaar/rsa-signature-2018.git#47533f74a128cc29e5a6e8f96f466d0b5f3834b3",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@digitalbazaar/jws-linked-data-signature": "digitalbazaar/jws-linked-data-signature#initial",
+ "@digitalbazaar/rsa-verification-key-2018": "digitalbazaar/rsa-verification-key-2018#initial",
+ "esm": "^3.2.25"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@digitalbazaar/rsa-signature-2018/node_modules/@digitalbazaar/jws-linked-data-signature": {
+ "version": "0.0.1",
+ "resolved": "git+ssh://git@github.com/digitalbazaar/jws-linked-data-signature.git#2bf931e63d69d10e003f5c440cc7efde4e56d519",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "base64url-universal": "^1.1.0",
+ "esm": "^3.2.25",
+ "jsonld": "^5.0.0",
+ "jsonld-signatures": "^8.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@digitalbazaar/rsa-signature-2018/node_modules/jsonld-signatures": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-8.0.2.tgz",
+ "integrity": "sha512-HfmlLJxGacTnBiI4v8Ok3ouNOpCMmsPanBD6rLq20XJFdEw1fLury8NddRmoVr3/vSxvheAqyKK9giUG33J6ag==",
+ "dependencies": {
+ "jsonld": "^5.0.0",
+ "security-context": "^4.0.0",
+ "serialize-error": "^8.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@digitalbazaar/rsa-verification-key-2018": {
+ "version": "1.0.1-0",
+ "resolved": "git+ssh://git@github.com/digitalbazaar/rsa-verification-key-2018.git#5af38c1ba91ef5c2a3e0a3b55bec389fd2f973d9",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "base64url-universal": "^1.1.0",
+ "bs58": "^4.0.1",
+ "crypto-ld": "^4.0.2",
+ "node-forge": "~0.9.1",
+ "semver": "^7.3.2"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "esm": "^3.2.25",
+ "sodium-native": "^3.1.1"
+ }
+ },
+ "node_modules/@digitalbazaar/rsa-verification-key-2018/node_modules/crypto-ld": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-4.0.3.tgz",
+ "integrity": "sha512-IeNCX1wv7kLjxhKrCV6Jee0CU84e2dSyVxTaM3SCuO8/fMbYzjsx1e1js+c7w8GlOslubOHJKvhJ1EI+aZ1MwQ==",
+ "engines": {
+ "node": ">=8.3.0"
+ }
+ },
+ "node_modules/@digitalbazaar/rsa-verification-key-2018/node_modules/semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@digitalbazaar/security-context": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@digitalbazaar/security-context/-/security-context-1.0.0.tgz",
+ "integrity": "sha512-mlj+UmodxTAdMCHGxnGVTRLHcSLyiEOVRiz3J6yiRliJWyrgeXs34wlWjBorDIEMDIjK2JwZrDuFEKO9bS5nKQ=="
+ },
+ "node_modules/@digitalcredentials/http-client": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@digitalcredentials/http-client/-/http-client-1.2.2.tgz",
+ "integrity": "sha512-YOwaE+vUDSwiDhZT0BbXSWVg+bvp1HA1eg/gEc8OCwCOj9Bn9FRQdu8P9Y/fnYqyFCioDwwTRzGxgJLl50baEg==",
+ "dependencies": {
+ "ky": "^0.25.1",
+ "ky-universal": "^0.8.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@digitalcredentials/jsonld": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-5.2.1.tgz",
+ "integrity": "sha512-pDiO1liw8xs+J/43qnMZsxyz0VOWOb7Q2yUlBt/tyjq6SlT9xPo+3716tJPbjGPnou2lQRw3H5/I++z+6oQ07w==",
+ "dependencies": {
+ "@digitalcredentials/http-client": "^1.0.0",
+ "@digitalcredentials/rdf-canonize": "^1.0.0",
+ "canonicalize": "^1.0.1",
+ "lru-cache": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@digitalcredentials/jsonld-signatures": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld-signatures/-/jsonld-signatures-9.3.1.tgz",
+ "integrity": "sha512-YMh1e1GpTeHDqq2a2Kd+pLcHsMiPeKyE2Zs17NSwqckij7UMRVDQ54S5VQhHvoXZ1mlkpVaI2xtj5M5N6rzylw==",
+ "dependencies": {
+ "@digitalbazaar/security-context": "^1.0.0",
+ "@digitalcredentials/jsonld": "^5.2.1",
+ "fast-text-encoding": "^1.0.3",
+ "isomorphic-webcrypto": "^2.3.8",
+ "serialize-error": "^8.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@digitalcredentials/rdf-canonize": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@digitalcredentials/rdf-canonize/-/rdf-canonize-1.0.0.tgz",
+ "integrity": "sha512-z8St0Ex2doecsExCFK1uI4gJC+a5EqYYu1xpRH1pKmqSS9l/nxfuVxexNFyaeEum4dUdg1EetIC2rTwLIFhPRA==",
+ "dependencies": {
+ "fast-text-encoding": "^1.0.3",
+ "isomorphic-webcrypto": "^2.3.8"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@digitalcredentials/vc": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-1.1.2.tgz",
+ "integrity": "sha512-TSgny9XUh+W7uFjdcpvZzN7I35F9YMTv6jVINXr7UaLNgrinIjy6A5RMGQH9ecpcaoLMemKB5XjtLOOOQ3vknQ==",
+ "dependencies": {
+ "@digitalcredentials/jsonld": "^5.2.1",
+ "@digitalcredentials/jsonld-signatures": "^9.3.1",
+ "credentials-context": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/@egjs/hammerjs": {
"version": "2.0.17",
"resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz",
@@ -1972,6 +2221,25 @@
"node": ">=10"
}
},
+ "node_modules/@expo/config-plugins/node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/@expo/config-plugins/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -2027,6 +2295,26 @@
"@babel/highlight": "^7.10.4"
}
},
+ "node_modules/@expo/config/node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/@expo/config/node_modules/semver": {
"version": "7.3.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
@@ -2267,6 +2555,26 @@
"node": ">=10"
}
},
+ "node_modules/@expo/dev-server/node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/@expo/dev-server/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -2288,6 +2596,21 @@
"node": ">=10"
}
},
+ "node_modules/@expo/dev-server/node_modules/serialize-error": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz",
+ "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.12.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/@expo/dev-server/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -2300,6 +2623,18 @@
"node": ">=8"
}
},
+ "node_modules/@expo/dev-server/node_modules/type-fest": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz",
+ "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/@expo/dev-server/node_modules/universalify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
@@ -2496,6 +2831,26 @@
"node": ">=10"
}
},
+ "node_modules/@expo/dev-tools/node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/@expo/dev-tools/node_modules/graphql": {
"version": "0.13.2",
"resolved": "https://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz",
@@ -2531,6 +2886,12 @@
"node": ">=8"
}
},
+ "node_modules/@expo/dev-tools/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/@expo/dev-tools/node_modules/semver": {
"version": "7.3.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
@@ -3059,6 +3420,25 @@
"node": ">=10"
}
},
+ "node_modules/@expo/metro-config/node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/@expo/metro-config/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -3239,6 +3619,15 @@
"node-forge": "^0.10.0"
}
},
+ "node_modules/@expo/pkcs12/node_modules/node-forge": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+ "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
"node_modules/@expo/plist": {
"version": "0.0.14",
"resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.0.14.tgz",
@@ -3660,6 +4049,26 @@
"node": ">=10"
}
},
+ "node_modules/@expo/webpack-config/node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/@expo/webpack-config/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -4499,6 +4908,43 @@
"node": ">=4"
}
},
+ "node_modules/@peculiar/asn1-schema": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.1.0.tgz",
+ "integrity": "sha512-D6g4C5YRKC/iPujMAOXuZ7YGdaoMx8GsvWzfVSyx2LYeL38ECOKNywlYAuwbqQvON64lgsYdAujWQPX8hhoBLw==",
+ "dependencies": {
+ "@types/asn1js": "^2.0.2",
+ "asn1js": "^2.3.1",
+ "pvtsutils": "^1.2.1",
+ "tslib": "^2.3.1"
+ }
+ },
+ "node_modules/@peculiar/json-schema": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz",
+ "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/@peculiar/webcrypto": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.3.2.tgz",
+ "integrity": "sha512-oUgNj+8oT7uROEMEpZZ3U+kZjyxj1KXuvA8P5kiMUveTya9eyS8KTqu/dzdEtYC3u7dvjknVz+0sUfkWOBHfQg==",
+ "dependencies": {
+ "@peculiar/asn1-schema": "^2.0.44",
+ "@peculiar/json-schema": "^1.1.12",
+ "pvtsutils": "^1.2.2",
+ "tslib": "^2.3.1",
+ "webcrypto-core": "^1.7.1"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
+ },
"node_modules/@react-native-async-storage/async-storage": {
"version": "1.15.17",
"resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.15.17.tgz",
@@ -5497,9 +5943,9 @@
}
},
"node_modules/@react-native-picker/picker": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.3.1.tgz",
- "integrity": "sha512-DAw1o3bHNRnQPImsK53xCYkgC8bH+t9uTM+0JjNIlmMwvVLFnmDxi9v5iBTIWFMWG/pUHQaw66E29wW6oJG9Tw==",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.4.0.tgz",
+ "integrity": "sha512-duGZc3a8Qa21YPrA4U3oR9NAUzBA66FTjubGK2CodA6rNjiwN+xC32hOZ5unkf4qD3DqLWeoPjg3fYf54bVMjA==",
"peerDependencies": {
"react": "16 || 17",
"react-native": ">=0.57"
@@ -5579,9 +6025,9 @@
}
},
"node_modules/@react-navigation/native-stack": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.5.0.tgz",
- "integrity": "sha512-X2sV+AKkqEl7k0ltjN4lMBfx+FsynrnUWkCTGiROyMRo4yWElK1jY3XSTsj5Cpso2/MUHdf9v/AOw0EgU58FsA==",
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.5.2.tgz",
+ "integrity": "sha512-aKnjDEljGPDbL8VflCRGVJ2SPD/6x5yuAWsxd1ouCuD+43clkMnz1e0piNf+t3EpNYIWdBNR66Xa+7U/UB4y3w==",
"dependencies": {
"@react-navigation/elements": "^1.3.1",
"warn-once": "^0.1.0"
@@ -5613,9 +6059,9 @@
}
},
"node_modules/@sideway/address": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz",
- "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==",
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz",
+ "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==",
"dependencies": {
"@hapi/hoek": "^9.0.0"
}
@@ -5642,6 +6088,58 @@
"url": "https://github.com/sindresorhus/is?sponsor=1"
}
},
+ "node_modules/@stablelib/binary": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz",
+ "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==",
+ "dependencies": {
+ "@stablelib/int": "^1.0.1"
+ }
+ },
+ "node_modules/@stablelib/ed25519": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.2.tgz",
+ "integrity": "sha512-FtnvUwvKbp6l1dNcg4CswMAVFVu/nzLK3oC7/PRtjYyHbWsIkD8j+5cjXHmwcCpdCpRCaTGACkEhhMQ1RcdSOQ==",
+ "dependencies": {
+ "@stablelib/random": "^1.0.1",
+ "@stablelib/sha512": "^1.0.1",
+ "@stablelib/wipe": "^1.0.1"
+ }
+ },
+ "node_modules/@stablelib/hash": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz",
+ "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg=="
+ },
+ "node_modules/@stablelib/int": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz",
+ "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w=="
+ },
+ "node_modules/@stablelib/random": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.1.tgz",
+ "integrity": "sha512-zOh+JHX3XG9MSfIB0LZl/YwPP9w3o6WBiJkZvjPoKKu5LKFW4OLV71vMxWp9qG5T43NaWyn0QQTWgqCdO+yOBQ==",
+ "dependencies": {
+ "@stablelib/binary": "^1.0.1",
+ "@stablelib/wipe": "^1.0.1"
+ }
+ },
+ "node_modules/@stablelib/sha512": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz",
+ "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==",
+ "dependencies": {
+ "@stablelib/binary": "^1.0.1",
+ "@stablelib/hash": "^1.0.1",
+ "@stablelib/wipe": "^1.0.1"
+ }
+ },
+ "node_modules/@stablelib/wipe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz",
+ "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg=="
+ },
"node_modules/@szmarczak/http-timer": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
@@ -5663,6 +6161,11 @@
"node": ">= 6"
}
},
+ "node_modules/@types/asn1js": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@types/asn1js/-/asn1js-2.0.2.tgz",
+ "integrity": "sha512-t4YHCgtD+ERvH0FyxvNlYwJ2ezhqw7t+Ygh4urQ7dJER8i185JPv6oIM3ey5YQmGN6Zp9EMbpohkjZi9t3UxwA=="
+ },
"node_modules/@types/cacheable-request": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz",
@@ -5738,9 +6241,9 @@
"dev": true
},
"node_modules/@types/keyv": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz",
- "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz",
+ "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==",
"dev": true,
"dependencies": {
"@types/node": "*"
@@ -5753,9 +6256,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "17.0.21",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz",
- "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ=="
+ "version": "17.0.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz",
+ "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw=="
},
"node_modules/@types/prop-types": {
"version": "15.7.4",
@@ -5769,9 +6272,9 @@
"dev": true
},
"node_modules/@types/react": {
- "version": "17.0.40",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.40.tgz",
- "integrity": "sha512-UrXhD/JyLH+W70nNSufXqMZNuUD2cXHu6UjCllC6pmOQgBX4SGXOH8fjRka0O0Ee0HrFxapDD8Bwn81Kmiz6jQ==",
+ "version": "17.0.43",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.43.tgz",
+ "integrity": "sha512-8Q+LNpdxf057brvPu1lMtC5Vn7J119xrP1aq4qiaefNioQUYANF/CYeK4NsKorSZyUGJ66g0IM+4bbjwx45o2A==",
"dependencies": {
"@types/prop-types": "*",
"@types/scheduler": "*",
@@ -5845,6 +6348,11 @@
"node": ">=0.10.0"
}
},
+ "node_modules/@types/web": {
+ "version": "0.0.55",
+ "resolved": "https://registry.npmjs.org/@types/web/-/web-0.0.55.tgz",
+ "integrity": "sha512-YMH9aZrSJIMRMioCUwrgauI3iS/w2wRFN45Xxm0FE9Tt3hqaqkvOzjDFGsNjyKZzz7GJC0ilb+0tv59ytSUbrQ=="
+ },
"node_modules/@types/webpack": {
"version": "4.41.32",
"resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz",
@@ -5901,6 +6409,135 @@
"resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
"integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA=="
},
+ "node_modules/@unimodules/core": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.1.2.tgz",
+ "integrity": "sha512-lY+e2TAFuebD3vshHMIRqru3X4+k7Xkba4Wa7QsDBd+ex4c4N2dHAO61E2SrGD9+TRBD8w/o7mzK6ljbqRnbyg==",
+ "optional": true,
+ "dependencies": {
+ "compare-versions": "^3.4.0"
+ }
+ },
+ "node_modules/@unimodules/react-native-adapter": {
+ "version": "6.3.9",
+ "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.3.9.tgz",
+ "integrity": "sha512-i9/9Si4AQ8awls+YGAKkByFbeAsOPgUNeLoYeh2SQ3ddjxJ5ZJDtq/I74clDnpDcn8zS9pYlcDJ9fgVJa39Glw==",
+ "optional": true,
+ "dependencies": {
+ "expo-modules-autolinking": "^0.0.3",
+ "invariant": "^2.2.4"
+ }
+ },
+ "node_modules/@unimodules/react-native-adapter/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "optional": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@unimodules/react-native-adapter/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "optional": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@unimodules/react-native-adapter/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "optional": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@unimodules/react-native-adapter/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "optional": true
+ },
+ "node_modules/@unimodules/react-native-adapter/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==",
+ "optional": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@unimodules/react-native-adapter/node_modules/expo-modules-autolinking": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.0.3.tgz",
+ "integrity": "sha512-azkCRYj/DxbK4udDuDxA9beYzQTwpJ5a9QA0bBgha2jHtWdFGF4ZZWSY+zNA5mtU3KqzYt8jWHfoqgSvKyu1Aw==",
+ "optional": true,
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "commander": "^7.2.0",
+ "fast-glob": "^3.2.5",
+ "find-up": "~5.0.0",
+ "fs-extra": "^9.1.0"
+ },
+ "bin": {
+ "expo-modules-autolinking": "bin/expo-modules-autolinking.js"
+ }
+ },
+ "node_modules/@unimodules/react-native-adapter/node_modules/fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "optional": true,
+ "dependencies": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@unimodules/react-native-adapter/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "optional": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@unimodules/react-native-adapter/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "optional": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/@urql/core": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.1.tgz",
@@ -6578,6 +7215,11 @@
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
},
+ "node_modules/asmcrypto.js": {
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz",
+ "integrity": "sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA=="
+ },
"node_modules/asn1": {
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
@@ -6605,6 +7247,17 @@
"integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
"dev": true
},
+ "node_modules/asn1js": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-2.3.2.tgz",
+ "integrity": "sha512-IYzujqcOk7fHaePpTyvD3KPAA0AjT3qZlaQAw76zmPPAV/XTjhO+tbHjbFbIQZIhw+fk9wCSfb0Z6K+JHe8Q2g==",
+ "dependencies": {
+ "pvutils": "latest"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/assert": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz",
@@ -6731,6 +7384,27 @@
"follow-redirects": "^1.10.0"
}
},
+ "node_modules/b64-lite": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/b64-lite/-/b64-lite-1.4.0.tgz",
+ "integrity": "sha512-aHe97M7DXt+dkpa8fHlCcm1CnskAHrJqEfMI0KN7dwqlzml/aUe1AGt6lk51HzrSfVD67xOso84sOpr+0wIe2w==",
+ "dependencies": {
+ "base-64": "^0.1.0"
+ }
+ },
+ "node_modules/b64-lite/node_modules/base-64": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
+ "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs="
+ },
+ "node_modules/b64u-lite": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/b64u-lite/-/b64u-lite-1.1.0.tgz",
+ "integrity": "sha512-929qWGDVCRph7gQVTC6koHqQIpF4vtVaSbwLltFQo44B1bYUquALswZdBKFfrJCPEnsCOvWkJsPdQYZ/Ukhw8A==",
+ "dependencies": {
+ "b64-lite": "^1.4.0"
+ }
+ },
"node_modules/babel-core": {
"version": "7.0.0-bridge.0",
"resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
@@ -6964,6 +7638,20 @@
"node": ">=0.10.0"
}
},
+ "node_modules/base-64": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz",
+ "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==",
+ "peer": true
+ },
+ "node_modules/base-x": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz",
+ "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
"node_modules/base/node_modules/define-property": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
@@ -6984,6 +7672,17 @@
"node": ">=0.12.0"
}
},
+ "node_modules/base58-universal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base58-universal/-/base58-universal-1.0.0.tgz",
+ "integrity": "sha512-v0Ja4jwaQP8gBZPNXpfaXlLht2ed/Gp3AsVUZXtlZgY1qbKS0CjxvYs43U0Gh00zbVc1neMe+q/ULJ7ubVyB+w==",
+ "dependencies": {
+ "esm": "^3.2.25"
+ },
+ "engines": {
+ "node": ">=8.3.0"
+ }
+ },
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@@ -7007,11 +7706,21 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
"integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==",
- "dev": true,
"engines": {
"node": ">=6.0.0"
}
},
+ "node_modules/base64url-universal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-1.1.0.tgz",
+ "integrity": "sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA==",
+ "dependencies": {
+ "base64url": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8.3.0"
+ }
+ },
"node_modules/batch": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
@@ -7075,6 +7784,30 @@
"readable-stream": "^3.4.0"
}
},
+ "node_modules/bl/node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "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"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
"node_modules/bl/node_modules/readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
@@ -7383,26 +8116,6 @@
"node": ">= 6"
}
},
- "node_modules/browserify-sign/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/browserify-zlib": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
@@ -7440,6 +8153,14 @@
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
+ "node_modules/bs58": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz",
+ "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=",
+ "dependencies": {
+ "base-x": "^3.0.2"
+ }
+ },
"node_modules/bser": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
@@ -7462,10 +8183,9 @@
}
},
"node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
"funding": [
{
"type": "github",
@@ -7482,7 +8202,7 @@
],
"dependencies": {
"base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
+ "ieee754": "^1.2.1"
}
},
"node_modules/buffer-alloc": {
@@ -7595,12 +8315,6 @@
"node": ">=10"
}
},
- "node_modules/cacache/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/cache-base": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
@@ -7732,13 +8446,24 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001317",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001317.tgz",
- "integrity": "sha512-xIZLh8gBm4dqNX0gkzrBeyI86J2eCjWzYAs40q88smG844YIrN4tVQl/RhquHvKEKImWWFIVh1Lxe5n1G/N+GQ==",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- }
+ "version": "1.0.30001320",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001320.tgz",
+ "integrity": "sha512-MWPzG54AGdo3nWx7zHZTefseM5Y1ccM7hlQKHRqJkPozUaw3hNbBTMmLn16GG2FUzjR13Cr3NPfhIieX5PzXDA==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ }
+ ]
+ },
+ "node_modules/canonicalize": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz",
+ "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A=="
},
"node_modules/capture-exit": {
"version": "2.0.0",
@@ -8314,6 +9039,11 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
+ "node_modules/compression/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=="
+ },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -8414,6 +9144,11 @@
"safe-buffer": "~5.1.1"
}
},
+ "node_modules/convert-source-map/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=="
+ },
"node_modules/cookie": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
@@ -8640,6 +9375,11 @@
"object-assign": "^4.1.1"
}
},
+ "node_modules/credentials-context": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/credentials-context/-/credentials-context-2.0.0.tgz",
+ "integrity": "sha512-/mFKax6FK26KjgV2KW2D4YqKgoJ5DVJpNt87X2Jc9IxT2HBMy7nEIlc+n7pEi+YFFe721XqrvZPd+jbyyBjsvQ=="
+ },
"node_modules/cross-fetch": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
@@ -8726,6 +9466,14 @@
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz",
"integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q=="
},
+ "node_modules/crypto-ld": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-5.1.0.tgz",
+ "integrity": "sha512-Dy1QoQzj+2K6UlGZ9l34cPp+g/YHOd+r3/DXXQTnnz5btGb0vqDlkZBn+icYmwntEmW0bvGVwFWvcwZSbk1EEQ==",
+ "engines": {
+ "node": ">=8.3.0"
+ }
+ },
"node_modules/crypto-random-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
@@ -9045,6 +9793,14 @@
"node": ">=0.10"
}
},
+ "node_modules/data-uri-to-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz",
+ "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/date-fns": {
"version": "2.28.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz",
@@ -9072,9 +9828,9 @@
"integrity": "sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug=="
},
"node_modules/debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
"ms": "2.1.2"
},
@@ -9335,6 +10091,7 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true,
"engines": {
"node": ">= 0.6"
}
@@ -9366,7 +10123,8 @@
"node_modules/destroy": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
},
"node_modules/detect-libc": {
"version": "1.0.3",
@@ -9755,6 +10513,15 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
+ "node_modules/eas-cli/node_modules/node-forge": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+ "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
"node_modules/eas-cli/node_modules/semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
@@ -9792,15 +10559,25 @@
"safer-buffer": "^2.1.0"
}
},
+ "node_modules/ed25519-signature-2018-context": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz",
+ "integrity": "sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA=="
+ },
+ "node_modules/ed25519-signature-2020-context": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz",
+ "integrity": "sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg=="
+ },
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"node_modules/electron-to-chromium": {
- "version": "1.4.86",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.86.tgz",
- "integrity": "sha512-EVTZ+igi8x63pK4bPuA95PXIs2b2Cowi3WQwI9f9qManLiZJOD1Lash1J3W4TvvcUCcIR4o/rgi9o8UicXSO+w=="
+ "version": "1.4.93",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.93.tgz",
+ "integrity": "sha512-ywq9Pc5Gwwpv7NG767CtoU8xF3aAUQJjH9//Wy3MBCg4w5JSLbJUq2L8IsCdzPMjvSgxuue9WcVaTOyyxCL0aQ=="
},
"node_modules/elliptic": {
"version": "6.5.4",
@@ -10090,6 +10867,14 @@
"node": ">=4.0.0"
}
},
+ "node_modules/esm": {
+ "version": "3.2.25",
+ "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
+ "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
@@ -10809,6 +11594,26 @@
"node": ">=10"
}
},
+ "node_modules/expo-cli/node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/expo-cli/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -11276,6 +12081,25 @@
"node": ">=10"
}
},
+ "node_modules/expo-constants/node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/expo-constants/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -11706,6 +12530,26 @@
"node": ">=10"
}
},
+ "node_modules/expo-pwa/node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/expo-pwa/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -11748,6 +12592,18 @@
"node": ">= 10.0.0"
}
},
+ "node_modules/expo-random": {
+ "version": "12.1.2",
+ "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-12.1.2.tgz",
+ "integrity": "sha512-ajB+Mwff9PdglsyLliaU4K9BtVwKvAVVI2hQhnvlS3QgsAhHf+jQVUfAysQJHuioF6ADMEsab/kRUy4Dy03aoQ==",
+ "optional": true,
+ "dependencies": {
+ "base64-js": "^1.3.0"
+ },
+ "peerDependencies": {
+ "expo": "*"
+ }
+ },
"node_modules/expo-splash-screen": {
"version": "0.13.5",
"resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.13.5.tgz",
@@ -12008,6 +12864,25 @@
"node": ">=10"
}
},
+ "node_modules/expo-splash-screen/node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/expo-splash-screen/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -12206,6 +13081,25 @@
"node": ">=10"
}
},
+ "node_modules/expo-updates/node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/expo-updates/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -12423,6 +13317,12 @@
"node": ">= 0.8"
}
},
+ "node_modules/express/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/express/node_modules/serve-static": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
@@ -12513,6 +13413,12 @@
"node >=0.6.0"
]
},
+ "node_modules/fast-base64-decode": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz",
+ "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==",
+ "peer": true
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -12539,6 +13445,11 @@
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true
},
+ "node_modules/fast-text-encoding": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz",
+ "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig=="
+ },
"node_modules/fastq": {
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
@@ -12594,6 +13505,19 @@
"resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz",
"integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ=="
},
+ "node_modules/fetch-blob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz",
+ "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==",
+ "engines": {
+ "node": "^10.17.0 || >=12.3.0"
+ },
+ "peerDependenciesMeta": {
+ "domexception": {
+ "optional": true
+ }
+ }
+ },
"node_modules/fetch-retry": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz",
@@ -13193,12 +14117,6 @@
"node": ">=8"
}
},
- "node_modules/fs-minipass/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/fs-write-stream-atomic": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
@@ -13397,9 +14315,9 @@
"dev": true
},
"node_modules/glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -13775,26 +14693,6 @@
"node": ">= 6"
}
},
- "node_modules/hash-base/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/hash.js": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
@@ -14052,9 +14950,9 @@
}
},
"node_modules/htmlparser2/node_modules/dom-serializer/node_modules/domhandler": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
- "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
+ "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
"dev": true,
"dependencies": {
"domelementtype": "^2.2.0"
@@ -14093,9 +14991,9 @@
}
},
"node_modules/htmlparser2/node_modules/domutils/node_modules/domhandler": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
- "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
+ "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
"dev": true,
"dependencies": {
"domelementtype": "^2.2.0"
@@ -14435,7 +15333,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -15529,6 +16426,38 @@
"is-stream": "^1.0.1"
}
},
+ "node_modules/isomorphic-webcrypto": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.8.tgz",
+ "integrity": "sha512-XddQSI0WYlSCjxtm1AI8kWQOulf7hAN3k3DclF1sxDJZqOe0pcsOt675zvWW91cZH9hYs3nlA3Ev8QK5i80SxQ==",
+ "dependencies": {
+ "@peculiar/webcrypto": "^1.0.22",
+ "asmcrypto.js": "^0.22.0",
+ "b64-lite": "^1.3.1",
+ "b64u-lite": "^1.0.1",
+ "msrcrypto": "^1.5.6",
+ "str2buf": "^1.3.0",
+ "webcrypto-shim": "^0.1.4"
+ },
+ "optionalDependencies": {
+ "@unimodules/core": "*",
+ "@unimodules/react-native-adapter": "*",
+ "expo-random": "*",
+ "react-native-securerandom": "^0.1.1"
+ }
+ },
+ "node_modules/isomorphic-webcrypto/node_modules/react-native-securerandom": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz",
+ "integrity": "sha1-8TBiOkEsM4sK+t7bwgTFy7i/IHA=",
+ "optional": true,
+ "dependencies": {
+ "base64-js": "*"
+ },
+ "peerDependencies": {
+ "react-native": "*"
+ }
+ },
"node_modules/isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
@@ -15813,6 +16742,15 @@
"node-rsa": "^1.0.7"
}
},
+ "node_modules/jks-js/node_modules/node-forge": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+ "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
"node_modules/joi": {
"version": "17.4.2",
"resolved": "https://registry.npmjs.org/joi/-/joi-17.4.2.tgz",
@@ -16104,12 +17042,9 @@
"dev": true
},
"node_modules/json5": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
- "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
- "dependencies": {
- "minimist": "^1.2.5"
- },
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
+ "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
"bin": {
"json5": "lib/cli.js"
},
@@ -16136,6 +17071,33 @@
"node": "*"
}
},
+ "node_modules/jsonld": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-5.2.0.tgz",
+ "integrity": "sha512-JymgT6Xzk5CHEmHuEyvoTNviEPxv6ihLWSPu1gFdtjSAyM6cFqNrv02yS/SIur3BBIkCf0HjizRc24d8/FfQKw==",
+ "dependencies": {
+ "@digitalbazaar/http-client": "^1.1.0",
+ "canonicalize": "^1.0.1",
+ "lru-cache": "^6.0.0",
+ "rdf-canonize": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/jsonld-signatures": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-9.3.1.tgz",
+ "integrity": "sha512-OasKERvvbfbuItVFrb0pOHiclHPvT98IAorayZnEj48/E0Vz3rTPLzC14rDi1CEXjiiTGeNadLzTLdomdeZEAQ==",
+ "dependencies": {
+ "jsonld": "^5.0.0",
+ "security-context": "^4.0.0",
+ "serialize-error": "^8.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/jsonparse": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
@@ -16205,6 +17167,57 @@
"node": ">=6"
}
},
+ "node_modules/ky": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz",
+ "integrity": "sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/ky?sponsor=1"
+ }
+ },
+ "node_modules/ky-universal": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.8.2.tgz",
+ "integrity": "sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ==",
+ "dependencies": {
+ "abort-controller": "^3.0.0",
+ "node-fetch": "3.0.0-beta.9"
+ },
+ "engines": {
+ "node": ">=10.17"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/ky-universal?sponsor=1"
+ },
+ "peerDependencies": {
+ "ky": ">=0.17.0",
+ "web-streams-polyfill": ">=2.0.0"
+ },
+ "peerDependenciesMeta": {
+ "web-streams-polyfill": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ky-universal/node_modules/node-fetch": {
+ "version": "3.0.0-beta.9",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz",
+ "integrity": "sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==",
+ "dependencies": {
+ "data-uri-to-buffer": "^3.0.1",
+ "fetch-blob": "^2.1.1"
+ },
+ "engines": {
+ "node": "^10.17 || >=12.3"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/node-fetch"
+ }
+ },
"node_modules/last-call-webpack-plugin": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz",
@@ -16533,11 +17546,6 @@
"node": ">=10"
}
},
- "node_modules/lru-cache/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- },
"node_modules/make-dir": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
@@ -16597,12 +17605,6 @@
"node": ">=8"
}
},
- "node_modules/make-fetch-happen/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/makeerror": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
@@ -16623,6 +17625,15 @@
"node": ">=6"
}
},
+ "node_modules/map-age-cleaner/node_modules/p-defer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+ "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/map-cache": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
@@ -17357,12 +18368,12 @@
"dev": true
},
"node_modules/micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
"dependencies": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
},
"engines": {
"node": ">=8.6"
@@ -17554,12 +18565,6 @@
"node": ">=8"
}
},
- "node_modules/minipass-collect/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/minipass-fetch": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
@@ -17589,12 +18594,6 @@
"node": ">=8"
}
},
- "node_modules/minipass-fetch/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/minipass-flush": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
@@ -17619,12 +18618,6 @@
"node": ">=8"
}
},
- "node_modules/minipass-flush/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/minipass-json-stream": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz",
@@ -17647,12 +18640,6 @@
"node": ">=8"
}
},
- "node_modules/minipass-json-stream/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/minipass-pipeline": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
@@ -17677,12 +18664,6 @@
"node": ">=8"
}
},
- "node_modules/minipass-pipeline/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/minipass-sized": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
@@ -17707,10 +18688,10 @@
"node": ">=8"
}
},
- "node_modules/minipass-sized/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "node_modules/minipass/node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true
},
"node_modules/minizlib": {
@@ -17738,12 +18719,6 @@
"node": ">=8"
}
},
- "node_modules/minizlib/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/mississippi": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
@@ -17778,11 +18753,11 @@
}
},
"node_modules/mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
"dependencies": {
- "minimist": "^1.2.5"
+ "minimist": "^1.2.6"
},
"bin": {
"mkdirp": "bin/cmd.js"
@@ -17830,6 +18805,11 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
+ "node_modules/msrcrypto": {
+ "version": "1.5.8",
+ "resolved": "https://registry.npmjs.org/msrcrypto/-/msrcrypto-1.5.8.tgz",
+ "integrity": "sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q=="
+ },
"node_modules/multicast-dns": {
"version": "6.2.3",
"resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
@@ -18111,12 +19091,11 @@
}
},
"node_modules/node-forge": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
- "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
- "dev": true,
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.2.tgz",
+ "integrity": "sha512-naKSScof4Wn+aoHU6HBsifh92Zeicm1GDQKd1vp3Y/kOi8ub0DozCa9KpvYNCXslFHYRmLNiqRopGdTGwNLpNw==",
"engines": {
- "node": ">= 6.0.0"
+ "node": ">= 4.5.0"
}
},
"node_modules/node-gyp": {
@@ -18143,6 +19122,17 @@
"node": ">= 10.12.0"
}
},
+ "node_modules/node-gyp-build": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz",
+ "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==",
+ "optional": true,
+ "bin": {
+ "node-gyp-build": "bin.js",
+ "node-gyp-build-optional": "optional.js",
+ "node-gyp-build-test": "build-test.js"
+ }
+ },
"node_modules/node-gyp/node_modules/semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
@@ -18557,12 +19547,6 @@
"node": ">=10"
}
},
- "node_modules/npm-registry-fetch/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/npm-run-path": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
@@ -19122,12 +20106,12 @@
}
},
"node_modules/p-defer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
- "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
- "dev": true,
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz",
+ "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==",
+ "peer": true,
"engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
"node_modules/p-finally": {
@@ -19500,12 +20484,6 @@
"node": ">=10"
}
},
- "node_modules/pacote/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/pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
@@ -19895,9 +20873,9 @@
}
},
"node_modules/plist": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz",
- "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz",
+ "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==",
"dependencies": {
"base64-js": "^1.5.1",
"xmlbuilder": "^9.0.7"
@@ -20889,11 +21867,26 @@
"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/pvtsutils": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.2.2.tgz",
+ "integrity": "sha512-OALo5ZEdqiI127i64+CXwkCOyFHUA+tCQgaUO/MvRDFXWPr53f2sx28ECNztUEzuyu5xvuuD1EB/szg9mwJoGA==",
+ "dependencies": {
+ "tslib": "^2.3.1"
+ }
+ },
+ "node_modules/pvutils": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz",
+ "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/q": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
@@ -21114,6 +22107,17 @@
"rc": "cli.js"
}
},
+ "node_modules/rdf-canonize": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.0.0.tgz",
+ "integrity": "sha512-LXRkhab1QaPJnhUIt1gtXXKswQCZ9zpflsSZFczG7mCLAkMvVjdqCGk9VXCUss0aOUeEyV2jtFxGcdX8DSkj9w==",
+ "dependencies": {
+ "setimmediate": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/react": {
"version": "17.0.1",
"resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz",
@@ -21383,9 +22387,9 @@
}
},
"node_modules/react-devtools-core": {
- "version": "4.24.1",
- "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.24.1.tgz",
- "integrity": "sha512-skar+cqSg5Oz89n4lQ/aBQS8RGj93FMufg2TrMJqE+RSUTO9nLEYawRMXXCs8PnDVRSfG5pPVU5Nt1OegNflyA==",
+ "version": "4.24.2",
+ "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.24.2.tgz",
+ "integrity": "sha512-UC3rvQCG/dnC95NPNWBFrUEtdAEiFZ9xZe1tTHFOELVR5qfNLroZ3w9tC51NQvvK5E10G2ko3lQ5Vrh3p0bHrA==",
"dependencies": {
"shell-quote": "^1.6.1",
"ws": "^7"
@@ -21488,6 +22492,20 @@
"resolved": "https://registry.npmjs.org/react-native-app-intro-slider/-/react-native-app-intro-slider-4.0.4.tgz",
"integrity": "sha512-Zkjaol6X3BbZkHUpVDj2LjdidpS6rCgKi0fx80xgGKa0pHxBRd4swWTv2bHnnvu5k1/HXwYk0mY2TbK+2jHl5w=="
},
+ "node_modules/react-native-blob-util": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/react-native-blob-util/-/react-native-blob-util-0.14.1.tgz",
+ "integrity": "sha512-Rf2aURRqM7j96fFdO5tbiVlAsfLOkSyBqrAPlG4VcJj9jT6G7bVHebwJg7BBfTKWTFwPjiOIAdUjsjkGaUUOyQ==",
+ "dependencies": {
+ "base-64": "0.1.0",
+ "glob": "^7.1.6"
+ }
+ },
+ "node_modules/react-native-blob-util/node_modules/base-64": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
+ "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs="
+ },
"node_modules/react-native-bluetooth-state-manager": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/react-native-bluetooth-state-manager/-/react-native-bluetooth-state-manager-1.3.2.tgz",
@@ -21508,9 +22526,9 @@
}
},
"node_modules/react-native-device-info": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-8.5.0.tgz",
- "integrity": "sha512-Y5mSYWvVvlpKbN3hkA+mDBqXvcgeR/jiIFaJZrsYw4LF+e3fwFl+vQgPz21IroDi9JXkA26BpxaXu3lj1P1GGg==",
+ "version": "8.5.1",
+ "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-8.5.1.tgz",
+ "integrity": "sha512-VMEP1c/X0KSOqBZDzs9/GHbacgdsoQqaBqI/fK98S5oMmKAfuIFjAjb4kvcNjC2mklD6JrlgXPnqKQQaX+kklg==",
"peerDependencies": {
"react-native": "*"
}
@@ -21543,6 +22561,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/react-native-fetch-api": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz",
+ "integrity": "sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA==",
+ "peer": true,
+ "dependencies": {
+ "p-defer": "^3.0.0"
+ }
+ },
"node_modules/react-native-gesture-handler": {
"version": "1.10.3",
"resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.10.3.tgz",
@@ -21569,6 +22596,18 @@
"ua-parser-js": "^0.7.30"
}
},
+ "node_modules/react-native-get-random-values": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.7.2.tgz",
+ "integrity": "sha512-28KRYGpIG/upV8+k/qFA+TwGW+yGjmtOHaCduJHpOQK1QUTyhiA6E2IgL4UvvU2dybeCTYFmUi9wcEQ0GiWe5g==",
+ "peer": true,
+ "dependencies": {
+ "fast-base64-decode": "^1.0.0"
+ },
+ "peerDependencies": {
+ "react-native": ">=0.56"
+ }
+ },
"node_modules/react-native-keychain": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/react-native-keychain/-/react-native-keychain-8.0.0.tgz",
@@ -21583,6 +22622,19 @@
"react-native": "*"
}
},
+ "node_modules/react-native-polyfill-globals": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/react-native-polyfill-globals/-/react-native-polyfill-globals-3.1.0.tgz",
+ "integrity": "sha512-6ACmV1SjXvZP2LN6J2yK58yNACKddcvoiKLrSQdISx32IdYStfdmGXrbAfpd+TANrTlIaZ2SLoFXohNwhnqm/w==",
+ "peerDependencies": {
+ "base-64": "*",
+ "react-native-fetch-api": "*",
+ "react-native-get-random-values": "*",
+ "react-native-url-polyfill": "*",
+ "text-encoding": "*",
+ "web-streams-polyfill": "*"
+ }
+ },
"node_modules/react-native-qrcode-svg": {
"version": "6.1.2",
"resolved": "https://registry.npmjs.org/react-native-qrcode-svg/-/react-native-qrcode-svg-6.1.2.tgz",
@@ -21709,6 +22761,18 @@
"resolved": "https://registry.npmjs.org/react-native-system-setting/-/react-native-system-setting-1.7.6.tgz",
"integrity": "sha512-nBnIK5Xnyu8XRRA3BMzRI54oYlSBKc0oOTQdZOCEeOvn4ltS1nk2shj/vtMQe6khXvuhai3vIc+g7DcsOcr5+w=="
},
+ "node_modules/react-native-url-polyfill": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/react-native-url-polyfill/-/react-native-url-polyfill-1.3.0.tgz",
+ "integrity": "sha512-w9JfSkvpqqlix9UjDvJjm1EjSt652zVQ6iwCIj1cVVkwXf4jQhQgTNXY6EVTwuAmUjg6BC6k9RHCBynoLFo3IQ==",
+ "peer": true,
+ "dependencies": {
+ "whatwg-url-without-unicode": "8.0.0-3"
+ },
+ "peerDependencies": {
+ "react-native": "*"
+ }
+ },
"node_modules/react-native-vector-icons": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-8.1.0.tgz",
@@ -21946,6 +23010,11 @@
"util-deprecate": "~1.0.1"
}
},
+ "node_modules/readable-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=="
+ },
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -22220,9 +23289,9 @@
]
},
"node_modules/renderkid/node_modules/domhandler": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
- "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
+ "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
"dev": true,
"dependencies": {
"domelementtype": "^2.2.0"
@@ -22635,9 +23704,23 @@
}
},
"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=="
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "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/safe-json-stringify": {
"version": "1.2.0",
@@ -22855,6 +23938,11 @@
"url": "https://opencollective.com/webpack"
}
},
+ "node_modules/security-context": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/security-context/-/security-context-4.0.0.tgz",
+ "integrity": "sha512-yiDCS7tpKQl6p4NG57BdKLTSNLFfj5HosBIzXBl4jZf/qorJzSzbEUIdLhN+vVYgyLlvjixY8DPPTgqI8zvNCA=="
+ },
"node_modules/select-hose": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
@@ -22870,6 +23958,15 @@
"node-forge": "^0.10.0"
}
},
+ "node_modules/selfsigned/node_modules/node-forge": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+ "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
"node_modules/semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -22948,12 +24045,11 @@
"dev": true
},
"node_modules/serialize-error": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz",
- "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==",
- "dev": true,
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz",
+ "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==",
"dependencies": {
- "type-fest": "^0.12.0"
+ "type-fest": "^0.20.2"
},
"engines": {
"node": ">=10"
@@ -22962,18 +24058,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/serialize-error/node_modules/type-fest": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz",
- "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/serialize-javascript": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
@@ -23038,14 +24122,14 @@
"dev": true
},
"node_modules/serve-static": {
- "version": "1.14.2",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz",
- "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==",
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+ "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
"dependencies": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
- "send": "0.17.2"
+ "send": "0.18.0"
},
"engines": {
"node": ">= 0.8.0"
@@ -23064,19 +24148,36 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
+ "node_modules/serve-static/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==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/serve-static/node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
"node_modules/serve-static/node_modules/http-errors": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
- "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"dependencies": {
- "depd": "~1.1.2",
+ "depd": "2.0.0",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
- "statuses": ">= 1.5.0 < 2",
+ "statuses": "2.0.1",
"toidentifier": "1.0.1"
},
"engines": {
- "node": ">= 0.6"
+ "node": ">= 0.8"
}
},
"node_modules/serve-static/node_modules/mime": {
@@ -23095,24 +24196,35 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
+ "node_modules/serve-static/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==",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/serve-static/node_modules/send": {
- "version": "0.17.2",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz",
- "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==",
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
"dependencies": {
"debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
+ "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": "1.8.1",
+ "http-errors": "2.0.0",
"mime": "1.6.0",
"ms": "2.1.3",
- "on-finished": "~2.3.0",
+ "on-finished": "2.4.1",
"range-parser": "~1.2.1",
- "statuses": "~1.5.0"
+ "statuses": "2.0.1"
},
"engines": {
"node": ">= 0.8.0"
@@ -23124,11 +24236,11 @@
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
"node_modules/serve-static/node_modules/statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
"engines": {
- "node": ">= 0.6"
+ "node": ">= 0.8"
}
},
"node_modules/serve-static/node_modules/toidentifier": {
@@ -23257,9 +24369,9 @@
}
},
"node_modules/sharp-cli/node_modules/ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+ "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
"dev": true,
"engines": {
"node": ">=4"
@@ -24091,6 +25203,16 @@
"node": ">= 10"
}
},
+ "node_modules/sodium-native": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-3.3.0.tgz",
+ "integrity": "sha512-rg6lCDM/qa3p07YGqaVD+ciAbUqm6SoO4xmlcfkbU5r1zIGrguXztLiEtaLYTV5U6k8KSIUFmnU3yQUSKmf6DA==",
+ "hasInstallScript": true,
+ "optional": true,
+ "dependencies": {
+ "node-gyp-build": "^4.3.0"
+ }
+ },
"node_modules/source-list-map": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
@@ -24270,12 +25392,6 @@
"node": ">=8"
}
},
- "node_modules/ssri/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/stable": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
@@ -24412,6 +25528,11 @@
"node": ">= 0.6"
}
},
+ "node_modules/str2buf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/str2buf/-/str2buf-1.3.0.tgz",
+ "integrity": "sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA=="
+ },
"node_modules/stream-browserify": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
@@ -24499,6 +25620,11 @@
"safe-buffer": "~5.1.0"
}
},
+ "node_modules/string_decoder/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=="
+ },
"node_modules/string-hash-64": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/string-hash-64/-/string-hash-64-1.0.3.tgz",
@@ -24682,6 +25808,25 @@
"node": ">= 6"
}
},
+ "node_modules/sucrase/node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/sudo-prompt": {
"version": "9.1.1",
"resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz",
@@ -24906,12 +26051,6 @@
"node": ">=10"
}
},
- "node_modules/tar/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/temp": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz",
@@ -25104,6 +26243,13 @@
"node": ">=0.10.0"
}
},
+ "node_modules/text-encoding": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz",
+ "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==",
+ "deprecated": "no longer maintained",
+ "peer": true
+ },
"node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -25387,7 +26533,6 @@
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
"engines": {
"node": ">=10"
},
@@ -26280,10 +27425,41 @@
"defaults": "^1.0.3"
}
},
+ "node_modules/web-streams-polyfill": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz",
+ "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==",
+ "peer": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/webcrypto-core": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.1.tgz",
+ "integrity": "sha512-Gw2zLzYSJ7Imp5lLDu3CcWB5oTTACMDEE2PjoLfttGgIhd7BfackBdVgEzd9ZM/i65gpNq0+IelL0JZ48QwzNg==",
+ "dependencies": {
+ "@peculiar/asn1-schema": "^2.0.44",
+ "@peculiar/json-schema": "^1.1.12",
+ "@types/web": "^0.0.55",
+ "asn1js": "^2.2.0",
+ "pvtsutils": "^1.2.2",
+ "tslib": "^2.3.1"
+ }
+ },
+ "node_modules/webcrypto-shim": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/webcrypto-shim/-/webcrypto-shim-0.1.7.tgz",
+ "integrity": "sha512-JAvAQR5mRNRxZW2jKigWMjCMkjSdmP5cColRP1U/pTg69VgHXEi1orv5vVpJ55Zc5MIaPc1aaurzd9pjv2bveg=="
+ },
"node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
+ "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
},
"node_modules/webpack": {
"version": "4.43.0",
@@ -26950,26 +28126,6 @@
"node": ">=0.10"
}
},
- "node_modules/webpack-dev-server/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/webpack-dev-server/node_modules/schema-utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
@@ -27023,6 +28179,21 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
+ "node_modules/webpack-dev-server/node_modules/serve-static": {
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz",
+ "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==",
+ "dev": true,
+ "dependencies": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/webpack-dev-server/node_modules/setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -27553,6 +28724,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/webpack/node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ },
"node_modules/websocket-driver": {
"version": "0.6.5",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz",
@@ -27588,6 +28765,49 @@
"webidl-conversions": "^3.0.0"
}
},
+ "node_modules/whatwg-url-without-unicode": {
+ "version": "8.0.0-3",
+ "resolved": "https://registry.npmjs.org/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz",
+ "integrity": "sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==",
+ "peer": true,
+ "dependencies": {
+ "buffer": "^5.4.3",
+ "punycode": "^2.1.1",
+ "webidl-conversions": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/whatwg-url-without-unicode/node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "peer": true,
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/whatwg-url/node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
+ },
"node_modules/which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
@@ -28060,6 +29280,26 @@
"minipass": "^2.6.0"
}
},
+ "node_modules/xdl/node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/xdl/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -28088,6 +29328,15 @@
"minipass": "^2.9.0"
}
},
+ "node_modules/xdl/node_modules/node-forge": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+ "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
"node_modules/xdl/node_modules/p-map": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
@@ -28112,6 +29361,21 @@
"node": ">=10"
}
},
+ "node_modules/xdl/node_modules/serialize-error": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz",
+ "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.12.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/xdl/node_modules/source-map-support": {
"version": "0.4.18",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
@@ -28151,6 +29415,18 @@
"node": ">=4.5"
}
},
+ "node_modules/xdl/node_modules/type-fest": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz",
+ "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/xdl/node_modules/universalify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
@@ -28160,6 +29436,12 @@
"node": ">= 10.0.0"
}
},
+ "node_modules/xdl/node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ },
"node_modules/xml-js": {
"version": "1.6.11",
"resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz",
@@ -28230,10 +29512,9 @@
"integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
},
"node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"node_modules/yargs": {
"version": "15.4.1",
@@ -28389,17 +29670,17 @@
"integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ=="
},
"@babel/core": {
- "version": "7.17.7",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.7.tgz",
- "integrity": "sha512-djHlEfFHnSnTAcPb7dATbiM5HxGOP98+3JLBZtjRb5I7RXrw7kFRoG2dXM8cm3H+o11A8IFH/uprmJpwFynRNQ==",
+ "version": "7.17.8",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz",
+ "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==",
"requires": {
"@ampproject/remapping": "^2.1.0",
"@babel/code-frame": "^7.16.7",
"@babel/generator": "^7.17.7",
"@babel/helper-compilation-targets": "^7.17.7",
"@babel/helper-module-transforms": "^7.17.7",
- "@babel/helpers": "^7.17.7",
- "@babel/parser": "^7.17.7",
+ "@babel/helpers": "^7.17.8",
+ "@babel/parser": "^7.17.8",
"@babel/template": "^7.16.7",
"@babel/traverse": "^7.17.3",
"@babel/types": "^7.17.0",
@@ -28640,9 +29921,9 @@
}
},
"@babel/helpers": {
- "version": "7.17.7",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.7.tgz",
- "integrity": "sha512-TKsj9NkjJfTBxM7Phfy7kv6yYc4ZcOo+AaWGqQOKTPDOmcGkIFb5xNA746eKisQkm4yavUYh4InYM9S+VnO01w==",
+ "version": "7.17.8",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz",
+ "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==",
"requires": {
"@babel/template": "^7.16.7",
"@babel/traverse": "^7.17.3",
@@ -28660,9 +29941,9 @@
}
},
"@babel/parser": {
- "version": "7.17.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.7.tgz",
- "integrity": "sha512-bm3AQf45vR4gKggRfvJdYJ0gFLoCbsPxiFLSH6hTVYABptNHY6l9NrhnucVjQ/X+SPtLANT9lc0fFhikj+VBRA=="
+ "version": "7.17.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.8.tgz",
+ "integrity": "sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ=="
},
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
"version": "7.16.7",
@@ -28712,11 +29993,11 @@
}
},
"@babel/plugin-proposal-decorators": {
- "version": "7.17.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.2.tgz",
- "integrity": "sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==",
+ "version": "7.17.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.8.tgz",
+ "integrity": "sha512-U69odN4Umyyx1xO1rTII0IDkAEC+RNlcKXtqOblfpzqy1C+aOplb76BQNq0+XdpVkOaPlpEDwd++joY8FNFJKA==",
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.17.1",
+ "@babel/helper-create-class-features-plugin": "^7.17.6",
"@babel/helper-plugin-utils": "^7.16.7",
"@babel/helper-replace-supers": "^7.16.7",
"@babel/plugin-syntax-decorators": "^7.17.0",
@@ -29154,12 +30435,12 @@
}
},
"@babel/plugin-transform-modules-systemjs": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz",
- "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==",
+ "version": "7.17.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz",
+ "integrity": "sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==",
"requires": {
"@babel/helper-hoist-variables": "^7.16.7",
- "@babel/helper-module-transforms": "^7.16.7",
+ "@babel/helper-module-transforms": "^7.17.7",
"@babel/helper-plugin-utils": "^7.16.7",
"@babel/helper-validator-identifier": "^7.16.7",
"babel-plugin-dynamic-import-node": "^2.3.3"
@@ -29482,9 +30763,9 @@
}
},
"@babel/runtime": {
- "version": "7.17.7",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.7.tgz",
- "integrity": "sha512-L6rvG9GDxaLgFjg41K+5Yv9OMrU98sWe+Ykmc6FDJW/+vYZMhdOMKkISgzptMaERHvS2Y2lw9MDRm2gHhlQQoA==",
+ "version": "7.17.8",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.8.tgz",
+ "integrity": "sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==",
"requires": {
"regenerator-runtime": "^0.13.4"
}
@@ -29534,6 +30815,190 @@
"minimist": "^1.2.0"
}
},
+ "@digitalbazaar/ed25519-signature-2018": {
+ "version": "git+ssh://git@github.com/digitalbazaar/ed25519-signature-2018.git#759369965b5273f037e6a32f5da42ff9d2e14c60",
+ "from": "@digitalbazaar/ed25519-signature-2018@digitalbazaar/ed25519-signature-2018",
+ "requires": {
+ "@digitalbazaar/ed25519-verification-key-2018": "^3.1.1",
+ "@digitalbazaar/ed25519-verification-key-2020": "^3.2.0",
+ "@digitalbazaar/jws-linked-data-signature": "^1.0.1",
+ "base58-universal": "^1.0.0",
+ "ed25519-signature-2018-context": "^1.0.1",
+ "ed25519-signature-2020-context": "^1.1.0",
+ "esm": "^3.2.25",
+ "jsonld": "^5.2.0"
+ },
+ "dependencies": {
+ "@digitalbazaar/ed25519-verification-key-2018": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@digitalbazaar/ed25519-verification-key-2018/-/ed25519-verification-key-2018-3.1.2.tgz",
+ "integrity": "sha512-UD7rETyyaHtKYeKfQu/FoeZ00EmANInX0ftmMKQJsI1q8YcRHUAiMF0sIbVM/T73+VBR2dObtfLnZTNM+PkXug==",
+ "requires": {
+ "@stablelib/ed25519": "^1.0.1",
+ "base58-universal": "^1.0.0",
+ "crypto-ld": "^5.0.0",
+ "esm": "^3.2.25"
+ }
+ }
+ }
+ },
+ "@digitalbazaar/ed25519-verification-key-2018": {
+ "version": "git+ssh://git@github.com/digitalbazaar/ed25519-verification-key-2018.git#c106fc01108963b789b3366bc587d4992fe3770d",
+ "from": "@digitalbazaar/ed25519-verification-key-2018@digitalbazaar/ed25519-verification-key-2018",
+ "requires": {
+ "@stablelib/ed25519": "^1.0.1",
+ "base58-universal": "^1.0.0",
+ "crypto-ld": "^5.0.0",
+ "esm": "^3.2.25"
+ }
+ },
+ "@digitalbazaar/ed25519-verification-key-2020": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@digitalbazaar/ed25519-verification-key-2020/-/ed25519-verification-key-2020-3.2.0.tgz",
+ "integrity": "sha512-A+17sRJ+rRNuN6yG0zZMucbVUpxUkBRLTb503caoJv0GB5853HXSaZbl83kKl9LCh02ExbQWxD6o/aqeR012uA==",
+ "requires": {
+ "@stablelib/ed25519": "^1.0.1",
+ "base58-universal": "^1.0.0",
+ "base64url-universal": "^1.1.0",
+ "crypto-ld": "^5.1.0",
+ "esm": "^3.2.25"
+ }
+ },
+ "@digitalbazaar/http-client": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-1.2.0.tgz",
+ "integrity": "sha512-W9KQQ5pUJcaR0I4c2HPJC0a7kRbZApIorZgPnEDwMBgj16iQzutGLrCXYaZOmxqVLVNqqlQ4aUJh+HBQZy4W6Q==",
+ "requires": {
+ "esm": "^3.2.22",
+ "ky": "^0.25.1",
+ "ky-universal": "^0.8.2"
+ }
+ },
+ "@digitalbazaar/jws-linked-data-signature": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@digitalbazaar/jws-linked-data-signature/-/jws-linked-data-signature-1.0.1.tgz",
+ "integrity": "sha512-6bj1q/gQgk7rCKGJqwIF7rrSHcqCl049hNwIoNRVHOJpD5pOdTVlJqjdd1/a49UFcoYqiIpb1Bq/5xg/iAsWbQ==",
+ "requires": {
+ "base64url-universal": "^1.1.0",
+ "esm": "^3.2.25",
+ "jsonld-signatures": "^9.0.2"
+ }
+ },
+ "@digitalbazaar/rsa-signature-2018": {
+ "version": "git+ssh://git@github.com/digitalbazaar/rsa-signature-2018.git#47533f74a128cc29e5a6e8f96f466d0b5f3834b3",
+ "from": "@digitalbazaar/rsa-signature-2018@digitalbazaar/rsa-signature-2018#initial",
+ "requires": {
+ "@digitalbazaar/jws-linked-data-signature": "digitalbazaar/jws-linked-data-signature#initial",
+ "@digitalbazaar/rsa-verification-key-2018": "digitalbazaar/rsa-verification-key-2018#initial",
+ "esm": "^3.2.25"
+ },
+ "dependencies": {
+ "@digitalbazaar/jws-linked-data-signature": {
+ "version": "git+ssh://git@github.com/digitalbazaar/jws-linked-data-signature.git#2bf931e63d69d10e003f5c440cc7efde4e56d519",
+ "from": "@digitalbazaar/jws-linked-data-signature@digitalbazaar/jws-linked-data-signature#initial",
+ "requires": {
+ "base64url-universal": "^1.1.0",
+ "esm": "^3.2.25",
+ "jsonld": "^5.0.0",
+ "jsonld-signatures": "^8.0.0"
+ }
+ },
+ "jsonld-signatures": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-8.0.2.tgz",
+ "integrity": "sha512-HfmlLJxGacTnBiI4v8Ok3ouNOpCMmsPanBD6rLq20XJFdEw1fLury8NddRmoVr3/vSxvheAqyKK9giUG33J6ag==",
+ "requires": {
+ "jsonld": "^5.0.0",
+ "security-context": "^4.0.0",
+ "serialize-error": "^8.0.1"
+ }
+ }
+ }
+ },
+ "@digitalbazaar/rsa-verification-key-2018": {
+ "version": "git+ssh://git@github.com/digitalbazaar/rsa-verification-key-2018.git#5af38c1ba91ef5c2a3e0a3b55bec389fd2f973d9",
+ "from": "@digitalbazaar/rsa-verification-key-2018@digitalbazaar/rsa-verification-key-2018#initial",
+ "requires": {
+ "base64url-universal": "^1.1.0",
+ "bs58": "^4.0.1",
+ "crypto-ld": "^4.0.2",
+ "esm": "^3.2.25",
+ "node-forge": "~0.9.1",
+ "semver": "^7.3.2",
+ "sodium-native": "^3.1.1"
+ },
+ "dependencies": {
+ "crypto-ld": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-4.0.3.tgz",
+ "integrity": "sha512-IeNCX1wv7kLjxhKrCV6Jee0CU84e2dSyVxTaM3SCuO8/fMbYzjsx1e1js+c7w8GlOslubOHJKvhJ1EI+aZ1MwQ=="
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "@digitalbazaar/security-context": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@digitalbazaar/security-context/-/security-context-1.0.0.tgz",
+ "integrity": "sha512-mlj+UmodxTAdMCHGxnGVTRLHcSLyiEOVRiz3J6yiRliJWyrgeXs34wlWjBorDIEMDIjK2JwZrDuFEKO9bS5nKQ=="
+ },
+ "@digitalcredentials/http-client": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@digitalcredentials/http-client/-/http-client-1.2.2.tgz",
+ "integrity": "sha512-YOwaE+vUDSwiDhZT0BbXSWVg+bvp1HA1eg/gEc8OCwCOj9Bn9FRQdu8P9Y/fnYqyFCioDwwTRzGxgJLl50baEg==",
+ "requires": {
+ "ky": "^0.25.1",
+ "ky-universal": "^0.8.2"
+ }
+ },
+ "@digitalcredentials/jsonld": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-5.2.1.tgz",
+ "integrity": "sha512-pDiO1liw8xs+J/43qnMZsxyz0VOWOb7Q2yUlBt/tyjq6SlT9xPo+3716tJPbjGPnou2lQRw3H5/I++z+6oQ07w==",
+ "requires": {
+ "@digitalcredentials/http-client": "^1.0.0",
+ "@digitalcredentials/rdf-canonize": "^1.0.0",
+ "canonicalize": "^1.0.1",
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "@digitalcredentials/jsonld-signatures": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld-signatures/-/jsonld-signatures-9.3.1.tgz",
+ "integrity": "sha512-YMh1e1GpTeHDqq2a2Kd+pLcHsMiPeKyE2Zs17NSwqckij7UMRVDQ54S5VQhHvoXZ1mlkpVaI2xtj5M5N6rzylw==",
+ "requires": {
+ "@digitalbazaar/security-context": "^1.0.0",
+ "@digitalcredentials/jsonld": "^5.2.1",
+ "fast-text-encoding": "^1.0.3",
+ "isomorphic-webcrypto": "^2.3.8",
+ "serialize-error": "^8.0.1"
+ }
+ },
+ "@digitalcredentials/rdf-canonize": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@digitalcredentials/rdf-canonize/-/rdf-canonize-1.0.0.tgz",
+ "integrity": "sha512-z8St0Ex2doecsExCFK1uI4gJC+a5EqYYu1xpRH1pKmqSS9l/nxfuVxexNFyaeEum4dUdg1EetIC2rTwLIFhPRA==",
+ "requires": {
+ "fast-text-encoding": "^1.0.3",
+ "isomorphic-webcrypto": "^2.3.8"
+ }
+ },
+ "@digitalcredentials/vc": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-1.1.2.tgz",
+ "integrity": "sha512-TSgny9XUh+W7uFjdcpvZzN7I35F9YMTv6jVINXr7UaLNgrinIjy6A5RMGQH9ecpcaoLMemKB5XjtLOOOQ3vknQ==",
+ "requires": {
+ "@digitalcredentials/jsonld": "^5.2.1",
+ "@digitalcredentials/jsonld-signatures": "^9.3.1",
+ "credentials-context": "^2.0.0"
+ }
+ },
"@egjs/hammerjs": {
"version": "2.0.17",
"resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz",
@@ -29592,6 +31057,20 @@
"@babel/highlight": "^7.10.4"
}
},
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
"semver": {
"version": "7.3.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
@@ -29673,6 +31152,19 @@
"universalify": "^1.0.0"
}
},
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -29898,6 +31390,20 @@
"universalify": "^1.0.0"
}
},
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -29910,6 +31416,15 @@
"integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
"dev": true
},
+ "serialize-error": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz",
+ "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.12.0"
+ }
+ },
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -29919,6 +31434,12 @@
"has-flag": "^4.0.0"
}
},
+ "type-fest": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz",
+ "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==",
+ "dev": true
+ },
"universalify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
@@ -30086,6 +31607,20 @@
"universalify": "^1.0.0"
}
},
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
"graphql": {
"version": "0.13.2",
"resolved": "https://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz",
@@ -30114,6 +31649,12 @@
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
+ "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
+ },
"semver": {
"version": "7.3.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
@@ -30543,6 +32084,19 @@
"universalify": "^1.0.0"
}
},
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -30680,6 +32234,14 @@
"dev": true,
"requires": {
"node-forge": "^0.10.0"
+ },
+ "dependencies": {
+ "node-forge": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+ "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+ "dev": true
+ }
}
},
"@expo/plist": {
@@ -31046,6 +32608,20 @@
"universalify": "^1.0.0"
}
},
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -31694,6 +33270,37 @@
}
}
},
+ "@peculiar/asn1-schema": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.1.0.tgz",
+ "integrity": "sha512-D6g4C5YRKC/iPujMAOXuZ7YGdaoMx8GsvWzfVSyx2LYeL38ECOKNywlYAuwbqQvON64lgsYdAujWQPX8hhoBLw==",
+ "requires": {
+ "@types/asn1js": "^2.0.2",
+ "asn1js": "^2.3.1",
+ "pvtsutils": "^1.2.1",
+ "tslib": "^2.3.1"
+ }
+ },
+ "@peculiar/json-schema": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz",
+ "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==",
+ "requires": {
+ "tslib": "^2.0.0"
+ }
+ },
+ "@peculiar/webcrypto": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.3.2.tgz",
+ "integrity": "sha512-oUgNj+8oT7uROEMEpZZ3U+kZjyxj1KXuvA8P5kiMUveTya9eyS8KTqu/dzdEtYC3u7dvjknVz+0sUfkWOBHfQg==",
+ "requires": {
+ "@peculiar/asn1-schema": "^2.0.44",
+ "@peculiar/json-schema": "^1.1.12",
+ "pvtsutils": "^1.2.2",
+ "tslib": "^2.3.1",
+ "webcrypto-core": "^1.7.1"
+ }
+ },
"@react-native-async-storage/async-storage": {
"version": "1.15.17",
"resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.15.17.tgz",
@@ -32474,9 +34081,9 @@
"requires": {}
},
"@react-native-picker/picker": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.3.1.tgz",
- "integrity": "sha512-DAw1o3bHNRnQPImsK53xCYkgC8bH+t9uTM+0JjNIlmMwvVLFnmDxi9v5iBTIWFMWG/pUHQaw66E29wW6oJG9Tw==",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.4.0.tgz",
+ "integrity": "sha512-duGZc3a8Qa21YPrA4U3oR9NAUzBA66FTjubGK2CodA6rNjiwN+xC32hOZ5unkf4qD3DqLWeoPjg3fYf54bVMjA==",
"requires": {}
},
"@react-native/assets": {
@@ -32534,9 +34141,9 @@
}
},
"@react-navigation/native-stack": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.5.0.tgz",
- "integrity": "sha512-X2sV+AKkqEl7k0ltjN4lMBfx+FsynrnUWkCTGiROyMRo4yWElK1jY3XSTsj5Cpso2/MUHdf9v/AOw0EgU58FsA==",
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.5.2.tgz",
+ "integrity": "sha512-aKnjDEljGPDbL8VflCRGVJ2SPD/6x5yuAWsxd1ouCuD+43clkMnz1e0piNf+t3EpNYIWdBNR66Xa+7U/UB4y3w==",
"requires": {
"@react-navigation/elements": "^1.3.1",
"warn-once": "^0.1.0"
@@ -32561,9 +34168,9 @@
}
},
"@sideway/address": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz",
- "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==",
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz",
+ "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==",
"requires": {
"@hapi/hoek": "^9.0.0"
}
@@ -32584,6 +34191,58 @@
"integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==",
"dev": true
},
+ "@stablelib/binary": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz",
+ "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==",
+ "requires": {
+ "@stablelib/int": "^1.0.1"
+ }
+ },
+ "@stablelib/ed25519": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.2.tgz",
+ "integrity": "sha512-FtnvUwvKbp6l1dNcg4CswMAVFVu/nzLK3oC7/PRtjYyHbWsIkD8j+5cjXHmwcCpdCpRCaTGACkEhhMQ1RcdSOQ==",
+ "requires": {
+ "@stablelib/random": "^1.0.1",
+ "@stablelib/sha512": "^1.0.1",
+ "@stablelib/wipe": "^1.0.1"
+ }
+ },
+ "@stablelib/hash": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz",
+ "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg=="
+ },
+ "@stablelib/int": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz",
+ "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w=="
+ },
+ "@stablelib/random": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.1.tgz",
+ "integrity": "sha512-zOh+JHX3XG9MSfIB0LZl/YwPP9w3o6WBiJkZvjPoKKu5LKFW4OLV71vMxWp9qG5T43NaWyn0QQTWgqCdO+yOBQ==",
+ "requires": {
+ "@stablelib/binary": "^1.0.1",
+ "@stablelib/wipe": "^1.0.1"
+ }
+ },
+ "@stablelib/sha512": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz",
+ "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==",
+ "requires": {
+ "@stablelib/binary": "^1.0.1",
+ "@stablelib/hash": "^1.0.1",
+ "@stablelib/wipe": "^1.0.1"
+ }
+ },
+ "@stablelib/wipe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz",
+ "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg=="
+ },
"@szmarczak/http-timer": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
@@ -32599,6 +34258,11 @@
"integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
"dev": true
},
+ "@types/asn1js": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@types/asn1js/-/asn1js-2.0.2.tgz",
+ "integrity": "sha512-t4YHCgtD+ERvH0FyxvNlYwJ2ezhqw7t+Ygh4urQ7dJER8i185JPv6oIM3ey5YQmGN6Zp9EMbpohkjZi9t3UxwA=="
+ },
"@types/cacheable-request": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz",
@@ -32674,9 +34338,9 @@
"dev": true
},
"@types/keyv": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz",
- "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz",
+ "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==",
"dev": true,
"requires": {
"@types/node": "*"
@@ -32689,9 +34353,9 @@
"dev": true
},
"@types/node": {
- "version": "17.0.21",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz",
- "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ=="
+ "version": "17.0.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz",
+ "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw=="
},
"@types/prop-types": {
"version": "15.7.4",
@@ -32705,9 +34369,9 @@
"dev": true
},
"@types/react": {
- "version": "17.0.40",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.40.tgz",
- "integrity": "sha512-UrXhD/JyLH+W70nNSufXqMZNuUD2cXHu6UjCllC6pmOQgBX4SGXOH8fjRka0O0Ee0HrFxapDD8Bwn81Kmiz6jQ==",
+ "version": "17.0.43",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.43.tgz",
+ "integrity": "sha512-8Q+LNpdxf057brvPu1lMtC5Vn7J119xrP1aq4qiaefNioQUYANF/CYeK4NsKorSZyUGJ66g0IM+4bbjwx45o2A==",
"requires": {
"@types/prop-types": "*",
"@types/scheduler": "*",
@@ -32780,6 +34444,11 @@
}
}
},
+ "@types/web": {
+ "version": "0.0.55",
+ "resolved": "https://registry.npmjs.org/@types/web/-/web-0.0.55.tgz",
+ "integrity": "sha512-YMH9aZrSJIMRMioCUwrgauI3iS/w2wRFN45Xxm0FE9Tt3hqaqkvOzjDFGsNjyKZzz7GJC0ilb+0tv59ytSUbrQ=="
+ },
"@types/webpack": {
"version": "4.41.32",
"resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz",
@@ -32834,6 +34503,107 @@
"resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
"integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA=="
},
+ "@unimodules/core": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.1.2.tgz",
+ "integrity": "sha512-lY+e2TAFuebD3vshHMIRqru3X4+k7Xkba4Wa7QsDBd+ex4c4N2dHAO61E2SrGD9+TRBD8w/o7mzK6ljbqRnbyg==",
+ "optional": true,
+ "requires": {
+ "compare-versions": "^3.4.0"
+ }
+ },
+ "@unimodules/react-native-adapter": {
+ "version": "6.3.9",
+ "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.3.9.tgz",
+ "integrity": "sha512-i9/9Si4AQ8awls+YGAKkByFbeAsOPgUNeLoYeh2SQ3ddjxJ5ZJDtq/I74clDnpDcn8zS9pYlcDJ9fgVJa39Glw==",
+ "optional": true,
+ "requires": {
+ "expo-modules-autolinking": "^0.0.3",
+ "invariant": "^2.2.4"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "optional": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "optional": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "optional": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "optional": true
+ },
+ "commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "optional": true
+ },
+ "expo-modules-autolinking": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.0.3.tgz",
+ "integrity": "sha512-azkCRYj/DxbK4udDuDxA9beYzQTwpJ5a9QA0bBgha2jHtWdFGF4ZZWSY+zNA5mtU3KqzYt8jWHfoqgSvKyu1Aw==",
+ "optional": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "commander": "^7.2.0",
+ "fast-glob": "^3.2.5",
+ "find-up": "~5.0.0",
+ "fs-extra": "^9.1.0"
+ }
+ },
+ "fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "optional": true,
+ "requires": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "optional": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "optional": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
"@urql/core": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.1.tgz",
@@ -33401,6 +35171,11 @@
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
},
+ "asmcrypto.js": {
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz",
+ "integrity": "sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA=="
+ },
"asn1": {
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
@@ -33430,6 +35205,14 @@
}
}
},
+ "asn1js": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-2.3.2.tgz",
+ "integrity": "sha512-IYzujqcOk7fHaePpTyvD3KPAA0AjT3qZlaQAw76zmPPAV/XTjhO+tbHjbFbIQZIhw+fk9wCSfb0Z6K+JHe8Q2g==",
+ "requires": {
+ "pvutils": "latest"
+ }
+ },
"assert": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz",
@@ -33526,6 +35309,29 @@
"follow-redirects": "^1.10.0"
}
},
+ "b64-lite": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/b64-lite/-/b64-lite-1.4.0.tgz",
+ "integrity": "sha512-aHe97M7DXt+dkpa8fHlCcm1CnskAHrJqEfMI0KN7dwqlzml/aUe1AGt6lk51HzrSfVD67xOso84sOpr+0wIe2w==",
+ "requires": {
+ "base-64": "^0.1.0"
+ },
+ "dependencies": {
+ "base-64": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
+ "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs="
+ }
+ }
+ },
+ "b64u-lite": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/b64u-lite/-/b64u-lite-1.1.0.tgz",
+ "integrity": "sha512-929qWGDVCRph7gQVTC6koHqQIpF4vtVaSbwLltFQo44B1bYUquALswZdBKFfrJCPEnsCOvWkJsPdQYZ/Ukhw8A==",
+ "requires": {
+ "b64-lite": "^1.4.0"
+ }
+ },
"babel-core": {
"version": "7.0.0-bridge.0",
"resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
@@ -33731,12 +35537,34 @@
}
}
},
+ "base-64": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz",
+ "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==",
+ "peer": true
+ },
+ "base-x": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz",
+ "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
"base32.js": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/base32.js/-/base32.js-0.1.0.tgz",
"integrity": "sha1-tYLexpPC8R6JPPBk7mrFthMaIgI=",
"dev": true
},
+ "base58-universal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base58-universal/-/base58-universal-1.0.0.tgz",
+ "integrity": "sha512-v0Ja4jwaQP8gBZPNXpfaXlLht2ed/Gp3AsVUZXtlZgY1qbKS0CjxvYs43U0Gh00zbVc1neMe+q/ULJ7ubVyB+w==",
+ "requires": {
+ "esm": "^3.2.25"
+ }
+ },
"base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@@ -33745,8 +35573,15 @@
"base64url": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
- "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==",
- "dev": true
+ "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A=="
+ },
+ "base64url-universal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-1.1.0.tgz",
+ "integrity": "sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA==",
+ "requires": {
+ "base64url": "^3.0.0"
+ }
},
"batch": {
"version": "0.6.1",
@@ -33802,6 +35637,16 @@
"readable-stream": "^3.4.0"
},
"dependencies": {
+ "buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
"readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
@@ -34075,12 +35920,6 @@
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
- },
- "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
}
}
},
@@ -34105,6 +35944,14 @@
"picocolors": "^1.0.0"
}
},
+ "bs58": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz",
+ "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=",
+ "requires": {
+ "base-x": "^3.0.2"
+ }
+ },
"bser": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
@@ -34124,13 +35971,12 @@
}
},
"buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
"requires": {
"base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
+ "ieee754": "^1.2.1"
}
},
"buffer-alloc": {
@@ -34227,12 +36073,6 @@
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"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
}
}
},
@@ -34337,9 +36177,14 @@
}
},
"caniuse-lite": {
- "version": "1.0.30001317",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001317.tgz",
- "integrity": "sha512-xIZLh8gBm4dqNX0gkzrBeyI86J2eCjWzYAs40q88smG844YIrN4tVQl/RhquHvKEKImWWFIVh1Lxe5n1G/N+GQ=="
+ "version": "1.0.30001320",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001320.tgz",
+ "integrity": "sha512-MWPzG54AGdo3nWx7zHZTefseM5Y1ccM7hlQKHRqJkPozUaw3hNbBTMmLn16GG2FUzjR13Cr3NPfhIieX5PzXDA=="
+ },
+ "canonicalize": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz",
+ "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A=="
},
"capture-exit": {
"version": "2.0.0",
@@ -34786,6 +36631,11 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "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=="
}
}
},
@@ -34874,6 +36724,13 @@
"integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
"requires": {
"safe-buffer": "~5.1.1"
+ },
+ "dependencies": {
+ "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=="
+ }
}
},
"cookie": {
@@ -35061,6 +36918,11 @@
"object-assign": "^4.1.1"
}
},
+ "credentials-context": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/credentials-context/-/credentials-context-2.0.0.tgz",
+ "integrity": "sha512-/mFKax6FK26KjgV2KW2D4YqKgoJ5DVJpNt87X2Jc9IxT2HBMy7nEIlc+n7pEi+YFFe721XqrvZPd+jbyyBjsvQ=="
+ },
"cross-fetch": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
@@ -35128,6 +36990,11 @@
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz",
"integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q=="
},
+ "crypto-ld": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-5.1.0.tgz",
+ "integrity": "sha512-Dy1QoQzj+2K6UlGZ9l34cPp+g/YHOd+r3/DXXQTnnz5btGb0vqDlkZBn+icYmwntEmW0bvGVwFWvcwZSbk1EEQ=="
+ },
"crypto-random-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
@@ -35374,6 +37241,11 @@
"assert-plus": "^1.0.0"
}
},
+ "data-uri-to-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz",
+ "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og=="
+ },
"date-fns": {
"version": "2.28.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz",
@@ -35391,9 +37263,9 @@
"integrity": "sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug=="
},
"debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
@@ -35588,7 +37460,8 @@
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
},
"deprecated-decorator": {
"version": "0.1.6",
@@ -35614,7 +37487,8 @@
"destroy": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
},
"detect-libc": {
"version": "1.0.3",
@@ -35940,6 +37814,12 @@
"integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
"dev": true
},
+ "node-forge": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+ "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+ "dev": true
+ },
"semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
@@ -35970,15 +37850,25 @@
"safer-buffer": "^2.1.0"
}
},
+ "ed25519-signature-2018-context": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz",
+ "integrity": "sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA=="
+ },
+ "ed25519-signature-2020-context": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz",
+ "integrity": "sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg=="
+ },
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"electron-to-chromium": {
- "version": "1.4.86",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.86.tgz",
- "integrity": "sha512-EVTZ+igi8x63pK4bPuA95PXIs2b2Cowi3WQwI9f9qManLiZJOD1Lash1J3W4TvvcUCcIR4o/rgi9o8UicXSO+w=="
+ "version": "1.4.93",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.93.tgz",
+ "integrity": "sha512-ywq9Pc5Gwwpv7NG767CtoU8xF3aAUQJjH9//Wy3MBCg4w5JSLbJUq2L8IsCdzPMjvSgxuue9WcVaTOyyxCL0aQ=="
},
"elliptic": {
"version": "6.5.4",
@@ -36214,6 +38104,11 @@
"estraverse": "^4.1.1"
}
},
+ "esm": {
+ "version": "3.2.25",
+ "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
+ "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA=="
+ },
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
@@ -36495,12 +38390,13 @@
}
},
"expo-barcode-scanner": {
- "version": "11.2.1",
- "resolved": "https://registry.npmjs.org/expo-barcode-scanner/-/expo-barcode-scanner-11.2.1.tgz",
- "integrity": "sha512-NLMnZA2aoPeCBaxJIOEFxbbHfQhZ25NViay1FFumbZOuQFLj1CwlGNyGSyyERbXpdqwQ4VKqYaCux/7UF+dwxA==",
+ "version": "11.1.2",
+ "resolved": "https://registry.npmjs.org/expo-barcode-scanner/-/expo-barcode-scanner-11.1.2.tgz",
+ "integrity": "sha512-qRr6lf4jmNAQQm7iaocXzZ88J+QP2EAzjpR3c64woLa8upry4BRGKcaLcKuQ4eyM9F1x43RW24G+m34hFbPAnw==",
"requires": {
"@expo/config-plugins": "^4.0.2",
- "expo-image-loader": "~3.1.0"
+ "expo-image-loader": "~3.0.0",
+ "expo-modules-core": "~0.4.4"
}
},
"expo-camera": {
@@ -36810,6 +38706,20 @@
"universalify": "^1.0.0"
}
},
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -37174,6 +39084,19 @@
"universalify": "^1.0.0"
}
},
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -37237,10 +39160,9 @@
}
},
"expo-image-loader": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/expo-image-loader/-/expo-image-loader-3.1.1.tgz",
- "integrity": "sha512-ZX4Bh3K4CCX1aZflnmbOgFNLS+c0/GUys4wdvqxO+4A4KU1NNb3jE7RVa/OFYNPDcGhEw20c1QjyE/WsVURJpg==",
- "requires": {}
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/expo-image-loader/-/expo-image-loader-3.0.0.tgz",
+ "integrity": "sha512-r4D+uLCf5vm5A2JIbF1Bc9FjYKrYGSLShbFB1MUvZ4BpSXJPRsprYZ9veUBVzzhh8hr23ahTFjMzp3nC57iREw=="
},
"expo-json-utils": {
"version": "0.2.1",
@@ -37518,6 +39440,20 @@
"universalify": "^1.0.0"
}
},
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -37547,6 +39483,15 @@
}
}
},
+ "expo-random": {
+ "version": "12.1.2",
+ "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-12.1.2.tgz",
+ "integrity": "sha512-ajB+Mwff9PdglsyLliaU4K9BtVwKvAVVI2hQhnvlS3QgsAhHf+jQVUfAysQJHuioF6ADMEsab/kRUy4Dy03aoQ==",
+ "optional": true,
+ "requires": {
+ "base64-js": "^1.3.0"
+ }
+ },
"expo-splash-screen": {
"version": "0.13.5",
"resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.13.5.tgz",
@@ -37769,6 +39714,19 @@
"universalify": "^2.0.0"
}
},
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -37929,6 +39887,19 @@
"universalify": "^1.0.0"
}
},
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -38101,6 +40072,12 @@
"unpipe": "1.0.0"
}
},
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"serve-static": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
@@ -38174,6 +40151,12 @@
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
"dev": true
},
+ "fast-base64-decode": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz",
+ "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==",
+ "peer": true
+ },
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -38197,6 +40180,11 @@
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true
},
+ "fast-text-encoding": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz",
+ "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig=="
+ },
"fastq": {
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
@@ -38249,6 +40237,11 @@
"resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz",
"integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ=="
},
+ "fetch-blob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz",
+ "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow=="
+ },
"fetch-retry": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz",
@@ -38709,12 +40702,6 @@
"requires": {
"yallist": "^4.0.0"
}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
}
}
},
@@ -38869,9 +40856,9 @@
"dev": true
},
"glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -39151,12 +41138,6 @@
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
- },
- "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
}
}
},
@@ -39375,9 +41356,9 @@
},
"dependencies": {
"domhandler": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
- "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
+ "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
"dev": true,
"requires": {
"domelementtype": "^2.2.0"
@@ -39403,9 +41384,9 @@
},
"dependencies": {
"domhandler": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
- "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
+ "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
"dev": true,
"requires": {
"domelementtype": "^2.2.0"
@@ -39691,8 +41672,7 @@
"ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "dev": true
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
},
"iferr": {
"version": "0.1.5",
@@ -40488,6 +42468,35 @@
}
}
},
+ "isomorphic-webcrypto": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.8.tgz",
+ "integrity": "sha512-XddQSI0WYlSCjxtm1AI8kWQOulf7hAN3k3DclF1sxDJZqOe0pcsOt675zvWW91cZH9hYs3nlA3Ev8QK5i80SxQ==",
+ "requires": {
+ "@peculiar/webcrypto": "^1.0.22",
+ "@unimodules/core": "*",
+ "@unimodules/react-native-adapter": "*",
+ "asmcrypto.js": "^0.22.0",
+ "b64-lite": "^1.3.1",
+ "b64u-lite": "^1.0.1",
+ "expo-random": "*",
+ "msrcrypto": "^1.5.6",
+ "react-native-securerandom": "^0.1.1",
+ "str2buf": "^1.3.0",
+ "webcrypto-shim": "^0.1.4"
+ },
+ "dependencies": {
+ "react-native-securerandom": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz",
+ "integrity": "sha1-8TBiOkEsM4sK+t7bwgTFy7i/IHA=",
+ "optional": true,
+ "requires": {
+ "base64-js": "*"
+ }
+ }
+ }
+ },
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
@@ -40700,6 +42709,14 @@
"node-forge": "^0.10.0",
"node-int64": "^0.4.0",
"node-rsa": "^1.0.7"
+ },
+ "dependencies": {
+ "node-forge": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+ "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+ "dev": true
+ }
}
},
"joi": {
@@ -40955,12 +42972,9 @@
"dev": true
},
"json5": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
- "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
- "requires": {
- "minimist": "^1.2.5"
- }
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
+ "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA=="
},
"jsonfile": {
"version": "6.1.0",
@@ -40976,6 +42990,27 @@
"resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
"integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM="
},
+ "jsonld": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-5.2.0.tgz",
+ "integrity": "sha512-JymgT6Xzk5CHEmHuEyvoTNviEPxv6ihLWSPu1gFdtjSAyM6cFqNrv02yS/SIur3BBIkCf0HjizRc24d8/FfQKw==",
+ "requires": {
+ "@digitalbazaar/http-client": "^1.1.0",
+ "canonicalize": "^1.0.1",
+ "lru-cache": "^6.0.0",
+ "rdf-canonize": "^3.0.0"
+ }
+ },
+ "jsonld-signatures": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-9.3.1.tgz",
+ "integrity": "sha512-OasKERvvbfbuItVFrb0pOHiclHPvT98IAorayZnEj48/E0Vz3rTPLzC14rDi1CEXjiiTGeNadLzTLdomdeZEAQ==",
+ "requires": {
+ "jsonld": "^5.0.0",
+ "security-context": "^4.0.0",
+ "serialize-error": "^8.0.1"
+ }
+ },
"jsonparse": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
@@ -41033,6 +43068,31 @@
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="
},
+ "ky": {
+ "version": "0.25.1",
+ "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz",
+ "integrity": "sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA=="
+ },
+ "ky-universal": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.8.2.tgz",
+ "integrity": "sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ==",
+ "requires": {
+ "abort-controller": "^3.0.0",
+ "node-fetch": "3.0.0-beta.9"
+ },
+ "dependencies": {
+ "node-fetch": {
+ "version": "3.0.0-beta.9",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz",
+ "integrity": "sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==",
+ "requires": {
+ "data-uri-to-buffer": "^3.0.1",
+ "fetch-blob": "^2.1.1"
+ }
+ }
+ }
+ },
"last-call-webpack-plugin": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz",
@@ -41294,13 +43354,6 @@
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"requires": {
"yallist": "^4.0.0"
- },
- "dependencies": {
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- }
}
},
"make-dir": {
@@ -41351,12 +43404,6 @@
"requires": {
"yallist": "^4.0.0"
}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
}
}
},
@@ -41375,6 +43422,14 @@
"dev": true,
"requires": {
"p-defer": "^1.0.0"
+ },
+ "dependencies": {
+ "p-defer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+ "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
+ "dev": true
+ }
}
},
"map-cache": {
@@ -42030,12 +44085,12 @@
"dev": true
},
"micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
"requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
}
},
"miller-rabin": {
@@ -42163,6 +44218,14 @@
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ }
}
},
"minipass-collect": {
@@ -42182,12 +44245,6 @@
"requires": {
"yallist": "^4.0.0"
}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
}
}
},
@@ -42211,12 +44268,6 @@
"requires": {
"yallist": "^4.0.0"
}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
}
}
},
@@ -42237,12 +44288,6 @@
"requires": {
"yallist": "^4.0.0"
}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
}
}
},
@@ -42264,12 +44309,6 @@
"requires": {
"yallist": "^4.0.0"
}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
}
}
},
@@ -42290,12 +44329,6 @@
"requires": {
"yallist": "^4.0.0"
}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
}
}
},
@@ -42316,12 +44349,6 @@
"requires": {
"yallist": "^4.0.0"
}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
}
}
},
@@ -42343,12 +44370,6 @@
"requires": {
"yallist": "^4.0.0"
}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
}
}
},
@@ -42380,11 +44401,11 @@
}
},
"mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
"requires": {
- "minimist": "^1.2.5"
+ "minimist": "^1.2.6"
}
},
"mkdirp-classic": {
@@ -42428,6 +44449,11 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
+ "msrcrypto": {
+ "version": "1.5.8",
+ "resolved": "https://registry.npmjs.org/msrcrypto/-/msrcrypto-1.5.8.tgz",
+ "integrity": "sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q=="
+ },
"multicast-dns": {
"version": "6.2.3",
"resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
@@ -42662,10 +44688,9 @@
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
},
"node-forge": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
- "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
- "dev": true
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.2.tgz",
+ "integrity": "sha512-naKSScof4Wn+aoHU6HBsifh92Zeicm1GDQKd1vp3Y/kOi8ub0DozCa9KpvYNCXslFHYRmLNiqRopGdTGwNLpNw=="
},
"node-gyp": {
"version": "7.1.2",
@@ -42705,6 +44730,12 @@
}
}
},
+ "node-gyp-build": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz",
+ "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==",
+ "optional": true
+ },
"node-html-parser": {
"version": "1.4.9",
"resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.4.9.tgz",
@@ -43028,12 +45059,6 @@
"requires": {
"lru-cache": "^6.0.0"
}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
}
}
},
@@ -43456,10 +45481,10 @@
"dev": true
},
"p-defer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
- "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
- "dev": true
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz",
+ "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==",
+ "peer": true
},
"p-finally": {
"version": "1.0.0",
@@ -43740,12 +45765,6 @@
"requires": {
"lru-cache": "^6.0.0"
}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
}
}
},
@@ -44057,9 +46076,9 @@
}
},
"plist": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz",
- "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz",
+ "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==",
"requires": {
"base64-js": "^1.5.1",
"xmlbuilder": "^9.0.7"
@@ -44926,8 +46945,20 @@
"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
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ },
+ "pvtsutils": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.2.2.tgz",
+ "integrity": "sha512-OALo5ZEdqiI127i64+CXwkCOyFHUA+tCQgaUO/MvRDFXWPr53f2sx28ECNztUEzuyu5xvuuD1EB/szg9mwJoGA==",
+ "requires": {
+ "tslib": "^2.3.1"
+ }
+ },
+ "pvutils": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz",
+ "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ=="
},
"q": {
"version": "1.5.1",
@@ -45082,6 +47113,14 @@
"strip-json-comments": "~2.0.1"
}
},
+ "rdf-canonize": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.0.0.tgz",
+ "integrity": "sha512-LXRkhab1QaPJnhUIt1gtXXKswQCZ9zpflsSZFczG7mCLAkMvVjdqCGk9VXCUss0aOUeEyV2jtFxGcdX8DSkj9w==",
+ "requires": {
+ "setimmediate": "^1.0.5"
+ }
+ },
"react": {
"version": "17.0.1",
"resolved": "https://registry.npmjs.org/react/-/react-17.0.1.tgz",
@@ -45283,9 +47322,9 @@
}
},
"react-devtools-core": {
- "version": "4.24.1",
- "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.24.1.tgz",
- "integrity": "sha512-skar+cqSg5Oz89n4lQ/aBQS8RGj93FMufg2TrMJqE+RSUTO9nLEYawRMXXCs8PnDVRSfG5pPVU5Nt1OegNflyA==",
+ "version": "4.24.2",
+ "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.24.2.tgz",
+ "integrity": "sha512-UC3rvQCG/dnC95NPNWBFrUEtdAEiFZ9xZe1tTHFOELVR5qfNLroZ3w9tC51NQvvK5E10G2ko3lQ5Vrh3p0bHrA==",
"requires": {
"shell-quote": "^1.6.1",
"ws": "^7"
@@ -45443,6 +47482,22 @@
"resolved": "https://registry.npmjs.org/react-native-app-intro-slider/-/react-native-app-intro-slider-4.0.4.tgz",
"integrity": "sha512-Zkjaol6X3BbZkHUpVDj2LjdidpS6rCgKi0fx80xgGKa0pHxBRd4swWTv2bHnnvu5k1/HXwYk0mY2TbK+2jHl5w=="
},
+ "react-native-blob-util": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/react-native-blob-util/-/react-native-blob-util-0.14.1.tgz",
+ "integrity": "sha512-Rf2aURRqM7j96fFdO5tbiVlAsfLOkSyBqrAPlG4VcJj9jT6G7bVHebwJg7BBfTKWTFwPjiOIAdUjsjkGaUUOyQ==",
+ "requires": {
+ "base-64": "0.1.0",
+ "glob": "^7.1.6"
+ },
+ "dependencies": {
+ "base-64": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
+ "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs="
+ }
+ }
+ },
"react-native-bluetooth-state-manager": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/react-native-bluetooth-state-manager/-/react-native-bluetooth-state-manager-1.3.2.tgz",
@@ -45460,9 +47515,9 @@
}
},
"react-native-device-info": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-8.5.0.tgz",
- "integrity": "sha512-Y5mSYWvVvlpKbN3hkA+mDBqXvcgeR/jiIFaJZrsYw4LF+e3fwFl+vQgPz21IroDi9JXkA26BpxaXu3lj1P1GGg==",
+ "version": "8.5.1",
+ "resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-8.5.1.tgz",
+ "integrity": "sha512-VMEP1c/X0KSOqBZDzs9/GHbacgdsoQqaBqI/fK98S5oMmKAfuIFjAjb4kvcNjC2mklD6JrlgXPnqKQQaX+kklg==",
"requires": {}
},
"react-native-elements": {
@@ -45487,6 +47542,15 @@
}
}
},
+ "react-native-fetch-api": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz",
+ "integrity": "sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA==",
+ "peer": true,
+ "requires": {
+ "p-defer": "^3.0.0"
+ }
+ },
"react-native-gesture-handler": {
"version": "1.10.3",
"resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.10.3.tgz",
@@ -45515,6 +47579,15 @@
}
}
},
+ "react-native-get-random-values": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.7.2.tgz",
+ "integrity": "sha512-28KRYGpIG/upV8+k/qFA+TwGW+yGjmtOHaCduJHpOQK1QUTyhiA6E2IgL4UvvU2dybeCTYFmUi9wcEQ0GiWe5g==",
+ "peer": true,
+ "requires": {
+ "fast-base64-decode": "^1.0.0"
+ }
+ },
"react-native-keychain": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/react-native-keychain/-/react-native-keychain-8.0.0.tgz",
@@ -45526,6 +47599,12 @@
"integrity": "sha512-SKjO+ks2B+1l2lbRCMtZ9QQ5BEIsIAHEztAWvWRyKZKVHHkes4vwD1nLazOvGjkAEnDnqbnr6LGan8OiwmX9Ow==",
"requires": {}
},
+ "react-native-polyfill-globals": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/react-native-polyfill-globals/-/react-native-polyfill-globals-3.1.0.tgz",
+ "integrity": "sha512-6ACmV1SjXvZP2LN6J2yK58yNACKddcvoiKLrSQdISx32IdYStfdmGXrbAfpd+TANrTlIaZ2SLoFXohNwhnqm/w==",
+ "requires": {}
+ },
"react-native-qrcode-svg": {
"version": "6.1.2",
"resolved": "https://registry.npmjs.org/react-native-qrcode-svg/-/react-native-qrcode-svg-6.1.2.tgz",
@@ -45621,6 +47700,15 @@
"resolved": "https://registry.npmjs.org/react-native-system-setting/-/react-native-system-setting-1.7.6.tgz",
"integrity": "sha512-nBnIK5Xnyu8XRRA3BMzRI54oYlSBKc0oOTQdZOCEeOvn4ltS1nk2shj/vtMQe6khXvuhai3vIc+g7DcsOcr5+w=="
},
+ "react-native-url-polyfill": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/react-native-url-polyfill/-/react-native-url-polyfill-1.3.0.tgz",
+ "integrity": "sha512-w9JfSkvpqqlix9UjDvJjm1EjSt652zVQ6iwCIj1cVVkwXf4jQhQgTNXY6EVTwuAmUjg6BC6k9RHCBynoLFo3IQ==",
+ "peer": true,
+ "requires": {
+ "whatwg-url-without-unicode": "8.0.0-3"
+ }
+ },
"react-native-vector-icons": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-8.1.0.tgz",
@@ -45748,6 +47836,13 @@
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "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=="
+ }
}
},
"readdirp": {
@@ -45965,9 +48060,9 @@
"dev": true
},
"domhandler": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
- "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
+ "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
"dev": true,
"requires": {
"domelementtype": "^2.2.0"
@@ -46279,9 +48374,9 @@
"dev": true
},
"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=="
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
"safe-json-stringify": {
"version": "1.2.0",
@@ -46463,6 +48558,11 @@
"ajv-keywords": "^3.5.2"
}
},
+ "security-context": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/security-context/-/security-context-4.0.0.tgz",
+ "integrity": "sha512-yiDCS7tpKQl6p4NG57BdKLTSNLFfj5HosBIzXBl4jZf/qorJzSzbEUIdLhN+vVYgyLlvjixY8DPPTgqI8zvNCA=="
+ },
"select-hose": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
@@ -46476,6 +48576,14 @@
"dev": true,
"requires": {
"node-forge": "^0.10.0"
+ },
+ "dependencies": {
+ "node-forge": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+ "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+ "dev": true
+ }
}
},
"semver": {
@@ -46546,20 +48654,11 @@
}
},
"serialize-error": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz",
- "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==",
- "dev": true,
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz",
+ "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==",
"requires": {
- "type-fest": "^0.12.0"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz",
- "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==",
- "dev": true
- }
+ "type-fest": "^0.20.2"
}
},
"serialize-javascript": {
@@ -46622,14 +48721,14 @@
}
},
"serve-static": {
- "version": "1.14.2",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz",
- "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==",
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+ "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
- "send": "0.17.2"
+ "send": "0.18.0"
},
"dependencies": {
"debug": {
@@ -46647,15 +48746,25 @@
}
}
},
+ "depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
+ },
+ "destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
+ },
"http-errors": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
- "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"requires": {
- "depd": "~1.1.2",
+ "depd": "2.0.0",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
- "statuses": ">= 1.5.0 < 2",
+ "statuses": "2.0.1",
"toidentifier": "1.0.1"
}
},
@@ -46669,24 +48778,32 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
+ "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==",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
"send": {
- "version": "0.17.2",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz",
- "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==",
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
"requires": {
"debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
+ "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": "1.8.1",
+ "http-errors": "2.0.0",
"mime": "1.6.0",
"ms": "2.1.3",
- "on-finished": "~2.3.0",
+ "on-finished": "2.4.1",
"range-parser": "~1.2.1",
- "statuses": "~1.5.0"
+ "statuses": "2.0.1"
}
},
"setprototypeof": {
@@ -46695,9 +48812,9 @@
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
"statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
},
"toidentifier": {
"version": "1.0.1",
@@ -46834,9 +48951,9 @@
},
"dependencies": {
"ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+ "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
"dev": true
},
"camelcase": {
@@ -47459,6 +49576,15 @@
"socks": "^2.6.1"
}
},
+ "sodium-native": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-3.3.0.tgz",
+ "integrity": "sha512-rg6lCDM/qa3p07YGqaVD+ciAbUqm6SoO4xmlcfkbU5r1zIGrguXztLiEtaLYTV5U6k8KSIUFmnU3yQUSKmf6DA==",
+ "optional": true,
+ "requires": {
+ "node-gyp-build": "^4.3.0"
+ }
+ },
"source-list-map": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
@@ -47604,12 +49730,6 @@
"requires": {
"yallist": "^4.0.0"
}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
}
}
},
@@ -47721,6 +49841,11 @@
"integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
"dev": true
},
+ "str2buf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/str2buf/-/str2buf-1.3.0.tgz",
+ "integrity": "sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA=="
+ },
"stream-browserify": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
@@ -47802,6 +49927,13 @@
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
"safe-buffer": "~5.1.0"
+ },
+ "dependencies": {
+ "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=="
+ }
}
},
"string-hash-64": {
@@ -47935,6 +50067,19 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
}
}
},
@@ -48068,12 +50213,6 @@
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"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
}
}
},
@@ -48258,6 +50397,12 @@
}
}
},
+ "text-encoding": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz",
+ "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==",
+ "peer": true
+ },
"text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -48494,8 +50639,7 @@
"type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="
},
"type-is": {
"version": "1.6.18",
@@ -49218,10 +51362,35 @@
"defaults": "^1.0.3"
}
},
+ "web-streams-polyfill": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz",
+ "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==",
+ "peer": true
+ },
+ "webcrypto-core": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.1.tgz",
+ "integrity": "sha512-Gw2zLzYSJ7Imp5lLDu3CcWB5oTTACMDEE2PjoLfttGgIhd7BfackBdVgEzd9ZM/i65gpNq0+IelL0JZ48QwzNg==",
+ "requires": {
+ "@peculiar/asn1-schema": "^2.0.44",
+ "@peculiar/json-schema": "^1.1.12",
+ "@types/web": "^0.0.55",
+ "asn1js": "^2.2.0",
+ "pvtsutils": "^1.2.2",
+ "tslib": "^2.3.1"
+ }
+ },
+ "webcrypto-shim": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/webcrypto-shim/-/webcrypto-shim-0.1.7.tgz",
+ "integrity": "sha512-JAvAQR5mRNRxZW2jKigWMjCMkjSdmP5cColRP1U/pTg69VgHXEi1orv5vVpJ55Zc5MIaPc1aaurzd9pjv2bveg=="
+ },
"webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
+ "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
+ "peer": true
},
"webpack": {
"version": "4.43.0",
@@ -49478,6 +51647,12 @@
"is-number": "^3.0.0",
"repeat-string": "^1.6.1"
}
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
}
}
},
@@ -49985,12 +52160,6 @@
"readable-stream": "^2.0.2"
}
},
- "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
- },
"schema-utils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
@@ -50042,6 +52211,18 @@
}
}
},
+ "serve-static": {
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz",
+ "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==",
+ "dev": true,
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.2"
+ }
+ },
"setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -50286,6 +52467,36 @@
"requires": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
+ },
+ "dependencies": {
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
+ }
+ }
+ },
+ "whatwg-url-without-unicode": {
+ "version": "8.0.0-3",
+ "resolved": "https://registry.npmjs.org/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz",
+ "integrity": "sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==",
+ "peer": true,
+ "requires": {
+ "buffer": "^5.4.3",
+ "punycode": "^2.1.1",
+ "webidl-conversions": "^5.0.0"
+ },
+ "dependencies": {
+ "buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "peer": true,
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ }
}
},
"which": {
@@ -50694,6 +52905,20 @@
"minipass": "^2.6.0"
}
},
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -50719,6 +52944,12 @@
"minipass": "^2.9.0"
}
},
+ "node-forge": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+ "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+ "dev": true
+ },
"p-map": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
@@ -50734,6 +52965,15 @@
"integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
"dev": true
},
+ "serialize-error": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-6.0.0.tgz",
+ "integrity": "sha512-3vmBkMZLQO+BR4RPHcyRGdE09XCF6cvxzk2N2qn8Er3F91cy8Qt7VvEbZBOpaL53qsBbe2cFOefU6tRY6WDelA==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.12.0"
+ }
+ },
"source-map-support": {
"version": "0.4.18",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
@@ -50767,11 +53007,23 @@
"yallist": "^3.0.2"
}
},
+ "type-fest": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz",
+ "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==",
+ "dev": true
+ },
"universalify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
"integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==",
"dev": true
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
}
}
},
@@ -50828,10 +53080,9 @@
"integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
},
"yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"yargs": {
"version": "15.4.1",
diff --git a/package.json b/package.json
index b513ce54..b5b620fd 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,11 @@
"build:android:newlogic": "cd android && ./gradlew :app:assembleNewlogicRelease && cd .."
},
"dependencies": {
+ "@digitalbazaar/ed25519-signature-2018": "digitalbazaar/ed25519-signature-2018",
+ "@digitalbazaar/ed25519-verification-key-2018": "digitalbazaar/ed25519-verification-key-2018",
+ "@digitalbazaar/rsa-signature-2018": "digitalbazaar/rsa-signature-2018#initial",
+ "@digitalbazaar/rsa-verification-key-2018": "digitalbazaar/rsa-verification-key-2018#initial",
+ "@digitalcredentials/vc": "^1.1.2",
"@expo-google-fonts/poppins": "^0.2.0",
"@idpass/smartshare-react-native": "^0.2.0",
"@react-native-async-storage/async-storage": "~1.15.0",
@@ -19,6 +24,8 @@
"@react-navigation/native": "^6.0.2",
"@react-navigation/native-stack": "^6.1.0",
"@xstate/react": "^1.6.1",
+ "base64url-universal": "^1.1.0",
+ "buffer": "^6.0.3",
"crypto-js": "^3.3.0",
"date-fns": "^2.26.0",
"expo": "^43.0.0",
@@ -34,12 +41,14 @@
"react-dom": "17.0.1",
"react-native": "0.64.3",
"react-native-app-intro-slider": "^4.0.4",
+ "react-native-blob-util": "^0.14.1",
"react-native-bluetooth-state-manager": "^1.3.2",
"react-native-device-info": "^8.4.8",
"react-native-elements": "^3.4.2",
"react-native-gesture-handler": "~1.10.2",
"react-native-keychain": "^8.0.0",
"react-native-location-enabler": "^4.1.0",
+ "react-native-polyfill-globals": "^3.1.0",
"react-native-qrcode-svg": "^6.1.1",
"react-native-reanimated": "~2.2.0",
"react-native-safe-area-context": "3.3.2",
@@ -57,6 +66,7 @@
"@types/react": "~17.0.21",
"@types/react-native": "~0.64.12",
"babel-plugin-inline-import": "^3.0.0",
+ "babel-plugin-module-resolver": "^4.1.0",
"eas-cli": "^0.37.0",
"expo-cli": "^4.13.0",
"sharp": "^0.29.3",
diff --git a/shared/constants.ts b/shared/constants.ts
index 7577977c..4139fcde 100644
--- a/shared/constants.ts
+++ b/shared/constants.ts
@@ -17,3 +17,5 @@ export const ACTIVITY_LOG_STORE_KEY = 'activityLog';
export const SETTINGS_STORE_KEY = 'settings';
export const ONBOARDING_STATUS_STORE_KEY = 'isOnboardingDone';
+
+export const VC_VALIDITY_EXPIRATION_IN_DAYS = 7;
diff --git a/shared/vc-ed25519.json b/shared/vc-ed25519.json
new file mode 100644
index 00000000..16d87606
--- /dev/null
+++ b/shared/vc-ed25519.json
@@ -0,0 +1,26 @@
+{
+ "@context": [
+ "https://www.w3.org/2018/credentials/v1",
+ "https://www.w3.org/2018/credentials/examples/v1"
+ ],
+ "id": "https://yqs3j2p1k9.execute-api.us-east-1.amazonaws.com/prod/credentials/d98b8f50-c472-11eb-97fb-cbf4e5918c09",
+ "type": [
+ "VerifiableCredential",
+ "UniversityDegreeCredential"
+ ],
+ "issuer": "https://mercury-credentials-public-tb0172-prod.s3.us-east-1.amazonaws.com/controller.json",
+ "issuanceDate": "2021-06-01T12:00:00.000Z",
+ "credentialSubject": {
+ "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
+ "degree": "Bachelor of Science",
+ "degreeType": "BachelorDegree",
+ "degreeSchool": "Mercury University"
+ },
+ "proof": {
+ "type": "Ed25519Signature2018",
+ "created": "2021-06-03T13:51:52Z",
+ "jws": "eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..8YIj2tG6HoiDKw476_ElxcCFiCTr89jHX24Osr1zgklp0Sgfkgx-ipu6Li5og4wtLGMoa7__xJpcHWHzwWZoCQ",
+ "proofPurpose": "assertionMethod",
+ "verificationMethod": "https://mercury-credentials-public-tb0172-prod.s3.us-east-1.amazonaws.com/publicKey.json"
+ }
+}
\ No newline at end of file
diff --git a/shared/vc-rsa-mosip.json b/shared/vc-rsa-mosip.json
new file mode 100644
index 00000000..d6130ea0
--- /dev/null
+++ b/shared/vc-rsa-mosip.json
@@ -0,0 +1,41 @@
+{
+ "@context": [
+ "https://www.w3.org/2018/credentials/v1",
+ "https://qa-triple-rc2.mosip.net/mosipvc/mosip-context.json",
+ {
+ "sec": "https://w3id.org/security#"
+ }
+ ],
+ "credentialSubject": {
+ "gender": "[{\"language\":\"eng\",\"value\":\"Male\"}]",
+ "city": "[{\"language\":\"eng\",\"value\":\"Kenitra\"}]",
+ "postalCode": "14022",
+ "fullName": "Test56rtt",
+ "dateOfBirth": "1999",
+ "biometrics": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI_Pgo8QklSIHhtbG5zPSJodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLWllYy8xOTc4NS8tMy9lZC0yLyI-CiAgICA8QklSSW5mbz4KICAgICAgICA8SW50ZWdyaXR5PmZhbHNlPC9JbnRlZ3JpdHk-CiAgICA8L0JJUkluZm8-CiAgICA8QklSPgogICAgICAgIDxWZXJzaW9uPgogICAgICAgICAgICA8TWFqb3I-MTwvTWFqb3I-CiAgICAgICAgICAgIDxNaW5vcj4xPC9NaW5vcj4KICAgICAgICA8L1ZlcnNpb24-CiAgICAgICAgPENCRUZGVmVyc2lvbj4KICAgICAgICAgICAgPE1ham9yPjE8L01ham9yPgogICAgICAgICAgICA8TWlub3I-MTwvTWlub3I-CiAgICAgICAgPC9DQkVGRlZlcnNpb24-CiAgICAgICAgPEJJUkluZm8-CiAgICAgICAgICAgIDxJbnRlZ3JpdHk-ZmFsc2U8L0ludGVncml0eT4KICAgICAgICA8L0JJUkluZm8-CiAgICAgICAgPEJEQkluZm8-CiAgICAgICAgICAgIDxJbmRleD4xMmU2ODRlNC1mYjQ5LTQ3MTgtOTZlMC1jNWU4ZGE2OTNjZGI8L0luZGV4PgogICAgICAgICAgICA8Rm9ybWF0PgogICAgICAgICAgICAgICAgPE9yZ2FuaXphdGlvbj5Nb3NpcDwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgPFR5cGU-ODwvVHlwZT4KICAgICAgICAgICAgPC9Gb3JtYXQ-CiAgICAgICAgICAgIDxDcmVhdGlvbkRhdGU-MjAyMi0wMy0wM1QxMzoxNzo1NS43ODE5OTI5MDBaPC9DcmVhdGlvbkRhdGU-CiAgICAgICAgICAgIDxUeXBlPkZhY2U8L1R5cGU-CiAgICAgICAgICAgIDxTdWJ0eXBlPjwvU3VidHlwZT4KICAgICAgICAgICAgPExldmVsPlJhdzwvTGV2ZWw-CiAgICAgICAgICAgIDxQdXJwb3NlPkVucm9sbDwvUHVycG9zZT4KICAgICAgICAgICAgPFF1YWxpdHk-CiAgICAgICAgICAgICAgICA8QWxnb3JpdGhtPgogICAgICAgICAgICAgICAgICAgIDxPcmdhbml6YXRpb24-SE1BQzwvT3JnYW5pemF0aW9uPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPlNIQS0yNTY8L1R5cGU-CiAgICAgICAgICAgICAgICA8L0FsZ29yaXRobT4KICAgICAgICAgICAgICAgIDxTY29yZT4zMDwvU2NvcmU-CiAgICAgICAgICAgIDwvUXVhbGl0eT4KICAgICAgICA8L0JEQkluZm8-CiAgICAgICAgPEJEQj5Sa0ZEQURBek1BQUFBRm9LQUFFQUFBQUFBRm41QitZREF4SXZMQUU0QUFBQUFBQUJBQUVEQVFNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FQQUJRQUFBQVFBQUFBQlp3UUFBQUF4cVVDQWdEUXFIQ2dBQUFCUm1kSGx3YW5BeUlBQUFBQUJxY0RJZ0FBQUFSMnB3TW1nQUFBQVdhV2hrY2dBQUFVQUFBQUR3QUFNSEJ3QUFBQUFBRDJOdmJISUJBQUFBQUFBUUFBQUFHbkpsY3lBQUFBQVNjbVZ6WTVuS0FBR1p5Z0FCQUFBQUFBQUFhbkF5WS85UC8xRUFMd0FBQUFBQThBQUFBVUFBQUFBQUFBQUFBQUFBQVBBQUFBRkFBQUFBQUFBQUFBQUFBd2NCQVFjQkFRY0JBZjlrQUNNQUFVTnlaV0YwYjNJNklFcGhjMUJsY2lCV1pYSnphVzl1SURFdU9UQXdMakgvWkFBUUFBRkZibU5KUkRwSFVrSlVNREgvVWdBTUFBSUFDUUVGQkFRQUFQOWNBQ05DYnhCdTZHN29icmhtL0diOFp1QmZURjlNWDJKSUEwZ0RTRVZQMGsvU1QyRC9YUUFrQVVKdkVHN29idWh1dUdiOFp2eG00RjlNWDB4ZllrZ0RTQU5JUlUvU1Q5SlBZUDlkQUNRQ1FtOFFidWh1Nkc2NFp2eG0vR2JnWDB4ZlRGOWlTQU5JQTBoRlQ5SlAwazlnLzVBQUNnQUFBQUJZWndBQi81UEh4dHdBQTVNV0VQc1FiaE5LRC9HeEZUWFh0L2hCN2tHYlJNejlsVlk0djFweE9laFdaMHFPU0JOSktFN3Nka05VcUhSSEV4U2J0QXprOGNBNENTSVo3MStCM0h0QXB1clkzUEhBR2NvcW1EdFNNanI3bTRKQUFZT0E4Y0M4UDRzYnp5ZU9VRld4Z1d5SjVQR2dQYTBTbVF3TWxsMGdVdjJDSXZ4aXdFMFFHUmZLRlE3RWdvTHZnSURCNWNBKzl1K1cxQ2NrdXRQV0pMZ0FQdFF2Zkc0TGhrZkMyZlVRRUlWamRvcUhnWEtnWjhpVUV0cStrb1NBOGFEdUdsd0l6cGl5Yi9ac1dIU2ZnUEhBOTdURGpBU0RiVVpaRXlVUldxeUEvR1NBbGZIUlQ5MnpjZWZNM3NOOG40STkwbElYZ01Id1BpUVh1bjEzMUQzRmN3UGJPSjVtL1p3RGZLRFQ0VjY1NGd6MVFHUnVCZ2VBOGFDN1ByZHFCVTRqeVd4bC8zMlFnUEdnaG5meGNTSmZXNE5wUktMTTB2R2c3d0FpWmxNdXN4WlJia0Q4MklEeHdIajZSeWRjS0Y2QUtlWUxhYTVGL0FRQWlqN3RnZ2NXeU4vRDRrMFBpU3dlV0JUQXpKaEhUTW1nejB6eDBsNmJKdFdENGVNdDZGMkVIT2JVb2xEVjJpbDFjNlRZKzZvb0IxTU94Y0pkd1BSRFFBZVVLaDc2Q0NZMGZYZm93UVZ5TUVvNVAvZEJKaDBoREkxa3R3OWxzVkl1eVp2MFdLSFlpOUNhYTVJd0Q5b0FldS9KeHdBMkE4YjFuaVl5SzdRRnpwbkJ1emlpL0hUeDBuVXd0NXZ3MXhKUjF4enlqaFlhYkNZblgyaE5TeCt4Q1hYUE92UEdaNGk2UXo4RHcraGkrTGp1TkFJUTBFdUFGRHFnbm15T1ZFRFU0dEw5RTdUb0FhbUpERjNhWFBHZzJkOFJRUjJRdTNJR0NBaFNWdkdjZnhwM3VISTZkN0RHOXB1MFBoVVJMTkxjM0Q2WEVaRDFvNFdnbm05Z29qd240NTh6TUcyb1hmVWUvR0grTWg4WXdLYVRveDBTNG9OYlB6SmFZV2FocXgvbWprdGFsdy81RzdKb2s3VTlSekxGa2ZEOWdJQ0FnTUJrUUNxQU9lVWZ6Rjd0ejk4ZTFDV0FRb2lqWHp3MDhkRmdFZ0NKb2VNeVBNakhRcy84NUtybE9pcWh3cVFZUUh1cCsvRzhPNmlBUEVMd0xjY0ludEFDbVpwbTM3MjJreTVnMVRQRzJwL3QrcndqbnMrTFFFcDNYSEhPY0NhbDZsM0dyb1R4MFVDSmNIQXR0QXJzSGMwWlNDWmRkempuWHVJeXljTzQwR0pzYjJMUXIwV3FQekd0VjJCMnJPd2R1SFRoYThVZXdiU3hqVS9PajRQOEJId0VQaFRBYXhNQVE4RjlENGZUSUNsemZpOUpBTTNML3dQR0hadXZKQVBXV2phYVU3aVhlcGs3dk1KWTFEMWVpNENBd0ZSQVRCSVJhSkt1YkxqbVNVZlBVWHZDOUpJREtHMXlNU3RlSFY0bldoUEIwZ3BwR3NlQmM0UG9uWHIxT2h5d0ZjYTZrR1VYbTVlcmpyTVpMVXE1NHFjQUx5NSt2dkRId09nOUVvSEV4MmdueXFLQzJjcFZtaUFGNHZtNU5Lby9GVnczZk1qUVVPY3BodU1WcG00UjBsWDVHTVhxWUNEQUZNeSt3dEVTa05JTG1CZEF2WFQvQjhNZFdYN0VQUERlTytRY2grS0grbDlBdVBaaXhqd0FtSEYyRGU2KzNXTUk0QlppMllGVEU3ZS90N1ZxbzRnZThINjJEOWY4QWdESjRVMCtjNy9CbTc0REFIS0dYbzBtRGVmdWxIcGZmOFBWTVBocVlKUVRyYVdUL1FVVGsxYVdTVUYwaTFuYlNVZ1R4c3JxRDlpdDkyWjZkYlZSM2ZBa2lUallLb09meDZ0dWxld25yTjlWY0hncUxVVzZaWUtXbEhnbFJhd0NTVVNkcVhNZm1FSFFLRG8yaS84dkprdzJHbGRVbUJQeWdySGFNQzVzSU1OMm56TjZLZDVQeGxNTlBSU0VrOXMzdi81aWltMEJJMEdVQ2J3djBNTVEvb2xqQXYxRTg4ZWd5Z3NZT0d5VTJ4VjZlL3ZBdVVTUkxsazlSTVV3K09uV2I0VU9qREZVRm5FRk9RY3k2czJpYjJnem5hVVRZNEx3L0M0c1I1Y2JiU1hVVHBXNitWNjJ1a2tpOTNIQnJCTit5S1ZzSTBjQ2s0R2V4YldJSytpVVFVaVFzbWFYbXBEZWs1T3hibEdBZnp5Wi90bzhSQU0yejlqbnBDRi9aOUhxWHdnZjhTZnRRenV5dmNjeC9JTWIzdWlJT25PNVZtdTdSM3dTdDhZQ1BsTDdMNiszUGNEQzhUOFV6SUErUlJOTUJCelNxN1dTa3pGUWF2R3Fnc2YxSkkyQ3NCdDJzYkJzNEd4aUJ5bEcvSEdlcFZDRkFaMWZUVm5XY1V6aDFQeDVwVHF4NXF1blZrS01UUDVDZThScTBpaWRzYXlzaktMRXZGcEphOUZWMVJQSTl6NUFqbk8vbFA4VWlFSFRGVm44aXY4Zk5xTHhOeEp4UUVuVnJDRW9lZzBaOWlWNVZ3dGRJNEovM3B3RFV4cG5BTUxPd1MzWkI4citzUStHNEcyWjJHbzFmaVdUcjVPV2FOOC9CN0pXNlVsYVZvSmFBMUlaWmRrNTFhMDFYRXFqSW5vbml1dlVjOHJRZ1dBWmMxcnNBbUNrdGJjR1pmUm14V1l3c3Urd2FVUll4dUpmdzB4ZVFjMldzcWJsQUg0Z0dxN2V4R2F6bUt3Z2J6bkFEZWJibWRGQUtXQ0FKZkhXNy9kWitWNi9UUXFsYVR4SksvbG9xRkNRQWFzYzhUNFhpWUQ2elRETDNhOWpYSUNxeERSTzd1YkpnRHlhN3VlMHZWRjNMcXVadnZkcTU4WVZGUm1EMUpLM2lROUhmWVJnWlJ0cFFQcCtjTnliekxNc1UyOUNBcWxqUllXNURaTFVOUWNTQUdBTlc3eEJXd0UzcVRpVnpGT3dORlJUOENWQ3IvS3UrUm5WeTBEakhOa2hpMGdNTEJKcGtzc0hPQk5BZ3o1TzA3REVhYmRjREYvbHM1eG9KdWFkQS9uNEdSSUlFbjFKNUJpZTFuWEVlY1NteGtYbFBOYnVYNHRwQjcvTmdJMGV0ZFpSTjNYc2dJQ0F3SFhZRHJ4c3JaOTdnUmhBbkxCd0dWK0JVK21tell3c3VzdysyVi9lMG9nTDRYSGVodmc3MTVkTjhjT0g4SmZZUzVWKzRBRzBlcGtpTGp3UnlLbjE0TnEyc051R3VKUFFQTEFja3FzQ0hzTVdaVnB6eEVXZEQvVWxWSjNud1JMeWF3SzVuc1lINzl5SjZqbUtjSFB4ZnhsQVBhR0FaS1JSVUJNcFAxTFN1WFE3N0h4ZElYNm83dEZFQmNadi9HS2VBRi9BR0VjVEZmaThNSDVPTlpVeVNvWFZLUXRUYnlYYzZTbDlPMVpWc3hMRHVPRk9XaUJUMHcvdFRVN2lNSzNVcHlrTmV6d0dWdEZ2SC9XRUhTdmpubGs1dHZIbGlXdjByZ2Q2T0p1eEVlT3VGRjBIb1A2eEtqaFpiWW82MWpKRkRhek42WVNIM0drRmszUkt1QkZBMW1GQk95UTcyeGI1Q3BseUZRRjJUWWYxSFllQ0J6N1dOei9pR0hZYVRWdUhhNm1wWVN5YytmOEZSM3NNMXplcTIrQ0tDNmJ6VVl0YjNxcG9iZkxTUG1Hdy95bDdoY3JNaTh4TDFJQXlxVk0xRWtHbTR5SmJraGROdXlueG9Ma1duYTVoZTlzVTBGTDMyUFZORTRIMHp5Zm4zOVYzT3pId0QxRHhna01JcmcwZy8wRWFhMFJSTTI2MTdqOGljVkltZVUwSUUzY2xrdVhPMmFqUjFLMzdtL0VmRWZSd1hYWUJoR0NsMkJrd3pjaXpYblZFWFRLTkFxdjNqZnZXQ0lsWXQvQ0ZiYWZONXN0SHhMa25mOFJHWVdGVUt3dkpyNmxvdGtTS1FxbENVeGZoYzBBRnVydFBRVm1pTmtHandKMC9IRHVVbkxSYkRWQ1JTTEVsKzZzMHdieU00T0Nlc1k2d0w5d3FDNHptdmZsalRKMDdNTEpHR1JUZ25ELzAvWWZLR1ZTZmdLQk9xMzVWN3ZiRFJzSGx3TFgvUXQzRXNTZEx6MGQ0SEJWRTFzRmZtRzJwaXdMbThkOERrQmxncXhYWjhleDNkVW5VcFNsQnpHMDJ6TXJnSTdsVUw2M0hMZ1BrTkd5bW1uRWdXTThYNGhiaVRBY1pxNStPOU5QWldJZDE3TUh5aXlCNzh6REgxUzludGMxYXVuVDdwUHo5MjN1MjVoaHdlYUFwNVhsN2xvRGMxVHI3QkprYlB4UUc1ZU4vQWxPbXA2cEY5d1UyWTVBWDBzMVlWNVNhZXBJV2U1ZmlJRlJvcmxoZ2RDL20zMGwzM0pHbEMzaUlzc2pzNU1pMmsrYnJINGtVOHZWSUNBSDQwOUZPejlmcjNLcktHY1NiNy81dHdtN3FrOVU3MDBzOU0rR2VxV09IdW1peG5ML21leWJjSVhvaXNpMTB4SWRDQ2QyOXVjcW83bUZmYUIzWHh4Y1RHQUxpTW9DZWJqc2w2UUthaEUzY2k2N1Uydktma2xSaExCblBUa0hCbGhEYTVTb0Y0QmRaNkF2L1RIdStzVkZXOFM4VFQ0QzEvUnYvY1pFZEdzT0JBWVBzbVZsaEJ6UzdNYllNaXVKeVkrQ0pZQXJDWW5VYTBRNHZjR0EzemRpYS9BL1dVM3VHcTU5T0RiUTYwVU0rWVJEaVl3eUR6OEhhMzdEdERjUHIwMDRLS202N1pzekp3MG9rR2lSWVJFcFFKQVJpT3NSc0RCTWNtTHZzKzhoajhTY1VjU2dyaWpxZ0NSWDIyZG9UVDhOckdqTXhVVHIvZ0VwOFNEMXBTMExUZzAwYk9hR3RPc2hScDk0bk9yekIrV0tKZ2ZYZFg1akkzZncwV3JtZ05VcDJKaDJLREt5MVdHdUF0Z1dobzFXc1lUVWNocjlYaUp6anpRNWRnaWM5VExNNE1sVDRhcTlla05DUUE5LzJ6cTR4QThQbWxzTzNNS29BR3BxWXBBamFxN1pzNmNNNUloMGovY2tiUkRQNm05NzVMRER0WVlXemVxUnhkbFVucFRQdDBralBENktCNDdzUmd6aHZLYlpHTS9vLzRnME5SUDJ2cEtBd1VkVTR5RHIwRGZFSGRiTURtOHJTRVFCNEt5QnRDaW15S0tmYnBIUTVoN1FlaFl5bjQyL1d4c1Yrb1pBK0QrWEg5ZU5jcTRPdmdEblIrRzFBNUdRMk14K2QvdVgvRXJlY2RSanZvUWRpOEg1cGJ0NTlaZTYrajQ3dUhYbkQ2WFNVY001T1Vla3l5UW5yUjJFMnhISkVMUzlKMnQ1QWtrODZYc3RDUzR6T0hHem5HdGtleHhhYnptZVQxaS9kZ1NkVHVLWjk1cWt6ckNiRklQSG50VzZxRHFOR0NIOXdlZGFzNHA1WU5vblNkbUlnRjNVY21YMU4zWnJNdVc0MG1mVytDdXgwU3VMV0JuaU1lUEZ5dVEzUzFST3B6QzdXTnZ3UmJpZ1hSUHZGeGhBbWh1QVJZUUl0eUNhcGwyMzViSmJBVkFYNkFmOWlCZVNkeXdUMVdhWFlKKzhTeTBsT2Fqb0dmeDhISHRKbjlnem1oV0EwenNCZHVXSU9FRHd5bCtwUEZuWG9oL1FhUTRWSk1ud2RDYXV6b0NVNDZNOVpxRGZmZTNtQ2o5VnhNU3BvakhvWkgrWW9UUFpyMzl4TmN4K3JjUUN5MW1JWmx4bHJjcDNHbUsraXdaNzVIUUhjUHpNOWo4bEZpbmpKWlc0d2pneEJzTURUMUxqaHNjTXJMWnQ1RGxYakU1bGdaK0ZkVXNMRkdJQ2s2R1VSSDc4VFBOdjVMSmpuWG02OWxIdWpmRExqTzhZS1BFS2F4cTFkU2pZeFFwNWpWMGttcDlkczl5NEZGQ2w1Q0M2cmt4UG1Pa3ZjTHh6R3dSbzZBdVNza0QydGpZZXNtRmcrT0ZUelZmZ2h5MjhoeGZCM2g4MG1XcHhraWtJT2YzeHM3aEJGZ3kyYjdYS09zalBjcy80S251Tk1ZNVNBMWo3SU1hdmd6VlZocnVZZURma05Ed0NhQm5vcHF3a3FqV09hNkxqM010Qm1Wd1pyMmZZRFB0aEtsdWZ0dTkzY3hwVlNJQjNmNm0ycjg4aXMwdkZ0WEtQaGpqK1lrdVpRUTFxNWw0MG9zVFBkRUFpTnJraU9DVG9ZNjJBaG1SL0M0MzNVQkc5VStkV2FlNUx4MnRCLzMzQTdEZHovU2JyNTVuVHM1SVF3K2dCOGkzYnhTak8wRDVMazhPVWVHZktQNVNQTHlOeGNFcEY3eE01Uld6cmFVTXgwM1MwY2hTWE9WR05VTGRFSEV3blFiV1o2cFFseFIvaDc4TXJ3M0Zma1hjTlZhMWd6QnphU1hlazVmZjBLQjRHS2VoZ1MzdHlUQWNXcXhyekdCbkZDUXgxc0FSQitKMzB3N1llSW56TktFTmZYLzFNWXJ6dFVUM1B6S3ZEMXpNdGo1czNEQStrUDJNeFo1NUF0NUoxdDRFSUVvb3REL0hOZEJZcWdiUUpQb2RLUEtwb0w0Mk9VcG1Kc1lDcUxENlFSTnZQbUwyZGExeVhNVGZISjBEaXdsRURwd1UrMmlnUEVlT05rZTJYT2xRT2xiaWM2cEZuc2FBM0tqTER4OGROTXo3RllRSlIwYkpwck50Nk5kbGNuaGNqVFo4VXVCeUwvUGhMcDJjMG9ySXdVVlIvQkdFN2JEaC92bzQ2dVdWNW5WNmpJY0thdE5MQnh3czNDc3pML1JWSUJ1TkVsQmNmQ3pnYTVyN09kZklwVVBOdDBURnpwam5LK1ZhT3JzajNQa0NmZkw0YzNZSDJkcHYyV3czRm41cU1pdnFuNVBtMkpNZWpWMXNVZkxZTU43QkkvWG03RTdhNzBxdHQ2akU1ZUdTUGZBdjEwL096UDlQeHpCYmx0MCtHUng0eUZob29wNXVFZW5mRWhJRGhjU1d2N2hLTWo1cTQzditzYzRMMVBmVnI1eHJPME1FbXVqNDdLOHMxZ2xTaGlNZjZ6L3dyOSt2Q21TRGx5MURkSW5mbmw2ZTRWV0pOZmRIRjBvazBFaWpRSnloQnd5OGpneW8wTUZVc3F3VENyVEd1TVhGaW1vUWViYVRRc1MrVEVDelNhdE42RnFaQVBHWDJ5WkoxL25CZ1VwM3EwRXpDbmJPMEg4OGhudDhXNU54dWFuZEtaNW5PSjJsOGxnaUxwc0RNL2FkbC96RWpCdXcrOWlRcGg2U2xGYVY5Wkx3QXN1dTBzQlhQRHhxVmllaCtyamVRRWk3T2Y1V0ZZWXZEVHplaStWTUNPZmlmSDlwbHVsZkJQQzcwdjUvNkhIbHVjOFZJcmdUYU01dXVvRU1ienI0N2d1Q0JSK0FhTGI0bGVzZzZaWWhjYmpTWTZwSFlCbmNjNXU5Y0FsRHgwMGFNaDRLRUNuSm81NkJDVmFmcGN1b1Mvdm9FUHB2b09Xd2hjcVMydXFtYkNhU05KNlEwL01TTHhQOFQvQ2xDY0JvQm42SHNGRlduTHNGUlhXUHNxZUJ0RDZkUXRjcnplOHgzdTFTUk5jUTJmVmcxVnFZSm5yS21mckRRQlJuOG02ZHE4K0RLeTlkYWlLenk5T3hCeHVKLzM3RUdjWEtSZjNWSlBIL1ZTMkxDajBvNVkrTXI4OVhTVy90MyszMzdwSmpmYnNOcithSGttSFh5aVVjc25UWkp4UDZlK1Bxd09qWFBhVUsxOWhjOWpDOEFham9odG9aaWVxcXNCcDhlUlVUTWxTcDltOTJmdGg4UkFYZkZGRkw2NHVsQVZ2RnZkMTFYSFlRYjJSUXVndm5Ibmw2WVB2WTYwZzV1YjE2UHI1NVNmd0dmZWpZaEpOVllpMXZIaXQ1enM2YXRscXFzdEdjV1ptWjlTMjJqbzFPMXhvZVRnSkJMN0xPL3RsS3g1UTZSOHNhckx5UDdjcDJ2aDdKdUcwUkNOZVBNSXFQaTNsSGtXV1pCMS9qTTV5dWFyZjhMRUMzWFp2TnBxYlFwUlhJNC9JQ1d1K1loeU9HMXZKTWxyUE9JNFAzN1N2MWdHQUJ1SThVYWl2aW9wdS9oVEw4OTJkSlhWa0VWNWtkU1M3VU9zcjJKTC9Pb002akNpYzNOQWZwdUgwb0xKK0drdHJmbHQzdmZBSGxyRkIwd3hXYy9uK0VHSkgzSm0ybnI0c2xHWWRraVprc2VXQ1NVZ2c2R3R6NW5Jc3RXNVY0blpUMWdDczU2WlpxZWQ0Z0daaWdkTUprbDdVQkNBUnA0QWt4b2FJSkZsUmhhajJZTzZyMmpUMnRQOGplOEpYajBLT09CWjk1REc4WWluWWdKT1B1a1hMUHdheXUvSzJYQkp2aGlBZ0lDQXdHcEFoTnRpa09kYzE0ZUNyNnJpc09OVFFQMVE2aGdPM2dEeXlMdGZoRCs4dHI5aS9QaXJKQllzS2xSMGV0WkJlWExHY2VPdzhOS2U5ajdIRDZGYjMwRmhqVTBrSnhmTUZ3K0pkdEZtL3ZmZWlWM2JURk04WEUzZWpuZmgvVVdJSzVrR2gzZ294K3RpK3pBY0xDV2xES1NNRWJ4ejE5cnl4YzZDZ0hkQW1ORVNSa1BubXJzVHNWRktRZUU2V290cGtFbnJMNGJ1YzVRVEVVTEJUYjlpWi9VajBoOHFqUXVrbm1VZmFPSTZMQXl5b2Z2ZWlXODJTUFJkcDkvVkxVZnMvVDFmTzhjWFQ4L2xIL3VvcTZBdCtJQUoyWFNjNlk1ZFZ6NlF1bGdiSGE0RzV4UjFlZy8vTEZtaE15cUgrK0NjL1JKUjc1MThycDhEajBoTFNZVWZFWllyeG9UTkk4STZ1VVdJc08vL05YYUM5bFU3SHhDdUYxRmpURC8rV0Q1WFRCVEVxbVphSTdoTktWanNtZGIwNFhhYjlJM01CdU4vbnNINDVIb1AvWkNFTEMwcXNsbi9ab2NuOEdWd01pOHc4K0FOYjZSNE1qbW9iTFFGbjkyTzFBa08xZ29WSHFrSWxlb2NYWDJNVGozTGszbFlSYWtod01SREplcjBtbWo2L0puaEU1UjZpYS9rYmM0WGFPQ3pMSVIrUTJ3SFlGWkl2Y2FRWXExVnZSdk9pdGFxZ3E4QUtWSXpJYVlaZzRzcEF5cUl4UjJsWiszaEE5ZkhxbFMvTCtJaitITVQ1QVVaV244Y3ZSUjNLVlVTREJSSUtWM0NvUkZtc2gvcEdtQTJ0OFg3cHEveHN5dS9ybkRkaUwvUUx3OHZ0bHpTdXo2NnA4aCtocmVRMXJsWFVlbk52OE9FM3FLMmwrNlRDSjJ6YlMxdGJSVnpvQ3RpalhSeXR5K0pSNVVJbE4xeForeW9KVUtLcENPWkFHK25XeW45dmVxVm13VDZjVzlYT0J3bUxuTVhxbUlEWXc4bG85ais2SVBRTGliNzVsUGtmWGhzRVR5NHM4WHViR25zcTBrK080UHFqV2prRzI4STJVZ0l0M2NsbjBLYWlvYzREcDdkSnpyOGpiK21LUkRYL01nYmV5YnJZUFk2K0dvY0ZnWm1pS0NONmtBdnJJTjZiYVFpNVVrSTFkV1pVSzE1SlR2VE5EUlhpUkZQbVF6QSs4Wi9qekUvWXRuSE5jTHEzanV3NllSR3pzaDVob3BZNzlyeFdjS2p6OUEwcmw4RXN3R1k0dDhYOUVzM2NOWjV3NXpkeXp1dW5YN1RuTkZ5aXVFMXpqbDV5d25kVEltczRBRkZUZ3VCY1FDWVorbkVab3Rlc1VRQXg1WTE0YXZqTk5vNHBGNERwdFpHQWZLUjJYRGhmQ3VjMGdKR041QkdQbFlCYS9pQXNVTDdVWVY1YzJqQ2xFY3BjTTJHcTZFQXpyZWF5d3Z3YnlGV0ZDYlRpU2lkaXpLV0p3SmZWdVgwUVZTUzYyc1N1VmdQRHl4aFJpMTZBaGpFek4xeU4xeXdSWVF6ckZ5emNiL0NMWk5ta3ZJZk9weWRwYTV1dEJscmR6U3E0NUtKMnRSQ3VSTEd0QWE1VjFqZlhZbGQwZE83YzZPNFoyeUNSZHlWNlY0WmdhTm5CWms5ZjZpclowL29PVUZXQ3pjK1dxbXJiRmZnYWxld3ZhZEZDVTNBRXNmOTVBa21LWTE1NEtrbGxGdm95RjgrZEFqTlhHeWc5Y2N6dnlFek5lUzBjUzJzN3k4WXRXbmwreDNlOXEvZnhyTjJUTWNXNVNnRmloSlNCRFlzSHpvM0t6RXZMRkdldnVTcThXdlZWSS9pUkpMZENWVENhVXg5RTJNZXk3alBDRkxWSDRqcU5DVGd3T3A4ZlFZNjhNY3I4ZHRwNXd5Z044VWJzWGdXV3lPOUplUmVwK2d6NCs0Q0RwdWNNZVlmNmsxUTgvbXRFbkdTck5vaWZ5ejhpdERlRVVCS3lBb1llUU9MSS81VFZEak5VUnM2NFVGOWxiVTVYS3ovVVN2clVncDlNdkNCR0oySTNDRkRBZmlWdXZpV3BJYkNPeHFGMDBqN2c3TWRtRmRhQWJ3YndVOHVPNlEwT2FRWm9TV2MwR2xTS3RleXVmOHJGZDNvNkNmbHdRWkhvcW5lZnVQMHpTRUhNMStSb2VRWjFsWkNpOGd2ek9pSTBSeVIrMnkrSGpoVkRkVFhPMFVSSVlvMHVzVXpobFRvbS9iNzA2YWdSSlRyL3dpOFRoTkpVWEZENjdDSCtPdmlQbUlzTXN5R2V2U1pDWUNBd1pRQTVtUkpFWVAzOThqUDZQbUFUMFhZVVcxZmd3cFdNVVdsLzRmYUltQU1ZbCszcm5ubTE4QmFRSFZMcXFQdkcwZXlYQmVZd0JBeDVPSVB2VXRlaldSVnRNdzEyVTFKWGpFMFErVTQxZ01zWDVTSldDdHNiUVVWRjRVbVA1ZHE2WFZRMEFocHowYkJJdktWTWdYWktlMk1WWlhUTW1wOUwybGxGdUZjamExQTBUc3BhcWJJL3dKb2V4UjlUNkIrRmlzVU5oRWRNaW9XSnVTdk1PdUhpQUN3d01IOTEzbWhPV0FnTTNsZHo3QnFwSlJlbGVRVVpBQi9FQ0R2eWszTjQwTm9wNER5UC81T1Y5eFRrRTM4V2JxTEhNa0pSTmIzREZEdlF4N1QzQzBlcmtPVFRmNWxqZjZNeVUxQnprcEhOTWJoRnVjazJMOHkvZmYxNHF6c2JFWjBqZDdycXRCL09oSFVnYmYyeTdPVjBTSjY1MjhaQXFHSkk4cDM1TTN6N1JHY3FRMktoMUJvYTZiVkE4cjRqZkFpWE9Ydk1zbDREclBIQ1hmOXhSV0xCTjRVbklHQjEvYVVvcXFxait6dFJHZXVMMVpSVDgrUlZOdm02L2lZK0JUckVPbzdWZ0N6VkZEZ1RqaWlBZzJPRFd2YVBVbitKMjFLS1c4QTRuVktLZjdYTmZoTWlwVFVqdWwvUFRqYnZPQUgrbzJvUnpCeGNTWmNNMVU5VGkzdGhKdC9EM3U4VHBzTVNuM3YxbDZEM29NSmV3T2t4QlVONXVxck1temtlZXRQZWkwMmQ5MzZpQjNDdDFuYnNqT3hSQWZKQjQ1NVJUSmQ5b0gxRHU2Q2dFcjhiV1BhbVpPTWp6cHB4Nm5DN3Y4blNjTjRxTlU1b3RROFBkc2ptd1dhb1k2RmpGdmwzZWdIcFBnZHJUUmY2V2xpaDhKNjlaOE4zeXV5L09CL1F3ODA1S1BJTEl3cThneG9qMFozZ3ZjTlN6bDd4L1prSHVxNDJJbEg5blRxNEtvdnVvS09hYmswc0ZzTVhqQlQ1VGtwT2ZDSHE4S2t3RXZWenovR1NkNFJibnZxdkZMYTRIblgvV091ek1tVC9PRCt4UmYzUkhscHVwbkN2a09yV2dVRmZINFJNdkRDWkhYZjJkTFNaTUZveGxIN3RqK295ck41TStJS0Uzc2Z4RldGdVFYYkNFa1B6R1pTUDA2aitLMmR0STJzQmlBY1RGSmtEdzZEMlFwdTdPRDM3QmVpL1FUSzY1QWl1WFExRjZvN3ZvSXFHcllzdEs2NktOUGdXWmEwTnh6NlNQR2daVFdRVGxGZy9ML3FKM1pyajlZajJsY3FSUjQyUjVRM3oydlZ5amc5dEsySDlvOExvODA1NlM3NEQ1K2xya2NGemU2bUdqdnNiT3NLMllRL1hJSTl5WnhhSlIybmx5TjhsUFVRT1kyY29obzFxaG9DdEI5QmU4QndSRVVsWHVlY00wd1RTUnZlTzdvNlovWXhaeHNXM3FocGFTM29BcEJucUNsV0hhYkhpS2hoVzhJaC8zdlpnNTliVklxak9oMjVqQkVqNXhTamRBSnJYVTkxM2E3Mmx0WU5URERCbnRSMEJGY3h5YVgrT2NTVEZRUmtmWStud1NqbGs4NWh3THY1OVVPelVIM3cxckFZdjJtNW9oQ2gxeCs4ODdmT04zeEhHeFRqS2FWMEtLbm9ObHNsQ1ZVK0hBQjVmVXlqSktjTHRTRGtWLzRVeDhYRElRZm9aL2xibGdXSW1hbm1kSWd6WUV0R1lHL3B5K0J3OW9NaWR1bHBxWGZNVEZtSWNKVWU3SkVTbitaM1V4blFTUUx2L2Nka2xsME1KM092NXZEWDVuMThnMVh6VERBb21NYy9kSC9nUE03TzIwdngyZHAxMjFWQ1Nud1VaYUFDa0o1Ym9QQzNBS05wQmQvNEtkeGJtT2lkdTNNV0FkdDl5bXgvcm42TTU4UkR4K25LRWVPWWV4Q2FTY2xTNng5dDJJUHFOYStsbUo5NGpiUjJqTGRKQVJueUNKN1ZpRU9RQmdJS2NvZUpxRiszNUFMZXlSUEx2REtKamhqS3VUOUpKVlRqM1NXY25lYktoaWJ5cUYzU0tidURndnkwMlRYNVZzQUZnQTNvbm9FNlhtZ3VTMVQrZldhK2hjUklydHM3Nnczb1BOeUllVVZIWmJoLzZTb1ZabENZN282bDc0VWdzS3p0eXhMSFNsaTVzRVpWNTVPQTQ3UkFHV0RNbkhicUNEV3NDWmxnSVhNYmVGMEhWbEg4Sy9lbUNRV2cyUkRxWGc5UEkrTTFxWTlvNjBEMkZMenpXR0gzQ3IzcG81Z09zc2JpUG1lK3ZNYURIWSs1bXM0R1Q5MFFCY24yM2RCc0VMRk1TVm9zbCtoMkdIS3Jvb2ltdlZkS2FWOG5temlmTUZMK0ptRll5bEs0N2RaR00zcWNtVno2dzZwY3kxVXo4U2pWM2xWRmxPYkRhQ2J5aHhtVWlnRE0zeTJ5YitwQ0ZPOVdFYW9VenVDY2t2MkdkVXMzbDB0bGNKL2RzYWl0MFhNdVdDMXN2RlJ0OGl0YTlmTzhRZjJIWjRpcGxqbVp4NHVpdmpEZmRQV3lNQ2FCQWdnZlZVOHFIRHJsUkRPbkpodGVzZ3htZ0JvYVltV04xRTRML1NJemY1SUdRMmV2eUpZMjNzc1B6M0VkcFhUZkQxb0E5QXpMRHhVTWM2ZW81U3NodjZHb2g3RkxFbitPSVF0R09pYVlxU2VIcmxTOUVlekh2aHlOSkhqNm45V0ZJcUNyK2JCL0Juc0dzRmlZZmtvb2JRazVhSW5VWEkzbzJBUGRtc3JrTS9IN3d4Z3kxK1JZWVNWMkJOMStNdmVCOGtVUnl3TkJrVjRSOENDeUJmWXhrdmdGcm51cHZpb2NaVDVDSFE2WmdkQ0FpNlQ2RnBMQjhNMkhXN2Zza3hHQzU2Z29xZ0hqY3QyZFFFT25ReXRVUTY0VE1mdHNtRXVrbnptNm5MeThiSkFIcUhvUnZ6d0cyWUg2QkpvZjNtYk9rdTFoeHRmSUlLbkhqWXBLcjdzNm9sSWw4R0kwdzZtUmdPdzh6TUdhL3owa1pTNHovYmpMdExIL2IvN2tMamJHc3B6WVhiQWQzVVV0anJTaEw0aFFRTEZzUjk1eVo2N3hRcU83V0ozSnFOb1lIYWh2enNuaFNGL0VlcFF0YVBRRENzaGFzVHh6eHB5cnhNUU94WGVFSk56dXZhbkFldVVGTWJxSHFiL1FxbStrcGR6dFlvMWpRQkEyeWtlbkYvd01wRVhVeWtXY3hkMFdlQTdVZktGUjdCaFFMWnVvbGd1OG1SclFLSlllQWhyTWp5MDR3MFBWaFZENmhiSU9YVldKQVdXa3BPREw1OUxoRERNRU5QWU1ub2pwd2lHWXdGTFhXZGZUQjI1VGJOS0ZYS28yaVdWRFBMcVpXcm1KbjhiWGs2Qk1nNWNEbkl4L1ZuMUdScU5TNlI5ZW8xc2JBOFhGWE9VWGxBL1hVaVcwUlN2UU9jZkw3Q0RwcjlYSnFGM1NxQ3QxZzRPTHI2OHRmMFdJK212VGc2SkQvaFZUdm0yMVRidVI1V0VsQmJxWEpYSGh6eXMxK2g1V1NBMHFxV1plTTVQK2R6WlY4dC9sSTVabkt4elZQTkVBV1hGaEc0MmJjYkhOV01XbUo0RXU3VlpqN2t4RmV6TDNxeU5LL2pmdjQwTGxDMWNwbjFTVGhNQVJlcmpxZ0tXZzMwUGF5bTNvRVJTZGwwSjNPTkZJeFlySHFsYW9DYStrTWIvRlNVSTNqT0V6VVdwbGJWK1F4eEV2QWpkYktZaEh1TW9IR1h6akMvZG5lV2RRRjBJdHZjbDFUYTZYaFRGZTFhYUlmbElRVXloU2ZmUFA5YlI2UW9DSENUdWJSUTc1YS81VUhSdmNKRkp0Sk1tb01rd3R0ZlJjNU5NMDJxendCN25BZEVpRmdibWdpajBJZk9QTEJsc0xqOURLZE1ZUENKSCtaeU95dEN6TTY4ci9mQllXSlN1aUw0WTRoS1pOeVloTEV6TDJVRkJYVitpdm5hdktQRGY4TGtHaHFmVENPeWdXWWlqTkwrWUtPS3BsWWx2T29peE5rNTU4L3c0Y2Nkd0FZZ0c4RW9Qc2tSRTFDbFlOMm41WHRUMUZ4YWZqNmt1bHVOU2F4cjBIRnNQMUh0aVIrVnRWMVcwZU9hOHNxdm9KdjBDQ2JtYmJ3NCtvMllkNXFTa1hoNVJxZFdOOTFFUkpveGlkaVp1d252MTQ0Wkh3QlRITmdsVVZkcmExaUgzRUlMMVAzczl5eTFjK2pPMktrbElVWnRJTzJrQzB0M2dOdkhqUElDZDQvV2o4bU9pSmlVL2g1ME1pZUxpbnFPMXNIL0RZYy9OY0FWUERyNlBjby9MMGVpZTJuMzhJVkpHMzJhc0hBd1NKR0IvNlJUa2o5aUJQNEdDdWhYaWswWklXL2I2bnFHZEFjd3cvQzA0Q2lSOVRFMTZTQjZOOXVUMzhucXl5YUg3OWY2dkFNUnB5cVlWeGE2dmNmL0VMR21XSVhxNGs1aHhmQXEwWFZ5RDRGTXBoUUcrNE91NjlyS0hlOFEyWVJLTkhycGx5MXhRTHZPbFd4bmZObExUZ1lnczJnd0R3TlBoV0N2Wnd3N3Y2a0JrY00veWM5bWF3aDZZNFdCc29FUUZDQlgzbHF1SVF2cXpnNC9jVklrV01md2ZWZlRHWGdkbDY0SkQrcmd4b1BYYzVLcjdnb0dNUnhEOC9wdytiNU1DV2dWOUQ2MDAxU0ViUm8zY3E5ZHBtUDFMVXRYNFhjOFVsTHdKZ2dQWTV3cVlwNUUydzFrYkRNU0F4ZmRqNXAyc3ZLSWJYQmdYMElOSFBuS2FnUzZhWFBXclpWeXF1aXlXZng4ODVvSU1PaGZvN2pDY1NvRjArNDgyY2lwbkJNcjR0U0cxNStGN3lHYTdFb2RRK1JMWU9jcDNHZGZMTFEvWUNIR1ZrdXNuYThoM2IrKzhicUxQcE0velNTMEVMSEhIOEY4TUJQc0VGS1V6cWZPOEVEOWFYc1BNZ1Qxd2txMXY5cGd3N2JQdW5ZekZORFpmNTFCSXoyZ21oMGhNV1M1aldMTXF3cHNuNGNydFhid2xqRGdYdzh3eHdUTG9RWVB3ckZNL2U5Sm5HcUhWZjhmamd6cTRPdk16OVRpaEM0dmF2M2d5eXcrdk1NMnU4bDZVREhBWHVpdS9laHY4N0MyVTdTc0hMeWJjckp2SUV4aTNXTEwwWEJ1d0VzZEpSVG9BU3BrbnBlQ0R1ZEpCNXN0cHNqbnBpTldCRWlWKzdEcmk2ZGx4SGszVHl4MnhRSnFuMWtTdDJnRTNmMkdFaW1Kd3pocXlsR0d2WWwvdEh0UXBta2dlOTh0RnFIUzZZays4OUJ2SWV2aGJSOFlxVCtUVlhNcWI4dGdnVkt6aGN1L0M4U1NJZ0tvQXJTYVcwMG1wRFp4OTBIalZxMGNqT2JWWDdRNUwyQW5wMDROOTRZcmZyaFJDa2J0OFIvbkJ5MjNOL2Y0L1AxeENhWHZRQTFMckhhQW1UbW44WUdabjY3ejR3TCt2SWZLc052cmZndTRPR0hKeE5WTlhudXZVUkFjeW12MlhvdjZFemNkSHlGVTkxTWJ3OGl1c2MrbDdWSFZaZEhHNlBHNktKSWVsSFdWd3loMzN2U2JSNU5PSDl4RkdSb2w1cXFGN3A5bU1Iemx5empkU2VSVFNwZDJJWEVFQm43L254eTNPMVNsU1Z4M2tTRjA3ZCsvVklnWFRpQlZ0Q3NySkdZcVF6MGNMNkY0ZU9jTnRzdnpMMGY4Nk5hUGVwYTJJQVJ4UEI0OFhOVVowTWtldGZBU3FpWWZscVVmMTBDdGhmbFE2L2tDQnVTZktPVGMvazdnUkhFTG00VHhuTHJNaS9XVmh1K05xWWFSZE5PRHpVd2pHSzlRTnJBbWRsOHUrME5uT2MzNmtMWjRteVVqVDREbG1YOUE2aVBDUXMrd0phdXQydTE0d3ZzTnhvVU1kWXBvK0FSZml4UzVETjRraEJUajhPdGJGOHQ3R0M3cmZlQ2FNZkhRaHBMZ2lPREpadXBNajNMVDVydzZJUDhjWGpieHllUGZhVE9NcVVTTnlVYlRzRTlZTGZQOEtnOSt5YXdNYXZCZ3Z3aFNaakVIR1V0YkNMVWVNdnJnU3BMczBpZThkbGQ5Y0MxendYWnRWY2pWaDFQbWtsLzJqaS9XRkFvc1Bma0xxbVJtNjFuWmFSRUpaK2lHMGh3MVV4TXhDbW82bnIvdnZhdXJ1UzVkWmxzVlB4Q1RVbkFWWjVqZEpFS0paalI0Y2EyY0YzRHdqRUREaFl2dXNnWS9PZVdTU1hwb214SEx4cXlFT0dTTHhYaG9TRGVpY0dKM3p2Y1VRLzF4VzZSU01oVFBucVUwVlJmNEE1ajJUeWtXZTdnSkFjWjFkcG1wNzFabUw5aWN6dGFvU21DN3FCdXZrRVYvZzA1cEJpY3RCemFuS3NMTGoyNlhINEJwbEtnMVRXNUhveHZaOG5wSXhTeGJucG80NWpTcE43cVZHa3Q1QVJKQ290Wldyd1VMV3RCUm9qaldrSlhTbEZRbHhxTXRzRFdPd2JtWXRLaXE5WWl4YVA4cHc5SlpXVzJSWk5XZE55NGZBZUxoWVRXMVg1YTZnbWpPZUN1dnliYnBkVmFnSS9TcTVaZitwVVVHdVlTV0V0Y2NKZWNaM1JGcytKWkZEYnNxSGlLK0FEdU5JTVJNZG1qamFmQTB6SktuRmJMdXd3dlRNNG83clVLb2ZESGNOOUdLNE1saVo1ZEJZeFg0SnVVTFFYTm5aN3pOZExNOTJZUVljK3QrMU5xa1hqRERHWFpsbTZqdk93U1JMM0l0UUdDY2Y0M1Y1eHdWZTVqdUFsK2lQUkRoRmNOeGxPUEcvK3ltb3hzenhlRU5LakgzTlROMXA0dVRGQ1FLeUlWcFBDbkcxNGdNNlMrMlVFUVF3S3BLL3oyd28veld1TDdLUHZKUVFjMFkrZHV5RGc0Y05CU3l6VlkyV2FLbWdaaHhKWGRpdmtQL2l4QzFBeDVCanNhaStBUWRNTkVNNzFtalhYSndxVlBzR29jTXVKSi9UN3Zuc2twTXpadG5obzArbWRSNXo5THMwVjl3NDBwcFJ1d01DSUFmVHB2bTloeTUrdGJ0SldIY0hTQmpGVzBUMWFVVmtVZUlybTM2SDBXUDhjK0hHZXdPUDYxRkNmZDM3QVBKMWxhL3IrZWpVemFodmdOL0t0dFhQdGIzYU1QTVVYVDBCOEs0ZWlnS0d3a1k2MkJIT2NaYng5bW1SR1JjNEVicG9VSmxjNy96N3JKYlhKaUl1UXZsakNCbHBlYXRPV2wycldiNFY1SmhzRk1VVkpQTGxYbGg0V1lGd05veENybEtaTnNrSE5qK2dYdG91Y3g3UDlGTnc5UGQyZHN2QndzMEZxb09ZUlQxalZ3dUJXS2NWcHVIUFo1WHVLTkxUdWlpQVo3VDRJUy9zUndrU3ROaE80SVoyeHIzR0VJclg1YnlhKzh2QVZZWmRQWUZDL09PQ2ZoY1RSczhMd1drQ3lNVk4wNnpBSER6cklCTFVLTHlIV0dTVFQzYkpVL1h5SGVuWXlYTW9KSC9FUlZ5SmxLdE9hTEJoaXl3VVMxVkcwdm9KRyt1NmYwNDE5YUFBeUxEU2FSMi82WG9JSGZENkQ3dzBsOFJqaTc4TFJncFgyY2t0VEVTdktkbFZieEg5Nllic3IyUTBhalg3UWVNdWxQdXRWVXNvMUdJSWZLUzJDMWRPVC94N2NnTmdaWXN2cDA1YUFsRWVKZGVWY3NRS25RbGhsZ3pqWTBTT2NyNGV0VU9oQWRlN2MxVVVkaFlWSVgyWHJOdWpYY0xmUzBjZmQyaUlvYTRzejJwT24wRDdjT3EzeSs4cjFQTi9NR09sMElxdk1RSkNvOXN4a3NlbTBmSWRVNUNaWUxwRGVQRi9GOG1za3VZTXR2a0F4Wkl6dVJneEY5a0RsVVZ4ZVpXczM4ZGZNRjc5ZC9PRUJScnVRSmZNbzVNMTBaL3lWU0RBSG55cHVEK2lFamFRcUZDOHBnaFZ1OFZuRXBLcU9VbVZHak9ZNkF1WlpQNXhkaGh2MUpTZGFFR1hVU1U1blRFUDhoSjdRNm9HYXl1WTRWQVNNbkxtUnBtR1IyaUJ6d0xSS0U5NWFIakZmbklpQ1ZYcWJYb2RJQlRvVlZ1a256eUQ4blJUbzB5clAwQTNwcWFPVURPRmVXWFhGdDJ3aVY4NWVZeEYyRGxxd2R2cFdOUUNMaU1iWGNRZXpLQzhPMUd0MVhvVW1yWjBHTG5lcjBLZ1BxUnRCb2ptNkdUZ1R5UDRiSkgweEQ0Q0ZCSFEyckFsMUZHY1lmVFVxN0ZUMEcxSWxIeGVyOUtDSWNEZ25zQk9FOHNkTzdLWDIvWGdTbnBKbGJFM0tpa1Z0Z1EyNG9FdkxJNlJJNXJ5UmFjMSt5OGE5bndHSDJqTWt5aHpvUG5DNkNYWmU3SnliU1pYVkg1ZDNiOWx6Wmd6andDdEhSSHlzNmkwVm5TbDczRTkwbHVKcldkU0RJa3ljQW9PSFR3dDFIeE1wSnJaN3RoSGxVM2tTYUVPaVg5dndYQzhNTS93Z2FpcGcwcnpFbG1VeDVIL3d6ZVVSc2hIWUdsUlB1SXBKVmdqeFhnbXJRNmdWTzF3OWZ5NDlNVmVKay9zODJpOGN6eFZJU2duUUVtOFFVRUxjdkVqMVl3M2ZOUG54bGtlbDVlQU4ybXc0OUhUN0FZOUJQODZUTFJDbGc4WEluU0R1R2J5OFZOdDI0RVJBVkFDM0Z2TmUxUHRuZ2NGVnovUWdTVXFhRjdYeXpVMllNVHlmNWlRaGlrYWJheTJ4NnNpM3ZDcWF6WHlnSG5heVVEYThMOU1pM2owVGxuODVselRJOTZ0b2w0N1RCQVFOYmlwR2pPbXA0NURIc25PdHYrNEtsd2pmUU1tcldMZXZITUthTGZobU1KRWdvcm1XVXlRcWMxZEFzbG90Tll2WEZHNjNlaTVranBUL01Kd0IrakpZK1BMNHZQckkyUkN1MUhnTmQxQ2xRYXVJeGRQWTR5STNNZm1rdHBOYTgwc3NTQ3RVUlNpVzlYeGVYSklVOVpnNGMxaXNTNnRGTWVITDdyQk5VSi9Ud29YOE1zVzRrRnBRV1IxOWswVEVidGExZ242UVB5UkQ2ZDZRVVpobml2NW9FM0lmSVJTZFpiSjlOcDlNOGdtbkNZWHRMNUxzWEFheEl0S1ZOWFZGRkxHL2kwRzhUWmZrN0EwdlpBZWl5eVdZSHJQTTVMMEhkcEdhSVg4NlgwQklZRkc3Z0lDQWdJQ0FzRG0rdHVIbWRLdHN6NDFXTmpzZ0kzNno0R3IyZzgxYmtRUW9vS0dzTFRhQ2ZhY2xkNElTRWsvR1lpaTU2TUFpNzY0bUtiL3p0Rkt2UWk0MlVuaDdGVjFKSHpRWjJ1cVVFSGRkK1NrU1VDdWRDMUFmNXhwWXBlb3VBVlZ1SVpMUWdlSFQyZ0lMR3pUTzY0N3poeHR3OWRpZy9UQXp1YXNFMXZNUlRNZ2ZvMmZFOStUbjlwemF4NTAxRDRaMndscjV0ckt0dGVQWEQzSWhzbnB4WFkwSUsrNVlGOXlQLzNFWU0rQ3ZMU2JaMnFDajhvc3VhMXFqWVpreHNlQmZCM1orS2c5cEUrRHMyZ0cwQUtDelM4UDdrWU15aUNSRnFrOGxsb3lJNWVQOTFtZ1BRRll1eTlReFBMVnZ1d1hEYmVub0RDM1p0WnFxS3VqMW9hL2w0YUdhN2xuWEtjejM0dEN4YS9pQzdzdXdub3NmbGl5UzdxeUhJY09sRkVIOTh1YU5iazU2Nk5ndkQvd0I2Tk5RN05odHBVSGVGSkZ6c0xiVkVncE1Oc3BmZVZDOGN6RXRnRldtbEZKeVpVLytBclRWaG5kUXBRR3h5TjFYcUhncVJNTXlndTZBRzBKNW1sV3cvYmQ3S1ZxOWk5MWdrQjZIQXE2UGxveXpPTUVOaFpWendSYWtsalNURk9OQkMzbi9hSWwxM2thK3k2ZXlQcWVjL1QvVjQ2TnFNWXhWeFBqVE5USFdQTU5qMGdsSkpocVdqVmtsUlhjaXlqQ050UjVwRVVQMXFOVEs1UjlyV29mNVgyRk4yZVI5eldxV3JWWkdkd1BHRjZpU05WL2VJVUd5V1FRZnFtYU00V1FvRUFMeXljWk83ZDFFcWhYd2VWK3lnVjJma1A4RStJa0Y1TVFFbnpueldrZnhTcWxXY3FiRFMwMkd3Y3hKVngrQTdhejljYkRXbWxYV3pkWWlyZFlJeGVJQVV2RytrMmVxa2ZhVjFEUEZUemloNzJWc20xSFE5ejI4bFhCTnE5U0d4NVRuZjBGazJLYTlrNHdhVlRjQ2xQQXlKVWd3SVI5THBvamJxV1Q3YjZHYTlJNW5ZZWRuZE9rVlYrL2Q3Vi9XMG1SYTU3RHh3ZFVLeENZWHI2YkNnVnJHeUtOc2NVbHhYU2pZTGhzUkxUcDZkQ3IwZnhaQmJ2VU5YK1ordXRqN2RVSXNaVUMvWWZ2aXlJUE13K2djSWpMSlh4aFlyMy9LZURNZ1VZalJvc2pqZW5iNElqS3BYWENpaXVkMTZ2dWRKZVJhN3R5NFM1NHc1Z1F0aHhiaGcrNGlCVDdQVGxKekxFTHhvdVNnK2xGM0FzdFd4RHNyV0FkQ01kclV4WVlTcmJ3V3NxMFc3OXg2cExnMHNVeWpHM1p2UU1kS3IrbjErdElmMytSYXI3ZHNDOTJKM0E0UXQyZDN2TW0xOEkrZFFudS9CaGhwTWMwZ1dRWWJibFNadytXejhuZFhVUUxTYTQxUGZ2YWdYbUtBMGNpSkhiUTQyQTB0eEZvejg3aDRXQ0NJN0wwNmZyVmdnRmdDVGhqY3hXTHJDbGh4dmFpdWZoSWE4aHFBb25zSDI2Q090ZVJIVEdjL3ZTdStPZmIya2hyK0NFZm5KYnlSaitkdi9rK1M2MGkreTc0bFRiN29JdWlzZGRzZEUzdEg2ZCtBYzdhRlM5QTNMYjF4RURjZ00wZ1FGckI2a0ljRlhKVFpLWGEyK3VPT3BxL20ybmZRbmplalM2cVF3TUtFRFdaekJ0NHlVbmlsaGNiNmpZellvQ1pHUFozTDhDOG9reEkzSlJzeXp5MmlpdzJCcVVPam4vWjM2VStVZGh2ODBiVGZQblUxaXVrTG80U2NEekJSS0k2bmVyRjVuU3lyWkdINWhaZUJlQjU3L3hGbmxhV296R1NsajVYZkl3VWw3RHlabkQ2WW5rb0poT0ZyS3IwL2ExYjRjQ3pHMHEvR0ZsK0lRMWZ2L1hvTFVuYlUvUm41YzBaL2lNNmY0eFpsTjY5UDRGQWE5YlZ0Szc4elNhUzQ1Y0JSa0RMUVA4UmkySStBd1dnNDZ0MkFlYklGbmV2NnFsOTZXUjdGdVRvT2dXZmhRYWxkQm94K1ZRd2hiejhzZFRreXU1dHNNUkJhampOOTRZVm1pWVZYUU1WM21DS0RkZmRUUkoyK0NaemM5bUdnNS90MEVQTExkL3hSakVWRFVMSkk3Tk9IaUpzUVUvOGVpSWtIVXovSWtEWVJ6OG15Q2pPZTYyL3U1NXVOVW5nd0t4djZkcGQxK0dMMmtndUFnSUNBZ05BMnNEM01rMXFVdzQ4ZEs0RFVHM0xnMUxJaXZ2ZWpZRzdxSkdnL0RaajRQYVM2NUtudDlIRUwxQWgxOURtcnNKOUJZUnNHMU1lZzJ5VVdnYUM2WUJWczJQRFM5Qy9lY3ZTR3lEd2hnTllpaE5KQ2Y5QSswK2RncE5DRHE4b1lpZVFUc0NCa25QWm9zd3ZyOVZZYUFKMmQ3MUFSendCand4MkxUd01JY3hHbXZhRG1rMjNUWlJwd2VOc2MvSW13d3ZuZS9jQWZ5OW82bEY1RDhBYXNGZDF3MEpjY3BjanJ2ak8rUDA1OTFoZ0syUGFjL2UzNXAyRXlCVXdBU1QxczIvcG1XREM1WnZlNnNUUHNMY0hRLzFQbWJBSkdsdkc5MmFaMXdvdXhHQTFYMk5BTTI0NmVxdWV4aEdKQ0lwanAzbERDMUtaajVqNDA1Vy8vSUtMcE5MbHIrQWp3dVorOFYwV2FUbnBtOURHQ0p5MnRiTEN2MXFMRTVibU1WSDNRSTRMWnVsNnpOL3NrcXhuY2xIVVhTQVkwaloyczM2TW1WdkhHcEVqejRGL2x6b1N2cmZYTkUva2VmTGltWXFMblpXMVMrTnZZaFJDRVcvc1pSSFFDdTd2R0NxVnIyT2pUNlZQRDcwQ0F1U3RTN3dDUCtCVnNYTDFvWExYQ2puWnhMVHRFdVlSdmFtZGY3Qk0wWUkvcjE1UU9XRm9VNktpY2J6V3h3Rkh0ZUprUmEwT1N0Z3VEVHRPaEx0b05wRXkrcjlPZUdOZFpZRjJpS0kyc2l6MkxBcjBkaDg3ZlMzWmFraHRYR2hhOFhPdXBFRjdraFkwNDdndkNLcG9QMTVpTDA4YWo5TFRVVzcwRDZjZ002aW1Qa3R6TnVrajRlZzlxdWJ0WHByYms4cnNVcWJVdEFUaUJFdUQ0ZkZndGlXYTBTWXYxdCtKS2tCcE5BYzNSNGhyckJCTXArclJXa1FZVitiVWNhZEU1Y2h5SXM5c2pGd0tkL3drMVliMXk3SVpWaFpaNWJUekN5WnJBT0U2OWhRNVpxQWg2eTFCRnE3T0VVUzM3cEdoeGJyeVpkWHJ4VlhKaE03YU5LZThOZ2JHRnNNUGIxS3QxUDcrMzlUYXN0cTJXTUxDVXdwM0ovdyt2VGVoTjlHRWkzZHdsb3U2Sm16bEd3U2Jxb0YzaWRDZ0RGQjVGdy9GRWhEVHZjdCtIYS9Bc1pwN01WR01HYVRwWDRQOVJQR3d3OXlyQU15UDl3NHhybGdhaVpzeEFnM1h4WkxZNFUwS25sMTFaY0ZpOHV2SUIvaHJtT1VVM0JjblZZTUthbHJYTnFvVFk4eEE4aWJNV09LV1NlVHk5M1dNUmRHSm1mOHNUL2RSaXdxSWQ0TzJkWGdlb3grRkJpS21NY1lrWTlDSjZYazNiMGprUXZDRkM3N2UwNEhkRUFIZXlSQVQwQXZiNVhGSE5IdkF3VjlFQ2tWRTdzUFd2Vk9RNzNZUGxrWkIyTVFXWlVzOE8yS2VjNFJQMjY2dFArcTB4WWFGNWdtYWxuVUd1MEhwNEZYSEdjaGRWQnpaajRRYms4eVpFZWtDMHlucENSUDhJTWFxQ1RXWmVscDBtL3BHQlpwSE93MkR0N1lmNkRidUl6M2pXQ2VibU1lMG4yZHRyeDV5L3pDbEwvQUlQZXd2Q2RFd0doQ1IvK0VCdUtCaG1PeEUzcDJuRUdkbHhhVHNFRGNUNzhDQkN2RkFhOGZUL0owOStLZEZib0k4ZGpWemd5bi8reWNpdGlrNVo2a3hDVk9TNmk3dm0ydGFZaFd3bDVNSUZNdWlYSjh0ZHFyWU9pNlB0NWVkeWI0UStzbkJZOWJpMVRLQ3hVTHpoa1YrdFRhZ3VwYXFaUmpTUmk0ZHJTLzIyczdjM2xJNWcrNktoVCtvRy9YZStBQ1VwMHFZNFVSWUVNdnB6bFhMS2VnSjk2N0lDaGdXOUVaNW5paC9wUU1Xa2xaVmNLM1FOcWlCeEVmUThiS0FMcUtpVTEyZTBUeXY3QTRKMGlnL1NTcWJkZFNHVjNZQ0FnUEQ2d0FDZlVPTmNzNTJSTXdmWkRmSlhyTnFkdXlxKzMrV0d3TEhhSDRkYVczZGRYNFBXdTBSOVhCNnRmQyt6N3pHQmRVVnRjN0Q2eTlXWldaVVpvTzVnTDNoS2p0Z2xDTmZKVTlUSWZiUjRaYVQzR282MXNyQStvL3o5VG42Y2N5TCtKYnV4cmQyMFIvODJ1aEloZlB4M2lMYmlxTWNWbEVIY3lkblRxZ01BaDhhWHlhYlo0YVZ5d29WTXRvaWVMbHd2SElxRzh2Z2ZUT3VaUyt6TEZxdkhuMXd2L28xbTJhZk9hNFdJSHN6TEVEMG02Q3YwWXJ6S1VEZkhUT2pYNFczWjR0cWVzYUJ1c3d4NzQ4d3V6WWxoYWxjWlRiVXAyampBK1dVdThzMmRnREpuNFVXOXhsVnczVEQrTmNxTno4VWpzVXRneGtyTWNESXFEblVtOUNUSGFid2tkdzVadk9lb0d2VzFhaGhqRXBSN1l3K1dzS2tUOFhNUmNjWnA0MXAzMERDcFlCUWxjUkNJWVlJOEtYYjdXU2V5UUdhZVhrVGk1eW1OUlo3aXRueWZ0T0MzYkhxNkNCVHFTT2podEpCSkw2YncyTDVUSUc3WmxNZEhlR21VSkkvQUc1bENBb2hOVTA5bjkvRWFydEhoRWRGcnlKWUZ0anVOZVYrWEkxRnhBNzVIcXQxMTkxbzR6WC9OMkVZRFAwMGVENVBNSGVTREtEc3NlVDVqTWFrK0h3bVl2aTFaTENBTWd3WnNGNGRTOGFmVEk3QkZIc3ViQThlWXFDcWtEMVZtYXlwMy9FcWJBR1ozTkt0d1d2ajRMREZQaWwwSTM1dkllaE9wcHMyanlGc1ZrOE1RZVkydGg3WkxaWGVRczJkWkFsM3M2OU5kYW1CSUZaM2xQa0VIcU1vOG15b2xMSlBuY2xYRWU2SW9Wc0Q1eHpnNTNtamY2WEd2MEswYW8zbHFSMDRpanlkVWxhOXQzTGZ5VkdtZmhqTlJ1aGY1UWhrTDMyU3IrbFRpdXdib2xyeWdWejNxb3lSSDczMXE1OHFhNWZxS2lYNGRPNVpkVXcvMU4xTFA4MkFBSUwrYTZ0ZW84QUUwRFU3RTBZd1JoTDZ1RVp4dlZ2TWNySzNaaTArMDJCL3JDdUc3dFlDMTJtSUxWRGVVOVFtSlpubVJvYnpjVllZNWdPS0o2UkZyRWZkc3ZoRFg0bWdKd3g1ZStncEIyQTFCRlZYQlZRbHJ2M3RyNXIvQjZFdXozWXNpSEVOdEhvRTVoOWhHUkFDeDdzQXZxdHBJanpBeVllOWx3cFRJM3dEb0tiNlNxby93YlRJTnBTcmsvMmZVd0hBVHo3cEZTU0hGVzRUNWRodFNad2tKVzZIRG4zNkNMMjVJYXdvTFlHaks0SHE2emwxUzlGRml5a05PcmJXZXVlM1NldFJOZm5Ka2wvcDJIT0NUdUR2Tml0eFZMNWtYeitzNEttSWVPMnpHMi9DSFVWT0VCSVV1d2JadklYTUJvT1VvQlc1VldRUXJYVWY5MVFjUXBDNnhyVTYwT2h2YlBQb3JOenovYmp0bWtRMDgwN1Bxa2N3K1plVUpWZG16V0RUaVNwMlhPOURLNHA1dXphQkc0VGFmM0haNlkvd2UyT3ZmR0R3N0FyUVdXRzVTcDNFK2NnaElaclkzYjlXUDRsYmNFQjc4YXNaUlpyZVlzanFDTFRzNktxZDlCS2RJOS9EaThuUTZ0OU0waitlZVRTYmQ0OEpJNitjOXhpTFBOM0l2YWVMcTZJMTF0VzFBQzVFVXNNdjVqSjZxckhkV3pIcm9FQm1qZHZnUGhWSDRPNkhBWExNYkttQWxjbGMvNTdOaC9KdVFNa3JOSTR4N2VuZ2RRZDZGK1NCNE5PaXAzMmlkcVl4b1U2ajdNQ3BFd2lzZ1VYeFQzUUVFNktFTmlVQVlmalhHZFhuejg2aUlkaXdjRmJIMDRCWjA1VW1XUThJWmNoRHdvU2d3TFcxemw4dEFjV0s0bHdaN2RLMURQdlpvRmZyYmJpcUFJNHoyelhZM090WjVsbmRHeTRybGFOVW0xYmFIYk00SDJ1cnBucmY3UWUwSUZnTDltZ29sK0xHZ1Y4eUZkSjlJUnF1eVBmZ2h4NDNuWEtNaE5VdGlEYzY3aGp0WGhvWlo0eldNNGtLRER1VGdxZjJFUTJKd1ZZeHhxTGtoblZOQ3JUR2dqV2hkVnZkQUgyVmZSN2FOWUhhSTVtQkQ4WVlGdW5hRkVicXRmc3BVdVZmYnZsd3QxNDd5Rm5QQWthdGF5dTJqVGczMFJOYlRkVk4rSVZsTDBmUjdKYkhRQWxKc1VIRCtzSHNyaVYvOHYxc1ZTR3NwN2VUbnVFOVZEZHVYeWdFZlduOUh5VmVGZDQ0OTIwRjNqY21kbVNkWkxLOG96OVBEaExsaFpHTjZFandQZlhQV20wMHc3UmtYTkp1YWJML3VrTHNqOXQ1eFBnOW00SXFaSjEyOVJDWExXQWo2eGFDcjR3dy9TdVp3SFQxamp3WnV6SGRVSWJOdHZGeGxVcU5KRzlmTG80a0JiN1psaElsdThKWTYyQXl4dm1HOUk5VDFiRjJCNVFiKzBKcCsxT0lxUlpGUi9KU3hYaGhjTnlqUUZXcTBlU2VMcjJrMEN3K3FSbnpyRkxkM1RFaVhBeW1vanMwcldiWDFGamtqeHpjQ1pvMjVCWmUrZ1NySU5yLzZ5RXdIQ0R0NFE1ZUFZV0ZGN0dVOGV3V3pZRWhsYXFaRVN1QjE1V29CSWtiZnRsQkFvRjY5K2pWYTZscjg0SEc3MmZNci90UnBIS2pkcnhBcGlPOWFuejZ0eFVVR3Z2dEFGQ1hTb0dpOVhpQmxsTE5zVDZ3QnhDR2xacmswQ2kwbnh3WE53enh4VTZsdTRlMU5UbmdBd09GeWZ4WWtNYldFR0srbksrelVCM08zVXd2eW9YUmJYVzZqVTE4VXMraHRrQjdGbE12UkN6WTh4WUYyU21pV0xZSEY4MWt5WnBWUWdCOEwvTENXeTE3OTRBV0N6NFNmeDAyRWw0dFdNY3lYUHVPMml4MUZmK3JjYzhTRXAwZE1PcDVaSHVzMExYNDQ1TzFBSjlCalNBSzdDS3ZpVVpjMllGaFJhVmIxNkp4Kzd4ZnJwWkRvWmtLMmZkTTJuOW5IanRBa3Rad3VCQmo4cEw4Z2dlM05GYmJkUzUzMjhXcGVGT1VpWEJoSjY0YjIvd3BCRmVseGJrc3RGZHBuOFE3aGdoTzZkQ1dheEl0TDVBbjVKTThFQXZINE9WYnViZVNjVkhjNEhwaldpc3lqYWgxYi95dS9TTTQyMUFuQXdRYVM1R2VSeWFTbENDb3pJSUJyMWVZYTNyU1phVG4rOHdsVUlMSGVtMzlrWjhSTnE5Mi9ESnN4ZDhsRVp6V1ArT2tuOUNUZysyYnpCQUF4azJ0YlNHbHJidnE0R0tNK2tqT2hUaUhqb3JFSFcxdFlMOUFyNEZUUnlCdmFHUjJJRmZveWt6RzVHNENlckZjYVRrUC9nekh2Y0FUek45eFN0ZjZBQXZNYTdzVUlSaTFPNEE3MzZRM205TlNockxpalQ5SVlZTUd2WmRCa0hPTWRXUlN3R29Rb1lZWHdHTnhGOEx5MzcxYXhEZml2VjJFeXhHK25SUkwrTFQxR0xRVjV5bzJsZU94MVM2Mnd5SHFTREJQMWtwY1ZBd2lQVWY3NWtyQktsbnRHUjhpOVppaDZnZmJiYzBSOTBQOFd2MjQrTHpybWRwVDI3M2REZVVoMm9IZXBmbnBmQjZrOTY5OXJUdlFJYkpTTkh0MEVTd1BBLzRDWVhVK3M2T2p1YkJoeXh4aDhIZzd4SWk4eXk3MDN1bVRPQjM2Szg5Vmd6U1N4VmM5bVJKNTAzQUF2TXVJcEhieThkUEJtYzRzT1BaeTVPRDVYeHhndkxvakN4SFdBb2l0NXE0Y3l0YXlaMGR1RGgranBiRExOWkxNSEovRTNxbDhEZ0Z5QkV6dEowdFN1VldYRVllMmdhcS9iQWpvQ3ViZzZDYXY0UkQvM1FNbGQ5SkozUzNGWVRaZnRmRmgyT2RpU0UrdlN3NUhMVXlpa2owU1RGT1k4V0pWVElGcWRhd29OV0lIWlVJTVYydTBXc3FSVjdOWXN5U20vL2tXMThsbXJuN01JcldrTFNZcngxMTUzU2hRQXZMT1VycHJMdlVOWTZiamh0MWM4M3pNY2JZOGE5ZEcwVHpYVkdheGFrODhFcWdXT0w1aVFuMDhnYVNPbks5aW5sZFJDMEw5YktxTUhnbStqcHpOYkxScHRMTFlqcWptaVprbkF0VHlpeXFZSHVHeDJvWkVmMFF5dnVWTXNyNEpHYndaS1ZnUWFEekFhdnhlVzczRmY0YzRDQ3RtbjA5MDBJb1JmT3p2N1FlSjBHaGpVejFvWFM5YTV3WXJaM3dvOE1jTzZKYXNLQkZsQ3VKREVwTnFRbGNucG1ucEphaFpEZ28yOXdTa29CTHVVUGtEVkpnNUdGdGdqTHgwTGZKWFBjM05RcnEzMVlmUzFKTW9tMm5XTUtOVTRoQk9XR3FKTlhycXNGRnZpU01yZlBDYmlLa0Q2VEpZVVNvWkRGU25hZTNXVTkyRzU3YkZIa3lab1R4dU5DZ2M2QmxKUXZjMVRnMXVWZU8xNUdHWUpDYTBVUHdtd0hsWlVhbWNUaHB3VUJmOEd5WWJwVVEwbllWSWdQWnUvMThxc1RVNUxjR0pCZVJXYlVmQkRhSTZ2OW8ydG5GS1VsSWNudmcrT0U1aTkzV3o1cDdlbzVtSW1KK0VvK0Zwa3RNM29xRVg4SmpvVXFYS2h1MktHRStzaHdzeWQ4TDUxZjlCMWtPaTB4bnJLWGpYZ1Q3eXp4ZWpUa3EvRlUrNnhNTHdMVFZ2cnluaEFnZTl0SDFkejl2RmR6MUoxWUkxT1JaWFVSOS9COHJJV1R2YS9IZ0hOVzJwdkc2cElEUDBNRFdCaVcvaWg0enRpZXFJZ3hTdGZHRS84c3FPcWNwakxlSVZNY1FXSkgrY2c0WXhZTVc5czRST0xOWTdudUx0Tk5FWnZ3dmhwNWZQa3dWeXhmVEsvdGExaU9KYS9DWmxCRWZEMVA1VjAwc3dhTmVEb3M0WFlDUURGdlMxZHJiM3ZaUjVBbjh1NEt2Rkg2S0MzbFhDaGRTR1M5dXdnVWk4U1ZjM01WT2ZiWUY4eTdsa25JdmF2d09DVDc1Q1V3L0RtVDlwRVFGS0RiUDFtTmVvc1kzeG40UnZRRThsengvenp3aDl2RVVwQkcwS004Y1VVVCtkcTljV09jN0FWcWtSb01qSUpxc3ZOazcwSVFtczFOb1c0d1l6NEl6bndOdG5URkRaK0dLNTFHMURuSHV0RFlyMWsyekxUYmNlNWtWampNSWd5TVdLdExCYzYxYnR3NHJwWlN3ZlFWcUs5KzFBU0tWNlpES2w5VHpCNjYvemhOdWZ0R3g0TmtWUUN6T2RsUG5XSkNVeHpGVVMrM0tkdmFDVDBBVU1BVkZjTzBCMmRJZThrL1U5SHJJQ2VBamM0Ym9sM1VrSlhuUU40RnJGbjd3NnZyek1HTmMxOUc4Y1hCaGZCNEprSXYzR3A1cGdSWnp1K3VsTDlzdGxHNW5PdmVMU3dOT0puQ2Qwc2JwM2U3UUJTVzZRUXdJNzNFNlhleGV1YW9oSktkMGxiNlRSTGYzRndvN3Rtbzg2SVgraHpwV0NBZHZXby9wNE5NMW9YeHVScnRySDB6VFRObDdxZVAzbHVIemk4c1Y3aCttRE5hZ3B1WGdORGdIb2d3NktHYlVqV2t1QTRBbEpycENIL1dqRUZDUnpqbzV3cG40a0ttWmlJT3dWNG0wMmZDWkgzYmlWQ2pvRXNjNW0zNzZXRmZHNDhNZTRGT0tObEk4K3puV1AybFMzQlV6NGhsa3RRMmk2dTZVL05ocGtEYzNzSml1dlZBaGRZL3QvSTJPQmJhS1pXcmNXQkswVmRaMDVSeHFJTDRnVGR0NEJUeTZIZXgwUFh0VUcwNXBHN0R2aXhyc3IxQmgybUlsTDgyRkxySlR4cy9EUyt6SC9lMTVnYTlCNzVYblljbTZMV0lLV2J2L3pXVnh3ckt2OG54RUpGcGJIeExYRTJNdWN0NE1IbEdRWExoSXNlT0kvN09IS0ZmSEpKcHQ5bU5nMW0vWUFXd0Rsb2lHeGxReXI3V1F5QlIwZmM2WDhuc01pV0N1bVN1ZDhzV0MrdVl1cVdkSkhNY3g2emdJY1drS0ZjazNtVk04YUkvS1FORnljTkVadElpZkhVV3Z3YVAwM1FRQlZuR1NOd2drQUZCRUV2VVd1RXZSSlFKd0Ewc0pBMWhHR1pGUTlLRUpYQk5yVkFHeHBhS0pqVW5WWFhLSVZIZDE0M3dBRCtSUXdPcGJablR0Y3Z3aFRjQW1XMVlQbkM4Z2NtczBpaXhCbGJFRGxOTEYwNjFlbjdFR25qZnZKR0hrbUtqTy9EZERPa056M0FzMFVTa3AvSGw0eGhYcnNNR01sbCtJZmZINXpvdHA2REpyUVlRS0o3WlZueEN4TkJrS05nTVl5NVVJbTk4b1JrT3VLWnIveEhKNDVXTHF0bTlqSGNsOEZFa1JtUHFXeS9wbS94TTMzU3E0WXJ2NXZ4bHFzM3dYNThDV0FLeFZiS3d6V2RQdUZHdnJvMHNQZjY1dDBzUms4OFlUWXU5REdENlZmOU0rTllVVnB5aHR5bTBKN3cxSDA3SmJLWjZpZ1R3Wi9EdUR2MHNNdlp2SXFiVTFFenE4Nm1Pazk1dXh4U3hsMlRHQkxwc0M3N0NrMzdZZlBoVjlYL2NCQy9uRXdNdGRlTUlmdmRCYWNBRzY3ZXFuOUIwSmR1NjRjank4WFNkRzFIS1J1ajRqaVhJbFRaa29rZnZZdmdBaEdvRnlMR3J1SWZIdjBEbVhHVXY1bnd1NURnbTBKS1RQNnVVaU0waVFlRmZxblNFK2pHNVBNUjNjOGx1TElwM2FidmRsM0F5eSt5QkVYaW5VVUZUWXE0WHk5Q0dBNTY1M1R5MG4rL3RXQ0xwcG1qQmdIdmFBWXpDb09yRGxCMnIxZUVzQnljanhvbzU2KzVZR0RPTjczQ0tYUWQ1Y3J0VGo3VWJnczFxZ25kTjlleFVXYXJWMGlpcUxzMEJjdUpsT3FDL1J4bVJRV3VLTWgwWjJPYVBodU1MY0hWdVRXc2ZDNXRQS0tnUjVKeHY4WDRKQTI2b3FqR1VhMjJ3QUg4a0JhTEhhUW1Hd1JwZDVQWDUvaFpXRGVqb01JcVdBckRDL1I5c1hFU09nVkRHcUdKR2NvbnlSZFh6Tm9ZZW9FY2FFU1BwRU5kRVI4TWY5ZGNVVmNGNXlEYWNtbEtUZ1VSeXEzbUticGowSmNEYWdtM2d0YmtHV24xbWhkeXI5VnF6WEZxOWJHQnVQTThKdDU2RDQ5K1RGbkNjWXBGR2pUdXllRG9iWXdyRElsNzBqZ29YQkVybVJyMDB1aVNrS1JyZDV3UVJTUTBodW9EOG1BWTBuL09kYjVGQ3FpamI3ZXI4MGdKWGo4eUE4OWltUDVFaWlWRzhEcTA2MzhhM1lIbkttT0hxVkkwUFduSzBhaFZTNWRjRy9TSWlPdE1KOWNvWms5Z2N6aC9ZcVplZGQ3SjFHaThReUlaamRMYXRyZUFRSmFmcnQyOEFWbkppQjlNTWFZYVlReGE4N29GS3BIL1Mya2RxWktBV1dnTzFNNGlnT0VoamkwTXROV1Y3QzZvbkNMcG1scEpzb3lDdWpJSUplcnVaQ0JPYUt6ZDg4dHBHZlE0Ukx4YWZTc2lMUmplQjF2czlPaTBqcXo4TGpEejd1eGJTSTlITEF3NTFEMUhCVVg3ZFpQT1JCU1A4N0NwT25MWmVnZXpUK0E4RjlIY0R4TGNkbkVSWElTVGxmNWdLZVVsRWtSMFBPVkF6ZThWWEFOS005ZVI3dTlzTXpiMDYxOWNPWTFPMlo1S1hBbjN5NHJKbkkzeWZwMDY4bWRKeEx4SzRaUDZFMWpJMnlCTnZhUVhPUlVrUDF3Q3lvM2xqZWIzZllON3g1MC9qZjBZNjE3dWlEaUJVUjMyeTBOMUFvQXJBZG13eENxeUxsTXh1enhhdVNYc0txcWNJL2xYdGxkRGlnZVhtd0dDeGNhZHZMYklUNkdwT1B3T1FLMXEwTE52REFsK0Y0dXp2bU8zSEUyYjExQ0RpLzRmazVCMUM0VG9DYUhyQm1SblVwb3hCdE9jSG9IUkpzejJrTmdNdit6MUhHVTk4RWYyL1VvaW5UOGtSbGJEU2Z5ZS9BUHJJVllsM2JXOUZ6R3B2TmJZSlFCVjk5ZnNLdUhKN2VlVkhpSDlyMUdkRSt2L2lqZHhZdCt4cWpBRElRTDVyQUFNTjk3alQ3WnpWcGQrNk9rZTY1NjZITjRnT3JnY1d4eU5SWFBMTGhMREp4eVZnVTNqMGU1Ymh1V2ZiYVJJbDhXb29VblBrZmxaeXFNL1hzR04xUktnalp6NEphdHluYnZ1UG9kc0Y3QjNDdXJ5eEhORk1WUDBiTVpHblIrczFEdEpwS1I3cHNQd0wvOS81OEVTa2hjVzhqbjZzNzVleTdudU5NZ3MwREVjTW9NOElIdFdaN0lLdC9TZjRvU2FWZDJwRGh5bXVYM3VBOGVSMzlRWmw0cDE3RHNxRTVpZGF2REFPd0tRK1JoeGQzaG5PWFYwS3dkVmxtdnUyR1RiYTR5WkZGTmJtOTZxdkFwaXlVT2xiZjRHRmM1a1Y0cmxJUUQxWFdFNXRkTDhSbmFwYjhuTGRZUm1YMnFZcysvdnZxK3ordkE2TW9YL0NXcDJPOGhzeXlTMUZ0eWk5WFpSNTNZdDVaNzlsMUVOcE9pYkxrTUtuMG5VR004NlZHNEYyNHNOVDhvNVJ6bWxRUXFGbEU5cjlZVUV6TmpjeGtYZE5acVc1QnJYMXN3dkdOd3JyenI5VC9CTE9CMytPRklEa0VVcW5mdWM0OCtBNVNhbG1WSHZjejJEeURMZmVydGRseFYrdnBRMEFlclRBemNDL0w0N0tqQTFIOGc1MlhMMDF2VSsxcGNpWm1DWW1aeWdtS0hLUGlmK0ZBalhUd0hBL1A1YnJ3dys5TDhJK1RYVTR4S2s2WXg1QTZYSG9mV1RTWnZGLzJ4R1Njd1lTMU9ra1Q5NmN0bzJzMHZOVXBhK1dsV0YvYXc4SmVETUNtVG5WdVZBbWZjb1FhNE9Ob3R4b3U2Mm5OZUVpZGZPZ2dSaExQK0J4YmRUN20wM3JYNWgvMStvRHlSWHIveG9LNVMrc0NPKzlSVVZtZy9WMDRBWjlQY2pRM3NUVHBwSWpPVUJZVkdzNTR4Sm9jN0oyU2Q2c1JSenJnOXBtcU1VbTNLbXZJZ3VudGpFME5hUzhheXFzVjZBTnFyUk9iSUZsYjdMWlBHL3ZnU2s0RVFsdDlwMS9pUVRhMzIxQnNQQ0xqNEdxa1psbkQyczZxNXlRMDNyNTF6YWlWSXhMQTJ3SzRXb1V6UHh5VjNxVlpYZVkxdGxLNDNlRWIwTDNpb1VvYUhPY1dFWTJqeVZhVFBGUWttK3NWQzgydCt3N1p6bzdYQmhvN1daWnBOV2cxU3pXeWRBampySDZiQkNHcmgzMlZzL1hrVjVNK2w2aUhSZDNVc2JwZ2JlZGtQczJPOWtLVU44RTJyWW1yRCsrdWRTRm1PbEt2UXMwY1pPVmw4cUNkQWVpbzNGOTc1U3BLNWdlYmhKdlFYekVLdW1iNWYxazU0K3VGQkRmbXZBdUo1dk1rOWxQR1o0bCtpdVN2SmZ1OWZmUGovOExqejJIWmxxMkU5ajdJc3NIZHVNZ0cxaU4zelBwbjFVMmxmV0J2Q2g4SFVxUC9od1p0eW92bjFRL2J3bnY0UHBQTmdOVThMTWY0azAvYUtGbHBEN3hKdDc1NU1rckZ6ejZOVUpnZzAyOFpUbW44bzZWN2xRdCtGY01vRVJCKy9VNkcrQllWV0RCVk96bzFTV2h1b25ZNXA3NEdlamc2Wjg1NXlMQ1NpNFRzMy9QbmlYb1plV0VzN095RWdwWXEyckdISjRqNmY3NEM4Q3BnRWp0UVVyUnA1YnVQYTRpTlFRYU80TFZSbmY0ZGlWYnhQZ3BtcUJHNEtCdFQvbHY1OUVJKzZ6YmM1RWZKQ3ZiK05GcmJ1bm5LNy9RKzJhOWpIK0ZKbmxUdEw3QzR4Q1BWY2k2MFlwOXFTZ1ZNVytGdTNsL2JnVGsxN1FKNVg2TGFOM1ZtanVKTnFlTlBTcS9oMHlScEJvRC9mSDFpRnI3cHpYQmNtVFIza0kzcy9ER0tpNU9YVVNKY05TaEhQaUpHYUYwQ0swR2RRenhHb2pvK3A3S0F3NE1xdDRHKzUvK2FjNDZXbG1xcmRtaXB4azRwbGRieW5FeHQ1alRpWmM4SjdvOHUrN1RUSUhib3k1VFhrS05ReVhsWjR4YlUxbGpjNDVTd1FQOWx4UDhrYmE2cEhCVVY2OU52UTE2RjNoWkZ4Sm5XV1duSU8vSDV3MWYxRTNEeGdqRkY4bStKVjg1Z2VQNmdJaWFBWFJuUkViSlZHTFo0ZmdxREdWR3hsRVl3SkxGQTh1eXVjbjJOVXZWdjFLdWZMb080SVdVZFNGSThQeXhYWi9yd053TlQrTkp2TWhBak9YL2taRFF6MEZlVFpZb0IxT1dOdkRXSTF4S3pBSnFSbEZLcHNRYWk1UWYvUlRFN0h6RTVPM3VEc2FxV1FVSks5VnF1MlBPaFZxVVVBZW1SNE1zMEcrc3M5OTI3NnNOM2tJenk1WHQxUC9lMHpkZDY5RHZuNVpVVHNkMmdlNEM4V3BWSGVEQ081N3A2YnJHNUlNNVF5RkVOUnpVeExrWFBoNHhlRjdIWFdCVmdiVzBVWmtvY0U3QzVuNE9hdXlBS0F4RW5IT2hRUU9oZkpJWDVMOXlEYlFNM0g2bnlGNVg0VDhpenRPdVpJZnc0M1kwaFJrRmx0SU56QmFWZW1Fc21lQnJMQWhERWV1cHZieEhZLzFONWVKWjJ4VGZ2TWJSbFY2SCtBWHhJRE9PaytkdVU0THFXMlUvbUpHTFVueTNyQUdOQTRpUE81OVVuVkxaa2p5QWNLTkJQS3hwVVRqcW9nUGxPWEE3OUI2dzBpN1pTTnFkcEp2anB5VXN5eXY1ZThacWR5UkpReVpEWmdtbVdGenJ2bGZMTDlzVHIvWWs1NnhiZ1lscUlIQ21PUlBJN0hyT1FwbnB1bE94RktEWmZWR3VSd09OYzFlYVNQU01wTVNCd0hnU2k5b2dMTG0xQkMxb0NXQVRyVmM5WStCM3pKdGN4cncvQkVNM1dXcU5jWUlySXFOSnEzbktwYS9lL2JidXFPWU5CMG9YRUNqK1loQ09XcjNFRlJFUndBbm9qZXh6K3JhcjlQZXVDYWw5eUF6dUt2akZteEEwQWZnRlF6QUNHZktHNktzelVDUE41SWEvZTdvcCtVVFF0UFZWVkJBSDBOdnpyYTBKR04rUzROcHpnY2tHMWlCcXc0TXdTbllId2ljSm5ZTkxmcVZzRjI5czMycStXZmx3MFp1c3RtNTdOTXFBV0Foa0hXS2lwZzdWdzlZRTlQUnAzcVk2MlNNSkRaWFlWeVFPS0FSV3ZpNDB5M0h1UWVlRmVDUlpQbFpOSW96TjA2M1N0K1VGdEpwWDhNbWZ1c2pQeFA2MW1BaXQvWlpCVFIrRjBNWXVtSnBHZTRFQ1lxZDFPYVh1RjlTR0Z2MVQ4M24ydEdGVE93MHBxM0xQbFNHQ1V1WHRCMTFnWG41WFdFOUdiQWRVT3NRMFhPR1NhUVgwaVZjRmRmR3VsQmFlRVIzUS9oMDNGVHZudENjWmNoVXNNd0dkenFjTXJGRWUzQk9wVm9jS24yM3FsQjFKamdmUEQ4djRiMGZUS1NzTGIxaldnZ3oxWW9BeHpPVk5DWTNhWVhBWEdLbmJiVDhYZkZFWmNDSkVCblpmb0lOSVZ2SHdxdmV6eTBJdGJ5OURoSkErRHFzYTVDc0IvTnVZem9Yanl2WjR0Q0N2UERtYkxPNy9BdU9HRUpVUlBzenMrcWxzcFlBY29pejB5eVV0U0VrRkxOYmRyT3IxenhhRGMvWkcyMGlPU1hIWW5MT2RUUjBRQVFkaGY5RzBCN293ZHFtam1obmFmUGZJQ2Mxb2RHY3FPYlVaWEszUENqazFoa0hCT1V4WGRVMFBwWjJSTXkxUzhHWmlwLythUmxwRDVsQUxpb251SE85RUNuOVRNbkxVUnVpWGxOK1pJQ1dMMSs2RkthdVlBVlEwNnV3a0pMd1pzYVZKWEdvYUZ4cWhHWm16MjlFQnRaS2dBQURuODdUUkJFTVcwL1RNNStoUTdpbXRHMW1zemFYQ2plTElUQTdJNmZjczRYemVHYlRNd0U1TEVyZC9SUzU0OG9VTHpKZTMwbG4xSndzNitpc3JtdDVKTVpYQWY0QytDUVIxcS9veCtxZG5RcmZtWStBN0hUNjV1Uk5ZeG8zY2FjUFlhZHhuVW1SdWt0cm5pWVl1TFlrMEtoSlFZMDFRVE5LYUJseFRIMFc1NzEyUzJFdEsxc1BVWE5mcGdDcUEyYXIvdU5VMzRHTVVkbGVOZWJZc0QrZ08xbWt3QXpHR2M1RTMwNmlUWjR1elpJWUFEWjJlampnYVRjc00wNmV1K3ViYXZiM3dKME0xbnpKTHczOEMrMWlWQ3NEeXU1d1VaWjZzbzJORG8wVGNQcittbXhLcHVMQ0NvcWJ0d2VQazFQTHFzeHBmeUhCOUlJcGRoVDY2aGFSeC9Fa0NaNXhPWTRMTWdNYVgvWDlnbU9jbnRaY2VZc1REOENZLzBzajJiTnBZdGFYVjZmNzlmd0FKTjNEZ3ErNVUwWDJycW91ZGhneVBXQ0xHZkIwMWJXcDFsbEZLVjY3K2ZaT2p1ampQTXpGeWxjQkZqV21tN3h5WGVvM3U1Mm5ON1UveDcwL1lORTMxNTFOdHM5U1ZvMkgrQS9FTU95NUplcFV2MmhSQnY2TkdlU2ZjdnhtejROeEViU2Zha0xpQmd6Rm5MU0F5TlBkd1BHb0dkTlpyOVN2Z3RWQTY0Nzc1QzRTZW1jYU1aeWZoL0JKbERic29WUnVVUTJyc05JTS9qMWZqQXl4eGZHKzNzbytIL0x3WUNoNDFaV0U3YjM3OExQQlZWV1dMTjVRMzhpeEllL2NZZmxFRjZpM0hRZDUwMVJiVU41S25aVWNTNU5IKytwakxsZkZTMjB6R0R1OG4vOGtsYmQrY2d1UjE5YitjR3ZreWZFRWxEV0c4OWNDRTRDQWdJQ0FnSUNBOEJ1ZEcvQm90dWtmUGY0TkUvQmJhQTFzZlZ6clUrcUFJT0ZNZzB1WGs2Nzc5YUdMS2FTa29DSklsOThjODFJa0tKTWtaZXhUT05KMmJ1REp0d2FjL3ROcmkzd01JUktYdWZ1ZWlVTXIyYXdqbTlIT1VqQmJSaEl4QUtPNnd1K1dWWjZkYWpMNEdIbjNtakFHeTVyZmtienJxeTIvZEx2NTNFYXI5OUpSR2ZYY052YlRyWG1jTDJHZG9WUVZrVnRTTi85UUgwd0ZuWHhOWFBiOXZsc0Q3NXh4UEZxS0xOVi84dHlCWXE2ZzE0R2U5N01XMmZwUmIva2ZRVVpYVStEcmRtS3A0dTZlcENGMUh4UU8ybDVhM3M0N1pnTTV6VkpsckozSWdZY1BBbjZBVkVmOG1zejY1RC9rb1BlQktkbkdZUzBQTkNVcVlJLzhMczNjeGx6cHV4Z1ZPTWh3QnI1cGdId1RqM0JONEIxN0o1NVVXSmdrS0hvK2VsajljZ25DK3lMME9PelYyU0VRSXRPNzF3QklvUWNKVnpmek5JQk5NM2ZLTWdKVUVFWWh0ZHgwWS84dWJpUkJ0OTlWd1A3Mkk1aENSeHZsdjdXOGFwdWJlWnovZXNhV1hTU1VuYXFlK3RTOU5BNnp6YUg3em85YnV2YU4xNDV2c2RoODNPZ0gxNEpkeDNTZjRHRnE0bDMzQUxRS0ZFVmJ0SUdLWVoxVzBLTjN5SFlNNUhIeWp5S2J0RlZLbFNIOVpVQ21QY0hsSmUvVHR6NFF5NmpLaWVEVEFaZXFuSE1HaERSRzV3c0tnWUI3Nmo3K0hhZ1FNZXhPdXB1WFluS0N1OHppd1E4bkd4eFlWWUZUM0N3K0lSdklTMk9SNVNieHNJU1oybHR5NEpuZ1hZQ2hKSXVEKzlIQVNJQ0FnSUNBZ05nZmFMMnRBTC9UR0dOT1IwTkxCU1VUaW14WG41RVRmY1hxc1FnS3BLVHU0OFRRTm12OUx3dUtYTE5XY1RkWnAySmtmRzM3RFRhZE9qa3pUcm9XaU56UFh6Z0VJMXRRbGFkMDFZc1l3b2JRTHVocitTbkg1dFZ3OW9OY2tTRFkzZjZIYzZsZ0VHWTdkeTBxUi9ERVB6V1czQ1RUc2UrdXNqWkdhQnlWMXNtSytwRWlJbWtZeDB1UmtCL2RzcjJtU3Y1MERyN2xmc0QrR211MllNMUlIR20zUDcrTHR0bGRUTDJJNFJ0eG8wcWc3OFdtY2h1NUlBMHpCMFZDWUJucTJ4RDJsOVI2czZOdTZDT2p0YkZDeHVpYXpwWjE3cnpVQjN1TXo3akZRNU1qMzgxRGNaOUtuOHFwRmhIYVdCOXN3ajBHVnA5TDhjN3dJSkZCdDM5bVRET3FoY1luRjZ0Ynd3dEpQMkg0NzV6TllpVCszdUZONncxS2Q1VkhTWHRpc1hFUWdteXN6RkY4K2FuQzF4YzhrNlh2Y0MwV3p1eFVtaTBwS0FaQW1WLzNPcDVpN1JqZFNzZXk5WEZ3M0RrT2pVT2VWMVhoZ2kyYWQzMGtwZTYyZm84ZjFzYWFxRkJZanZLZFM2TDVmUlpFZ2VmdGVvdWJjNXpGOHF2SWFNMExQMS8wSnNoRVdnZzRUQ3RZUW4yZTBGWXFYdDRnSUJvaWtibGQ5anB0VVd4WUxtRXdWMkUrcllmR1FtQ29xNXRVT1lyZjQyM1dac25DTlA5dittcGl6em9kNEdxWEhGMWhoekdGTmg3V2Qyd3lTT0hPYVo0d1VqVjZSNFVGS2wxb3h6Q090ZnVncS9pSzNVNlhiTE9SWnUxL1huVWVHenljdkpheC8yU3plelZiSEtZblpRWVE4QjNCNXF2WmdmOC9rNUNxTTVaUVY4cWRtcENRcWhmUXhhUENKSkJ2Z0Y0OWM1YzEvelBPWHlzaXdhUHBOWXFXSWFiaTFKM3U5ekxHaHhtY29iUnJSOUxTMXNEZnllc2pockVYRmNLUFZmR0RacExhMlpDcmNCTC8yUT09PC9CREI-CiAgICAgICAgPFNCPlpYbEthR0pIWTJsUGFVcFRWWHBKTVU1cFNYTkpibEkxWTBOSk5rbHRjRE5rUTBselNXNW5NVmw1U1RaWGVVcE9VMVZzUmxNemNFUlJNRVkwVkRKa1FtUXdiRU5SVjJSS1VqQkdXVTlGTVcxamFrRXlWRlZGZDFJd1RsUmpWV1JVVTFkSmVsSkdSa1pSYTA0elZsVkdUbE5WWkRCVVZrWjZaREJPVWxkVlVsZFZWa1pJVWxoa1MxTnNVbkZTVms1T1VXdEdTRkZVUmxaU1ZVNUNaREJ3VkUxRldsUldSM1JIVmxaR1ZtUkZTazVWYTJ3elVsVkdXbEpHV2xKVlZXaEZVVmQ0UkZWV1ZURlRSa1pXWlVaQ1ZtRXhWalJVUmxKQ1kydEtibFJzV2tOUlZ6bE9VMnRhVDA1WFNuUlViV3hzVjBaS2MxTlZWbk5rVjBwMFQxUktXbGRHU25kWmFra3haV3RzUjFGdWJHaFhSbkJ2V2tWa1Zsb3hVa2hpU0ZKb1YwWktjMWRyVWtaWmF6RkRZVEJrUWsxV1ZrWlJNMlF6VlRGVmVVOVhNV3RUUjFKdldUSXhWbG94VlhsUFdFNXJWMFpLZDFscVNURmxhekZVWWpOa1RGRldiRVZXYkVaU1VrVlNSRkpzVW14V2VsWnhWMWMxYzAxR2NGUlJhelZwVFRBMWQxa3dUa05TVm5CWlYyNUNXazFzVm01VlZFcFhaVmRTU0dKSE1XaFdNRFZ2V2tWa1ZtUXdhRzlaTURWT1lXdHNNMVJYY0VaT1JURlZVbGhrVGxaR1JYbFdNbWhxVkdzeGNWTllaRTVsYTJ3elZGWlNSbVF3TVZWVlZFcFlZV3RPUTA1RlVrWk5NREZGVmxWa1FrMVdWa1pSV0dRelpGZE9kRlZ0V21GU01WbDVXVlprVDJKR2FEWlRXSEJoWWxack1WUXhVa3RpUlhoWVUxUldUMkpWVmpCVWExSnVaREZzTlUxWGJFNVdNR3cyVkVaU1NtVkZNWEZVV0doT1VrVlZlVmRzVW01T1JURlZVbFY0VGxGWGRFaFJWRVpXVWxWS2IxUlZUbFJXVkZJMFVsZHdRbFZWU201VWJGcERVVmRrVlZFeFZqQlJiRlp5VGxWS1YxSlZXazFWVmxKR1ZUQXhRMUZWWkVKTlZsWkdVVzVvVGxOc1JuUlNibFpoVFd0YWVsbHFUa3RpUlRGVVZWaGtTbG94YkV0VE1qbGhVMWRvTWxrd05VSlZWM1JEVW0xb1YyTldiRmhPVjJocVlsWktkbGRXWXpGUlYwMTZZa2hXV2sxcmJ6RmFSV1JXWkZkR1dFNUlhRWhsYTBaaFVXMWtUMVpyU2tKak1WSkdZa1UxTWxkdE5WTk5NV3haVTIxNFNsSnJOVEpaYTJoWFRVZEdXRTlZVm1wbGExWXdWRlZPZWxJd1JYaFdWVlpFWVVVeGNsWlVUbk5rVm10NVUycFdhMUl4Vm01Vk1XTXhaRmRKZWxkdGFHdFNNbmd5V1cwMVRsb3hWa2xUYmtKcllsVlpkMWRzVGtOVVYwWllUVmhDYTFJeFduSlVWV3hLVVd0c1ZWRlZOVU5hTW5SNFlVZDBjRko2YkROTlJVcENWVlZXUjFGVlJsQlJNRVpTVGtWR1RsTlZiRU5STVVaTVVUQkdVbEY2V21oU2EzUmFaRWRHY0ZGVVNtOU5WWE16V25wS05XVkhiRzlaVm1oR1kwZEtVMUZWTldsVU1VRjRaVWhzVGs1V1JtNWlhM1I1Vm01T2MyRnViR2hTUmtJd1dsWldTazR4VGxsVFEzUnZZak5zYVdORVpGRk5WMk41Vm01bk1GTkdSWHBUUjFseVpHeHdTMVpyTVZoaGVrWk9UbFZHTVdSVmRHeFJWRUpTVFZWa1VVMVZVa3hhYW1zMFVUQndWVTVxYUUxVmJrbHlUa1ZrZEZkVVVYcFdNMEoyV21wc2FsSnJPVXBWVldodVQxZEdjVmRFU21wbGJtdDVZbFpWY2xWdVNuUmtSazV0WXpCS1UxUXdVVEZTUkU0elZVaGtSMVZyY0hOU1YzTTBaRmRTUjJWc1pFMVNSVTUyV2tSV1RGZHFSbGhoZWtZMVZrUmtWVkpWTVROVWJHOHhXbGhLZWs5WGVGbE1NRXBRVDBVMWVXSnFVbTFVYmxJd1ltMTRURmRJVW5SUFdIQkdaRWhDZGxGWVJrbGhhMGt4VFRKR05tSnJjelJPYlRGQ1RqQm5lR1F5T0hoV1Ywa3hVVEE1Y21SdVVrNVpWVWw2VkdwYVZtSnNaR3BOYlU1NFdtMHdjbEp0VlRGTE1VWnhVbGRLVDJGcGRFWlpWa3B3WTFaR1JWbFdiRzFsUm1jd1kyeHNTbHBWTkRWalZteFhWVWMxUzFwcmNGcFJNblJ0VFROV2IxZHVjSFJTUlVweFVXMVpNMU5UT1RGT1NGcEdURE5yZDFKR1RUUlhXRXBRWTBWYWMxRlhaRTVSYTBaQ1VqSndTVlpGUm1sVVZVWXpVakJGZUZaWFVrWmtNVVpIVkZWR1RsRnJSbTFQU0dSRVpERnNSVlpzU1hkVlJVcENWVlZTUWxvd1pFaFVWVVYzVWpCT1ZHTlZaRlJUVjBsNlVrWkdSbEZyVGpOV1ZVWkNUa1ZzUTFGV1JrTlRSa1l3VDBac1YyVnJNVEZVYlRWNFVURkNNR05ZVGpSVFYyY3lWbGhPYUZGNlFuZFVNV1I0VDBkT05rdDZhR3BVYXpGS1ducEtiVlZXUmtaaFYwcFhWVmhLYTFZd2NEWlRTRVpYVVRBeGQxUXdXVFJTUmxaMFRrVk9iVTFZVWxoaVJ6RlBVMnBXY0U5Vk9VZGlSMXAyVERKU2RrMXJhSEppVjBaTVRraGtNbVZ0U2toUFEzUnlZekI0ZVVzeVdUVlZNazV5WkRGR2IxWlZUVEZhYkVKeFpWZHdRbFl6WkZwbFdGWmFUVmhXU21OdFpHMWthekF5WW01Q1JXSkZlSFZWZWxKclpFZE5NMUp1Umt4bFZURjBVMFU0TUUweVJqSlZNMWw0WTJ4b05tTlhlRUpQUkdoU1dWVldhMXBZVlhaV00xWnVWMFZrVFUweWNGWlVibFp6VFcxNFJsVnVaRmROYXpWVFdsVldNVlJyV21sYVJrSkZZa1JXVmxReU5YbFRTR3QzVXpGck5WcFlaSGxrYlVwYVZHMDFSRm93WkRSVVZVWllZMjFhVGxwV1FrOWFXSEJ3VW1zNGRsRnFRbFJpU0VKTlZGWmtSMUpVYkZGWmEwWnJXbFZTY2t3d1VsQmhibWhoVm5wS1RreDZZekZrTTFsMldrZG5lazV0ZEVwaFJrWnJVbXR3TUdOcmNIcGhhM0JFWTFkRk5WUnJNV3RaYm1ob1pXeFdORlF3ZEVsa1IxcDVZVEJ3U0dFeFZUVmxWVXAyVWtac1UySnRSa2RsV0d4NVZtNUdSV05XU1dsWVdEQXVMa05wWDA5MlZWRlFTbUpaVWxWdmNEazJRMUZDYW0xclIwNUtOVTFJTm1zMGFHSlRSV0ZyWVdGVWRGUlFlRFJVVmxjME1qQktXVk5UVEhOU1pUTmlVak5EZW1zeFoyNWlTbXByWTJGRmQyTmlZV3QwVTBSSE5ERlBiemRPTWw5V2VtcFdYMnRYWHpaZlZIcEdNV2g1WkhVMWFESXdlVXBUT0dGVFVtMXpRM2MxTFU0NFEweHhkVVZRUlVsaGNVbHJOMlIyYldKakxYRXpaR3RHTUc4NVRFTmpURlpxT0U5Uk0wbEVVRkUzUkY5Vk9UZEdZVzFvY1ZBdFYyMWhibWhoVVRsMmQzcFhXazFrYUc1Q1RXbFRVRFV4YzNwSGNHOXhlV1JMV0VORVNscHNSMk5LTFdKNWRuQXdNRFZvV0ZKcVdFNDNZMFJRVm5GdmFtcHFaalpmVGpodE5ESjZaRXhrTWtGNlVWaGxTVFJ5ZUhGcFpFNUNSR3BrYjJKaU1tRkZaelJaYVVaUGFuWjZUWFIzY2toSmJsUm5SQzF6VTIxVVNtMVdXazlXYTI5eGNtMTFObUZMUVZkbVZFWjBUMlpXU0hZMlEyRXpkdz09PC9TQj4KICAgICAgICA8b3RoZXJzPgogICAgICAgICAgICA8ZW50cnkga2V5PSJTUEVDX1ZFUlNJT04iPjAuOS41PC9lbnRyeT4KICAgICAgICAgICAgPGVudHJ5IGtleT0iUkVUUklFUyI-MTwvZW50cnk-CiAgICAgICAgICAgIDxlbnRyeSBrZXk9IkZPUkNFX0NBUFRVUkVEIj5mYWxzZTwvZW50cnk-CiAgICAgICAgICAgIDxlbnRyeSBrZXk9IkVYQ0VQVElPTiI-ZmFsc2U8L2VudHJ5PgogICAgICAgICAgICA8ZW50cnkga2V5PSJQQVlMT0FEIj57ImRpZ2l0YWxJZCI6ImV5SmhiR2NpT2lKU1V6STFOaUlzSW5SNWNDSTZJbXAzZENJc0luZzFZeUk2V3lKTlNVbEZTM3BEUTBGNFQyZEJkMGxDUVdkSlIwRllPRTFtY2pBMlRVRXdSME5UY1VkVFNXSXpSRkZGUWtOM1ZVRk5TVWQwVFZGemQwTlJXVVJXVVZGSFJYZEtTbFJxUlZOTlFrRkhRVEZWUlVOQmQwcFRNRVpUVkd0R1ZWRlZkRUpOVWtsM1JVRlpSRlpSVVVoRVFXeERVVlUxU0ZGVmVGQlZhMVY0VEZSQmNrSm5UbFpDUVc5TlNrWk9OV0p0VG1sbFdGSnNTVVZzZFdKdE9USlpXRkp3WWpJMWVrbEdRbmxoV0Zwb1pFZFZaMVJIYkhSaFdGSnNXa1JGWWsxQ2EwZEJNVlZGUTNkM1UxVXlPVzFrU0dSb1kyMVZaMVV5T1hOa1dGSndZakkxZWsxVGIzZExRVmxFVmxGUlJFUkRSbFJsVnpWcVdXNXNNRnBUUWs1aU0wNXdZME5DUlZwWVduQlpNbFZuVVRKV2VXUkhiRzFoVjA1b1pFZFZkMGhvWTA1TmFrbDNUV3BGTkUxVVJYZE5WRkV5VjJoalRrMXFTWGROZWtsM1RWUkZkMDFVVVRKWGFrTkNORVJGTTAxRVZVZEJNVlZGUVhkM2RXTnRVbVphUjFZeVlWZE9iRmg2U1hwYWJWazFUMVJLYkV4WFNUVk9iVVYwVGtSbmQxbDVNV2xOVjBsNlRGUkplRTFxVFhoTlJFVXlXbFJuTkUxVVJVeE5RV3RIUVRGVlJVSm9UVU5UVlRSNFJXcEJVVUpuVGxaQ1FXZFVRMVYwUWxWck5VSldSVVpNVVZSRlUwMUNRVWRCTVZWRlFuaE5TbEZ0Um5WYU1rWnpZak5LYkUxVFVYZEpaMWxLUzI5YVNXaDJZMDVCVVd0Q1JtaFdjVmxYTldoamJWSnZXVmMxUVdNemJIVlpNa28xWkVkVmRXRlhOSGhIZWtGYVFtZE9Wa0pCYzFSRmJFNTJXbTVTTTFsWVNteEpSazUyWWtoV01HRlhPWFZqZWtWMFRVTnpSMEV4VlVWRGFFMXJWVE5zZFZreVNqVmtSMVZuVTFjMWRXSXpXbWhrUjJ4MlltNU5aMVZJU25Ca2JVWXdXbE5DVFdGWE1YQmtSMVpyVFVsSlFrbFVRVTVDWjJ0eGFHdHBSemwzTUVKQlVVVkdRVUZQUTBGUk5FRk5TVWxDUTFGTFEwRlJRelpoUmt0WmRHRnBRVEpvTVVzM1p6SjVlR2xvWVZoRmNHSlNRVTVpVDFBeGVIbE5OVkZuYmt0eVZuTnNhbmxoUkZCMFpWVkpOMU5ZU0N0b2IzbGljRGRRTVdjeVZuZzBTRkV6U0dZcmRscEtWazFYYXpGTk5VRjFkVXRsUVRCUk1VZFFNVVJMWmprNFEwcFVOamhNVW5Jck5FZHRXVFF6VjNCdlpqbGpSazlKVVVobk9XRnFXREpqZW5reWJWVXJVbkp0ZEZObWMwSlNUMFExUkROM1VIZEdVa3BzUldzNGRXUkdlbGRNUkVOdlpEVkxXakZYYXpGNVZEZFVSVTEzVGxvMVpYSnpPV3hZTDBKUE9FNXlialJtVG5SMGJteExXSFJ0T1hwRmRIQnZRWEZJYWtJMU0yRjZia3M0Tm0xQk4wZ3hkMjh4VldJMVEwOXJkblJOWVVJelRqWlZibGRqTW1OeFptMHJSbVUxSzFGcVJXSk9haXRGWVZKcGNWRkVZVmxtZUZnMGNsbEpaVTQ1Y1ZsV1VHNUtaa3BaUTJ0bU0zVm9XbnB0UkVKcVFtWTNTUzkxTkhaRkwza3dSRk00V1hKUGNFWnNRV2ROUWtGQlIycElWRUZpVFVGM1IwRXhWV1JGZDFGR1RVRk5Ra0ZtT0hkRGQxbEVWbEl3VUVKQlVVUkJaMGRIVFVFd1IwTlRjVWRUU1dJelJGRkZRa04zVlVGQk5FbENRVkZDU0ZGME9GbFdlazExVG01eFExQjBjWE40U1dnMlZYTmhRekJ3VDFkeE9HTjZLemhqVGsxSlp6Sm1VVkZGYVdKV1VYSmtWMHA2U0hGV1EwMXdUMFk0UkZWdE5FTm1NWFJYYkcxT1NqVnBPVTlHYkdadkwyUnZNa2hyYldGTE5IZDJlbUpIT0N0cmMweHlLMlk1VTJOcmQxRm9WVU0xWmxCcWVXcEJWM2RaZVhWWk1YVkpjbWRtZGswMmJuQkViRXh1VXpSa2RHTTNSbkZMZVUxdFNFODBNMkYyVTNZeGNsaDZjV3hCT0RoUllVVmtaWFV2VjNWbldFZE1NMnBWVG5Wc01teEZVbmRXTWs1U1pVVjFUa1ppWkZCRWJEVlZUMjV5U0hrd1MxazVaWGR5ZG1KWlRtNURaMGQ0VFVGWGNtWk5aVkJPWlhwcFJrOHZRakJUYkhCTVRWZEdSVGxRWWtGa1pVUnJMMFJQYW5oYVZ6Sk5MemMxZDNZdlpHZ3pObXRKYUZGa1JrcDBja3B6YWtwRGNXRTVUazFrWW5oaGVsVjRUMHRJZEdaeWEwcEhhMVU1ZVVKdlJGbFNibUZHZVhseVZuRkVjVklpWFgwLmV5SnpaWEpwWVd4T2J5STZJak14TVRneU9Ua3hPU0lzSW0xaGEyVWlPaUpNYjJkcGRHVmphQ0lzSW0xdlpHVnNJam9pVjJWaUlFTmhiV1Z5WVNJc0luUjVjR1VpT2lKR1lXTmxJaXdpWkdWMmFXTmxVM1ZpVkhsd1pTSTZJa1oxYkd3Z1ptRmpaU0lzSW1SbGRtbGpaVkJ5YjNacFpHVnlJam9pVTNsdVkySjVkR1VpTENKa1pYWnBZMlZRY205MmFXUmxja2xrSWpvaVUzbHVZMko1ZEdVaUxDSmtZWFJsVkdsdFpTSTZJakl3TWpJdE1ETXRNRE5VTVRNNk1UYzZNemhhSW4wLm9maTlWNVNhNUlyZGlGNVlhdVhPNFRuVm1YcGwwVXlaVTlucGhPQVRINnN5UWZNaTNTdzlKLW41TjViVVM4S3EzTGJodkplaWhFYVdPdm9BVlVaY3dEdldvclNpa195ZXpfQWNzMmdDai1OMnF2dmRPeEoyakFURVFOTU5JOGJ1TTR4b0U5bUE1T08wZEsxdnhKYXRPWC1SSUVuZGhDWnBiU3RLMWJ5VHp6QUJUaDB4dkc1eVRWLWZTMjQ4bDcyR2tOUHJBaV9rdE9PTWs0UF9PRDhzMXZpNTk4eUlWcnZaSV94a3ZwSW0xXzFYaUZvcVNhOXFQR1k0SnVRZkNzYkhRdV9CNWVLRG44TzcxLVFJdkFGMWljRnpuR3YyaVpLaEtLeHZZUDVUYXRwN0RraFlKbjAyMm0yc2l5NlFwTEVoZGZDOFM5TzNwbWpCNnVHdUtpYTA3QSIsImRldmljZUNvZGUiOiIyM2ZmOTkyZS1iOTZhLTQ4MGMtYjFiMy0yMTIzMTAxNmU4ODEiLCJkZXZpY2VTZXJ2aWNlVmVyc2lvbiI6IjEuMC4xIiwiYmlvVHlwZSI6IkZhY2UiLCJwdXJwb3NlIjoiUmVnaXN0cmF0aW9uIiwiZW52IjoiU3RhZ2luZyIsImJpb1ZhbHVlIjoiJmx0O2Jpb1ZhbHVlJmd0OyIsInRyYW5zYWN0aW9uSWQiOiIzM2Y3ZjcwYi1kYzUwLTQ2YmItOGNlNC1jMzMyYmNjMGQ5NDciLCJ0aW1lc3RhbXAiOiIyMDIyLTAzLTAzVDEzOjE3OjQ0WiIsInJlcXVlc3RlZFNjb3JlIjozMCwicXVhbGl0eVNjb3JlIjozMH08L2VudHJ5PgogICAgICAgICAgICA8ZW50cnkga2V5PSJTREtfU0NPUkUiPjAuMDwvZW50cnk-CiAgICAgICAgPC9vdGhlcnM-CiAgICA8L0JJUj4KPC9CSVI-Cg",
+ "province": "[{\"language\":\"eng\",\"value\":\"Kenitra\"}]",
+ "phone": "9000000000",
+ "addressLine1": "[{\"language\":\"eng\",\"value\":\"Add\"}]",
+ "addressLine2": "[{\"language\":\"eng\",\"value\":\"add\"}]",
+ "id": "https://qa-triple-rc2.mosip.net/credentials/9538159029",
+ "vcVer": "VC-V1",
+ "addressLine3": "[{\"language\":\"eng\",\"value\":\"add\"}]",
+ "UIN": "9538159029",
+ "region": "[{\"language\":\"eng\",\"value\":\"Rabat Sale Kenitra\"}]",
+ "email": "chaitu6636@gmail.com"
+ },
+ "id": "https://qa-triple-rc2.mosip.net/credentials/958e3ffd-ceec-40b4-8a9b-3577907c0406",
+ "issuanceDate": "2022-03-21T11:41:35.418Z",
+ "issuer": "https://qa-triple-rc2.mosip.net/mosipvc/controller.json",
+ "proof": {
+ "type": "RsaSignature2018",
+ "created": "2022-03-21T11:41:35Z",
+ "proofPurpose": "assertionMethod",
+ "verificationMethod": "https://qa-triple-rc2.mosip.net/mosipvc/public-key.json",
+ "jws": "eyJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdLCJhbGciOiJQUzI1NiJ9..HW7SGwm6yZdoojA91RJuOcSKuQ6zRNJyLWkpKdEZNbFacm42LYkWROYOUtndgtscn1w3Krv30MjA6Gq69DYYqrCIXcgJVj5NCWEm4yNETdm_4YrxelEVMN8XAa0WTN6Tc3uaE94qWzrDy3dHuz9fqnNQKYxWWyE8pQvCQ6VHVbpM5_u5Kavd-6LkbvLOXzA67833cJ1VN4fdL22_zx2E9INZuLxQBXVQAEmS1646JHWsow3hOA45sGYDm02cklfNrO5hc1MHXBGWiiWA_vfx1M8IPAF5_0qbJOwqDDcZITTSKMgcUQb2r6EcaHVGOlhbvdM67LLDmlXeSQMVS8ENSg"
+ },
+ "type": [
+ "VerifiableCredential",
+ "MOSIPVerifiableCredential"
+ ]
+}
\ No newline at end of file
diff --git a/shared/verifyCredential.ts b/shared/verifyCredential.ts
new file mode 100644
index 00000000..261c2312
--- /dev/null
+++ b/shared/verifyCredential.ts
@@ -0,0 +1,59 @@
+import vcjs from '@digitalcredentials/vc';
+import jsonld from '@digitalcredentials/jsonld';
+import { RsaSignature2018 } from '../lib/jsonld-signatures/suites/rsa2018/RsaSignature2018';
+import { Ed25519Signature2018 } from '../lib/jsonld-signatures/suites/ed255192018/Ed25519Signature2018';
+import { AssertionProofPurpose } from '../lib/jsonld-signatures/purposes/AssertionProofPurpose';
+import { PublicKeyProofPurpose } from '../lib/jsonld-signatures/purposes/PublicKeyProofPurpose';
+import { VerifiableCredential } from '../types/vc';
+
+// FIXME: Ed25519Signature2018 not fully supported yet.
+const ProofType = {
+ ED25519: 'Ed25519Signature2018',
+ RSA: 'RsaSignature2018',
+};
+
+const ProofPurpose = {
+ Assertion: 'assertionMethod',
+ PublicKey: 'publicKey',
+};
+
+export async function verifyCredential(
+ verifiableCredential: VerifiableCredential
+): Promise {
+ let purpose: PublicKeyProofPurpose | AssertionProofPurpose;
+ switch (verifiableCredential.proof.proofPurpose) {
+ case ProofPurpose.PublicKey:
+ purpose = new PublicKeyProofPurpose();
+ break;
+ case ProofPurpose.Assertion:
+ purpose = new AssertionProofPurpose();
+ break;
+ }
+
+ let suite: Ed25519Signature2018 | RsaSignature2018;
+ const suiteOptions = {
+ verificationMethod: verifiableCredential.proof.verificationMethod,
+ date: verifiableCredential.proof.created,
+ };
+ switch (verifiableCredential.proof.type) {
+ case ProofType.ED25519: {
+ suite = new Ed25519Signature2018(suiteOptions);
+ break;
+ }
+ case ProofType.RSA: {
+ suite = new RsaSignature2018(suiteOptions);
+ break;
+ }
+ }
+
+ const vcjsOptions = {
+ purpose,
+ suite,
+ credential: verifiableCredential,
+ documentLoader: jsonld.documentLoaders.xhr(),
+ };
+
+ const result = await vcjs.verifyCredential(vcjsOptions);
+
+ return result.verified;
+}
diff --git a/types/vc.ts b/types/vc.ts
index 938f2393..1cdcda26 100644
--- a/types/vc.ts
+++ b/types/vc.ts
@@ -6,6 +6,8 @@ export interface VC {
verifiableCredential: VerifiableCredential;
generatedOn: Date;
requestId: string;
+ isVerified: boolean;
+ lastVerifiedOn: number;
reason?: string;
}