diff --git a/.github/workflows/prod-vectors.yml b/.github/workflows/prod-vectors.yml new file mode 100644 index 00000000..c12ecd3a --- /dev/null +++ b/.github/workflows/prod-vectors.yml @@ -0,0 +1,59 @@ +name: Production Test Vectors + +on: + push: + branches: [main] + +permissions: + contents: read + +jobs: + fill-prod-vectors: + name: Fill production test fixtures - Python 3.14 + runs-on: ubuntu-latest + steps: + - name: Checkout leanSpec + uses: actions/checkout@v4 + + - name: Install uv and Python 3.14 + uses: astral-sh/setup-uv@v4 + with: + enable-cache: true + cache-dependency-glob: "pyproject.toml" + python-version: "3.14" + + - name: Sync dependencies + run: uv sync --no-progress + + - name: Get production keys URL hash + id: prod-keys-url + run: | + URL=$(uv run python -c "from consensus_testing.keys import KEY_DOWNLOAD_URLS; print(KEY_DOWNLOAD_URLS['prod'])") + HASH=$(echo -n "$URL" | sha256sum | awk '{print $1}') + echo "hash=$HASH" >> $GITHUB_OUTPUT + + - name: Cache production keys + id: cache-prod-keys + uses: actions/cache@v4 + with: + path: packages/testing/src/consensus_testing/test_keys/prod_scheme + key: prod-keys-${{ steps.prod-keys-url.outputs.hash }} + + - name: Download production keys + if: steps.cache-prod-keys.outputs.cache-hit != 'true' + run: uv run python -m consensus_testing.keys --download --scheme prod + + - name: Fill production test fixtures + env: + LEAN_ENV: prod + run: uv run fill --fork=Devnet --clean -n auto + + - name: Create fixtures archive + run: tar -czf fixtures-prod-scheme.tar.gz fixtures/ + + - name: Upload production test fixtures + uses: actions/upload-artifact@v4 + with: + name: fixtures-prod-scheme + path: fixtures-prod-scheme.tar.gz + if-no-files-found: error diff --git a/.gitignore b/.gitignore index f6a7f42d..5f6f0aa2 100644 --- a/.gitignore +++ b/.gitignore @@ -156,3 +156,6 @@ site/ # Ruff .ruff_cache/ + +# PQ test keys +packages/testing/src/consensus_testing/test_keys/prod_scheme/ diff --git a/packages/testing/src/consensus_testing/keys.py b/packages/testing/src/consensus_testing/keys.py old mode 100644 new mode 100755 index 0dad9b0f..4d24f065 --- a/packages/testing/src/consensus_testing/keys.py +++ b/packages/testing/src/consensus_testing/keys.py @@ -6,6 +6,11 @@ Keys are pre-generated and cached on disk to avoid expensive generation during tests. +Downloading Pre-generated Keys: + + python -m consensus_testing.keys --download --scheme test # test scheme + python -m consensus_testing.keys --download --scheme prod # prod scheme + Regenerating Keys: python -m consensus_testing.keys # defaults @@ -13,8 +18,9 @@ python -m consensus_testing.keys --max-slot 200 # longer lifetime File Format: - Keys are stored as hex-encoded SSZ in JSON: - [{"public": "0a1b...", "secret": "2c3d..."}, ...] + Each key pair is stored in a separate JSON file with hex-encoded SSZ. + Directory structure: test_keys/{scheme}_scheme/{index}.json + Each file contains: {"public": "0a1b...", "secret": "2c3d..."} """ from __future__ import annotations @@ -22,13 +28,17 @@ import argparse import json import os +import shutil +import tarfile import tempfile +import urllib.request from concurrent.futures import ProcessPoolExecutor from dataclasses import dataclass -from functools import cache +from functools import cache, partial from pathlib import Path from typing import TYPE_CHECKING, Iterator, Self +from lean_spec.config import LEAN_ENV from lean_spec.subspecs.containers import AttestationData from lean_spec.subspecs.containers.attestation.types import NaiveAggregatedSignature from lean_spec.subspecs.containers.block.types import ( @@ -37,15 +47,68 @@ ) from lean_spec.subspecs.containers.slot import Slot from lean_spec.subspecs.xmss.containers import PublicKey, SecretKey, Signature -from lean_spec.subspecs.xmss.interface import TEST_SIGNATURE_SCHEME, GeneralizedXmssScheme +from lean_spec.subspecs.xmss.interface import ( + PROD_SIGNATURE_SCHEME, + TEST_SIGNATURE_SCHEME, + GeneralizedXmssScheme, +) from lean_spec.types import Uint64 if TYPE_CHECKING: from collections.abc import Mapping +# Pre-generated key download URLs +KEY_DOWNLOAD_URLS = { + "test": "https://github.com/leanEthereum/leansig-test-keys/releases/download/leanSpec-d6cec9b/test_scheme.tar.gz", + "prod": "https://github.com/leanEthereum/leansig-test-keys/releases/download/leanSpec-d6cec9b/prod_scheme.tar.gz", +} +"""URLs for downloading pre-generated keys.""" + +# Signature scheme definitions +LEAN_ENV_TO_SCHEMES = { + "test": TEST_SIGNATURE_SCHEME, + "prod": PROD_SIGNATURE_SCHEME, +} +""" +Mapping from short name to scheme objects. This mapping is useful for: +- The CLI argument for choosing the signature scheme to generate +- Deriving the file name for the cached keys +- Caching key managers in test fixtures +""" + +_KEY_MANAGER_CACHE: dict[tuple[str, Slot], XmssKeyManager] = {} +"""Cache for key managers: {(scheme_name, max_slot): XmssKeyManager}""" + +_DEFAULT_MAX_SLOT: Slot = Slot(10) +"""Default number of max slots that the shared key manager is generated with""" + + +def get_shared_key_manager(max_slot: Slot = _DEFAULT_MAX_SLOT) -> XmssKeyManager: + """ + Get a shared XMSS key manager for reusing keys across tests. + + Implements caching that reuses key managers with sufficient capacity. + If a cached key manager exists with max slot >= the requested max slot, it will + be reused instead of creating a new one. + + Args: + max_slot: Maximum slot for which XMSS keys should be valid. Defaults to 10 slots. + + Returns: + Shared XmssKeyManager instance for the target scheme that supports at least max slot. + """ + scheme = LEAN_ENV_TO_SCHEMES[LEAN_ENV] + + # Check if we have a cached key manager with sufficient capacity + for (cached_lean_env, cached_max_slot), manager in _KEY_MANAGER_CACHE.items(): + if cached_lean_env == LEAN_ENV and cached_max_slot >= max_slot: + return manager + + # No suitable cached manager found, create a new one + manager = XmssKeyManager(max_slot=max_slot, scheme=scheme) + _KEY_MANAGER_CACHE[(LEAN_ENV, max_slot)] = manager + return manager -KEYS_FILE = Path(__file__).parent / "test_keys.json" -"""Path to the pre-generated keys file.""" NUM_VALIDATORS = 12 """Default number of validator key pairs.""" @@ -90,23 +153,48 @@ def with_secret(self, secret: SecretKey) -> KeyPair: return KeyPair(public=self.public, secret=secret) +def _get_keys_dir(scheme_name: str) -> Path: + """Get the keys directory path for the given scheme.""" + return Path(__file__).parent / "test_keys" / f"{scheme_name}_scheme" + + @cache -def load_keys() -> dict[Uint64, KeyPair]: +def load_keys(scheme_name: str) -> dict[Uint64, KeyPair]: """ Load pre-generated keys from disk (cached after first call). + Args: + scheme_name: Name of the signature scheme. + Returns: Mapping from validator index to key pair. Raises: - FileNotFoundError: If keys file is missing. + FileNotFoundError: If keys directory is missing. """ - if not KEYS_FILE.exists(): + keys_dir = _get_keys_dir(scheme_name) + + if not keys_dir.exists(): raise FileNotFoundError( - f"Keys not found: {KEYS_FILE}\nRun: python -m consensus_testing.keys" + f"Keys directory not found: {keys_dir} - " + f"Run: python -m consensus_testing.keys --scheme {scheme_name}" ) - data = json.loads(KEYS_FILE.read_text()) - return {Uint64(i): KeyPair.from_dict(kp) for i, kp in enumerate(data)} + + # Load all keypair files from the directory + result = {} + for key_file in sorted(keys_dir.glob("*.json")): + # Extract validator index from filename (e.g., "0.json" -> 0) + validator_idx = Uint64(int(key_file.stem)) + data = json.loads(key_file.read_text()) + result[validator_idx] = KeyPair.from_dict(data) + + if not result: + raise FileNotFoundError( + f"No key files found in: {keys_dir} - " + f"Run: python -m consensus_testing.keys --scheme {scheme_name}" + ) + + return result class XmssKeyManager: @@ -118,8 +206,8 @@ class XmssKeyManager: Keys are lazily loaded from disk on first access. Args: - max_slot: Maximum slot for signatures. Defaults to DEFAULT_MAX_SLOT. - scheme: XMSS scheme instance. Defaults to TEST_SIGNATURE_SCHEME. + max_slot: Maximum slot for signatures. + scheme: XMSS scheme instance. Examples: >>> mgr = XmssKeyManager() @@ -130,18 +218,22 @@ class XmssKeyManager: def __init__( self, - max_slot: Slot | None = None, + max_slot: Slot, scheme: GeneralizedXmssScheme = TEST_SIGNATURE_SCHEME, ) -> None: """Initialize the manager with optional custom configuration.""" - self.max_slot = max_slot or DEFAULT_MAX_SLOT + self.max_slot = max_slot self.scheme = scheme self._state: dict[Uint64, KeyPair] = {} + for scheme_name, scheme_obj in LEAN_ENV_TO_SCHEMES.items(): + if scheme_obj is scheme: + self.scheme_name = scheme_name + @property def keys(self) -> dict[Uint64, KeyPair]: """Lazy access to immutable base keys.""" - return load_keys() + return load_keys(self.scheme_name) def __getitem__(self, idx: Uint64) -> KeyPair: """Get key pair, returning advanced state if available.""" @@ -235,45 +327,110 @@ def build_attestation_signatures( ) -def _generate_single_keypair(num_epochs: int) -> dict[str, str]: +def _generate_single_keypair( + scheme: GeneralizedXmssScheme, num_epochs: int, index: int +) -> dict[str, str]: """Generate one key pair (module-level for pickling in ProcessPoolExecutor).""" - pk, sk = TEST_SIGNATURE_SCHEME.key_gen(Uint64(0), Uint64(num_epochs)) + print(f"Starting key #{index} generation...") + pk, sk = scheme.key_gen(Uint64(0), Uint64(num_epochs)) return KeyPair(public=pk, secret=sk).to_dict() -def generate_keys(count: int = NUM_VALIDATORS, max_slot: int = int(DEFAULT_MAX_SLOT)) -> None: +def _generate_keys(lean_env: str, count: int, max_slot: int) -> None: """ - Generate XMSS key pairs in parallel and save atomically. + Generate XMSS key pairs in parallel and save to individual files. Uses ProcessPoolExecutor to saturate CPU cores for faster generation. - Writes to a temp file then renames for crash safety. + Each keypair is saved to a separate file to avoid the keyfile being + very large for production keys. Args: + lean_env: Name of the XMSS signature scheme to use (e.g. "test" or "prod"). count: Number of validators. max_slot: Maximum slot (key lifetime = max_slot + 1 epochs). """ + scheme = LEAN_ENV_TO_SCHEMES[lean_env] + keys_dir = _get_keys_dir(lean_env) num_epochs = max_slot + 1 num_workers = os.cpu_count() or 1 - print(f"Generating {count} XMSS key pairs ({num_epochs} epochs) using {num_workers} cores...") + print( + f"Generating {count} XMSS key pairs for {lean_env} environment " + f"({num_epochs} epochs) using {num_workers} cores..." + ) with ProcessPoolExecutor(max_workers=num_workers) as executor: - key_pairs = list(executor.map(_generate_single_keypair, [num_epochs] * count)) + worker_func = partial(_generate_single_keypair, scheme, num_epochs) + key_pairs = list(executor.map(worker_func, range(count))) + + # Create keys directory (remove old one if it exists) + if keys_dir.exists(): + shutil.rmtree(keys_dir) + keys_dir.mkdir(parents=True, exist_ok=True) + + # Save each keypair to a separate file + for idx, key_pair in enumerate(key_pairs): + key_file = keys_dir / f"{idx}.json" + with open(key_file, "w") as f: + json.dump(key_pair, f, indent=2) + + print(f"Saved {len(key_pairs)} key pairs to {keys_dir}/") + + # Clear cache so new keys are loaded + load_keys.cache_clear() + + +def _download_keys(scheme: str) -> None: + """ + Download pre-generated XMSS key pairs from GitHub releases. - # Atomic write: temp file -> rename - fd, temp_path = tempfile.mkstemp(suffix=".json", dir=KEYS_FILE.parent) + Downloads and extracts tar.gz archive for the specified scheme + into its respective directory. + + Args: + scheme: Scheme name to download (e.g., 'test' or 'prod'). + """ + base_dir = Path(__file__).parent / "test_keys" + url = KEY_DOWNLOAD_URLS[scheme] + + print(f"Downloading {scheme} keys from {url}...") + + # Download to a temporary file + with tempfile.NamedTemporaryFile(suffix=".tar.gz", delete=False) as tmp_file: + try: + with urllib.request.urlopen(url) as response: + tmp_file.write(response.read()) + tmp_path = tmp_file.name + except Exception as e: + print(f"Failed to download {scheme} keys: {e}") + return + + # Extract the archive try: - with os.fdopen(fd, "w") as f: - json.dump(key_pairs, f, indent=2) - Path(temp_path).replace(KEYS_FILE) - except Exception: - Path(temp_path).unlink(missing_ok=True) - raise + target_dir = base_dir / f"{scheme}_scheme" + + # Remove existing directory if present + if target_dir.exists(): + shutil.rmtree(target_dir) + + # Create parent directory + base_dir.mkdir(parents=True, exist_ok=True) + + # Extract tar.gz + with tarfile.open(tmp_path, "r:gz") as tar: + tar.extractall(path=base_dir) - print(f"Saved {len(key_pairs)} key pairs to {KEYS_FILE}") + print(f"Extracted {scheme} keys to {target_dir}/") + + except Exception as e: + print(f"Failed to extract {scheme} keys: {e}") + finally: + # Clean up temporary file + os.unlink(tmp_path) # Clear cache so new keys are loaded load_keys.cache_clear() + print("Download complete!") def main() -> None: @@ -282,6 +439,17 @@ def main() -> None: description="Generate XMSS key pairs for consensus testing", formatter_class=argparse.ArgumentDefaultsHelpFormatter, ) + parser.add_argument( + "--download", + action="store_true", + help="Download pre-generated keys from a GitHub release", + ) + parser.add_argument( + "--scheme", + choices=LEAN_ENV_TO_SCHEMES.keys(), + default="test", + help="XMSS scheme to use", + ) parser.add_argument( "--count", type=int, @@ -296,7 +464,12 @@ def main() -> None: ) args = parser.parse_args() - generate_keys(count=args.count, max_slot=args.max_slot) + # Download keys instead of generating if specified + if args.download: + _download_keys(scheme=args.scheme) + return + + _generate_keys(lean_env=args.scheme, count=args.count, max_slot=args.max_slot) if __name__ == "__main__": diff --git a/packages/testing/src/consensus_testing/test_fixtures/fork_choice.py b/packages/testing/src/consensus_testing/test_fixtures/fork_choice.py index a1492a64..f7b2f490 100644 --- a/packages/testing/src/consensus_testing/test_fixtures/fork_choice.py +++ b/packages/testing/src/consensus_testing/test_fixtures/fork_choice.py @@ -2,7 +2,6 @@ from __future__ import annotations -from functools import lru_cache from typing import ClassVar, List from pydantic import model_validator @@ -32,11 +31,10 @@ from lean_spec.subspecs.ssz import hash_tree_root from lean_spec.subspecs.xmss.constants import PROD_CONFIG from lean_spec.subspecs.xmss.containers import Signature -from lean_spec.subspecs.xmss.interface import TEST_SIGNATURE_SCHEME from lean_spec.subspecs.xmss.types import HashDigestList, HashTreeOpening, Randomness from lean_spec.types import Bytes32, Uint64 -from ..keys import XmssKeyManager +from ..keys import LEAN_ENV_TO_SCHEMES, XmssKeyManager, get_shared_key_manager from ..test_types import ( AttestationStep, BlockSpec, @@ -48,21 +46,6 @@ from .base import BaseConsensusFixture -@lru_cache(maxsize=1) -def _get_shared_key_manager() -> XmssKeyManager: - """ - Get or create the shared XMSS key manager for reusing keys across tests. - - Uses functools.lru_cache to create a singleton instance that's shared - across all test fixture generations within a session. This optimizes - performance by reusing keys when possible. - - Returns: - Shared XmssKeyManager instance with max_slot=10. - """ - return XmssKeyManager(max_slot=Slot(10)) - - class ForkChoiceTest(BaseConsensusFixture): """ Test fixture for event-driven fork choice scenarios. @@ -181,21 +164,16 @@ def make_fixture(self) -> ForkChoiceTest: AssertionError If any step fails unexpectedly or checks don't match Store state. """ - # Ensure anchor_state and anchor_block are set + # Ensure anchor state and anchor block are set assert self.anchor_state is not None, "anchor_state must be set before make_fixture" assert self.anchor_block is not None, "anchor_block must be set before make_fixture" assert self.max_slot is not None, "max_slot must be set before make_fixture" - # Use shared key manager if it has sufficient capacity, otherwise create a new one - # This optimizes performance by reusing keys across tests when possible - shared_key_manager = _get_shared_key_manager() - key_manager = ( - shared_key_manager - if self.max_slot <= shared_key_manager.max_slot - else XmssKeyManager(max_slot=self.max_slot, scheme=TEST_SIGNATURE_SCHEME) - ) + # Get shared key manager with the required maximum slot + # This reuses keys across tests that require the same or lower maximum slot + key_manager = get_shared_key_manager(max_slot=self.max_slot) - # Update validator pubkeys to match key_manager's generated keys + # Update validator pubkeys to match key manager's generated keys updated_validators = [ validator.model_copy(update={"pubkey": key_manager[Uint64(i)].public.encode_bytes()}) for i, validator in enumerate(self.anchor_state.validators) @@ -249,7 +227,7 @@ def make_fixture(self) -> ForkChoiceTest: store = store.on_tick(block_time, has_proposal=True) # Process the block (immutable) - store = store.on_block(signed_block) + store = store.on_block(signed_block, LEAN_ENV_TO_SCHEMES[self.lean_env]) elif isinstance(step, AttestationStep): # Process attestation from gossip (immutable) diff --git a/packages/testing/src/consensus_testing/test_fixtures/verify_signatures.py b/packages/testing/src/consensus_testing/test_fixtures/verify_signatures.py index fa628843..8ea9ec4b 100644 --- a/packages/testing/src/consensus_testing/test_fixtures/verify_signatures.py +++ b/packages/testing/src/consensus_testing/test_fixtures/verify_signatures.py @@ -2,7 +2,6 @@ from __future__ import annotations -from functools import lru_cache from typing import Any, ClassVar from pydantic import Field, field_serializer @@ -18,32 +17,16 @@ SignedBlockWithAttestation, ) from lean_spec.subspecs.containers.checkpoint import Checkpoint -from lean_spec.subspecs.containers.slot import Slot from lean_spec.subspecs.containers.state.state import State from lean_spec.subspecs.koalabear import Fp from lean_spec.subspecs.ssz import hash_tree_root from lean_spec.types import Bytes32, Uint64 -from ..keys import XmssKeyManager +from ..keys import XmssKeyManager, get_shared_key_manager from ..test_types import BlockSpec, SignedAttestationSpec from .base import BaseConsensusFixture -@lru_cache(maxsize=1) -def _get_shared_key_manager() -> XmssKeyManager: - """ - Get or create the shared XMSS key manager for reusing keys across tests. - - Uses functools.lru_cache to create a singleton instance that's shared - across all test fixture generations within a session. This optimizes - performance by reusing keys when possible. - - Returns: - Shared XmssKeyManager instance with max_slot=10. - """ - return XmssKeyManager(max_slot=Slot(10)) - - class VerifySignaturesTest(BaseConsensusFixture): """ Test fixture for verifying signatures on SignedBlockWithAttestation. @@ -121,7 +104,7 @@ def make_fixture(self) -> VerifySignaturesTest: assert self.anchor_state is not None, "anchor state must be set before making the fixture" # Use shared key manager - key_manager = _get_shared_key_manager() + key_manager = get_shared_key_manager() # Build the signed block with attestation signed_block = self._build_block_from_spec(self.block, self.anchor_state, key_manager) diff --git a/packages/testing/src/consensus_testing/test_keys.json b/packages/testing/src/consensus_testing/test_keys.json deleted file mode 100644 index 9b77d842..00000000 --- a/packages/testing/src/consensus_testing/test_keys.json +++ /dev/null @@ -1,50 +0,0 @@ -[ - { - "public": "b40ec9783b56572d99965130ad1cec4f066df43a0fd89d22d420535c62b52711cdaf7f5f696c6b1e4df66a6bab48bb51abcdd77e", - "secret": "ed1886d1dc768750afc940c33862b94c7a216332a9edf005c9dcec895a330bc5cdaf7f5f696c6b1e4df66a6bab48bb51abcdd77e00000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c0000000990ab27be112375d3ed0c627ec93936d461693cd082073683712d184b8b5f4f76d1c711aeeac279ceb2486540169f5652cafa3cb889670d80a2287a366765537eecd12945718a334f506315d785007c21ecf1309b550a381c53532e1f34280dba49242456eec130e77f396793b7a60ddc5c2250330e5c73f1060f3d3409786a5a62d5527c793648b822f305bacd093c6219041e48b3651697a9ae7a81e3a726b7642e13a41ce42077a0e27a435bba29afc8a5350667161d48e53c5aa24be35309e648714cf819626dd44b2db709cf60ab3e9817afba0476a840363cc3bb0d385a17ed5937c2e71efad64b48bc24814eb37f160521ef7577e4b0a14bec5a117a00000000000000000c00000096bf374d50f3014d095015334f82e32b0e799a01cec31e17cd5ed83513b45c0a8deb4a55c800255e6043d744dcbb02135982725e6ab70f745714d2344623d5448c218a71a7d5624c0a36a02bf3108d44f20c4e1e19c1df69bae443615ddcef68c64d0706e29e1542f10c9a6c96eaf448f0e7647720a7c24f38d4b26b3a0ef16400000000000000000c000000b2800b124cd02c2ca840fc1f78500a5a262a5f2827ea474112c57c4d49079e65b5c8fa3ecec6d4230a5ed9481544c90f1b8742518b388106d064d51ea296f03700000000000000000c00000014011d13e0e08d155fabd8373470c4331e479008b5b22d66f3bd4e1820fc87649a77cf1cd9eb7003d5aba013d41a9a50a18f4205bded536b48311c7de632087b00000000000000000c000000b40ec9783b56572d99965130ad1cec4f066df43a0fd89d22d420535c62b527111eebfd7b82dc3e55e9dc8c435cba432aec203d6dafc15f141bee7016a706b61a080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000a01a39660b45e7022c1a34687b55bd09e4e41c3799315f5d1890e06ef83fb7493e26890bf272a937245dd256b28e8c18910bc93c056ef35fafbd6859fd27850f5d4fac211b14e53f2327c2674883d242dbe11c5761868220a0a9576247b42f2b35d2c16caf96475e8b10037356924d523527e014343d966677384a403e1e474fa29f2c1e33c50f38bd1007622871e81a13156b04e64a2c5896c4c21bd6e8bc0b49a6a35fb31e0e3fcd3fd6138b6f036c04b0d9780af9565359a9c030539cf6064460a2232173d5117c08fe347bf5216f3417f059f4e4576983a6a21eb5e0d7020d58172c32201f6be5895f310d9ac53ee11729692efd6d382287a07b1e6d2c06856b443f2237f80f879c795a63997b02c403ba5a54ef0240028d2177ce23974f7e8dd0226b3672246e300e1363bd93348c9ebc40c9d126458760372913184c18628f656a9ae45a07544a8f472dd7a30ca3627c5f41182c6c5760bc27bb58481b6a81184cefa3f210cda1c035fc6ce26cb7a006636706380549aa6331ad3eab037170713aa3280c4fc56a99670ecd4d0044cbc8771d41111f69423f3d5f1be05f2e47cf7e625a99085cf4020f629c1141f4683035705afa23067c385a58706b6fc219e56e6eb291670f149a66c7cfe67448e5b82b43ba2d70498a0327a1e3d136f24873106a00677120558239c2342a68bb8ad46e19e66a030c3a8d289066845200000000000000000c000000228cdf41c4d5bd641d58bd3318fb536d6be5ad10b1d3bc3870514109fb08040c0ffbf412d667c817278fe23d679b802b0c8a6256dccf011ac4543e3a078f47593cda2824de0e7773847d0938906eba1acd12ca2ba1fa6372f4578d65abfdde692281691d4c319520ad82933aefacc70ae3a1b926559e2a7384be6b1b05eba72e42faf31e2d621751de75df6d64ca9e04b6208c2e589f9d52b5db4f7c8845e6475b32f04df8f24b7eab878a25f3fe7d6b27d17c53cce36d373a439d679b28846a8e93221ed35ddf2f3d5ede09e4aaab03c486806408025170641fd92dcec4e465833b741e7dac61752522453ac5b7a72e4007d85fbd51c242a8285a4a0db4675b00000000000000000c0000008ccaf76de4cb9a543d77c67ab198a3288f480369e07c2c4651907578ec652c5e5a9d8c57257764676d05077387a38e4bb5ca732fbeccd40249749b74eea5bc4e40f17605d9edfd4b367a150a05b6901d4278c86ac49cfc00eca7fb050333f63f13ae5504c5d1e6691b650872825d68160f37d20fa0c2c13f5eb71962f6f1a44200000000000000000c000000c6b6b97bcf6724106858f4092dd5aa2d315e1556990f1b523fb8102703ec0e68b198794b25b7392b79970c0d611488073644f0365a2ffd7554800b65521cbd4800000000000000000c0000000990ab27be112375d3ed0c627ec93936d461693cd082073683712d184b8b5f4f080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000cd4b703c35a60578640e736a3a42b925f04bbe2641130f6342e6c42943799860a8184d6e80410f492af12b2f9e507530ccc3ee772259ae76674b8c5e37aab35ffd64004832e4b14c80f9690c7092441234e6062e538f774cead8c666798c905617f84173ba3abb440ed0c91ac00ef248d7f1fe7db43f0044e1a3af0e1b7fc762269a536aba615e66de1b5d7a165881223618db27831c9f0af52fdb52933b1b2445abb81e647ae9702d817921881d5d3a3133d00d632b602a313d707b7d4ef46bbd25d147a2b05b48fbe9127ca2ff2e1e6ad62e1f9af26b14e418b5019c51350a1173b52fb3b8086ca19ae041f3337b288c7e281ddf50dd4300b3bf65777d646c621c97099efcc035615d6259d47c014f57b50271b888245fb99cb7264407d90715fecf63457b081018bba64ca9e5706ec717401ea36e3666b9c72722f363206ab7ed4a3f1756342e56a7c424f399ce1a67eab8082de86a692bf61f207554c74f1d925773d1cb9931017d0032181a910a91a2d238d8f0f05422c04250d1af200b31bb4d0b33fa8b00c113f95240dcad21097b18565ace3827835d464748637a438438c35d8719fa66cfa5da1071a8b0712ee0b53842a706757125805c29889273664a2876d31b9a0e436e96752866956115247a3c96ec1863b3af16075ba45d73e29d8c18f6629d69f7419e3c13dd8f4a8f1e8c434643411709802b40e953d81608000000000000000c000000c085aa480e6d701de5e5154f002af038ed365a12e75fc30d72daaa66ef0dd80552c93869367cf1249464704246da2d05737b371deec6fa578c5ad7021be87b578b170c06851dbe7413c1a7110bf53c4b3484df7c34600f2d6e87902d2ba58572f3b605303b7dcf689b330433d4f69f61d076b55ec636957a187a0246bee3476c10a70113fc70bb01ee13bd625be9c7426dc57701843d3e518c37f87a7606ed18509c19007e8a4c41fd2b650b09770578df5cb8294104504204714d7ab45a15744a6174599d9ec23e1d32234f456fa131c8e3c377068b74121c0b5178bc6c965bf1c22e63ffe78763ed4a1a0a4608a66595bab400c6343c23ccda673dcf3ffc6104000000000000000c000000e7249c2035d30d6c94c8574f089fa26b8b900a49f1e9144e25c036168128c6468c7d4059c1fe062a23b9e262e22160722468596d38766f3d7bba4f1ba6ec5847d894e548be08f917f76dea1bf1fc8945ff320229942e297c7d09f66450fa000b31cbc460fe8b97401915496cd9ad8b0f64d28032b5098263edfb6f14f4a55c7002000000000000000c00000076aaaf0f09b2072d1e88347ce1a4a91cd5e48f73aa9a7d0d96b0862102f3505817274e58f5a4b507421ca14e515518168514737731ccb401a15fc0322fa87b0d01000000000000000c00000076d1c711aeeac279ceb2486540169f5652cafa3cb889670d80a2287a36676553" - }, - { - "public": "c5ed4b6fa46e83281e29201b878ad52b4a9b8a2f3c9d8017cfd9b81e8097e1372a097e62be37194c39e2f36f76e8906d2e818238", - "secret": "1ccdeb319fc2bc4057f5d124590b728608bada7d35e3b8b58e3c26109660e9342a097e62be37194c39e2f36f76e8906d2e81823800000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000919b084da48be051fd5b1b2122408c0580cdc52fab829311461a81006f2a95739903c30fb890ce401f69b30f1a6ce76e9e0b2f5544bada7c09eeb733b7c31b63c490940662b3d43b04501a3fba7e3410fb7f8c01b6246f4435d3386983136060b20ac515819d1f0b30043f04b1ba2a451c58384d4b907468b2c98e3a37e29754a00a1f569c5a24082cf8f82d4a272149145aab77ef8fe914c4df170792e04058a224ce4fc2ad024c77deef1a7052c62cb175f5419224685935e9391e75beb924b1472a64d2fa61406446cf2a9fecd71f0c8e347ebd273e2336b98a4e7ada2c0699375361f432ea779a0418754f29ec2190e9be389d4e5b778365ef0b0418ba0000000000000000000c000000e2381b470353bb756aded1168ef4a351f7344c599d9f955037763626e8299646b638792012ae94124664a32fa043567d663d0763a27303452a3b9f6e6fa25a2ce05a8a7bd53f7b767e95a113649fb415cad17d4b3e5e600cc5dde51aa24e050a6f0f8651bbcfa95179a1c84de00a092686a16b2e23f5212a9fb7334ade984e2a00000000000000000c0000000ba23e39cb618810045cef5412d84f28c27a3a03aba4d6167c9fbe308028cf6ec6e13157369ea47037d0f978c8403203174021289674087a0868f8028f3b887200000000000000000c0000004e9fa1020d16c50b1484833f264fa60d7a8a49187914741b6c7f3500b1a98658db089a062322c3000bc67a72a929aa1803560019b1a5776ca9616544682e5f1f00000000000000000c000000c5ed4b6fa46e83281e29201b878ad52b4a9b8a2f3c9d8017cfd9b81e8097e1373fe0f9545385f64ba8af10541ab3f4528d7152466ee227438f0e9e05cea01a44080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000008752574f176bef619b0b521f05d91179c55a187dd44d1e4a7fa23e0046c3fa7aea805f362d59864e9580202ab6fa880c08d4c52ab334a85e5c4e305b52efa85c7d93321fcae5fd1acd1bd51f12046e634dd53a16ef2e9e2e710a8c2e50dae467f9cbf21902e4a735f75830436aba60015dc8aa2195215c47a4f3212a0ec3f702b0358b4a1a10e95629e8cf6ed1b44d6d4cbc0e657cd2f961d1fcf93cb7e1695e98c1ee4f7275fe7188917459b069b252928b222d8419137b51c9fe1aaabe06632862534acf9631598fb18c3a0456380ba5b6695c74d1b133a836c26143394d5c3a50ae7bfe8bdd75e574f318264c9842408fe713c367e5706ce7bf072ac8c062f818c102cfbfa71de045d0266f224e758af4942c16d5fc29e0e72132bd24213b46ca87033679113c0c7d54677f8e4f27bed1dc6e7f498a3b5ffe0d202c1ba81914a5477e773c4946c18574556df3176ff99e5705e2dd492de1dea9695a789e61e87a303c1a74f32714baa345268d191a2795a3551a32a07db3a9b12d82f55c53b46ebc58400a57657b5bde4e9de0351add7e822dedf8a87eb6dba709cec0ba032c6dd02ea405f20684a9d90769ff9b364ff6ec0150bfb94bdb4d5a155214d7455e027c104b278a55b053516f1a993e558ad4b71b366e3b12d5b2a14224178850ddcc2e11d3e42a4e176e9a7d081f182f5a7be46752e14d3197d56305ce910f0c00000000000000000c000000ea021f530c1b5970b609f82669b2ec2eb3ee5418c0f4b41d7b068652ce8f23313ef3642c92ca7930b0c58d242bd17828df56cb1f7d493d3b89f318118a1781562d263835476806662044e001d2527b0054977c6c2b430b5903c0443a2c8f70396d1ada724828a92ec4a5cf708174c5177430c468e557c052b6c9584d18f0713a5372f00bc08ded69d10a650909e05c4c05bcdf29fcda7e05b7fbd2555542727b72d3547a8c3208740e5a4d43aba4b96217f9be2e8ae9846a6719836cd285983d38244632f65b9048201161738a8e23340794b34d38c6fc485248e05ee4c55749b70ad22bd0bae41b228c7150f520592653d70944c0f39973dbc2ff003630ce3500000000000000000c000000807d315df77a9442ca737d5a94d6a23e96e3726e36166d70c6c18a12d20cf5369a10a90044a6bb613f86fd728a7e0e0c823864029b8c5d5d338a44284a7be53542fdaa1e5da39d63ecae60084f87f74223636b343ed2297db5d221435078713da3572f2877dbb22a396e193deb26ca018de78f5b25a25456d77e065a22dceb5400000000000000000c000000020265088515f00a511fa843fb52cf2027f53c10512b142ed56657425589f50c2bb272789490d95d651fe043acea2819424acb52676b085ad0cdc30befdd011800000000000000000c000000919b084da48be051fd5b1b2122408c0580cdc52fab829311461a81006f2a9573080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000ba861d3c8be5da4f70bfe271e1b2d557508d9b0926aef67db846ba41a752fb54606dc35f41c5ba7d0f91847b3df38e250099a5695003b6754e30166a61996b6c7692646cca3edc18e32cdd2aa6a7c41ba065d26918c91b5bc8a33e371cbf82597812ac704c25700f7bdea811c657a5492b3e7f6fda739601a10d68593d60db7d88586f2e23a12a51847e8358424f893ce484c24b2254e25dd2a07d1721e68a30a1aa5f7827ebf975d6b22171eb4a755e46e527094e96a14fe513cf0306d7f63be2f63539db985e20014db16f994c723175e19145fe66fd35ca60164e8c80a41046db9c7219affa232b75b42b7757e04822682d54e71be9405eeedf551cf16b6342be2a5d24dfcd0322e0f148ec70901351512d50b41540333e9d78756ecf1d7ab893ed58cd4ab04e5f83282cd1e5592de2fc5229c6f6ee45ec28a138db094e2519ebe97a00334d4eb1a59b3bf2a73e79238a90473dd0e7584439f7022e76fa1f5ae3532ca20ce53629b938004568df02015b593d9cd62b16500cc179deb8af3cb82a3d2fc56eab125abeec2724db5800cbd99b3775c9e71958391e2a5c3db61e793376329e1d560f861b607548e2e8637c0ec55aedeee61868b4ac245abd9030634aa54f4f29432b75d44147b71d89238be8672f7ebe854dc2bcc503082e451e1a5b304804f7091fc1fb18517a636c0511401e291de28e2d9db4771c97770f3708000000000000000c0000001064dc44f152532a1898c606985fa163e25688132de027393d645619921a736fe6b1956bb5431e1ea3eb941afbb4b32f793e297a985d8c5fabb259447bb9b67aad6efa0858e5fb7cb4bb246fbbc7c60895bfc84c4c3c596c2b0ecc4781af5a1855c6fe4e79e6e97292dcc22353291a162eda2f3bb68f0308c82f6910e012d26b73288b6ec76a1f65582d2008c5df492543fcfe101a1e5865de07b96eb1583529410def22b4282a6a0a8c923ea287986ca0d5a9229bcd7a2b79702c51ca246f570173a23f7ae7126650d04562242ad0663c4ea06d0ab49b6719414e21afd91511731ea4220f91ac3fb399e001a2930770f1b74b57255dbb638cb4c328ee43576404000000000000000c0000003673763034f6c60eab555c419d628f15aea9af4e6788657bb2ef0b226c069f2067858b58dc4a565236e7b20c467d700117e7c90af3ce8715d369662064149f6fa207612cf184a05abef450098e383b2723d9d16fd021605a82858a2cf5b7673432cdf207dfc87545736311755bbbb63c5d07346f11e93e4cea13d21ac563f00e02000000000000000c000000e90b5f5c86978c645d28fa6bc404bd30391a2004d3c5df4cae6c735f8cad6155975c4c3af753e207df95fd636c533a46a8c2e361cc22a9736823b939ff02be4801000000000000000c0000009903c30fb890ce401f69b30f1a6ce76e9e0b2f5544bada7c09eeb733b7c31b63" - }, - { - "public": "0cc8a378cdeb1a3c4b87156bcba3e87d31fb8c5f1c3ce74b4370001086b8bd5a502ea12d0878536b19cb6769b7285e1c0504fb3e", - "secret": "7df16ab4dc841f349d0b9f8a64be52c1c3b5358f8a8728ed0771d510668a13f1502ea12d0878536b19cb6769b7285e1c0504fb3e00000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000b2ba1e00756cd46354fe1b34506a624a5daa4877482be33fb1b5af54f8fff43900e85d2047e8e02eb712f0427c21654b503daf3a247fd446c70e96283ca54b6c425e2d2530c3a310ab2c351b1453681c14769c0131f9671dc635530c5da7fc594c78f8520a648967648c6031b12aa33fd7925f684fc0fd15e666bb6068513e3babc60142f9b1c810bbdc7d6d2f1f0e2808003b7d09ed4d75e86e1830b81ad93e823850157e45261d530fa85de693d5185d13ef04973f2c5803f6dd7e6b6300359aac0d49f8bd16221970114601cbca3dc998dd0c2b49f92266429209c431d6458b969f02cd1ec104a724a72653f0ad7d6001d86f9f8a24514a491c6ab67cbe6400000000000000000c000000b1b08477ad78076e50f55b0a3ecde80a9ab5dd252d91822d9de20626b7386e708b4c134fbb8aa74e96311e5b14f4940da8e4382ae5a89661a47ed13da9e687588ed4ad0e3c69f25a6cba063825c04f2be0d0ed6aff3cea533251e85b0343ef23c686df6ca7c772515670804e30062412bb18f6714bba6716837c20596aeb705f00000000000000000c000000529172434d7c7876214b51337fbcde762ec8374ee9f0301c08303161398e692e7e181647a492df1cf9bab6126275b90b484982590b4e51645cf2e93574fc054600000000000000000c0000000f71eb4f34710b072e39e2635a5c653ed3792a11a0124c1154ec6b449351cf5e8505f87a7e0707069c90322435aa781cee2ebd73acdf7563c9494b4639f28a3300000000000000000c0000000cc8a378cdeb1a3c4b87156bcba3e87d31fb8c5f1c3ce74b4370001086b8bd5a1bd06828b7c5ab2c9f20e75eb6f6c42a44f22907c017010113680f5e5cc0213a080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000737aa90e905cd85d7073f05a547e630715dcbb40f065047cc481d615fe8017773db5062806ec0603f8329f7b7c45d4178436c4288dd75015ceb1ee118b3be7303c7d710f23e5415face6e67d6dd40240d5b0611e2efefb228c1d902cf531fb29f6a379440d2c6d082418cb2174dd996d3a70c77d70cf5b2bc731817acdaedf0d12ceb50f0eddc87a1692452512a18b467de64d40610011394344614a13cf890c0343f4574af97b5e67b0663be600c835862ea34c8df05b177df98a0785cb6173724184167e2dcd2c8b801e668c14be6ecbf28f5310aae67589275e08e226ad5f4170bf739dadb8344221090c702a575f0a80ce5beda8b55834a0e42a4e7ba63b3dc97b4d1f9a197817bf8906534468114ac0c4568b073d7c323eac7d5116ee4a4d5bd20fbdd2be35af3c9b408ead5132f8f51c5780c88e314e2a354e605d94154f2fcc52bc7d6b2d9738d208ffc3c363ae552c2f447fe065f114b83fa9a8bb2ada46c5267e80097a75d1307eb6a7b03b29f69a386add886297589d41fe45873cc434c80e453d4517418a416159728234d1c25e1c9af03c2274efe222081ab975b088251119ce745a764cd146454ae1443ff2310737a94017a4d1f6456d1861332390570eb428fc0116cc85506681324258caf1232da6c75f6232a213b2e50775e58e08638af8d523b556d21a9d00f926de1ad00de4c61504bc19764008636f4000000000000000000c00000069aa2a2603183c36ff75767346ae0e4e139e7e71f97f917769c1f761affa7973a31d617812581551493813461248186b87c9555dbedd6e6739bd307606a99924a15d893894f6b002936db812f907d86911ed3845b804f3247d02a413360b944f1d7b0733e742594096bd845aacddd57dc545ff40de5db3363ac6b43f7d5229644005b6121c94a57b13951459c1428c5a55ee501bc6a1de3635642d3c0224dd799f0cec39c023c03774c32111a1f0f92fede8097101fffc7bef0da67821259f7cc307bf55fbf7a60e368db032754e9b6be19c113068cff768b62db74cdea07644e9725506d72b8e7adb6ec875c123e029bcad7b0c3d8bf14d41aec855ec7ae35a00000000000000000c000000afea791bb466d72f97a73a5c6a6f571aeeffb53675217e5cb235261799a0bb74d0c4b756c4c9171b1bb6833cf4d53b1550e4e61df3a0a31b118a661b7f4f2a5e7d42216d5cb70801e2b96b49f7bb021d97c9a410056ee53e4cc84d5c5ca93e1c23699012ea6467406f82f107b5c48600b5bd407c93d8da209c844c6e1c31173e00000000000000000c000000c7e3f44ecb58a6554205fd521d774b230969e840aa0ba145a17db13cd340e03f1223a627b98abf7022a22c335136892361f9c9134e507d791cf7d94fa445ae5200000000000000000c000000b2ba1e00756cd46354fe1b34506a624a5daa4877482be33fb1b5af54f8fff439080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000071265b769a28fe4c9e4a3c7b1b2fbc34e273d20fdf347a44d1519441bcdf546e6a0d3000f47f66238dd5a13743b16b15691101661f9d9b501f0b271147e6b314ba3ab449ab02432f8264773748b6d2587248d77ae01ed402bea79b49259d3c22d1aba5317a3e6e49f7b00407d5c37871d8bc536535f31c755bc8d237172efd7d80cf2a72d6df914cb31f2159a853194c62b06108f0ec277c3ce3bf12ef97a134c82ae11760405028977bc31bc2c6d323f398dc124bc2a03a26d40b4730cf6f32af4e01494e95e65a3957bc29cb14c042780a2b4c22beec09fbffb24bb31d04558cf77d1c4657bf01b8c8bb02537e5725f9283a0d9780b13690bb313512cba72b220b4f76aedb72016e8e85785cc3191db25b0306a3eb480d46fa3f74b1e9c01790629900c2ce3c66fba10057abb85241cd120e40ec69fe09af52a9469f4cd33dafe2f5478580290e0b4aea6f63957a5bf47e9d38c6bc1024ee206501fe64ce3998c41b7c4fd3025b3ebb634c5149e377c5d27d082e5bcf1ba5a2bf7008c22821b779ba771ce45917964a0c442286290000d13136a5461e35f9f6ae6acefb747223bdbc5c28ae610dc2d2bb0d638b1c713eb22f79b75d8d07e985e441a67c02085d60007b5daaf371d94b9a2f3f218d0ad80c744082a9796a81ba7c5d561af252cb25622a83a2511e9bdfb404c2911449ca46072adcee7e49f970185cca340e7008000000000000000c00000047490548f6d7f9238a363955c1abc062ee1fd1028143dc384c45ac3c907d114e0a2c9c44ea912e652b79be163e00466860220727377c6e0bdb34ac572d860f771714c956b47eee0485419745125f5d5e0b74bb22da18d25471cc7d1c8490a41a0c0de223b9e321582d190c0fe31bb81cff101e2fc521d42083c6b13a23df9f3e3594f918c1989048fbd9dc588bbc001173ec1d6255ddd44908b04875de28734e9088364c94af385bd20a4a3f1383d01a003fb14867614f2fdf66c45f48aee66f30f0cf1f43d4121bf3392b21af27c0400d2df06d581b86238498c155bc4e8b03531e8636d96808687ff9e84fc6eb2904e7bb803e54c6c52545ff20463f39a16204000000000000000c000000e7626b11a7c8fc459f867f1206406b63b808cd408deed3742e46b94e9a3b924ae9e42c4a50079913a6c8182965af3c2c29027663ac0a9075e0e695550523736973a39b556dbbe27e5d3e3c64e571130cf32bbc279c1e5d6c33e7c50438f4fb357f92962d8593415625790537b8f834271b7c8b390b8760215933973056b1347102000000000000000c00000025e3ac3e8312b0528e9b8b2f52f4511b1eeee87787f83975df910a2f1b70de4609c6ce55f197812f7f04bd3bd5c50109173fac2457b6e61751a53129ff10305501000000000000000c00000000e85d2047e8e02eb712f0427c21654b503daf3a247fd446c70e96283ca54b6c" - }, - { - "public": "b85c660a781e825a1b783822984e894c4558e304a4b71307f095821d92b6351197c3b1485ffcf872c9a13d5c9381b1636eeed359", - "secret": "a6dc08c940201bc0dd65d6f7b19ad772df07cb778edc588f0c83aa113dc2d70197c3b1485ffcf872c9a13d5c9381b1636eeed35900000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000f0f352688df8e92804804d5d6999ea0affc407176d6b3219db0ba13053fc035e92dadf3d4d9802493d479b4ba50ac91562474c116f96de0978d16f0bcea7583bf0ec9e5a1a5ccc04687ad0031a75dc21f37d20029bd32458bda2ef252001856816763b646d884c6b0ecf884c64ccc25db35c115f7128d865c2bb53538fe73b49dd492c28ac635b7abb8ce9771fffc93e7ed8bc323a932c18396cab65b6e17547a441e96995e10756d7f44966acc79c455d2e1a4ae10c766ad635ea760ed0582f1f351d12e9d0476262c3172a0ba24e584c6ed63739a8577c65c8636922126875b9a21741b75f7a42b1fefe06fe67fe389cbca525144f2a7b8953a03a84fb4e3f00000000000000000c000000f43c707cdd3bd87382c33420ba77f90ab79ba45648d0ee35eadbd4498d7e027c0f4e0f51f57405159734c561df0282167981b74dcdbe541ea843aa17482c83550dbeb148ff7952029e7bc54e9a4d5f6e88f78e4a80c7b36e79d3e903882c9c382cae65722740710dc90d0b1bb8e7310edd326f7c7e9b005e99fa8245cd32924d00000000000000000c000000a6750e58a3a1137656c0783053d65e708d7e2133850e3a3c8ce08b12f2b7002c1000f85a9a571162291c7e614cc138749b2703515e8a8c0c42d9a671aebc320100000000000000000c0000006558d63d4a73dd5165d2c72c57092f6520f52102d656b41346206561ce9c8b50db2e1b2d34fc4828dd60c35f3768642bdc7925235239341abc4a3e2abed05f5400000000000000000c000000b85c660a781e825a1b783822984e894c4558e304a4b71307f095821d92b6351172485e013dfaff6eed423d216d8b75251fcc7d6e6f71e0496b493a581fb66846080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000e777396eac01ce267941564f5418187edbe58a718cc4d13707ec6a5ef69edf0e5557300300c07854c82dfe48f8475a5763436767da35fe5835845e23a34fae353ee55e0e90cb5147fc57c773e8ed3f69241d93703d4bde51c4d23a423863106769b4de1ec9053f1452a9557acdb98652fc4aa7110dd2aa4d4953d13113bd465f2a0d416510c82a5e4212012ec1d5667a8b2b190f3577366e5d551645c20a5b11642d9204aaaf1d7a07df734629611d292873bc6f069a5a3960a76c1a6027276f63d0fb71875a053d522f9465400c664a0b2a22707d426e53fc3b70630a125942f8b2323faa41da3a0a518702418d1d1fc4e7363c1ecbbe59f859a47a1f377d64aee7bf6d51679006d431a56f01d6957066f17671e6e78643ea52a9572df9e37bb272fd24e7809f00ba49cc30ec296d02b1ffa32ac1c2e17bbbc5c62c33a69e084f424212f8fe300c562be203241cf606c704e4795b35452398c2f73a315357015bcdb87e5edcc26c797ed36081940b34ef1de462598a18113be9066184950132cb99306110f94d7c3839e54a61b54e4cc380a33e62c2b8547641495ccd3dc353e57b445a85af050a6f4a761b02871b03940da13dc0222063d2fdae1dcc454e3bffe453497ec65b59db0f1b2321802c19078638455c0e1578dc419c316bfb8b7b982bd0739fc10b734ca0766c775b1210574be26acf96d179e8c87f2da190521c00000000000000000c000000e2be7d63778acd1aa995e521ad28a91fcbc53c5b3481a5503549da25b0cdae343cace97a8ff04922d61a0c7d48f2ed3a477ed13fe846004860d627625c3679039b82c17b3b6f271080815d3a00d5752f4088ab22fa027b4f157bd22a7014d76626abe1336990ac1853c5ae739eebe358bc11647b46d2ea4c27ccd9452275120092d6d0713c82707e1f768a76323d893f34bb934278433369b8650957e922b3239b42c01d5a10a46b4657bf7948528048b6caa1298d92b405100d4d533ddd8036f6f5ba4834af3e6df05b3d5c777feb280755371aca23583474a6841bde8dc62a912bcd34f04b8f22ab94bf452d54906073c9c26f39d30f1c01b93f3343abd45600000000000000000c000000e9d36b3c8f08b67c0eb50678a94c7c74c27df904ab92e87ef1b1856707b61039c97a2a177e1afe284c7d0d0b4e34a34121824376af6c083fd1daf233a6618277bb6a9445a48a6c731bbea970c1963c3a1916744a1de35308d194081772c9c42c6ea9f330e51e8268ab89317b794cd941ad92604c48650d418d793060f0e7b61000000000000000000c000000bbd8774005e79864610a5a3db9c3e56e1ce2da67f0594730f8e64044e02bcb4cc29b4c762fc7287dba2b470f03afc27117963246a9a05603f9c41b41abb8057d00000000000000000c000000f0f352688df8e92804804d5d6999ea0affc407176d6b3219db0ba13053fc035e080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000cddfa9534a6c733c1ee5ff4d7e3bcb4d9461e84ab066f14c464dba502d601d0131e93f5af3b4ef23544db75c9dec384779fe1e7a88945e0a42f1c825b1e7984941bdbc510d20006ee391960f2d664e199a929231da84c61e2caa722f1b86654ac4921364ef1fd76ac93cb33eec986559eac90101425b8c67cf85da02fbed543c0dbf9f04532f4a3dcdeef86eac328266bc74a20f3013cf682797f719f91f0509f1d0231bcadd795fed8a0d6cec40dd4bbed7bb1ee97dd52f42fe0a3cb1ba6e746dd77a3d9030cf3cdd81376bfa20330f2cd68c607797f4265fa236637679a67973f8a00c02321428e703a057f7ae7a5dbe13364113ab3e4c84e0b7008808663d3c4c7d425d445a56c9104f5c8ce4930425bdfd2ab58c2705029cbe3d54c7f41bdb9fc11be1358104e24684490211f021cc341c20b247d007467a382bbc52985b047b316264cd4f42060ecd38036ee2545d90f14ff1ecdf7a6f35d10c6c0f9d21254c322c856a651a83a31e1f45cbe50b5428184cbb540811152fdd2dd9c70c40a05cfc7e1b73371ca13ff36aea445237e2d8fb33806b2e41729eaa42f4f51b65d79bcd3d51153143768e7c435e1e8d5490703b403fc3ea0674eb8030b8fa0b69f8555f104182f510c8e1df503ced041696f0dc548a7c3967764c0935de14797d9db4315c775c993f2ed0e01cc3a38254cea2141b0f225c0fe913a8658bf3011208000000000000000c00000040990d703434a41d5721845182f2ec194baf6402228f665cfbcbee2ff173574cce867614984acf4971d25c7d0489507597ffe54719c3526d8a2e8717d886d9779154d028a14c3151ea57eb3cbb56175fbc720166de07d54622e9e33924091441b426bc24e75a8909787409379346ba079f517541f571df230cc84677f0888472844ce8382a1e476985409a180ce534535b3f0f688df25f7b98495a306315da4b06878e3d91b39503d765682009c2934e38855871434f874a9e87b02608ef285d477da6005a4c3a50fa852c118470151684ed98451cc07e37f2f0b911b0469b26c812c402694c9318f079fa1df795d205cb423b0e0dbae94a1b8dd258bd65be5404000000000000000c000000a483dc6a5849f87b334eb1120deccf17a1368e0e5bf41b61e5db6821eab6705254860e10bf96cb6f6cf3e525d8b38164c6142d713f518d63a236466a933cea4c79d34b62e25a1d58744d456ea576eb0ff9c0443b567eca4108ddf974aca20100aac058623aaae27389f80404ef14ee0b7c8682111245e44aa3d2936cce6b5e1802000000000000000c0000000aef697645c6762f668b164797f2f63adcee57559af561741f24547077d92c6e406de76f2f2b9424c9b3926a8089d928cd467b4a228f8a779550ce2d2598776f01000000000000000c00000092dadf3d4d9802493d479b4ba50ac91562474c116f96de0978d16f0bcea7583b" - }, - { - "public": "e9c00205c556b91d56cb8e5bd9427b3a3bd5b32aef243616c8af133b9a9b6f37c428ce3870fd3b231c960e26785cb3109e0fc115", - "secret": "fbb591958b57d2ff9505b88db9b883d679b7862b955dfc6cd08e01b93f6788d0c428ce3870fd3b231c960e26785cb3109e0fc11500000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c0000009e229f00cadde544531d71006e8cf4735fbb1713b1b84a452ecdac60d4cc5618f46ed0063db6864c02758a240d48c90566e6bf3505193400a6ddfc4bdd1f010f257d8a2516a48442f3c52713bf46c41012b572451149874a58724e6eee29b74e3c31e93361b486104183a775015e411b1bf7e1052676ca6ae6f220443f5a176490f1bc12ed38f939fe8d2151ef545f6c1068e17ada8bad42554d374264e476115ecf483fb914226a4aa0d00cbbf29f2c04787f21ea1e616af79c083b7535fc27352ea2359141f51715997f37213bcc0db446f334826f895951df5e125926a437cb7ddf6aeac7121bb587df0de413007aad676c4101d5164a98582f0ea8c1604700000000000000000c000000bc37ba6f610bd2202a9f4756fbb54c2b7266840509fa8d60d9a8194a2eb1175effa4852354197c57a8f6cd14ad290f1928857d52c5d6936cee624b75682011180e039374e31caa51fb64bf606cfeae0a9d916c34f3b25058466c23018201ad562a4a6e251a318171c09a63018a412e63ae143735d6313c3cb242544d9dc9cb0e00000000000000000c000000dd3e8c31d25d6b0f94fff26264088f75505f4a60caa96140a3a3934ba130c84991bca2133a30f9615be54e561f9d0567aa58785c0130bf2fcf4e8a2f838f727900000000000000000c000000380cef6cc195d54b4955ce0e116e807acbbe7315cbc382437f7c9a13a00e265e127fc45a14fef3088f85b743e270b13b9f6500709b27954fa5564571b34e5c6f00000000000000000c000000e9c00205c556b91d56cb8e5bd9427b3a3bd5b32aef243616c8af133b9a9b6f37b9c70b2188273c05a326893e25b56118cb107d561f4a6678678716759b857b14080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000221c292f59a0ba6385b92a5a5051194c65235f5e6e6984656af6040d1002d70b86f80962ebe6731214f9fb1ff56aa87bbe6b616b57dfbe15e522603735bdfe381c1ed860f6e6ca6d82fcb733e04fbc3337757c6601bf7b579f9c3c119104dc0af4d8561f919cfc027d364d545e071e33eb2c421ebaefd511b011c23d6fa52e74712daa768747b03cd04493785079df46b2dc2620bd1e143466c55723ef02d02c663bd81aae0e8508d03b0f59daee8e309b0e0d702857d16591fb28078c3d6268c29e567674a817077391711066f00457bb13661e4000fa206436026320f40260c188c859bf6fc36679a4fd43fe21cc279f23b128f1be92201e29977397cdf37c87020e4265166208f6c2b9496219f14b1837c5152cf5d11874c2f756fdd36409a89dee3b4d8b6b69794de80d29ef61180c99425b1aa5bd5bbb33e73d3d861511e3f0723794e9c049785f8573832fab3dcf08a015478b422c4a9ad3581e6b784f88c95d65fb93df37bf802a653afcbe24a085c82512a4cc613cd5f56b719ca3264408652ef81e614a8417307a96721f3a624b173a5f008433fa2f58005081b060d63bac7234655e245605a30e4d73fe61b579a50faa058d3d1ea4a937c069511632d5e70d200d704085ca714f1a649706a86a46627c164c2bd0d78173c158c802c9ad3e6da6bc2f4d5cfbbf1abf25b039f28d24172770d67ab492ca790d24431b00000000000000000c000000a2343b578ddd994f0ed9cd122cb5096d60dceb04bf783b7d741e2f4302b78c70ccc33f1362eb5255c72703650a448c4e0f297151c52d9f0c95fb8b294009867b7a312c5452cb752e61a9a13584c34b06108ce816afc09a693f91a02bd78a947a7f217568657bc7023cd9f57b9eadc63e794956374d9f1c6705a1052515acbd1e65c8570bec170113dfb9c44c1bc8af492778ba3b80b0f95cb842693b155f875cf02f0348b149546bb3f73e0b0945411d3409d104ceb7353221de1c32c0014946da3fea215f94db3a2a0b916af026553e42ab862a9e91b46062a913499d777453966ae37bc163b31187388c336a3a2b51dbe7fe5f6638280e89d93d46a086f31200000000000000000c0000006ce0b72c9d4f287ae9d66377b713c90e1d6d486ba292be5102ec1e69fcb0210854a945429aae236898ff9a3cfcb56502781369180a1d4a36eee7f06bee3df110ebc2f14d99a2483b34d7ae4063eb7a7915dd73528f91cc34602618369bec55108b3fb75196652f37760d887800725c4bdc7885445141d75f7addb84aa19b8b2b00000000000000000c000000fe6ffe4fe2046b1bb95f9f121a0bda6fa47f3416caa7d879ab5e8532fc2d7b2b00113e77e0522a5afb60b377420b002138f75d285fa5a60a87f6cc526747193f00000000000000000c0000009e229f00cadde544531d71006e8cf4735fbb1713b1b84a452ecdac60d4cc5618080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000055e53e37be9fef4e0809be0a82b6ed294c75e9636929061d83fc3537847b9d70d5d71348cf12883c782ee174e4039d16fb823e3b65a35f363d992e58211e8843f8403e4fd7f9693a1ad7915e38e6667eedb11b34b656ca052e31d303afd99c2abd09372354575a16498a3536e7e47e438b8d062bbddd845b0748795799d2a415d0e6f9245c16a9303aca715f50a1f8473abfbd720cea0c3b2e36796ce602da6b2379c236057ae405e4e07378f8a42c3e76da98039886e332f8aa311caba7155b2343283156f12141b97b315bfa50eb307097d97e20bdf936b3d1e273e28cdd1c0b10a24554515168fe8ac67c5efcf6407751a801939a2d688516777ae8cfaf3cb40a576ab926e56a1906170a95e18e2228c02e2566a80f001b9c9b15814d4d763572ba4280738f63cf6ef6121e6afd71d5b69723217a1273ee46a6585eb42f18f4be06504bd750577f85400b48c57b57ac1a313e52a19e4a0742a57792e5135ea8ec1e776d61882d251682321ed9ab1da67e3e4676dd4057be281728c155cf0c91e3830a83319709fc02a123f9fd0a35c5125a4f1b2c06415a6a3e0d8cf2d45488f84d57bd50c67528a142120741e22ed01e29116f23541b390eb215118a47245c28147c504e2b62ebe5fc0bdcba780961c923493c3a9b14db7d4872b00064434e0daf36e1ecf3433a8bef14207ac8114ae614709ab3fd469d224869a2c2860f08000000000000000c0000006ff92163b1a4c841d377252cb9d73a0920871c5a9f87b55af901e0793d3c3b4e039c0e21b6296b60bde2c651d22130615f7b8d4c1e4bbd254df7b04a179eda6acab4c33694164f4f9157ae54692112081260cd7bd418c079e5b6e04113855771674ecc44acd4cf51a5020224b4f888359ddffc2aa122ce7b389f5f114d77292852316c08cfe3aa406741de3301a9a1123593ed67fd0218493614780ee37e561a318e703fce20b865993beb31d160f9153bf911751e3dbb56443aa30a884a712a01f17227e2bca5638a34fe74d5b79551c641e94de63795440422a10f4d44e85182042f441a98ca4944f07257db1418242dba867df2ad3b4e89f3cf227f1d7c0904000000000000000c0000007fecae4cb9737f51b6c32070d76e292fbf45156acbbc37024b406b340df3583592614d672d8e645f5da8f53ad8f37707a698572b39583c3c2b8dbc7a0bc1b12d184ac62abd32f84815422b64a109a77e697a2f39ebc4cd6fd1f762012e6a2a3ec686c7254be9e6682ef42b42b7f3c812edea38152e06c966e2b5e366a3e3221c02000000000000000c000000d61f226e1dfe73620645363a14e248749b4c66289811d9219ae2b603f8223c57973fbc53107dd72881ff170cbe121221da97674acb0466408f80a9229adb9f7301000000000000000c000000f46ed0063db6864c02758a240d48c90566e6bf3505193400a6ddfc4bdd1f010f" - }, - { - "public": "35b47f3cb6239410ea02ed3d7af8c26822d32637383a0f64190722244ba7b54b412e016720db4d46d26d16656c7e402cda2ae557", - "secret": "81a29b469f58852f6c262b5194365ab7e9d04215d89502ed744dc9030fa7be64412e016720db4d46d26d16656c7e402cda2ae55700000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c00000098d2d057830222306451e25689d81576378bcf45910dc81a5005056977111569236d12760f570a7b809a92660d2de249962e78799a547660d74555626895593981a0fd70cfbc9a3913cef941d1c59306e5faa62255fb634174c90f733213302850336f607876b04f7bc28d0416defa4ad8090343ae9b875309c42e044eadaa0236ba832a75600a2f03543b587ca17343d56d8d4049809e2d2bbde3065d0e8b78d99f8f2735b898750caa036cd7d83737a752925bb874db3c7c84b272b74cba397a5ffe3dcaa75408778e10095afe5d127be12b2bde605466db1a3d66c6ccbd0f33c1c935680b4767dc0cfb19cf55175ec5afc26d91d0af6d4779143e366cb53e00000000000000000c000000a3c2cb7b339c7d48a5a8335e77967b07c4f239356a7d4a4185e5ea5f28bb1276b5d3c63dc6fb5e01b691ab36eef5e42ddf27a06c1376b40c63396d4c7d4d180450f8533f1114f858828c602faddd6a5c411cbe37f0232d6715d6a0110478de58a575c20165d3324e0e92010fd5cc361292a474359501ab66b6bf9951e264db6c00000000000000000c000000dbc7a31a73134878690c1a7d4bdb6d4ed3aa7237870371521acf6f56635b7a7dec0faf111ab67933e4807e08151b4d2fdda6d13a4c4e5952a0af6319f686f26500000000000000000c00000003a04e6045f226758c9085361877ac077041064f0ce9785da255622c2c436d02de8f5b6b0131154e2e937a20ecb0440b09724551446994357ae76771e5c8320900000000000000000c00000035b47f3cb6239410ea02ed3d7af8c26822d32637383a0f64190722244ba7b54b2c22d503446b831f12bad44e69653d206c3dc11991b9da57542ad224af01d561080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000d9a84e401c29933594ef421cad169f7b58d0e268242f07676cf9156421aad90955706c336fa6825bcfc48d12a8e78318285b3d0977b3b670583f1525bf72ef2ac3d66f1ee593ab7a3cefbc4991bbab6352f1896289f86724f3e8806575690b406b14897d15e8d91b837c9b2a8c7ef664aeb0035756837324bc80670865ced7444e7c237e12c2935695d5cb4328601650c9309a079f4e293c259dad5df7743f3fb0ef2a0d3e34732a48541b68fa7e0919697f670f62d3d870227d745b6057e311cba7b37185bdc45fd02f4409354367747f07172b6a6a3a5f8b04607bb89d711ec7e76a2ab998bf38e762a948a6d00377f934db6567da7525e922a072a3e6a24c68fa891903940b6a37c23a0e8d7f1c09302d6919b0c20a345d2596383142d47ca97d9b2319cb7f1a953273266cd8b744e2b1545bbc5757047249c152220c9b7839cd29198d3fa9578e6e796e3aba8d5176db655229a9ed37a797e92cd2bfb338053b7b24b358371acf8e420663a1c74ea730ee09fe756a31858d1931c967a77b69d98c60138f3d0f6417743f289bd04d32c12a06e89f9404b5b539669dfeba274005a25a9e811b2eca814f22c91ff90e4a23051cd81075276d6f347baa9108176f7a86412006933e7f3b14602863ce4d7efe252ff4caa23c68fb001dcd2475771dce333c47bea23983b2d8680d912223baec6f65a4143b71f492b056a864931f00000000000000000c000000a68d43231311a007c68d6c48375db56ce2f228450af6907b65a39c1a664d2a5ebdece6089e6d87436ed7363bd362f86b65826b1916e97e2191caef7264b9c2473fc5a328e54ef546c5e3240522a88131f1d634574fb5990657e9b66687aa495d3746f23c70fb61199673ed6c7409652c42f6dd4dba544f03d3390b08166166592461c56b3b8e524597c16b1ef5e58b78167ebd11b535d935e31e991004fb6373e6586d2db291ff09c11eaf06de03cb676bc7aa0abc7c5b69970d0073c134c82af2312a38fb4f5e6a0a06586f536135462897550be7990555d17d6619ba1714797f30ff6753bfae381e348908acb0da63e0cf790caca0a966696b6c413dbd021300000000000000000c000000e198c541f4a07c201c9609129f56d54a2b348d476a7a6429bb0b54641a254071b643cd455b2a805d7ada3b3dd5971a6e8293fc737f1a4764f5238427bfad873c2b024f76c7283174d104f44adfb82268e5445972b8aee17a7a4ba1297e51ac769771e5193ef7d91a491028785c3d12402c9810231ebbee0058bf78671fbe435e00000000000000000c00000088ddef00cd5d317bdb7bae6359b37436ad20d151079e571a4377930cdb7c1b39750af74a5a9a06245c9f483f44cbc76f9a78ed364207c07db7b2f7335dff6f4c00000000000000000c00000098d2d057830222306451e25689d81576378bcf45910dc81a5005056977111569080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000095256d1fa6f2587853b99971f2296d4010956a1369805c286d27c3684285292ff0714076be48445075d612232168600f7e34d111f7584d2f5730621c8c01765b1308f712c18e4011016e1e30a9be7f53230b22355f59a02f4dfeea6934fb0f767f73ef3357bbaf60b81a966fddd93d7194a9be093332ec03d8cbff23bce44a78d857847463bc090906ea78170169d816b2ae635ad2bec10e863e4948fd45d728c51b763fcae0d7508bfb3940f7a6602e075cee7913c2c80985815a0f9823b04397297b62f33df44d7632a53c29237b5f6e925b33f8eb6b1bdc1af014db2bef741c50292255b827052db6ae35d8e13b343b3901118570d62c87786556f25df22b1d0c737ca8841f4d6361b374fb513555e49b273e7b7a562046b7fa638339806914a6a677dda0e80d67bcca547e199e16fbd51d298b62fc5bc9e79a64f2e4e83d1190f72524960e167f2e2b65eeaa1c3d568a6e454f61e84275b55b20fa5f7a0c03d0da77532948653207cb10c468a846bfe61b58bd513e78ccfbcc14b0328603d40c0e4c0f505a5276e5755ca39d1c7614995b4aa9caf74cdd625314299719260c589025d247fc59bd12f328fbd7162571785f1710a97c1219ab22131c5ac005ad80b96e36951f764ac4f66a8f71c543babfdf53272d016618da360c1a515378a294ec3102f9373eba2b3825dc773d7c6e9bb954352d9405b07dfe5d3641d26f08000000000000000c000000257c517b80bd6a1cf3c79e2b6cd59f6859f1e87b1c0bf91b11adb57d740d0400ee411126eaa9bf5fdd49d10ccc6372378113c3337fce3e6baa3e7c58459fe23df8201f1536dc7a3554fb276e559f0c4325cc3c1bba5c0f452cc4eb1c22a0ee29757c632aead13800acb7c772dcca686d6d9c7941a2492562a0b65b1ef2ca125c8888f16954b4f706c2aee926cd8d5c2d83e7034cdd1b021105a9aa0b05275f434f5b633d3cb4f2002ca6f1112ece96430ffc3c7975b9251df5c3f87c0123e56f92add33888a5f60b37c1de1c90e70e7022102766a2155917a70da1542e9a301af90c7442f7a6001750ae0e42fa7b26553f2cb459635958350f1a454c44a3b61904000000000000000c00000090e4244d84ea1332840ef4283c298a261df14954e2c3af410509ff7943e9c65df174bd7bb25e914756547e5e1fffc104d332d57d649649350a7bf854463a42001dc3b76e9826eb02cc48964056b3586e50b22030d83ce050cd6b0a6b9429c819456dfc04e2806d506412030e7796dd69304b4049fe5fe90e8d06fa6ba3d8650802000000000000000c0000005d89ef4ec1994613b17ccc6dd2d3330098d2dd01d5912f07b63e5d114f88452f7ae1c92786d73a6e31c63e4fd0c95a650d71000e5f0f35606df1db4e1aec7e5301000000000000000c000000236d12760f570a7b809a92660d2de249962e78799a547660d745556268955939" - }, - { - "public": "984c9749be3d147502b7961e7ff2422fbdfab85b9ddff5158d03b140f9ff371252475a0c54d1d1709f543b48dc475f0976958708", - "secret": "73f94941fc47dbf243910c0c3a21fef6661665be0b684b69b8bf240530e4806a52475a0c54d1d1709f543b48dc475f097695870800000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000aafc022cb87c404313536335bef3da72e079bb691df292781cc8a95b3509b05db8cbf83bfe2dac7d0cef79314ea1bd2dd1f2d5573fb03801ff7e7106e47c5e62e7408519a6494e1fd2520c2757d18d0ec93df374c75704568d16c71002b3511e6d7b7025d458ab0fa1ab8a5fe9e091235c4cf10eb8727d284787627405037f66ab554e599171750acaa34879d772fe0a4cf4af06a9b7c63777f6241fbb6d426c225ea451e57246323a7b48544412fe7d0fba9e3149cc4a3f7de48d3b5218287ac8141c5210d5b73ef91dd5434f85f753fab8d25598c50869bdb9d07c189ea971dcd627777c25b431fc3105228001cb47471611567b8c7a518570081067bccf5d00000000000000000c000000e330e1373f2f6415ba41f950f1ee731cd2c4510c5e29e50767cb6149df622122656fd65d27a61d79eb0b591df674193ba851d85b2290201d897cae3a4477ab42a7191a30dd31765febf41546dfe5e123380d3d1f8fbf6c23ebc53d60ff24fd03388247095e673a3a54efb11d03ad1e411bb9b606bbfa404794baea5f2406363400000000000000000c00000085141a56e48aee339743516fe38b1f2f08b3e157425aec1fc4006464f5214906a6bc857552739a693ca6e43ac18869109aa7335d8853fe7d8342661f29a3b53500000000000000000c000000b13f4d6d879a3503ecc9ca030338965af56fd51703145755011a936a9a4bda357a1b25355cf74e102d94b56811987170a7954c4e5acf543dc03824186cbd732c00000000000000000c000000984c9749be3d147502b7961e7ff2422fbdfab85b9ddff5158d03b140f9ff37128bdb17649ab5ff3bc0821806eec4644da2a96115ba34a36f2e346d3409052958080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000a6677e584c9b654b406aef630c3c9b5d7b4260255a4104488fc0f95693077973fa283b4e018810347b53ef00dfc6f64bc465316ec180d94acb72dc3e17594d1b2eea812d0348134278459d759484701ec7b4a22867daa359ccc0c42359d0150e5c6961497ebb0c07608fe41787e7605c9450b90102e5f623a9807349a09d0f3270d97548c534e15bab330e6d6b325e2a4865f273464e1046c5292605b584ee1a0a259961e0f1be17bd888d6778c75407ac316809fac01530ae76172970c6143bfae02e7bce9b8b4c17f29d5ea9aa7f4285981c049c43414dce2e8d0707329a144136f63907a2ca0eb0af692f596e9467dea1bb5c401db6038b0a87620c69eb7692175e2887eb54186fddc91f9c0e7714e9a7bd03905faa22045d3338fb3b42385450446ac14e756763cb9d30cba8104756b2cb5d4b13646eeb45b443e0c40a7c66947c090bf5c03eb74a931506e65275696eda17b04e2b36bf989e465d992366a5864e011cdcd87a2bbaac347a6da144c835ef7c3d64057065e1b9444de7c53a2c228f591addda1d90a9022bfe321c1b3425177bbe1a875fefaf3c450fe7c63be62f202d7f7e310f6852952c28c21a5378904d1a8a27341cc0c9160fb7d45c549351490097276d6790352d5ca036ec1cfffe280871cfcf27f34b5e73007a4552ca204f0659a2dd357cdcea73d65b43481cfd81302704ea3126ac43566d07bb7200000000000000000c00000001be6c1dabf75263497ded68a2dd892a80831113fad2a436a82ea3123f427772aa76245b3fe3936240e47916558a0b4ac35a40108db2eb495ab918719848b12a2c26415f16c8091860dd41299d6b000dad89c44924fff40d72049d691f9d5515fb3e9a0988573c4f60130039cbeddd3acf67b9261115fe7321ff933bee09a234289f9b5d5c7de15924bf060d7a73f21f1fadc63abde59f4be8cfff387441e6101d636632efdeae16bdbc472d8954ba32eb8d9b2b10fb53633c281a0479ea11230d1b247bcf0e446219b84154749e1f2a14a6a84e460815594be27a272dc7293e50ce043891dc931c3395c12fbdf10279e110a512cee2c91223996330898fdf4600000000000000000c000000c00c190424738e23d4ff865a291fed22b71e8f07dcb6ba2e86e7cb48f25b0421508e8e47918ebb493ec90c2b61ccf74f17114f643b09db57eb3a75432480ad32b2163b43d5d7b833421db3410fb48b1ae651f166dfa42a169a0cba533d34fa371b9d1a4b0346af3f1560fd668fc3287e59a9036a4a7d424124c3904d993b8c1800000000000000000c00000044e04108d4cf343ce3c12248a55a6970a11eec09f89b9120f12f5c4f6840f9227305963e6ea6911cabe88a4bdd5c7628736d162828b4bf68ea975753e8abd43200000000000000000c000000aafc022cb87c404313536335bef3da72e079bb691df292781cc8a95b3509b05d080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000de8edc3347f9dc513341d126c400882ccf222d108d9f1839898f5d71adf9680c0b68676b1633fa481b989f3f2da8980f57b2a7592ac3851271e0ac5177602f1fe9d512648a887a1a099b9d2d540f3433ab5d9d501313463a137e3142243188322c46064bc0bddf33dbe91c53549ccb533aabd211699e4650ae5fa45ac291d2525d2a3576f1fb430c74a2fe34e4d56e07e5d6a232d321d55a73340e187b0048044ff49c51f9f9150886fb1d4d64a0207c78ba990a9fe03269cba567158ba709097e36535db56b3005cb331442d8288e00d8a22160e0079308006b80322ffda13b01a62d287a9ebc0f00af061790e20b259b6ea7001b73fd4bdd90da4b8c54e1634e5bce464631a06aecad78200a95f06b50d20e74008aa84d5b63885c7f2565404107d7006558e314de385c2918926927c5a617271d42f07038ba340a9128767d5fcd8e0eda53947a9c2b0c7692fc301716edeb4f6ad0673e32dc2b44425e4d0af4335e7c04c8e50da7c5af0435baa84d47a9742aa9548b3712c0741b694a4a618c52c1656168de7d4e1d9e565cc4f424b22cec49a9e2f702cdff6702b3c05f0289f223683d73e4607a1aa92e7c2d5527b557c83050b4f95b25544e62cef8791bd8bf9d28b93215037d170834b5c9b0527d279c630a21c25bbec2bd374de6245652c534310af87c16e4a87364650bcf17354cb1781dc7f448a2196e4a1ea0b21908000000000000000c0000007d403a22bd41c777bc4ba122cb8d5e71340f8f238d93477320357f695ad0343b1d770063a6e7d57dab05872f04bdd7415fc52754fc46975ff3fad874501330261dc312038507cb57828d994db8713d38b0207c3af1b9454248024a4d521e1078b45f745aa792684fd06b247aa2fdef2080bdcc393d8cdc6f7fe24514f82f580d9f7aab4e4803001c6d547f75cdf53579dd23a325a44b286f0e43e17b5020dc687aa2f3068872fd4b8b1f4c500cf3a54678aaff18060ec25c76e65d7ba0d8465b5cc5e37e7b63967bccd80c1c56e9372d5f66a80fe6f3953bf6b3822bacf1d63f16482f1514e37636698bcc575b3c750742c16211b2d5674553d7d334b9684f0704000000000000000c00000074df3c532fd9a073052dff692618b320c964cd604c014d3b0876264acac66e0ee5e14c4add24df2bec413540ce14fe59e1bb462a9387e766a0b60f581da26f6430489417c124015c136321679645b576aa2e4f2cf3f0045f6aebed13ed4e226877806029598daf7c97b5ef076445d403978f2504b37a6164735e714e511b597e02000000000000000c000000858db672164f6c33fb1ac30db2569e51ad09016db3c0180ec8e05927a432247ef6426a3a87ff207134e859147d46d166d6ab015f65226126ff7d9a09acbf876e01000000000000000c000000b8cbf83bfe2dac7d0cef79314ea1bd2dd1f2d5573fb03801ff7e7106e47c5e62" - }, - { - "public": "730c97594267372a9512f76b600edc22e6ef65429f96d311d16264724ab0db1badc68f76390f54187c2557568bbe5e3cdc800364", - "secret": "30a7c74dc26ab60f361fabdc64b069829439a3ff72b82c9fc4f49958ee70f35eadc68f76390f54187c2557568bbe5e3cdc80036400000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000903315451a128c4be616eb750ac7e175a02378078b716c2fe9bd0e64a10c6a064e0fec6ae68e7e6f9c115a4d977db3216b87bb3ae1982932c0852921a959c00c2dd19d7754723827ed637678f00bce67039e7a6ecedc4c285743cd0e98826f3c386594757fd7ea33dbf31e121fe10742554b581fb95de011fe45a00a3f773a2f69bb00508fb6e52aaa2a433e6c31282068d72a5c0d8573728726b931a2ae4773976fa64277f19614678d22555a43433867e59f25cba77e5fcae7427385a32c39bd54a0541700f96a5fc156488b7e6d240028772d5688337c44aefc1f6efbf01916024f63320e2d7bbd44d4042bb8113762178e6c3fcb4f438619fa45f768d73500000000000000000c0000003fdb34357aa7d907db5efd14ae234d0714a77e13bd8c5677976d42228caa7e5270908d29874ce33691a766280214f14c499692261430a751c7977b022f55a16b1002c41aee1f1b525be28136bf5d5c0f192b9d6835b63b5f9390bb33ebcddc63240edc2a02d6b26ed812cb2bf6de0916d054cd2b18910837e0f9fd1512d1cb2000000000000000000c000000a0cc2f286f3ea97b5e747809b3d25a5e8c3d220876622d5c7eb97e16d7ea332ae9545e0e696b8d7b372d517d5ee3a7171dcb842175a0ed20feb4ae71445e9f4f00000000000000000c000000a2592131b4eddf2a4d2b0a368e62826b472db435ec91c16ed0271d31fb5e4b396877f335f518ab3d4cf67546902f4105242aef466009dd1e67803d21ae870f0500000000000000000c000000730c97594267372a9512f76b600edc22e6ef65429f96d311d16264724ab0db1b0f028d58bcaf7d346d3d60564653d43a05c02517dd10280566ce6d02fc9f724a080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000001e7afe53acb22c16d907ee488f937b0259895a10e9e0287b3e368a4c037dda260183db2a2925ba58e8f63804bed7cb18f1941b597d5a8d056abb3b5b33925d276b3f1642bb5b4c07fd1ddc0679a65a6e5e30ed02aa1a91012862330b994a22188ed3753888a4d756dfdc954234ebfd0b945d1745aa4d6566607e8f5eb37f6f1e594d2704e7975a1b2bdf9615e10fc23cfcc7226c3109a646fe87ee137650dd0d50ffdc57d5828214d59839793136ac797efd5423313b3645ee311a1073c03d340811db0c53768968022202118b5a3c75d1268d08754cca379be42c3a1339d80393013138f40ced32701f1003682f5b00ea5a1c601e6c97385b40ee190a60cc53472c0d0474ea3c518012216998a52c7c4e0e23300f8c41774a1641639e173f3a6d3b3829b07a0d58e3bd933a62473a33767e3c5fb875353b40970577603a0934cf401a44b3d55c5b0bdcc852e0357011e4c84a647938ef14fe17654738bd6a20739c6e47e03e1f48cfeb1723374048378191c97097fe514a02e63b243380e07621d4564d20f20e273ceb71374a8b0c727937892ea847c9496dd64b406eeb15694446e24a157eea67476c377a779e5f47c63ae363c8110d74fbb273792dad7f1c2ad1ee647aa8ff02fb86df28065bc1270e1e2f28550c1653fb318360208db358ef77da477aac563c1006ed3d9f948f6abdf7f86ebacd855aefbe4e28b81e4e0c00000000000000000c000000c4d636277efd8c36d34a581ec3556f0363640a08a73a3f2df4fdf915d353fe04d0dfb95739b9d014edf05f54cc011b1fcb6beb55d617765c3a0a8a0932a4db0f10aad678ff610f75c2abbd4d7c43c61b3b01170551c0ac2a32dfd37ce62cfd47af01be12c8f63b55d7f2ed5b11310d33a485fe70d7cb6f1cb25102534cae4026776eaa6e6c423f351bafaa6534b8f13c48f2fc56b5c63a4df012ea0f72a28a4fd3c9373fddb02e667ea9751cf2f26a30e0bc4716d3b82c26d754a81c5a556409c18f3e40c953c633e5d2ca3054fe2f22a1849f2364f9884b86e8707192d5773f31d47f5a0f0a982aa743d471049473279be3db3a37946e03ef0ff52861890f0900000000000000000c000000cdd42a2d9e49c54e0ec8f40185ff874759458b5c94c14860cf72137a7ca7dd4c1826365355a8b441d15775027909b91749725c5f36a4cf3c2d245e77cbc47e16c5b5ed160853dc5a1a4a7e3991e4260e49c9841c2acb320e5402e2603b1b3d23a5fd8240ec0c2a0ab1320f1458a3af710974e62a246d0e5c2ed75a60d052561a00000000000000000c000000dab67f2657f5a57ebfa4210218d3280b97e4c819d5f58a2d0ca15b33212878169324655c58e1e7416ba2e67be7fc0839dd6d6b7914423724b2e82c37c8fc0d6400000000000000000c000000903315451a128c4be616eb750ac7e175a02378078b716c2fe9bd0e64a10c6a06080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000026da0d62c044b711628591484189746ed06dfc794372425521e0be0901139d34f730240b8e2a0c1b3c1b9f5686b361082ebdc939d990d815c85f5f3a0cb202104d264b5bb1fabf73ff06ed79c104d420904cd74a5f4f664e8708bf6c0d4d8a2e30c42a7ef47ffa6ea5d3436040bba80e3d55c00a78d3c01f92cbb53b32f1ea4a6c2f364b3d80232e66d25a0202e5f13859086651788dec0323d7741c841ce65559362770944eb96136c2c026c14c61601c777f32109e4d29cca50967c76e1e075b83c568bbd81b5284354a188f25de041e6bd47640016847ae121e5fe0dc5d437eb8b14c340eb13dfa3e8261ad0dbd75e88e69450e3b0d1634b5e23bd9b1376df8d87a53ea00c854838aa87aa45fe201a90b663130288a35ffa34a302f61c80dfcd670612c6d6c4ac646194a36ddfe36dbd76c185ea5547b12952f4bb0baa86d96f96b4bfac76a752282c53c693de96e68ec78386ec15a0fd4e1ed72be45770f663c16170fdf0d2d82bbe36bc6500321e262565ae7becd0073cdbd0a3f30bb209613e159b57172193579df22b8e75052eafed21ffa25232fadbc22684a0ed970e6c66536d9d3285ff7dc964d5062b42b4483b73322b316782fe2b858e6a1c8155fc4d472a70cf80d427e935670f077527f59931da23b8a551757772b24f0596422f377312feba833e2114f05f9e19005f0e98e2bf71241563d89661c531eb95208000000000000000c0000000bba5f6a769b0610f46d4872b639c0773ac46e798652bf2cc9ab6a2db6af3f6fccf13a0f7f88de5df176ea7532fcda3ae0bc1024b6f7e64b859377544f822719c15adc4e7e47432da502e73cb3c5434bf568532dff11bd7b51218d71ba7337348a16881f74feb167d73c4f65309bd512971c2e272d566f5f6c5ea47aa6250821a5309504252ff6320cdaad6026541727ac569a5181a1040b1b2b5161f9f79a524d281b345e46972366d0f8650ef4d624518bbf2b3a7f753af195f45dc0d37c3a119e6708e8a5ef5316321c712032c40130803f0b11949365beb91b43d89c6e1f816ce5615c1f200a75cfad142047526dd1bf0e7d425e460e05e3722ed74f0a3b04000000000000000c000000361a0a7a89348f69a215c83da130e70e2927b7499430b4367d7c892ccbe5d97194959718c1a33a21e288806d6f1b6335d7cc154145a5b37a80f16f31e534cf37973c2966de3ea7261df3e9392704817e68fa534733aee851898651004b2bd714e71f712289f9a5118d03fd7d2f96a10e9e2bf071b2cbd54bb256374819f9ac1402000000000000000c00000012200b37183e0f1a16d1746510d76b49605b4d31ab8918500e82f3427f58c8251be57004e63f6a069a02bb2d5ea9e662ca57de4c68f63577dc27a87e014a2f1901000000000000000c0000004e0fec6ae68e7e6f9c115a4d977db3216b87bb3ae1982932c0852921a959c00c" - }, - { - "public": "5ceb0c46c3e6c31d1408ee55915eaa37f85cb004c38ebe22b58b776d1883714f7a53a64c0fa51643e594ad3881b0c220459dbf68", - "secret": "35c54f93eb9175d25d0ba8b3540f0894186a18d6827c2cde58be484163110dde7a53a64c0fa51643e594ad3881b0c220459dbf6800000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c0000009c48516862ca1c534bdf364e40c15f2a7c183612503d981b63c1fd311df81a4f002ab75b0ed7d91af468c43a75abab6ea762246f2702de1b94217f5bac7eae65db954c036b7ab37c56e00e1f4be9b41beda93b576adbc17176054c0a7002ac15345c286f1538990a38def427a8f69b79c70e0a544c59ea02a8829920b69fc82f1d5a731d5e25cd6bf804cc162581ac3c0933522e29907f1835d44c45b9519f41ebf3285d5f03f41cb9fbb42526a88a715a01c01b90199e378cff96467c56da4d4c9db3582a35e9585e64005dcd9b491c8395753259ca4c3e5241e555f95d800c34c1cf1f701b7e728b62d067951cb1334e60e9401ba6bb38557bb8305671516b00000000000000000c00000096068078cd9bf617984b46155376ab4eb40e8b0158cbd32ff90943207476f84294283c61325965176052674c27711068dc6ad9729dc4a139aa2a047b99cfd62a23b9c50586daab4aef59516fa1395a14ddc0364d6bc7a209826a6e248874db750d49226c7bac7b78936bfd35c06cb2713d66361149392e692a3ade65f9e1181600000000000000000c0000004869ac24bd752157fd71c60e2211e01c75f41979307d5e506be99755799c1957bcad4c6781c64b655a3c483d8bbcb37dff16800b83c4234dc588b26e59b0e10e00000000000000000c0000008304db3ef3207576bd0a19534177c641e5050d402e4d745d8f27bc7122b754484513155f8d1a7777b7a3714ad19f8a54f8165c0ee3677e630e1da75b46bb420300000000000000000c0000005ceb0c46c3e6c31d1408ee55915eaa37f85cb004c38ebe22b58b776d1883714fad8ebc1440b7437311375605b5228d1f7fd8826de3b3d22bd43034231a39e20b080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c00000093e22450a982971b16211e789ae825294925516472823b45f7452e3a7853bf6bead3a04e97485b396251ca1188b3fb5c35404335c336be00a4b4031185997207d2c7c9180c844048d53d70695ccb384b0692b402a85a823b3c7b552ea0f2e00aaf379f6bcd374269168ec00ada702139d2fe865677ccbc229b0a526fe94a082f25500069519b9f62768562621b130936aac9b72f7ca1791471aa6c270a17ee5a5f275550c454ff6507cd8c384d7a3e171a1b535f15637b29d90af32742741e40ceae14724a6f9d76ed77ff3798e6b23ce28a3e478abdaa4fef08314bcff3b44539fceb3e429dbd7dfffcd95a976d1460e66bdc07a8e13713fe60704d1dd97471162cde2e1b5a667e2c0d397b6a71c36020edd35632d9ee2dc2315207f6c7ea1ac1be4f6824aa050732c8c461c2a7f844ffff5e3c6dfff3494759ca47d6993b3a9b68760982c6db6ef5fcde6ea290314e38dfb61d408e9d1039729c507fe1692a57df9632a4d7b330f8c1640d0fcff21790b4f44afd08935de9be7f149953813fc3d8ab42a565210abc17b23787049a45552ea50c45cb8861afcf1102a1fedd59b06e3d3b2588a0782cc3872d42a313007e2ff40f28d0a93cc8ed2a40d2d7df749e7fe0396ebf3414ad03121bec69bb50efeada7d4c1eb90dfcddf56f55bdf55f8a6a6a1001e305100e9cc54e3de9a279d0ee90667a7174071a362a26eb25347b00000000000000000c000000597de81cad15f108a28063099e8f0a407143ac558cbe6538ffce104f39a76b5e7f7d6352c0a4263bb2650e7c09e1c75ccd1e4a2b8f64ce195799b241abb2a27d3050e9166e68f85db6c3174d679e91179f4c882e867dc57d5f2ffc4253d74f33ebb9c16486060d4576f9095a932985673af13863df479a46522bd92e26ee0f2c1f74a2522344a77c95b1a23742fe0a52d029e157367e535bbac2e04ff22c955fbcfe415bbee0d900d74cf65e7da88e38f2a91d3e7dc9184223710d11b5773a605ee23b3147ff54240a5cd820db9d5d18727e3d58e00573468035144cda627c26d57ae217def3cb11e91e14691dc6e200ac2751479e35c709ff0f49471e95c30600000000000000000c000000ff585c0cecbb7457cca5433bfe6e110a4e38925052b50d71b9dd7e7d2f32860e84959807d07653466858ce4e69e6e27d808ee71938f34865accea750234acb1a4e9fd73abe4bfb02f7dfec39f609cd3a62f36173798f690af55e117014037e7722c5cb489015e60dea332c06536a9678bbdb7c62fc03054103f28e0c433cf94700000000000000000c000000f300bc7b8a270f639faf8e2f6dda0d6eeb908438d1698b197e558f449fc5ef76ac6368312b96da60583718716924101bf1ab7f73f70c4449ef1c392de1c65e0f00000000000000000c0000009c48516862ca1c534bdf364e40c15f2a7c183612503d981b63c1fd311df81a4f080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000ed2a75290c7cda502b40e5652979625f4b8ce12a06c54d65608ff910e146ae56b08cc35cb475230707e101030a766502121c7b72d03238097f43f323f2c2d57cab568f568978a7341a2ea6360b210916c78dba4ba679f90dac56115b61238574f27a3a09141657326baba0351a3487554d17383ca54d8824a9de21599bff801d4e5b8163428f574699f39d6b4c0a5177a01fa0479e6f3e0a5e5d4f4ea375370a2cfe9736cd072d451a1cd03b8bd1c863cf91246f7c67057b99287018a30aa54dc4874e7c2ac23524f0464b7bc043a82a1451f96ad33a1c6110213b553402f2058b87520c41ffc65b207c4420ee776a001c64f8457c519f18465ab01a76ef560823564e0ed75bf258f359833cb0ee073d9605237e8e3ca75b90c2286005d8d020cfdeb462cb087738c1a2b415392adb077e070a3dd3cd4e61bc5a4b73d97e590acee68e41dd109160700ba8025381fd76df33250656b6c039b1da770a0a9b165088557105fe81a53952ba36686a185a75fa25ac595c15fc0da3b029551103ce6d91a881132bdbb82b93eb5762b0640f0bc43c083b4cb3124cfa6c7e5b666c5439dac4513e4e01595586cc5b4f2d41c12c2463b66b6da23a350d4c762cfd046014d4dfd739aac4c758307f135569848d4789ba634b0254c16054be986ae629522756ec7d2ba4199d01b3c2e2602cb6ff4e83f2325ad5c2c6149a27f95098418a0308000000000000000c000000bc990f333b70df7c8ce5a62494d9707b924af95110278437c7740808c9332f634f40d37a223676424b4b932fcd0fb113740af5162614f370d83d9e5232fe6f07d581e02ef320e579ebf2664099d09365c30beb5415afda52611e223ff98db574ca38232a48ec4319f202364410e0d92d2793c5009023440c927ce949bfb16c0e9f67607475339c5d94967d4c79b3b341617a237e9f0991441375fe0512b30070cec71c24e4ca38274ac3593990d76a13c1a6696612cc5d1825c19e3d4903375f05ef14072e10df5033a30b11139a7a0c04b3514aa0e14009e915ca38be4c1c2274b4fb0b5280740a83780067dd504f2e069ea2222d389e599ea07e5925d4236304000000000000000c000000a09905256b4a117b183360729ab5827327e5a83c44e8e13676296358574fa6380dfd6d2dc202db774af1c82b9d51c40a49fc762330fab30ed0a91867d4228463749f495ca682f82e2bf3804bdb3f1d441b8a9c3fb4654711f0588a1e93d0975af4fadb6025320f5b90bb8e18b294bf56a7550f2760917939c589de0d4ded260002000000000000000c000000039b88117638ac0accbf0d700672dc296b1a7354371adb3f2daee0406c7c514206235d2aea28c57dc682df7270782f78d659d76f7a0597263f51573c9895e82201000000000000000c000000002ab75b0ed7d91af468c43a75abab6ea762246f2702de1b94217f5bac7eae65" - }, - { - "public": "e730a76d1315cf78c3e2da2bb0a04b4ed4368357b744605b3a356d252cea674fec3dab24cad98b10e6d8dd52cc67c54bf1dc853e", - "secret": "be026a5dd46a5139943f78026b1564c7794c92f76d5160f98e99f6b4fc71b476ec3dab24cad98b10e6d8dd52cc67c54bf1dc853e00000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000c72d8f27e2497c6eaccb743589e3d727262c104c7097ea4b55c8a174dd19db6e4733985acdefc938f4874e21dc10034633468531f364d06cdc49595b0dbc79321ae4035eaea8826764405667cedaa723545a047cbf2f44249ec3fb09df9e70530641ba7d3034bf5bded561733993d850c00f821287d4607ab119035712e5bc5a8a1cda439fef462568107b5bbc5f577338d64849d1be58512894e97bccf09b076f8eba1995e7425638493e7e5e2ae00d10b2d63af7367d4d5496d80491117c17d3d51e162ddac42125f9e5346f6a850730522208b3c2281dde2b77523cd96526136d8c208fd13257555f4b550d102531f74cf32f0a8ca6262f581734f1bf820700000000000000000c000000ad2f7551f43a3b72a8697806bf055d0069b86d489011a85fbfb53b507e2ac856981564660504a75b1706b2632217e126c8d58c7cac87b4280c9cda6f23eea01a157fc470d2cbc20e16054e70f9569c5009cad006778d21542a5d23638bbfa262f2ceb2734ff92c2ade844e3b801a1a4d9fceec37f46bd52c997c0c6d5fa9052200000000000000000c0000000ed1d31224311f1c5ff916784901274d6a410b2a59a1200f265cc10e9b86d808fe23ae617670523c47a84e54fe7296424308087a775bf51abcb076620114786600000000000000000c000000c05c7d2fdb96bd0c4e86fc1dd22bf115572e664c9e7f0138cbc3e50796fcea739e0fd36bf9ac53638a7b3e2ee8a4a44070d0ff104aea706b826c8d2653143f5700000000000000000c000000e730a76d1315cf78c3e2da2bb0a04b4ed4368357b744605b3a356d252cea674f161d6646ada13a5c18a0ab4450a7b42c1b96ad4f449c2361e021dc6bc7704669080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000008bf65319b2205b29337cde186ccffa4b58e89d050922876ed225b43695d7903f8d07942f5c77804ad310091314e82c09740afb2401f35d4d44bc7004cdb33e1c8c52f71d1747b942e3ce8b1d6dfde777379d522ba343a96e44c8c93ae27d4e24423203309bf853121e05b15647a0954e65457553c6265845eb980372401bfe2f0120b833b8f1f615bab2e930ce64d8654b03d82cc372953195505a3779e5437d4da315067cab5732adfaa35a471ccb640d08a510c7f92b1201d5ec242130fd3aacf54040f6d2180f5f90aa4941c9e62ef53cb417878f5a6594b38b074a8eb967448e913263e75f76f7bef34a8dd7972ddd0399654088ed00d1848a119974a772b24b4421764d070429f2512ecfe0b16cf1639d297ab41333e12b3e07fcba5e5afbfec827e4f6217573fc6b56d244331de215a423ac04db44451c130e75a9314c4404913df9645f2f416cf769b2ed2f59386f5d4b83e93e36d1f72545d8d4fc72d807f30f02a36209882a42613559173b6ecfc21689ec3f18f3380048263432763cb7b43ab31d41064c13af568b33e31876ec221237f4ea6ba1b5940185037d2440f6e13676784b1d1e8e8f60e95408414b3cc670fbf2fe398ecd8d50cf472f0eb47693472aa4d90fdf07975d30a0a77393c7d31aa54e2b7e64951b152563120ba729bd07b0edde4a88c0e95fc8939b65543a70477b2ba07a8389c73a1efd494800000000000000000c000000977fdf4da6fd6a7e5a3850738ad88e5ce9cadc29550f7f77dad9b14fd78972191b1f3b6773fad126f2849b5e7f25214561dee0265abbec0e54b83975c180b25610757b5ab85b6c386bd4967ebde2370449f4820f90e0905566df1d4d5913b832330f3426f82bae6c28ca9e492f91ad7ceb017922c997d6416c5fdf38ab2ffb7ac262af02d9d5034ce9a2df0193db64086e92ac75bae19f1448d8d01407c49b2466531f2659762f579f3202168926595cc5b90555783df7059f89a57af77230639a8cd04aec6657521280300e805fb734da3a01013fc2a31195d32f6c2c612f621c20f47396271552dd149b109c83720fba3f0e5cfcaaf475c2aea40c28cbf72300000000000000000c00000037126673bf6452270f112f357fe45571dea29433afc3e2004922b76884417b2f118ace6aa2a6be2e8a4ac27c5d703c36a5acb90003a2257e8dd80040552ba44fa94f681de77c2008c1c66f61ecd20b48a6e2f27359da6c25245772336d6a8626b59ab3499059fb378705d34c04635a6d8433f8467d60536d000e8209da81c85700000000000000000c000000aabc282e186e9164b4273b6e69e2be1155699b329c00ae0584b7f554d2741d48def6df5b32736b127a296038a6a84d18bafd90228757df494c54b8484d62ba1500000000000000000c000000c72d8f27e2497c6eaccb743589e3d727262c104c7097ea4b55c8a174dd19db6e080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000007b779066448d8f2a3e5f9470e24445773b0b200a7b1b272c3a7f74715dc1ef2c73d666652a8f2a3330983e2921b37465e8efef78e4951f4591b2295a3aaf19622b11300e7d00c8060a54d30d70df5b37bedb701d014dd530e5cf4113e981842081ba0544b4a66f58ce17042054a40f2ddf0f9b6c5bc9af6d37ed6d1dbc44183bad6ecb1559c97727a133f77e76532019154c803fc509ca1c00fb9271f0e9ea0a1c9d331a488f441e36ed6266158df23efb325d5e264aef1d8f4a2c1a9f86cd141686e5601dc76611ee5eda05f4ce8547ebd7751a094fbc18184b001637c5c46df3aa335a9065532724eecd2007d43b7e394a3a0121c45d244b100b79db7aba4a421e117b57c33508db93b709de21084c6542cf20da2ba0441634957a7ac29000956868233022ad3cee8f7d5ef8e0e71320c2f82414bd974741991557b265584675e20d2ccf3358760098fd1c953ccd119f045a6e4a11985defcc78167e4e732ea39b950c0033913859cb084f0d9dcf4eebd17b58b2b23532d7e6b46eca69c70c862c9d7ead07b760f37a09150f528c066a311c690c4bc366c4b55e2149aa2d48ba31d57d88a28313d40a7d19fec6bf61c849492f4505131756991869277c80580155df0e2016645649f22e12912ec328d49c78631a0daa166c822332eae9fd27e5fe6f57886f270cf8de90478641622709efc6213b212009f61eb50c592a2e3f08000000000000000c00000008c323625ac8ac31cb9b21278796ce6e517c5f490fb69127d097544f7a629c04cceb0c7a4b12ad731d41892015229120e4681d1012b4aa75f8014f416304a91974df0776da906163410f515636d0287daf62bf13a3c31451bd45f6484aff082de3972c4461c86602d70cab08f318385a6ff735442fd10949017d5d0d9d3cae464aea5764a51194310d7a5a4d5f6858009a9d9e316f56972aac1d5322b5bb9f372cbdb52b82aa7c3d8cae8242db084f38f2b5461852b88358a2f38730e3bdcd7678e26a2ec5d2e74d45ab890ea707c9437366d4596c63986245214478aaaf351ff45925312c4b7f3c371afc17b72c761c4caf9d2824d6cd49bf100215e82f601004000000000000000c000000d9451119d3539d107dc7dd19b7c9d430f4a30c6a39537b7395dd546b4b173a66a1f45054d63d7612d28aa433bc5ca011fa6aed1f50a4ed1763782d10ce84c41083e6cd38a79eb03dbac2a04a8eeeb9377198a1768c32cf6228c6224e4c20f41b96c93073a7caea633e8f6b1d1ba73609ff6756283a76ae6cb5eb6c67964cac5b02000000000000000c000000b41e537527c59d562d12380a2bb8f43e7155d20647e52f6f8d3c022520cb901a6bff5b0957ce060598b1400dca49a01891cd2a71405d7b4523b50f7dd13c4e3601000000000000000c0000004733985acdefc938f4874e21dc10034633468531f364d06cdc49595b0dbc7932" - }, - { - "public": "e72aa07d461ab45ae96249796f554a4683f9f853ae7e2a759536fe70cac576216faa6d77d162797e53fc7c21c464696730874607", - "secret": "348373c14236d64ae780f530d91b7612f0424248376b6c777709ed3f350c75be6faa6d77d162797e53fc7c21c46469673087460700000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000e411bd127a1a7c1abe6da90233f2b53b8664f0751c812a01bdd20529ae8fbf54296520242cd7056442a45077719ac1493770285d2f88d242cc3cbd6c86e3eb592535f264d1e4d4239d453e2d4c584c33f23eda0e679cee77a5f9bc1ec042a6074a7205580898340c8a21ba50ef0a134a5440e70f1dcb7b285f45f94abe6d5467fd78c2465900a842fc0c6120afd3b308fce8a71da9e8e552cfa805403a17020397ec983e702296440e826943cf76b2094d47072b4dbdd8590e4f68249361302546aba533f5a87b6bb35c3441655a0a44a561e2510b590b24e67b2e68632fa01d50b607564fcb220e551ffa54ad5496268740d143028d8c38761a7e734b3bda3000000000000000000c000000e5e49354ca31a23eb2986749ff96a94e3063a70aed88e2571464df1df1e22f4ca2f23f0b4259642ef673ce3de277083ba42b1524b53eef0feef2b615753b5f344914737ce2d3434f02c5393e2cc58c1db696d526fc48c00bf166653be8fa806226a17d4c3c9d1d145ee65d7a73019c24f54153080958dd1617a24c7bf9886a4100000000000000000c00000042450842d201a3656d1f372e91118a2a5aa3951a9851ea5b5f466e0d2c068e1791873642c46c1f1382988d285e290d2d3d16863b2d82b840156d490713602d4400000000000000000c00000063756e7885381b051d21400d70b0606e153c427510dd19529f16fd313ba29b20fd99a20265983860ac1eca342732273234f43b73e74a78778d21ba34336a207a00000000000000000c000000e72aa07d461ab45ae96249796f554a4683f9f853ae7e2a759536fe70cac5762118b8a90bb3652164c90e3b7c4f37f3569772eb4257a24b39495dea4e0acc5f31080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000b7353362682c205d8c319514f8c5037be4aad67cadf8211683fa5a4fd0fab129cc464d4c493e284179b5bc33a36564267e09b575d7dc642e7ba71d590a3e79448b5ef72c3d2dc32dd43aa154a0bb2e31bf0c0f61d5dc3a2a7e547f3ff018ce02e36df634ce02bc74ff8dab6f3b0ac62fa3f92979736c03361a70b83638a2187119ca513f4ed0dd1e34131a5d4df696698929f9334b3b7d1637fbed7d43a7982c703a441e6f595a61726ecb2f34675273be6e9772058d5802e04fae1da290356dc56cb4354e825d4f67b9cd7e7b8b423940e7c133803d7538667a21443108441ee059c302b0d2351a0a8ac707e98cd53b1364331f687e1864de4b7f126e5a124b0b42cf62ac4a115fe926c615291a3d475707820a92369748b691bb76547810252aa88d676c686c152d36463eea34460877dc9d721096a3501dab2b673bc1410b77413a368b846f7b23410729ac1f9b7e2bf4d67b7a92fb6a590bb6372e8c4c62f6b2be371ff1300e3e0bee701b36c820a5f55b4ee2e2203e7fd9ad2127890c3bdbdda82c144a29435521026fe1414266265d9b165a72a64d249e844aa19d426dddefd2489c37c062fd4a58158be809401047cd092502e2159b7c7e13b6cc5b2738b2fb16cf9be00da0a7db31cae15b722eefe004f61f7a63ce863f0f7ceaea494d7d2978ef15d51e7561f937e8040a1e3f857735e13f1b6356559900fd8a730500000000000000000c000000cb0b2175fc22335fa8675c4fc36ca3356ac0335389662806dd5609541195ed7cced9f1469fd8640c2d1fae140807ac0e9adc57501ff44e4decc1a5058c27fd1c06ccff763a644632b9d07b37500e026cb2e0773f1317313d53662946af5b2c47c335f02e49be973126e33376087cdb194c6c2f5eb423c721b12f5f60cc5c70001b0681333fa214723ae0df22888edc78942e510bdd90376c04c3642f63990f79ea9e4f4cebe0c919b63efd7e8163e86684ac8947e5844018d7a03e7a66a21a2cbf692e157664304c54dca52629855b447f44f87dbdb4ab310633b4653637eb5b6870df7390386c300019406c8122c022ceb3503914e7d72f80d730344141ea7900000000000000000c000000c36128067f162b7edecfcc7a7f0d1426d7d8234cb1f3a458fdda023b2ed9ef6381ebd325980d1d397011703069b12d126ec34d694b75ab669428544a1dade22a0c527f3fa4d84273419b4b5c2391855216b47a066dc4f61079ffaf0d2deaaa57efa2e32b8518a70307c7432ea936197d50ffb37d0598bc16fe8d7c39c15fb70300000000000000000c0000004b46402d7026e329ef29bc4e908a3a305034a12663122021d3c5171b47621a700a835730c3fd995144e7b87262e970659738ca072254524b14106d2282d5617500000000000000000c000000e411bd127a1a7c1abe6da90233f2b53b8664f0751c812a01bdd20529ae8fbf54080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000003b61b303d1f45168227fff01726d964aa40ca04af3f2455e8e695a007bc02065ca4cd8008dc6e51740ccf7512a09a0382422df6ed0e01a27b82a8305f766831d6a2bb63c5203f91a9beac1575848f01b9b9cc619262af964a66f4635fdd4125729615c64607af731bf5ca72046f23a2d9c40055cf4a72a269778516d4520ae5aea846a0f99d98c5307c10d771f3e0218f9ecd6203d8f00771e66e251121c9c5a4b40b117dd27644bdf38e647280d9c1d0a569d7d0382552fe2937022f415cc1ef56a620b3a340243968a851bd8f984310d60824d3b280322a465990cc324784edad0593e1e0d0800bb8884508332817e1377bf320450c3215a94fe03284f59483c1f3a276b692046d0a69c5cdf20a37d6de83d5093a8b61b307af96dbf1a5462f3057a4e35e43915596fe046129690644116d9752fcd6b40acf1f120ec2957142c8efe412bbf591a37de982f576d9c0a4a23a47a6706760201b63132e67ce779ec9c79178fb7473f0a100f25d4a5f812f1e8d12b18951937c299644cb85f634d2e714a123444f1084af8253210562d7c3b062742aca6a76d10328416ed4e85595d574d37163ee4479719442c4783810f53e656721c6fd02d16a5874bccfe7b6d6ca55728f7ccae14171a91544e320b420c28e214e3a08943e0cf2639241c256814d57e6b33c5ce0307bfc15a1e1f7d05b340787599117a4e06c254090af3480508000000000000000c00000070f8844a31278b4a974cbf4798d61c04c41e531c5b7c771ff9de61760b3f2d155013816e68b589319dd08b39dbe56d3357ce37349b0ac36a8622430a45d128043a6b422adef71c057d1f602b9018f357d65ce87e0508cd45221d2867f08be1076ace4110fd2287651918437be9571e5077623f62041d2269942e023992e0ae4ee23fbb4d9e72291c241e096d3e3afd6b39d31e5954c5b913052a6c3d782a263d80cee4384508ce646eb83c387bf6d0049e606c699dc2a317b1d82b4987fe842cf64c65657c256b1b837fda7d8994a52d07bce8002fd99963e95521447ff43749dd165f26f0ba3135c769487ea4ac1573f926ef2b8f9f1d6806f95f43361fb92804000000000000000c0000005ebd88021ed7935203309a4fae98cf5582b0110ea68ea95035df3e4e4d32637afe31294bfe9daa539c2ff83a6178c4416257b91134f66944edafc43d30c8bb512a09ae736f95133b95c0971d98bdd56f7ca2df685e0b8a2a8b75ec4793a493513797214f91c9683afd926220daa1ab081d05db5326c5705df64a1b2910c4de2b02000000000000000c0000000db7a275127f161cd344a65617a77d4b36576b037dca3e41d8c4700ac6a4f53b1c79875dd6ef2c28979add5252e6772a54cba955cd66e1557a73511d62da187401000000000000000c000000296520242cd7056442a45077719ac1493770285d2f88d242cc3cbd6c86e3eb59" - }, - { - "public": "0a56662c41365d299d03405bad5fb6294c730d3c2e3d814f5df26b455e802567a762e4287db7b272130bc02d61de4c0e6b99297b", - "secret": "8321d62806261a929425cb1623ba72ba4e5535bd055ee22346933d47b780ec42a762e4287db7b272130bc02d61de4c0e6b99297b00000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c0000009b7bed40cd32ff558be859664c58a86a54f14546bf552c08d376732235c4e524030781794bccef20624b80465213580ca4fa895c2fc09b2bdd601827423f232e6f70003115d7a162247e5e31f18c301c7714ce7ec74f435d1667f77ca188055280d3bc58fab2e8693b57616eb623833aff2f7706201dda4ea44cdc78ea85460d2bc3d01ef0d4123e2a3905295a30f2151551be2caedafe52f87f146a17a4df1f45907a5c3dbbef48da759559b317154d90f9677910ca7769104b9741d879c0165370d247a39d5f12bcc4e63d472a0f791f1aed07074ac36e5d45265f6ddb7f3e17434513300de333fd971640af3c683455e24c57a0363436ae14f467eae09a3900000000000000000c000000cb770d01d2049463ac680428b740b32ba783414a29f5051b945984335a27e84f5e7637135e72a86907cb6846a5a04d52eb6bef3015138f67b129c30a535e586a603e4b1d3324556e33a6514c1e96fb6c7d844c76f8c3df5770614936ab2fb834ef5049643243d26e6bcaba023d35966a2aecc45cfe10f67de5a1ec7e838c810800000000000000000c000000e973de0eabd0cb73f989fd38893c56327373732f3ddcfd76dd53107cc33c9f1920157a3491287e3db0776b19e1731f11b8bad435cbdd1b4b851eef0737bf264000000000000000000c000000def603136f623d17df263732dbfcc47d5c5e0f7504146d37ed1a4d79b0bf530d95d5661309acaf7e0f2ef030d1fdca3b295f98116953f84e76463e6d2ddfc87200000000000000000c0000000a56662c41365d299d03405bad5fb6294c730d3c2e3d814f5df26b455e802567a80c1a30cd78791c792f490c04beec16f9da69375bd3d248d5d9642c65502155080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000008454b61c9fac3e045eef4b725d4ae74c1e486a0d92c4db1bb797d843fe6adf027a24f513463496368dd25f5b6c4b0b02cef7da61d298bf50381d0a6b29afe877a8ad5e1d9ee2c7717d33e733f79ab664cdaf8e5b4a4c041f7406f60e65e4d954cd74b75aea0c123a223dee41e9b04c332c234f0952c64605b3f87274902ea74c9b656d2263100805078eff58d312d04ef52c075944fe82273af57f783984525581800660b5145e05f453df26766d941caeb0ad6eab069f5d2e9251130790ce05898964152de01375ba226d524fb7ee26b69b5c576fcc567e05ee65048a337c4d925dee7c627d11018a48d74829d65953d180ee3907634d537882933e11498772796118091f2a3d76d1de3a478cc9aa32be58bd622fc91b2c9d013a7acd5ee555076253332c801545836e0a6b8471442e69ebd707a813f60c6c5bf36656190969ec061d61ef1f2c6c4bb8ad5289eaab5dfbd9334261efab1db7757915ce5a30412f187e232e23e50c76d9327949b43c3610407b465455286deba0914a9e882550f604a047f2bfa2599f0b17010bbdaa6a022a5779d999d7042fbe5e78bcc85979ab942a73680882515d2ee7288edf865531803b06f2a249345785052395925a19d4dcaf6319ad5036185a3171a945737e164c104c6dcac255a2e4cf625548641dc4e78e76a1c190320129bb40670457405e424415a28e6b2d319bd079ffc3572d00000000000000000c0000009d56924582659112f457485eb294c724988a5a56536e50723115a0585514eb42f6faa06da1cc833873f88244b6034c4fde68d84459c2f64aec0a4f5cc039371b6db1327d299b426121fcdb293fbc7740424ef4073075b5660534a82f3a32a553057b2e6abe559e1f4f548826094fca6fb0a1676346240d1be96e55076ee9532ece395202dc2770025fdb1a2f62e22e3432691b1e23994f3bce75f443f73029372fb6c31f0f175e4550a8df436f865e481b97ee26d8a50d085f528a04fe1f4562799b3042b079a356bdab786bd11cce70e9fd2a792cc7a00cff51f60d818abd7c8a48186171b0f6209a3ab42459fe4d1a83cab81b1c49c771ec7628078f03720200000000000000000c0000002f1eb440a29a981ad92d172581ed891b3bff68230d896a7a413ace7ea0effe2ab0a3163a895ba072019dd2404e853a0da6b8457ea9390b0c8788f40009dc971aade0ab099b717c4f2b7a496a50c36c0c7cfd474a03cd8c03ba0a76367cb8723caba0a0709dbd635e79c77204320bfe0f7461e7271bc5454a607e0b3e15af6c3400000000000000000c00000025a90e446a712560f1ddf701ff57ba19866dc411472e6a2e381028557acf381999a24d67ef7c34667ffefe5c2962196a129e6706b8338b1b0941b465635c752300000000000000000c0000009b7bed40cd32ff558be859664c58a86a54f14546bf552c08d376732235c4e524080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000044878b5ce392c655a08dfc7a9b79e579aa4d981d91dff2783e5b123c5b034d106a3bbb36675aff0837fe413608e10704112c5360dd38624a70a09570d8004b1183dfbf75cfc5df1aef958f403f2e9a3f6b29cf718a059823911eb251f89c265e4a13d613b73bad6b1d25b742bfbd426a9c0ea67320cb025b9ae7c962b9b34e188c5dae3b69a68659683970692c4da23471a4ef7e1afdcc1b9ad43108cee034102a5e1d37cb9d3f0db47bbe1b71a1af1e35fb4f0c40c93057347b9b193029337792933d4ed2bb5e16795b4737380137526e79bb79a7c2445f3d07de5c6d491d2715851311aa014f132ab56076b8862b1e1982823f585f9b4bbe106b36fdaec671e35813290bb53a2274c4524ded0e3305e0df8b6f3ae7326575812d794d0e7043a210b3746a2e314d4ed4b2635b7e1f31fdeea428174fd916e41e5f2859543407a82f671a875bc4155b8df8621ef87a4a2a185c2ef4d41e6c5e096e445026f503fce5d87246a62d50d17854036aab604ccbcba913f18df40a5445ac54af80aa4e72cb2046cb108a716e3b640d1265e84409843b6baafec9523f1b256d15121a4c155e3f1eb3594c7eb5c9c44b3c3e29031fb41a5960ea8e49a354dd45d8031f68d6c1670f6ac01328f32d426bd4b55c20abb3631dbff8686c701a3448dda0876f8589fe01194c6569ee2aa73e3f3e1b2440f5006a682590131e912942a994fa5d08000000000000000c000000169cbf14c82aab0865456908cf3d1d6476a65b38d70b085ad255d5603367855e4abd01252b25be369429c82b9a09a04a1e806e12e9cbdf1c8ea0b16f2ae9f379f18b0d0de99d753f478f813da0375a2980bd2a2fe3f5d4334ed7e85940356039337704663cac1f686bf9075df926e427b0b07c3ac777295b4ac3e703f6d3af6062fdad4326f2807c9702550077f9390a9d90b1001dc3b805d86617264de4dd2bd7b6727b355877051c9b57117ba5b479c9ee2c5e49181a314b23de78b34d205b53215a780983c303c75a8f7e1af54a3d1e2e56075024e140cea5e61f6b338c63c3ac141a46c757124d31e66f5c3d135f7a820c0649400523cfeba90ef12ee37c04000000000000000c000000292f45076c21e9541c59926e1166b16c09d5862575e8445a6302d61d43027c43f3b0cc6976014a354684bc3078623b25ffe9215b37ab713032690474cd1fea3c12574a4312e525635674d87934281424a0bd0e047a5bc825faf3c05f80fe013033659045e05b6b764c60535072e3ff3f3d59772f85c8701624f838232eec101702000000000000000c000000514cb12128779d6a19a88f6cbb7c004cdc11b64de9eca573bedd926b2203457c9bb28c1c8ca6ac762e1e432cc9f03008828d78180bbfd270d083e14a7adb076a01000000000000000c000000030781794bccef20624b80465213580ca4fa895c2fc09b2bdd601827423f232e" - } -] \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/0.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/0.json new file mode 100644 index 00000000..9fa2e44d --- /dev/null +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/0.json @@ -0,0 +1,4 @@ +{ + "public": "3b19b13f70f476742091d1650c5661235e108200c96cf92b09e98b33d1aee263df3b7c1e68ff8a3caca4f74096a14d03d0d2d149", + "secret": "e1096a9f0e56beaf24c829cff9644ffa5747dca5364fd74ab07ae4201c88b5f4df3b7c1e68ff8a3caca4f74096a14d03d0d2d14900000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c0000004521b54133760e2aa65dcb16686be92cfc89e75a82303601028a7940e92423524f34313d1eee527c76108d7c737f0c461d719c53d1cf3a4d0baa4924117cc1168510be30f6a16979452b861416dc2f6efd71935398482373cdc288546fce9225dd41042cbaec3a22bbe5761c80ce276e73c7a42a2e79362e1ed46a1c1dda2259c8ab6e2bc1dc9668152f78507e5e1a33b928802e8a76231675bb215512d02371aaa214117f831d3d20523c59ab59ab0da62ac2196ff69c27b4689e1e6e86e61807057d14a2597923a8e8230904d0e54527e5e958c555c446c37e664dc8ca9161df4cd41dc0b0ab3e8f808b4d7fbf494ac4661f61e5dfd2517d4a220876ccab6300000000000000000c000000f72a622f0e60185235daa763ac351b41277aec33977a0033b13e932a7c22aa4178fa915827d06a2c6178f01d4fd959033d4ff32c8e4a0e0ecc3171461b0f4c0c3cad8b2eb6006f60839b8d4f4ebbac5fb6d822705f2c0047d3d07b0072c75f2da224ae176d4c924737be546f9cf8dc642615ee7989d76c5e820f0145d0c8454b00000000000000000c0000008cd86c59327ddb6e6dacb11dd197285e8075300e9b1c433215513c2c2cf97b23a0493633f2e18848a930221635ed187c45ee5958991dcd2925455c3839c1fa0d00000000000000000c0000007f3aa63c7bc8a53fef6ff047393c676c453ff57bcb3afc3b9e7a1e1e67b26067e432f20cf3a43c0acfc72225d58ca91324b8d22876a40c4835dd85559194636a00000000000000000c0000003b19b13f70f476742091d1650c5661235e108200c96cf92b09e98b33d1aee263c7a26743f57fe8098e5b1b742b0de031e6565a2efe90dc6ce4002e23c7c66a35080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000b1baa455180a911efe77490cc530a2531637b4350f814e3dec9dce6fde8aee16d53f636100e36c05045e042bec46cf583332372da5d6e94464a34f3c56d55053542bb92e7228814e9b228b2cffdc4a31bdd2811e56681f5eda411a3785db5b014cec03569b01ef4c6b1baa28a5bf044be0fd42196740511d758d5c121df6d148d52ec54d5cfccb2468cacd34f570951abf7cd0388ebbe822de477a4faabb751c4f49c513f552d37df4a3d93a544d110aa5c58718a4a0961695f26e5fa75048656bb79a73023a40575c43804bee75e04f4ff9b122384a5c410759796d70661e0a1afaec6ceb2e434653bb6511c99e467135feca5871b9d50843b08c1cb1dd480d8dabe31c642a7d2a2107f868f76847116f344e7d98effc0de59cc34554c4900a2d3bf40e43e48912d53718627a297709a9a14a0340274e1962459c49d15d6d7a487f491e5dc9383e72676b14f810c9453bfa2c74228a2d1c746e8a7b8f65715148ba3448e9095a6a7cd21669a990a774a63eb1539d1bff65601dd1216b4f2e104e22673009fbd03ae7b6f37be7aba205e8b16a6d83e7a90e41be9c122c64e554e7af9931f5d9070020a71a0ffead401d1cf4e41ffb5a206f8bb0540281d2c3598e38ef6327f6c85bcef00251213ac81ec76ab93ed2e77e18a9c5285565b053195b60042e5ed13924ca670b1f2d13631d20c8120ff9dc1e5c4e7d362be052986d00000000000000000c0000001435456cba5fdc6b0916941a76b095149f80f41f35b79f4f54ce2b028359a26309d44871dfec796cdb8d9c28e41ec15a713aa072c397e7030ddda06edba6373848eed85bb2e5a44956b8a05273b2554fc5187207a95892721375722633683d6a8563f728e82dd6121286a2363aea390239bd352da57f4149090ec824c221fb095a65f54e3da1c4583cadb377f59d3f197ed6b315d7decf0f38cf0311d56fc3762d2e25514a201845d9e84e71ecdf9d64faec581aa5a92879ecd86213b1595a27b6c7641957512929e81fc318a930414263699107a619a22596a3e023d687b45039a21036b342ac3238879d1140d85a5aeb237c3454c9033e90ff3d335d8c042d00000000000000000c000000ea9eda3325ebcc11a2cf34551784616ab47d7d12c3a6995a85301e141960a948f3d27205b0e96600cd9d1a1d975656626ae1c572ff9d1832d2294a5529ebbd0dcec230450980b152ce507d4ec7487977362775684c0ec31cfa90eb2dfbf6582eedab537a97975306d5618808a993b775ec301d6d5fb3d30c61d0775c53b3623b00000000000000000c0000008ddd06444afa605313bb75509f77c73e08251532aa96f71003707924317bf615fae343073621f21b65e89c280c8a5a1f07d2db1f4eebb356e6043c38cfce7b0200000000000000000c0000004521b54133760e2aa65dcb16686be92cfc89e75a82303601028a7940e9242352080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000006c0c1715f04b902d72e6496d45f3716c23cf6949205bdb51fff1e97cab2bc021310ff24a42cec50549a78c4b9d79ac465fefeb30358a5e3f8456dd03d46f5105ccc550269df2172be927bd4065e063625ca0ea0c1bfd95477b7abc2921a26b08fb89373fd4a9ac47e88603781beb660e7114e870dd2ca96042435f36ec44b548461c8a650989e2754eb5317b2588cc63794a2c3b29685351ed53f56af67f62426eba0f59ca1798072e71d25bdda5443f046cb5314b2f04130eefac3a4de14d64975b8e7df01b45207b280331cf26022fef97896527b1dc356a820e0600fab00e59b4fe29ed153d2ce334f5097eb2d9699b42971fc3c8ae0099f1a07e7566ca1d63dfbc3c8101cd6703c3ed293fef7b169762d63ccb86d26591aeb049533ff561e2958c31f298eb746839c42b1a37687955b54d13d6b2d9403ae55d22040a701b2eaec642b5f2a11d11d4a47b96101a037e63d2025114204831c12a600fd63d081c12661209e1e942ebbf9439d8f049797d1138770d0a6b305729144f0839467e61ccb20e5cec3001aef4601a6f08f831e606ee797d8e33105a54b36bf9f4df33859e9f1428016001c7b68a72a54fe02451ea723b287a7b0bcf06cd4008bb6e3988a73d3a8e2edb387eb34c51f324907d09df2330d1e76452c5b48a329c807e67305df81334fa8d223676a403fef5ac56166a3e5a091d162260f339579609412c08000000000000000c000000665f7c4093768801e2f3b651f878fc635a20b252c85b3643bc1a5e4299435c1a44dd7f3a7ced9c65fb44d03f841c1e3a8bdbf37e8ae10f28c4d13161029f317d63b1bf64bfcfc531a82e0654641dee5cc13a15129a965b0c18fe34464534a3365d20af402292db67b8ce2c2b86d6827eba472a5c96a6f507aa3c2e16ffec743a83c617600aa30b35ec12c703845bae1cac26d718557fae09c29c4e6635793f555c38363bc0071235270f0068833e4e525513d206e717b1492c41b74b85356f088649fc22624ee84bf42e625c3bf1911831465f7793811c6c0b57e624d0390d2f5471d13321551c125745e97ef28bc426b6490409cb8e8e158c87634290ff361904000000000000000c0000007fad7312031e2644bcb8df297f24f62bfecff924d402cc083945f8314a1f810a3eced866248dc3352fe44363291a7b11addc2a68b187c75b28c3b54f2b4030246de422332f79f00716ec410b1ed6b1298bb22b448ceec30b6a03bc49255b5d3a38dcae3bdddf0619c9882463f5d18520a0af237d2905a76a70122d060e06411102000000000000000c000000c9619557fdebef24f0e9ad4bdc8463651ce8a779f551ac41dfc76a3ef64786794c85e23c180d7563a1a6c70c0510b26e9a6e7271df9afa1024ac2e6fae2dac0f01000000000000000c0000004f34313d1eee527c76108d7c737f0c461d719c53d1cf3a4d0baa4924117cc116" +} \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/1.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/1.json new file mode 100644 index 00000000..32f6073d --- /dev/null +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/1.json @@ -0,0 +1,4 @@ +{ + "public": "515a87739160ee34ef78df6294e69b7d3cffb757d29062027dccb41b13900c35e41ee01817a004470ed9b2191042da72403ff301", + "secret": "fc2513479ab274201e26899e72eee9fc65d753d1c7653aa1ff5467f721424024e41ee01817a004470ed9b2191042da72403ff30100000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000c6792e723813ed07c83f736498ce1801bb4d7a213ff5af6a57973c24d651d830d653913cba48d01b8001944ebd15b764f3027770eac2f37efda08420af1485268ca07117e14e1b4d659d03023279065c043b9023622cde6ce360fc5c0eca817d1991ea17ff78713ddfd1ce32be4bf2269bcfce5f87e8ea22a668bf6fa4987c1453063234e6bf536a9098fb54ed054a18206fc4314897236619b30f3e71af4a25dbba9f5280e91c7c7280863ccf3fb0095e4fab444a03861d37b65e07642d5474d13cb665e385d5757e33c744f591d4565e5db46b3c94480308c6c74a6d92683f7a565666a9182c0127cb491a39f4dc40d5c7434b5e35c072099a06596a28771900000000000000000c000000791c3353f0e0e7108e78ad10eb8f5f4e1427e06f9f3d884758b105776fabbd77ab202c70075aef4681c13833e760c50a480c5c5dc9cf7c2488446d7b70dc865f05e0df142a12ed7c97b7347250f05a50b1b6ed4706d1840041074d35ccec786dc28c0d3000f9b12532ea3d0cac9ed245747cb127715dc82cc5cd1313bb95471a00000000000000000c0000006aee382dcdc39f08db558048e9047743820c1c6b3deeb420db257b36e0217b2386197016b628a901cdb32c77b1889902dd28c5343042814568a2b14dac3b664900000000000000000c000000f0c1f66f5028a32baa4b712d279f411fe4c75d631469d84b4c54133d12ef905f2753130df825fa5ffe2fcd618d1de927025f7943f082b304e8a39706639b0a1700000000000000000c000000515a87739160ee34ef78df6294e69b7d3cffb757d29062027dccb41b13900c35d6ee206712c4b63000875576e6e0ab4e705d7734eaf32d210bfd91419642f620080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000f11f7f3e02700053e2f5de6bc3ea674946ecf01dba75a94efb520565637b640923f9b3713368f40e35568b208fd13f10adc80c3f474c1677e3390f459557525bd6a2f95d8ad88761c16bb6241e2fcd46acf5a41cc9a35d5fa4c54d1ff57fb926b6f7a84a0e0fbe15cbe0e141d8bc9e4c3113e2276befc415021cfa6d35c8cb25eb047a05074a385a8d18e03b7ba8d02eb0eac31df3656259309ab63a4911092d79602006f4426c2546532e4c29838c07e9f9be2105413106b5de837c96a2ed355026746277c0b04e4ff2384c5bed2b738fed7a2da61c581c932c9e66f9044673916b047553ac2817340bce756e29c2432b0b775feefd7b4edec3a656304c2761005a19378e3aac0b8bd26d482ea71f16dabc4a1821f5db1c3b0bc76d2e004808c61f92513115a50db3ab16590be93145ff2274580b9fa753a8eae939f35e5b2c1395f40ff2361311a2b38b4371f22b2684363c1968218851b126f4711f6187533b34fe37beeef13af371547e53e3364ac847515cfa49362266944272f83f182d6a5f2c7bbf690e2c73589e072de14f2b5484c6721966e318f4a0950607d8024149f72b5f6d8fa203e5d744773f0aaf41e71ded43a8f3a2465205fb188858507ecf85ca076591f958c365544a9ef3295ead51866a6fe7f604a555975ddb79b8614291125e375d395a3008dc19b9569e1a6b2aa90d6a66bc58540e4017db95484100000000000000000c00000011db435cb3aae616af5a4c65ac25c87cb0cbb76505ca474dd2d1be515d6f972bc7d6af3e3c99f104849ebe3780cfc26341d8ac4dec5df13bfad24c1806b5716e2c581750b278bc5bbef66864b9d18f1758076f4480aed9077cebf370d8a63667bba1d454af6c6f162e9a1b4dc0c0504baf832721280f4c3ec581ba32b77a0b55fa8f7b37201d030354cf3c0f7e3a184c4409a8005613d71af4060f2b96900251afdd4e60b20aab3f0df2022b523de25bc0715b029a893d191e0ec95a39b630670ad7fd1480229244eb7c2b65ae3681248a6c1c7718c3d564c32c5302d96ea7710ea07d23378deb5fe407ae2a9ddad73b07d0af6bb5b6653de6a3683032a9145a00000000000000000c0000002fb3176bc057af1bd462da4dbaed9d432907f96c3931c15d1fec6d6538af0f6a264e0642dbef331dc6c9f32e52f4133398a325682509c574a6ef97735ade2c5d31ee1e7490294c7df540824d090bd408ad291d3943957600a7b97a7926af5d4ad127c45be2bfad3ffc0273123e0cff14e6b57d1d2986a96e597275214113f66a00000000000000000c00000074844f7b0d3bf97e647d1101162306403d53f63527b20c6a67352a50dc6f794722f8ef472ec3ee0d2b1ae310254d101a1677b10ec1528d2e05b08a68348c375500000000000000000c000000c6792e723813ed07c83f736498ce1801bb4d7a213ff5af6a57973c24d651d830080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000098d15a240bb3df1753e2aa2e98f7300475b8c774df283615eb126a1f7b8e84432ba48033c68b6614463bfb06ebe48e0ad82d642df24af511bac0e25bdc825b1da274e6499ad6be3b2e44b0169387c044f208685718641e369e2a9a60471a970ab122af2d3aa20147ed386914ae01d2455fef7a2ca6cc010dddcfb669a3012b2ce17b917ca523cf5860e8ec58cf4eff7917fa026c0c2e0e1c75928a2ac1175a19bb410a52fba35627f7514554773a1a106e2c6144803b76751d09973ddb943b476c63615331c6837e89367b7de581bb032a9dfc3ada249c3ae4bd33013a84294f1cae760443fb6f3632331373dcf82b398e7f5973059da853f7abaa457a54675653c2343d043a7063d0cbdb2cba8c4a58f362f212ce505f0146450e263771fa75f1658e59d74ccd41afab04046495db596a84e028a7b5bc07c7eb8739b5310c3bf7012520267ddf16822be23c72ebf5565d1abb61704b103fad5a3d5ae1f7c53d47872d6a0f68f10b078b3911cf60d85b508e315c39afe91d51d9c97cf2040e5c7a464d393815814bc9a9c1002947cb3fb6307e73329e503fd24b5f21c591692f4d5bdc53df334805b7d8ae58a818314f10fc2f3012dce030531f5d1ef42b571be50a3609fcaafa5e04f2576f12c5cc4d4b838f62543c4f36b481dd54967a0b3f8e565e785407226778193e2978fc5b13b837365f7f08756dc40e8755c86d3e6108000000000000000c000000e144537ac000155e1cff85287d9f4a5f979e67660fedc31fa344bb41878b3a10d3ff1a1c26bec3234c95d9753671700dbcee04596f882f42577c0a325d561d69dcba5b7316658e1469888320e3a8052acba71635c26ad068850ae340e7276e3d3c99867243678c0c85914c613b826714bfdd7c62b65c2d4db2c6e36b4e80a2505d90c035611d35603fd05f781210032cdfda5776d4a2174cebceda0f3ed00f60f83a576cd207083e4967476142c3a05e405d787430dc103750c7ee038cf7ed7d7f8797752053c701a8160b4fdfceb848e648a17436a55d49862c5f69d933d6600da4ae53f41fcf6956fd1d09fb75286935b6304ac386a670e0c8fe09344bbb0704000000000000000c000000e49e4c36bd7fcb6fe8fc7a609eca5d1a6ddad14a269b1863b2dfef4a47e2ff0230c5735bbff7b6788f562066f3a71a473f2d3a1c2ffd9908be1c6425437b2c4f1abd65648808ce4676cd85343139f573dbbcf70afc3a46400aaaf8661e2ec544e6386530c033a6271a541b2bce97bf047436274f3e1ef3384151b428bc8d606102000000000000000c000000ac2de067d769e7153f0f126f104249172cc1ec146b01bd2965121932c2ee3b6272b105188ac0281d77e4e5058f4e232a3613a1050bafc258c25e4c01998c321d01000000000000000c000000d653913cba48d01b8001944ebd15b764f3027770eac2f37efda08420af148526" +} \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/10.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/10.json new file mode 100644 index 00000000..ff144055 --- /dev/null +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/10.json @@ -0,0 +1,4 @@ +{ + "public": "f443d0388d58e039c90b69265c9cab36372b8e36fac1933142dee95837710c4c35da4b2ab7b25d3566ca1e18067a654e0312e73d", + "secret": "38fc9d37f582ebdd089216baccd84afcd4bcd9030c04e838f9317ba1ef6a3a2835da4b2ab7b25d3566ca1e18067a654e0312e73d00000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000e26fbf3e94cc77568b9b0c068fd5df2a677ad42bf4c2705b37a07f0eb1ec6a163db58e647a003b31da14074c150e1466bcabea20c3c60b57e4f7c620c76b1c4bf9abf76f4107ef18618a46078fb0b7797e66404cf823aa133ff569502826d759a20a9240ce98cd21cb87782e98d24c45cd7da96c0f46000d4341795f791e3a64979d415fbd422c1b94606d3f9b32343ce2b747561e2f2944389a30140801f3544e52ae1e76580638fe716068a476d55992d0683d712c5455c5f6c6019d5ca507720cbc189164e45e49d1f61ac5c00150e1ea3f5831b65966347a365ab4b5073fb0d5ec486805d23e2bff164976aa095f5c97ae5d8fac4030a37dec5ef720450000000000000000000c000000792e841c610f0c0b60191922ec7a6f761456a05068e2ee589ff73b5c0d3fea1045778a0f9e8a9b14de06e4269433c6001a3cbf18275ea3485f981b2750ec54745e839e25b3aaf60861fcf34e8ee10f2357b3785d967d536ce1eec978f57fc14d1be457110ea033008787833aa7fca27309b4c45d41b9535b244c1d27cc833f6100000000000000000c0000007fdff03c75a050094e11472789ac1c3761c31d52088f727529fe7e26df0c9565a5bc3379dc46ce00dc3bac2594a1fe0d52dc1e035c80c178ab1d1253ac37604200000000000000000c000000d1bbf50b5b68c24184db8b2a9527e6699a965c2da27d653c1d2f583631ed1d18eeb42b32749da912fa91f14547660c7e904f611a4a2a145ea8f384096964f24f00000000000000000c000000f443d0388d58e039c90b69265c9cab36372b8e36fac1933142dee95837710c4ce8c9424ef9889c2ccd054a390e67d944dd469e1a674db20ecc852b143ba73715080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000002a06584a0c65a516d61fe932fbfbb42b85dc9e114d78343c35b9bd210995f62048a43f4d3926a273ac8d9f67c2f2f66275c7a61db9f7f93165e2c72bcf573b50c974db73069df353912b11651de3cf20e508076e20a6521c3284805d0ad9317784779912f2e7b578d12a89350f73345d5585dc631e5bca4d56caf406beca101cc78d6308dea7d40a418a9254f07a9467aacb5977fd64115ce4a6a27a5fe30d1f5b86d96b3e37ad67534fc550d24a2d76b793eb39f683970795b58f710b1d730812370d56b6e68d2f63df5b589b06dd02642d1e437e1134719572af387bc71d6122ffd728ee0d45718ea5094f0d4d5f4e31088a41cd1a4d384ba3ca06c7be311e722ab83388726753c6f30608a3456e46f34e4a1a3ae1480055d6284b39710f71bef61e2d3985287d46bb0635b9b84a5d51daee00cb38683f5d800a199d161e6632a8917796aeda7b41365a75e2d7b4345f6229236ca3b23514e8ad35fe375032e2de873a98d226515cd6f446ababb461772d8d7ca33984478d04d3777b4c9673ed45691d0bdec3529cc97e3d3109f173094e421c59c7056a27f0f5178828ba5b9864dc36dd599c7af47de53d6199572c388497705ab4e03d9683284889901f643e178d46401a4f24e7ef140166bdf81d718e824c93de637a099c6d0bd70492579109fa093f14ed2d13811249adfefd538fa3c169d0b6ac1c749e2310cbb5851500000000000000000c000000ce84136a8d472d5b7ef4ee4d2cb6ff4ed15e2e7872c57a48b4f798250701f12b6a4cb82f3797583c3522b44e636f18542225d214d43276757f1be174d6993356155e034c05782c02a74f9222882e605937f022482402ae7de27f9612a7d9716df7551d5fa6c91f2b5ae66a3964ed1b2603f56a492cd88d034330384ee65f8207e9aab001aad7d15d34846f17c97f173c8352716a8c5f2c4fe0eab84272b1c237bf2b170fb083a319945f496226ef5b00095db408c11c7509fab2c552e0978c36a7334a4fa9d16b7903997d0fce0c343e66e05474ca44976acb8af479750be0099bbbd223a3da7a1006c7511ddff84c5f82da6c75a7051b147f3a1f0405546b0300000000000000000c0000007047f4138ffddb1fa4846c678852e71fd461d42f5b2ade1ea11d310b80750501dfd2d41d085e8455c6bbfc3be6252f07ee819a7654391b46b5de7824e444436b52f6e8342227127a3e60d65f281f6c0bcaf76746d662d21ccc2baf497e91500f7e2a6f2936780714fdc1570d577ea12ec4335347097d284169bb734b4dfa4b6800000000000000000c0000008d89ad173a655d30ed04b64f0a2f42319400310e33b48d3916c5e8242720ed1123c9882fde792f2ef00c735d121cd71c31cfa23159afac602add7e1a25d5974400000000000000000c000000e26fbf3e94cc77568b9b0c068fd5df2a677ad42bf4c2705b37a07f0eb1ec6a16080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000e4411552d39b3f38a554005935e42c068e7217360556fc17ce5bb0754934f27287fb88095d71604848b81a6d2f08db64c22cc063daf2c73818598430d9e00e2648327237f69cf60ce8bdb30771916817aa08376c98cfdf3ce91f052961c2737edea4e20760722c776d148c26464eed656799f831ea17b21c62cf051bc93b980a897cc04a247d6e5fb026da09b9cdb77e3161b815f37ae44afcde1552bfa7fe25ace20c1533e0cc7628e20352a4c3107aa3b95b49ba61aa134f1fb969905f420de52132094fea3f694e8deb7a6d63241e5ed1cf6997fa7d32d557e3447276003bd053ee25441e6d513c791c6702f9a97839edf727bc53de4e9b2a8d679202a11906d1c41cf17ba069773e7d74c916aa24ac78fb22b92cb03776c7794351c8fb512d30a430069ebb0238a4696b6430640fee637039376f33244c402179fa106a15b9046b4795e9167d0bd56839e9125b1b378a5516d816393e15c646138bf990600ce6cc6d36e451622267b4126fb96c7b17ef6b3fe5ca56495305105b1b6f5401ac249226e87bba0ef65bc04600ca66184787931705f033270bae887a12d9cc795bc48461b7c1167d12247b5784ad38194498a75df5d22744c9db0c65f007937b457d6240197aac5d9210e16f4ea474306c16dd18a25fc7475813542d03c1ae4c7816de059f981e14dfa6864d35815115e0703b54b2890e066bc0ce4c0eba320108000000000000000c000000b37b107618f86d11963bfa35a5017d6cef59203949f2e80398768c7698cdfb35b3047e0f0da4ef505f7c3e2d781fb051cf7e800f33b83219748cc720eea3433cb8309b5f9ead2447b3537861e482594ccc8c4201bd765f3639717405a75c484dec229073285511776054022102435e6476049342e94785530ee8e021ba08fd5382ab2c526407402cc5c22c0e074be36d6f292f41d467c71ae430d074c410a275cd665b0b6b5400676d02db7aa5401a1175c28d434d432503592eb91dc6c70f4db9c9100b44d13c3739edee76539f6d71ceb17c5382e59263e17a2a14c7d429398df18b5da55ae95e13ca8158d3032879e120151cfb207b08427790710a2e8b6504000000000000000c000000692bc203529a254a90a5f9706bcad233fdfe253cd973d03f9737594da0ef574ebf4e134422c49a0962b0ef5a8f9bad36d63eba6d4c622308341f9d18b855891b51773202bd9dcc6af0ef65045a52414f1aaea375251e8471f8a6761179e8f705f0c67f5553c00a006c62c470ba2f2e3068d763351383aa21ea26712f1d29486102000000000000000c000000bcb6d43648e17e42ddf3f96fdc7d2c425acd76152ce48f68bb0de45980fdb969fd82d66e85ba6940e474ef7694381b3bf4926c421de3e66a4affb35eace5085a01000000000000000c0000003db58e647a003b31da14074c150e1466bcabea20c3c60b57e4f7c620c76b1c4b" +} \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/11.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/11.json new file mode 100644 index 00000000..438e5843 --- /dev/null +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/11.json @@ -0,0 +1,4 @@ +{ + "public": "d72bba5b5b91ba4b504aa7457c0f6865cbc4c60cacd31e1e10c3dc0ef31ded70854cd0599ac6df03e2845069b990661c18e7f474", + "secret": "d03ebbbdda601b29de160d5efc4b490449cd40bd20fe1d6c2d3dc06bfc7971f8854cd0599ac6df03e2845069b990661c18e7f47400000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c00000017e0c92441a9df67e9dd7b409a6b8606cff9e244e4c7001810e5e8712af12a1741f64d4b917777739b4f4f484764cd5afd7c985a87943e0df07f0572a1a7e137ce57fa089ca97455a61e0229d9772110e6f1d858d0361d583ddea62ea8d44d1d595c843e26045f1ee2ce7d445ab7556bc938335bbe2f8b2090c5f826443b08242f1c776eab60787496e2326b8036ce113ff2034feaba92163692aa5985aaf4271739ef640156a27dec428c0dc985836887764a5bdcc73403ba28d50f5cfb2b6101e60b5ab2bacb4def574f2c37934f3a75782212d65a2065cae9b6115136447e4fa68f4eee2eb226c340ab42f27b571b3d8b4f01a35f964e23ceb2317e806f6a00000000000000000c0000003d0b976a6805537685135d6028bfde43da9e1b12b453b60970c78a6fb0e8112604727a4ba44eca031c9fa9443f352c3221b6133dd38b27389c6f2959fd8e8c220dc3314ef241a56a0ac015485595ae59fcac82665041d15c1aa83b19ed50c30e7853db11800846452b71f3346f555d06e747853a967b8b1a7449201c3d4abb5c00000000000000000c0000004f7cf7669e932328226fd92d5760d050bb59860bd0fbeb0f7df11566efd276778ecd36399dfe9264524124705bd8f3152bf0644e97b7273b1a88fe14070b317500000000000000000c0000008c98050a7ce923410a2d791e3661250fb1513e159e07347401d8cb6d9b09b075473ede2ca30a1656136df70690c5e5669dfec47b90f6a000fbb5d7512285d27d00000000000000000c000000d72bba5b5b91ba4b504aa7457c0f6865cbc4c60cacd31e1e10c3dc0ef31ded706bddd01df94b5b26b172cf64187d822d8695d90828ed432a5061b743cffa4a6f080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000fe381f23cdbe740f37a492593c77fa4b0317686d97f00761f639091483b2652c0bdd2b15bea2547ba38e134d5840397df12d903d74965301ac2ebb757a496836386fed724556a03f20b0615c0979267b4c245d3798ecdf524aead760c8de9f64094e6131964e17234d32255aa68bc3502e4e155848681153fd50b059a87e950eb95c741cd07f0f70db81b16e4a8a0c62cf2f003474f2fe0308bbee3b21985765bcef167a9d430e74b340d56c8dcf9848127f3c08158f862c58a0bf0e4c371f193ea3cb3b2da4770b81e036091f137c44ac4b9329fd1ee47b964304661f3c101f59eb6d72f0bc715a0304ea326ca4204efbfde63de83d6b4c1e1fbd61bcc92104db7da25ff2634628dbe5385bc7e5cd1052fd1356e4644c5a1265e27c80cbc05eef784c575405c435408aac1c38e1c57eb220a9558343360ee44f652e3399b15a3fd501559cbbf42325dd6a5871f08f7cd96b023a9d518f6f0b09177ba0d6f875e93b872ce432d429278e121fa9390d66a892df02af19986026d3bd72b3e3464ca17f7169ead4244f20b4ec5489c868050a7e360239b8654c072edd6da968aa441421d447201d9077740d111c179c677dd2ee04414265fe195b4ab727f5c67c3ac4a2021ba84e66097356b4657ca5c47176b3830f6ea79c2becdae227d22453730b643917b525c01ce3aa85725a3d630503725166f0e1021f505d0a721f35b75000000000000000000c00000031423b63328eb77ee5dcfb0471a427446945575ad85cd06d07d82d3094c8b77953e9ae3da4a81c02c02d2148f8ab2d65df6569309b81db6d9a502c07627bac47dfb2323801dc7c76f8982030ce1e5c0783dbec0e5a978d45f27bb370f77b6114542d1c2f3685531c9a79e20fd8333475e8ec730482c4d6055625676018ed35305667fa05ed58760dd165971cfc50f1182f3afc0bcc93ca212bec5366881ff8078786c26efbefd85960c52d6457555b6b89e01b389472f33541b01953e6afea4cd1a26f69c950951b6f014f3309cdad6d72255b1320f9203ee651ab5c32a4ca0d59aa9e2ef0b54950171d7f04f00bfa2d56c4b3329964c358d3ce5e72e293596b00000000000000000c000000b82077671472576addca636b847ad5234ffb8d59bbadf530cda55b401ae3401ae03a3f793278ba47ff37810dbf969f1d9176732abd10806078a9033d419e76027ce3e10f41e63068220207179cbd1f702a764902630c1d043602ea15fd8bfa04d8c8d9640d199071b93ef039d48b075cc1e00b7cc9f6a22a12e22b71a405db3200000000000000000c000000dcb9cc279d145112197d2c2e5b2eb83512c0930b5ab79e3cf12a7c1867634c39fa606826bee44869fcec664c41ba1f27b7d2952a5df7420d0c1e10412be8aa5c00000000000000000c00000017e0c92441a9df67e9dd7b409a6b8606cff9e244e4c7001810e5e8712af12a17080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000002d6e205311a329669a79d7000f0a2c4cc3ec2a0c33d8ae461bd29927c06ac41620d9f4690bb814439e86815765c9bb68c10df0624d0344355349633ae85aca1f9190020cd53e9d5e38bb4416c69ae52fa81630745a3c5e2d218f1761047a274e4a253e26b44eae6841783836b51a330e7917d816ccc60c353aca9230c817d66a9afdae0438d92657ef90480bedc4bb1be1de773c589b6d551c1404735eddd464458fec63d66ca47238306f03f95ad66396d5710159e6c9688bf84d2e4b096810610ea301854da160a11fec1fa4c0801a174e7c131839005fec2b33404124f1332407d72013e9c51fdf39e7566387482647a8417b7ac07b3095203735b321fc094f5da8030573d6521385982f48316809f561a562f08837508e75fe4a9bc3ed18f80be21413a3bd1f6b8f072f0b08e07ea12c991acdb88c6bf9d2707d2473af428a91af181839970f166b242f04863a5bc9ac17254ea221048a7ca7424995173811b82955a6945117fb9f041bf51ab97d7b540212bb770a2f5aa06806581cc77c472e9f0b4c4b64108dd50125f1ad544eefaa5f4c0e88c25fdf40860d174bc16928d4736a1e7dee55223a0566799ce60d15a8850f51a4652b838e5f0b6a2698169aae09693cbee373a63ca21fbd2b0874d315bc168e7c2b3d465500167503bc44f956b170c249763e3a365667e4706b358b89ac191dbe4004c940fc285ed0307108000000000000000c000000beebe11f1831e73a5b884e02e7242b27bf4f3e6983e90f69ba369713e734862ea128f976fd43340af14b8f53b5787b2f17235a433911c1100f62dd42751cce013bc50f3cd7d0813b0da0a95cf46cf86024b5ba50946ff435609a015e308ba12fd9d0fb08854d7c30928776342357c52b12f43c6240cb5838164a9d0181e7ef4a9ea8663a142a85278471d81e2d6cc62a3674346cb8a8d611e03bfa2824896812f241c85a4b1c3f0b2e13632cee64db038a6b391c2b729742226e6a31a19f6f1e4c477e69b3177850bd79bc2990641600abec114c6278047670baaa305a5f4a642060dd10dca62129ea26d5067fc8192854d3707908869504817fb4092e08fb1304000000000000000c00000069b3cf532495c40cbfdd44257734f75b94fe1d68d1c7c54946490346d0a1334b02532c3d010c8a23ceabda1a252b3d1d2a7d9724d32b6e49ec82be07f66b8004885268420033a948f873ec0ab57989705e66ad54dab67d54a1455c02530b43244a5dad68e35aef04faca776e65e124237ca9c568e3b8374150186331c003d13502000000000000000c000000e4aa2a472d28aa0f2fbb4832a8842d2eb5986b5efcc46b25640d48732cdc0e71d4d66e27db02713c276ed97c55aa3c13f34d48378e6fbe18a4501a026afdfa2e01000000000000000c00000041f64d4b917777739b4f4f484764cd5afd7c985a87943e0df07f0572a1a7e137" +} \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/2.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/2.json new file mode 100644 index 00000000..1f4eecda --- /dev/null +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/2.json @@ -0,0 +1,4 @@ +{ + "public": "d66241218abdd6279d84b87117bdd71fa09d1b5c76af8101af708d3c105af12b0d2f162f1942a7759909115099532864797d9b15", + "secret": "e11c9ffec104cbe8cef8b40d7f312a8df8dbf50d28d90fb2e4d6c63e94d31ba00d2f162f1942a7759909115099532864797d9b1500000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c00000082fdc15b9f99283a8b877e4ebb1776253db8050dd4db8930242aa06be520de07a083193b3c490960827f071d24087b71429c6106730fc632a66595290af4f1649bd70d39769b486d5e69466b54aede75f0a3257cb73b2948d73c2b4c77860d33d18a671377160352a1e8825470e6af28a78b681870163f6e31b3417a58f48c44a8d97e37638e947aa267102aa5034e0394560571970ccc67417e773d4cb0c300bf5af3582e9f7742bd069036179b2347e401086ecb351e2f611d5a67b2f2706cb59e317e55c3191608c187394dcacc4a4ab72550e61a74249922187273d5e12beb727619bd6d700eb6931b500969a376ef3cd912e8475d7b2a432c10e320257200000000000000000c000000cd1ce039c3d29c0471631e3a52f6d01658e1184abf2aef5b8e80e57ecdc44b6cd99d0d16bafed375e8e21e30207ac5624c10d67181ee7e50f6855377f5485e4f6bb7204d7b4b3807d855e26e40d60936dc85b5392e7ea40d1e1559575f1ad54ce4afea78f98fd50c489ca44ee47ab0769c0b1c4f5055945392b5ed3037fe8d6b00000000000000000c00000039be364bd965ea1d3f0cfd7da78c4b073225a528daa17263491aa812a153de1d1af6910dbaf47a2f6e769d1b6a1ba835c89e4f7b58cadb7ccad7cd1453c5650800000000000000000c00000096c4bb19549a1d0210fda03b8004a65805dddf4046989825670665288d69e43e701ec66fd0f98e40eb10341adf13bb713632667c8dcad16bd8e84832d470627a00000000000000000c000000d66241218abdd6279d84b87117bdd71fa09d1b5c76af8101af708d3c105af12bdbdb7d460cd3d12922bc821b0540472bf9e4a4165f1a7b72c397de755f1f5865080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c00000014db722d6baf683bde71d30c6fb2c437ec809f4386f9b23c017e47415f675f6a9791b83ba6b43d1d77ce4f190a59216f4152670b2c0a7c5f5c35f870fa05d118f2c2e70e9d924968a6313a69d4d4f5681f57187493a55b5cd07ea668b56e4a119a1ecd691422d96fed157076ba385c0c2dbb860f941a1402e873ac5300202722d5795e69c6801a1a52606937a9ef8a37d7a9274c73c29e313de1e24fb91d5e20fb71984fd9ec373b7acc48321e84d861bc0ef016fb67e759e070ce564082e321e22ce60dd3df8c6126ef04457604de73d07d8070f3ac5c18fae54f5171f22a655743e90ec9104649a8dc7c1b988ec7112a6110018e83b961d35f5452684bd66a88406425181e870873416515d724cd5e1e2c6962ea55b1534534c92098c37415255abe605c4ae37b9c44dc5926f1a426a0147b63946ba62119daf87e5f55d2585d09f1471fb5f93e2370bc569627c26bc26d490530872a6bd42e5d400448636c6275237215bfdd4c4b87775e5da6122fd574ff52af8dd36203644f128db67e6e0d73d63456e9077d01ad444cf91d8439faea2d132cb4b35636ce223a280e7774eaa0be5fe8ed4560f2e2966b37f56e6f5d38b3080a3e2a148783623d1c79e126f403515ecca201292005cb4fcbefc764ff9c5342e9432c38fc6afe37cfab140e1d77ae367e9379758394901fea4c9a0cfbaa7c3f330bf502a86816064fef3b3d00000000000000000c000000287b3b4d35b3001e89ba17704784aa5bccd8fd255b9c485c948dd604a124794658c198757caddf605aeb41708cdd256017ab565272440807d5cf21031af410295cd6860646f9da70639b8730fa8b391a9ee43b5de8a4e03d2c96953857543f2d0d9b6a1f9c8aad2a69772600751a4235fe8185049dfa431193a79b5b5d5c0d0d0168617448a2ec3ab7d3ef7810204b204d6096632c7bec77557493386efd6a05b12fb73cab6c8d75878714162c4e4863c4352b4f2236b702d5299f1092b786192ad3f826c7fe3116e44b2e28845e2d483ee6ad0e03baa32033aa1154dd167c4c72c04843165717771741437824bc2d75b24b920729bd632261d3ef205bbbe26500000000000000000c0000000ca1e75b08ae514d5b736e3b154a3717e4c5c13d1fd7d711f0fc9d4d97bd5d39711e3f4d8e81097ac68e31772b53c83a6b0061700476892443eb9d4ad7667c64d9c8fd5fb723c71640f52e1e1215072792060b2327f04e4c6593e36f54b2214ab48db466954c761271bb21099a302437d4aa717a9a7a266e9c558a1dff08bc2a00000000000000000c000000fb9ca5177db5e1594b692117f1e19571e25f6f38952e2f182ed9615cd8891c0a4cef56202e4d933d224e163e4c9ffb5c4c337d3b8fd93e491064170a7378377a00000000000000000c00000082fdc15b9f99283a8b877e4ebb1776253db8050dd4db8930242aa06be520de07080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c0000000c1316702bf2075a6bf3ec228f13961fcc5032269744886132df3864588c784a2730415b78ad4d750352860ad5310d097ee3aa67fdb52a3b1fb7a1015095e911d3506e4619bd76466ab04f224b91345a79c98670d31f1315bd09621c573ba2043775a2210566d0537e5d807ceaba041d1c5dcb239572394ff5695a667d5edb32e3653565ff55f951d7521e09da794b484e540f64df1f3a5f2c5de00dd1d2660cf9f8937db3bba2787c14f66b5213792a95bfff797552f2487fc605112cb9ed4893d1af59eed947705b05a70cc9e7aa047d3fe227dd8aef2baabd2c6a0025d6244dead03d7412307007b7645f34a01c0de808cb7b8179e728bbd5c0080e098320f87baa209e3c5421c5676c7714fcce283ccc9f0ea734577e1d3c2036f478ce1d1121e6078184f163a300f2541e107e48da20b339fa498c691d42ee7e6ac90d079bfa8336bde4050226b1d9213d8232569cc8427a3d96761d147d590ae3aea948e75ae30bfe51011cebad28128a435d31c1d6fd13c58c9b53a2c7874b153bc66add1f3041d7bde7376bbd3a686978a16db206b03ae9e9024efaf04b4a3d12f73b904dba106783be65c78c356c88492d27dacf431d3b5bcd0a253164793b6ed07e0929e95f16d4811ef8dcd07bc82a563872a6c064eb16704da21fdf7334cfe429c38c2837203f5f7d1a9e9569755d9578acd4a214ee0c704369ad3b7927aca63708000000000000000c000000195df02a6801823c2599bd418474f66b3329d66aeffc51544746ef5e1f7f371675361e45d9d6b65298a1821fbba1b177f1ea4e0ba4e1681ab8cd4b33e2a3d2590517ad6e3c636a12351a761b2f68af076a22c443ff74800c5ee9d8043c0f051591d62956a80bfe166c9857632a3e240db7bc753b85f5715e6ea0197abaf4794a65c0a303cb0f9d6fb16d87572b3e927366e0f6647bb0d47eba86b405e82ef307c2902058972ab54d92263b21b4c9e066c4392e07240b2c213b61891260683575c3dc53090095bb3ff31c1957d22dd9766988970d0d2e2207e4ee901bc94ecd79ee5f985c16881a55d27fd5277dd907778ecc7128c49d73473b602030402e9c4404000000000000000c000000a9faf85e837c5a4e17266578a91aa607b9e9cc18e1e1e902e76b900717ba5d6735bf1d4737497019acb23b2d3298430ad1a365751392173b5df92942d3ac432bcc997e470bc6310d89a36945b966104c15aac664c1dea26e7279ff2e79546013cd04494fc877157585381508af7a1c208f00ff7d1f3fc17e8fe5961d5f0f091d02000000000000000c0000002fe5456fb3f7e930bebb485d2acff37c67522b68fdb79a7ab6950f041da0466a3144d10f85043c73fe6fcc7382628665acb46f1486de1841e0cf0d7d41cc957801000000000000000c000000a083193b3c490960827f071d24087b71429c6106730fc632a66595290af4f164" +} \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/3.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/3.json new file mode 100644 index 00000000..133f4d89 --- /dev/null +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/3.json @@ -0,0 +1,4 @@ +{ + "public": "76cafe54d43c5a7b056e8716fc3ebb487cf2017d9f88323cdbdea43500373f1df72cca3b416b8d4a579d8934240eae73c1419231", + "secret": "1e4a3644f506643a11fc60f6a3d2e7b9332a842ab0891f2db2e0f183bf05535cf72cca3b416b8d4a579d8934240eae73c141923100000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000281af753c1f1b81179f29f57202269133eadfa68c0839360a6633e01b6d5dd013f725556612bb71f2f4238793e9a0440ada4a078d88a8e2b31466d39f728b57a0a9c7d29a9db4e5bf83c8226563bc41f22a76c1b2bbe6b5a0700f47a2d49a45c3f0e712759a84513765eb172705003519cbbaa583f8b2f7e068e571d6c01c864715e661a20b5f75545e24437cedfec2fdeecf028e788f57b2e45326a77dddc0fd9c0250cc2efb5403910e73c5749c813f4e62a3411b92c112c7ba61c01ae8d52af20772ea1fd943a42c7e3428c50d557ae53fd7a3c4c9d6857fa82128a717501947649486ba9be7343038d025a70bb1b76317e0e69a64f7bf86557715891791b00000000000000000c000000a47ac15c4b835847da038c0efe336e255433763614d51b6fa4c8dd7cb7f163186400cf7851fce30b676ea66586b038743799c3227db4bf64e9449a73fb72bf36866c4511d08654495fe07b5375fbcc295ea378129d284b676a35f41cb323ca40373a121aaa18c620335652150659eb0dfa12cc74a4f83471c12ac6204b19eb4200000000000000000c0000000f97611e8985f20762a4d16c4a07fa68922a2759780f36623d4f4d5052f2f05b9ea4a76616b8c6048d8778469dee393054f38009ebfec1614acc8d448ddf951c00000000000000000c0000006004017e6de01c6999438649b2e8846cf55ba37151c09845cee1f059a222830445ca9f3c5b51a03adbe68c3c770a833071873a2598e15837c8987565de62b64000000000000000000c00000076cafe54d43c5a7b056e8716fc3ebb487cf2017d9f88323cdbdea43500373f1d9a04521eb04d921e7c99c370270b585f173ead733d77ff1df1bdec464d9c4b15080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c00000013686501eb1c9637650a42698fc1ba77b077465471d72122f59da9188707974adcb2952636579b1a79e0e5070cc28353079f6d146b82242153720f3b1d9452103826b27c87c725549b1e205bf9906d51edc96e334b71153d4c9d450050ce5332ff264f2ea3fc724434c90b0f709b7f1525c4a76fa1c9c64375e4b0799aa02c41a39f0030d8001934297539741b9734310f76a56f2ce331094512a0152f510775fef50715c8f5b064de7a5e6f8c3da708234b6e3c6e17d2722a7ee4543b8ac6470a5e6a2551348a03edc0f94a8f307047e9ea2f399ecaad72a9f5f93ad38b54214221ed1c3e1bcb6991e3922d88079b13835d6b114d4d16110ba6a171c045fd53f5c24a6f92e1a7579ce7375fe87bc63287aa12512fe13300208f48634838c646f98f1e4eed763775df245e332d0b95572f3452139606703e801a2827ff187b5386dc5547d5eb7b1285e4b51017f17c51bd2cc24b509fdc38bf8f21288def5a314e5ea77d73c8f2602a840803b8e814793fe105053e270c5ae8b9ad7911dec61b7e6fa10f1dfb7f47879350561d9308279836923bbf74292196ef9c36dcc9dd5595788e0e317fca28df51b64362c24f2ffa0ec7286e22132110180452e7de274ca6d42319d6cbdf66bea196059ae5e55684760d1c207c904cb6381a711a61bf39af919837a8b6ed3c33ef064363bf226701466f7765f1f7720235444c39d6502c00000000000000000c0000009570bb71e914ce12fa9ac474ecf1f7174c3e6530fcf8ef4a059b6c72e3614339c39ab37e8bb2bb5a184a6c0ac6a52261d43fc47b025e684cd196712cceb1912f65806c4a364f30397bb6593bdb883933424934352bc68c6f064d9209b6cf8e015f42cd0db6b1dd4db4340879ad69ea7aeda7bc43a04b2a624e585f2adccbdc5f48f4d5043ebe6637426c377278b6403e1499f56a90e9a2386350e32b45ba7a5a94ab7050e3521904ce69d0380653046f9312d06527c4747ea1efb705bf809651293d752df9c2a30915f9763a930f6169f5411a43b84472410b2c304e848d270fb18d0c427e285b5af809b507e4daec690b073173c84f18715251b3763cc45e7b00000000000000000c0000009b821b658d6dff537986ed5386167b2789f54a4798bb327a56a340433b88962f16aef830f4343d67f74209510dd38764e7ebcc2321984a340eb35822ad64f66de368d83539034c477bcd034ec312d940f29d2c2c819fca6e168702322fdcea06a96e0c0148f17141c4b5327960480c321caed21879fbd23d28a57f5a3007574d00000000000000000c0000003ac8e7192fae254e5989d641aae523420b7d99033fafbe1f991ae5557629ad29d03fe45a4aefc73c6dd6477d3656fb273f864b59a3f9a60b7afbf46983c6457300000000000000000c000000281af753c1f1b81179f29f57202269133eadfa68c0839360a6633e01b6d5dd01080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000d532571182c83d17e330c12c8e937a09ca896421e0c5c01ac0e73528afb28859dbdc6c49fb0ccd423360bd49a7366b3cc023090e4f2dba5f4ee03242b6f27d7e6b53e933b830ec599851c86b9c2a181b8f82e3785c07586831ec8d4ec5dbcd2d33f2f54f77e611428b1b2f0b23a62235b4d0f1153931ac11f7be2e5b25dd5f04b465ae29929931560955ec4d67647d53e09b146fd7c4c034f6cd351eeef6cd43db850e62a88f7568951efa7dc882a02fa40bf00173ccd7447d3ae5257e28c132330c865362a0d83fb3f2a75fbb6bbb455676b015d2b7987b51f20f246ce3df2463cb7c762d949336c07195689352bb6097e845144198b24e688ec629b559cb05ac61640737d9da0397c05e36b251035f930a480d2af49d3e91655d59ac6427481022f90d3fdb67743d80c45048148464e78bd37956cfaf48c3ef87532b88ff150b39870c39d7fa1fc1e4c72d7bf1e526f29726329889f862cd299738e495577a643e782e00c6a2250e1987646004c83bc7c1f71a5ad1a66e17a2ab060bcbed3c3e321a4c286e104b772a683e56700d04f32bcb6c9873ab435a39405a78f0272473d6143dc2ea5e68a6a9f11f02c25d003ab91614775fa33a01a2b912f35683714c118744a21696466afeaf615981ce76de5de624af64f109e1eedb460ac0aa190fda776a1e397003e364ee019e57e16a033ff448c3edb27e1e5dce107a77983c08000000000000000c0000005646b8622883f3092fb7f704b0fcfd2edc5d791a0b6c195e564b8275e430f77570fa92798ccbe73898d34d5742f90e71c8c4833d8a61a02f44b21d7b9d4aa04029872c5450701e725c66da02094b8d4c762a9850a73cc000e03c7342f269861e6a42e07354a8682e0db68d7b40184a3704cf9175cd164552c497a25235177667304b6825a18bab0d07fa51502b5f882353be2c10da359349e2b7134d17202573bf8b1f5ccba7293d604bb55e5c5dae0249a4e4638fbb7b61beb65b245c447a2b4dd9727e0caadf36dafe160a120119299be8b04e1ab96e76279a1e180849d3554e42aa142080b70240d3a263ef5de666247d613cb71c6a79555c063d8d5cdc3804000000000000000c0000004357c06e8e63c03ceb393d2fb19b3c6796854c4f885e99483af44e0f4660aa64a226ee441a47da515eedc312bff4385f49c2d425f4fddc2d4ea3eb3f3c87375e775b172df71da04d5ea3fe58a839eb73a0e0d94fff99e20b65b0485840890753dd674d1bb776f90c2b3c1d4ea91f7b46e92340215aa223212e94b7329d599c5c02000000000000000c000000da8e270fc53dba2fc358c65edf81a8308f89ae0116b8a820167f7772a666191261b3f3742875202a988bfa46ff91fa4d546b3868483913617fdd402f21d5b44601000000000000000c0000003f725556612bb71f2f4238793e9a0440ada4a078d88a8e2b31466d39f728b57a" +} \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/4.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/4.json new file mode 100644 index 00000000..efb90ad7 --- /dev/null +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/4.json @@ -0,0 +1,4 @@ +{ + "public": "4226522505bf057a771f2714cb51df3d8f5ae86eee93471dd7ec8a69683bd169c019544a48e5b76ecc041922cf18270b8adca918", + "secret": "2efcfe4f55cea38fd3496e7a7bd474051a95ad68dff02e9e3d4dcfce3ea69f8cc019544a48e5b76ecc041922cf18270b8adca91800000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c0000003b0c5013d9df3f5de526964b7e7c132fa675c56fa70b1414e3f82b34037d7f5fd542fa65f2b765012ac5af10dd01cc3ddbfb57274108f0198a14e6735c8eaa0bec8ae27d777e210aa680ad4478f72957c388864d74a9c22792d5856ebda8a601ab59ef0c27a66635d59b3046a7384c4201fd1b64f3b8731c286e5e155f340f282879351958fd8e6fd13070398232665e75788e706e10db2abbbfc5483489b81639817b1f47baa746f81e910f7c21646463022f0706c82f4830e9892188f641433a9f5b6c7460f3747110fc277cf3af58251d964301cbab568456c80220d64647c6184721bb0f19148067726ddbf9f4065efb393e82f1533540b2875a07d01f5700000000000000000c000000f529c925a5146a310603eb1903be4e1966f7df66008a0b519eb9cc4cf3cf8845252de50ee8bb501343d45d0e0d7536330595475c22d1c75ea980aa28ebbfb23b7e72c131da427a3314cd532ad14899455e4dfd18bb25d7200392097481d7e7516eee71208f73f8356c3272745f0f0f432c0f6d4d5168d942b79dc968168f7e5000000000000000000c0000001628127499bc1311f256cf396ed45f2121e1374b2f5a0e20576fd73ea851a7423ec2dd245e96a74156f031007b52c54d316c6d598e09bd6f19aab90a47219f1500000000000000000c000000918869322e0e562f749b163d4faf844220d5f336bfb7486a3bbeb43f2edd347478c020126e6f200da28049747ecc2f524c0c4111a4f29f0b97f8153a2df5e14300000000000000000c0000004226522505bf057a771f2714cb51df3d8f5ae86eee93471dd7ec8a69683bd169c216391faa85f65c1ea1661cbb92fb5de865715ee7aad12dfa117954ae98af04080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c00000015f027375f43ac7205c128559b06fa0875b5387a355fcf26c1d4be2249544476620dbf43adca39384ffde2156849bf1d5d7fee15e763d22cdc3fae7b63b89058da801124dc55ba18db40231ff1390c7584b27673788fb356a8f39924b891863c12399d621e99980204bc766d218dd66d397cf96a34e91268766a064b41733953850adb2725db284f0392440a652caa241e1b8a3604f1626a34dfa57414126f4f11b2405d2f20762bfbeeb1348d819e19fa1c61286c0afe14475e6f75e8cd1a6e91d9f3040dbf1535c817b80ae34a290f7c802645c25fb13056ce521a536fc4604755d4167656e83938150450b702b07955a4a00b7e8c163dcb9351138a35935c1a376b7327184f484d0966392e914841d681ef30298b4d00548cc077913aba403b80a447c317ce40cdbf0a55f7d2ff2c2415942ec9502d532cfb06315eef7a1a9990a704de84cc2e1fc89b73305e530168597d49f56f7e78a7856453830e8c632c5c2a5b524a4f2c544346090ccae102e881a478a2bcb466c4fe016db3052e19026a4b5a7c065806c65ca76e06922e0d9ec6fd73d44d4a7a683e5f0eefed6316abc71326c2488425042ad9605a872b1ccf9e6f0e7ca8b434d9979b123d3b4f35d8167a3e813d797c17951e2f1b97c7269900b6556c73d35c3726e80bd846164754bdaf3dd6093c52ad694b741e25080e33a30662159f66317f57d2142490585a00000000000000000c0000003f74076df5f51075ee52623ef26780693be49c3766124e55b92ebf1ae3424c4760073022c0728d55b21db113b076855562b2546cb850e96e22046f5dcba19a6503ba083c5c5fb708118741228f15ed65ecc0ae3fb723656b5c85ae06f514bd027de80167cb173a327d3fc7263f21114428f4565f0b0d652f2a2a372f4b3d1c1ff940bf42da6f4962bf573d1a86b5ba22e72d70773611f146f49fe775ec441b0e6900a768d1aa3a01a90d086ce29ea505c677a62ba63997498b2256125daea04f4048044ef3a0b40dcdfe9b1f488ea269ff854536ea27cd35a3668a09e721b11c768a355859d61d33a294fd1887e69c66e3a8eb105ddfea311347664cd579ef1900000000000000000c000000f38d1d45eb88e738cc743e5fb50c1a077c0bd554df19da0c9a4b4211672c422e9793663d9f2952594a2d1b7ccfa31d753f0d664daf61e80b27a1b9332ce8584db8767268fd8c905579f8fc68b203903984fea47ce923aa210495e101e87d643863c4080b5792682d25728875a18ea31d4044d22b5eba6b44a3e78472dee69b3e00000000000000000c000000317f8379aded743800563c3d39b93118dbf843470ddf2b0bba2fcd0e0c85581c8c411f723c9a5732d0e0d32716cb7e64e515ac3fd26faf754d7cca58a018346000000000000000000c0000003b0c5013d9df3f5de526964b7e7c132fa675c56fa70b1414e3f82b34037d7f5f080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000527585636707030d4d568f1a2fb3353c8b3514449cf69f44cd7c10783bb2b9522b652d02d7a71b5f7c93973313f2131ee67e331e7ce1973193571c00648fb465ae49e928ff78ed6d59bc0a32deb46f3c92002747605d1d2b5c6a527e030f020a531c78339540f963c28a276c31c8bc55f3a7d80af2d663523747e15d4938b736b2209e7501f257674817cd6ad085a32616bf1d5919410b57422ca17d9619f91bb91c4a15fa62c70bf70add134c6b34373009d80d998b152fffd229183fefa262168afc546d8f4f45c14ab0579db74455b54f970a2b85cb541b729f5f2fd8c300f29aee3971a42226142bd63795301375a87f3c08d9419654d2f1052c7f6cd35f8811a70595fbd177c29cbe114d4cc906614b803c8d92960f14bc3646431eb52acf7e2b22443a7a65dc958430647e6734bee269257b9a5c1ba9157a638ee2fe2b08de2770a806d449a6d43a71c75c706818cfb912633f4a7952dd4f4c4ed54e776c7d124af865be76065b957ca1a4d94d31276d62f11dbb1fe2c2f24f077119493ee63648762165368bb4774bc21898548ba5e96575efa3111a92982c4ace151f38f6b53fe03bc1016b681f573048d90955b10b10f5933b66108528160c147216205f6c12ff2d1427fd5a1403c70c64506bebe651014b4a4b0d10f8628f4312004f46392ccd6b6b3547dc820925f07b21fd63e45a97f6bb101330646d86dacc5408000000000000000c000000b338d40fcfe3f752066ccd662221013b3f9aa42c8dd3786b9e31ee61a5585b34af9d7d7931354875afe8196ff48015173158ac24e1d5916e7d0d664811bc7257c33d9523c0cf605176fce672a3ab181002f60773a055dd064b3f4252ad1dae2f06f029503a4d06532a83f002f9fdcc16c83e7c6405fb2c09468553531485650b0ac26c4c7b18d93344a7314ab9fee866c538266a67de6e081c46bc0fe1de252b104f146ede47231a6ff4464cc5b6081463c06f2932584100d76271335b7b345b9b5b2750ea8d734979f67367f0656135b7d7dd1a3ce8d42b803a4c25d0cace48599a441e9a537109deb69235184b1171ecee080ef3b1632f885e7d1524d5ac5004000000000000000c0000000b9d0f7e4d31ef73e1a13169aa51ca232c37cf0a498d545ae32029436039f12e54bef27ea521c955d0b0050193d2de7c7f366c3c267cd6544c38bd63538965083ba8f507be610d76af90a3715773ad4be0deff72c1dbfa5f849dc376df074d31177da94fed4ccf1d88ab0b7e2b0dcd464096bd417c8eab425639ce2ad56c594202000000000000000c0000003fd7aa61495f7c238261d06c83dafa33f401de5b18a331570454e53c7533ff534366db39da24cf1e17bb4602b01636343cc07835ec0dd57776b7914f07e2075801000000000000000c000000d542fa65f2b765012ac5af10dd01cc3ddbfb57274108f0198a14e6735c8eaa0b" +} \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/5.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/5.json new file mode 100644 index 00000000..11f6188e --- /dev/null +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/5.json @@ -0,0 +1,4 @@ +{ + "public": "39ec9518e511181f66dadc2bfd8d2661276c6f3599f15357af991e48bc53685833aaef1c3f04e05c731c3331e383194faa809945", + "secret": "09f8b38c5ba79b98fedbe1ba1bc56de69de0681d07e8909f02532bc2678a5cb333aaef1c3f04e05c731c3331e383194faa80994500000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000d1cb621788bf0d598320ba0a7b3e8f7bc811ed252497cb393fd9d0081c2e1764ec714b77655afa7ef442fe3853a6b96b4857364934609151c93c412c09cb5a052beb4163d3565d283b49415e270e6326d07edf0bb4c99c1515105a1e251eff5d8eb6f525a2547c5e7000171615aae5791f2e6e1a7d69d529d1278632a1f3bf6ca56d0e1f0786f93adeb6d90ebd463a004c0e452fc51cd848b3ecd6336448b123029b2b0c27e8683d5f5c65152ad249597824ea34d5dd92064d44352217ef4a26a35add20aeb1c633d4ba02019100113cba1bdb21f4c7cd5387b4c9106d7b821865fd5e36f35c0835ce61606ea3e1f733d4803d1fe066884418f2f63ab808736100000000000000000c000000685b400da11b7d4d49e63926931a757e960c9c3922b774350cf3413e35418e58551c1f6bd379e642fdc2d23e04da9031616a8f072c3c1d583fe4a4378a53bb421ecfdb1fac64f732d973a40fb2f50835b9c73b77e2ced5294ebbc5168217af45f217c02d2af9482b75f0ad3aa10aeb58e99c045ed9f87634085a384a8ff2a02100000000000000000c000000bf17d733356a88789d0fc3260338dd4ab770df57d22e9b3522ae793a88ca4107ab3b124f480a5c6f3258843b128a2f355a50151593548142316f085488561d2400000000000000000c000000dcdc1b4bb5e0426437878d585729035bdd41fc0145fe817c843b3f4bc4bb22567e692840ad42d53c82e6d91e7eaf78331352e57978bfa77c7647db71c84cbe2400000000000000000c00000039ec9518e511181f66dadc2bfd8d2661276c6f3599f15357af991e48bc53685896028e72d8888a1181fc3732337def3b939ca9059af59512e451cf35e8143f7e080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000bc2df92918d56f73b48bbb4b265a6c43420caf699ff0c020a67c385d7dd50d4fcbc86e5befa9df28c462f765d4ae13033fdc4e5b81fe797314eb7e00e1875c5704004c6380b1d43cededfc08a91e9c2ee5c9b03180dbcf2f51f77f4d2b1fba076c557927d5f8e83ee2eeca48c59ee6342bc0f74d698cc13d022f497767c8a42de4e7ac622d7cd01393f3fc67edb8781b6999262bbd2a70087495c175eacdce3732bc1b47abc55224198da91dc27f6416b462603de4b9d22cf753b046146c8b09217a9e46c3f0800c46faf93b4d42a016ac8c9543a6e3bf066e71c05a27247c441bb0c60f84e5eb6e818b6025111561538cba5474234b550cc7405e07cb0ac77ef3744b64129bd640fae56d740c5b80551f28ce6c487e635cfddf52364e73fe1fa9124560982e1b469113fe23a9602863c12da77e0e8a374f7597b43e332fcb3ac5f2d54ef0c9966fe3799c496511e25560ce314e66b88c10c6c01626d98af8509df3ce4af50a594855c1b10c15aa612bc8cad66dc462300444fd4b3544bd3c57b79bcf4418dfa4718834685603bf3506f3ca023ec994fb7e5267f4697dd0c3690092261652f8572c580ee914a50356240532cb4ff7f71628a6db9306779307089c4a6e648f28410ce1988c6c2d1d900983828d317ec973116dba855e05269972c39c7573956b6a0c90f03310682bac799c2058270677b37a6323761859ba2e3600000000000000000c000000a7a60a203f61a02a847e01320480581add03807283d1156ecdf29d22fb4c7f42eaaec467318f17780e79a56c7775424f4205877ac3ff8f19b7a60f37d0e6aa7a87f052632e8a597e5396d72b484fe2338d3faf2db19aac6f9924c672f32e835a5d2add2d172ab561f62de309b71f4b14390a2a028f64dc726188552aa17f40308668db71eacd295b7ee9860a222dc813d30e8926281fb76acba25d735732ce6cf07fb528898db049f386e26f07b08f4591b9b15524181f6ca0a9b07edcd0ad6154d408168cc0bb66d623167bf2150d3e2db4511b7699af3e3048205e10f99a50512f8551eeb4976dd2f1f630a759391a4108d15eb0cd0d508a58771ad2943f4d00000000000000000c000000cbe28d153197eb0e2849be17d91b3e59b62f7d1af760642bc3506c333c4cee37ed2c0259ffce0170c0aab55e8140db24cf37d90f1149e7207b46163252ed7f0f754138194d129a7980e15f7054d4dd1d9568e4521d3034739e897a68aeb03074b9ef4c65bfc5e81ea7bd375f16dcd81da9db0750ece3d73406f0041da0ce2c4700000000000000000c0000001d217a15e5fabe4faa96f07b8ed16d06b752a1272f73cd62ebf0bc0a8e6ea422c1cd8312632e44244114650cc86e7d2a96bb8911b2ed796aac539d7bd315d86900000000000000000c000000d1cb621788bf0d598320ba0a7b3e8f7bc811ed252497cb393fd9d0081c2e1764080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000cc9e2e5c766e594fd826d111dec0ff167580ad2b6828aa6b8e65366067fba16e72a14165e195cb634a28fe03cdb09c51be1aaa3f346b2c76be76aa6103ef4240915d5235cef29123c2752a15c7235106334341492a60b028c3c1ff5db396cd28f934cc243ff692489371fd00cdeb5f79a381485ed60bdc3e2c217906a9640f44a4494f635e20e56f9bdc3921a4485f51d83c613addede4573e4b5b5a753fa33ad94c3012ca513e44dba1ca545c89f703d17f087ac87e27157b39890c28d27b3b43f4dd57f4af6c2b3d240346d20bf713d61d8064315af74b866ced631b5d132deeceb56e879dd32728cb1e3fb9aec849fe113e4076c83949e560560d0ab91433168243086bab1f0a80f67623cd941e771ccd8b5caa9d9a3aa7f764537c88fa5104a906597507f30aac0fc27d6747de52539c4f4e84a58270a68ee6566a9dbf058b709422f124fc0a5e8d0d5e28b17009f7230f0f66cfb847848d072fd3ad3a08d95a06594c2f18095bece23d305c6445e24f905d9fc7fe12d38d8659be06194cf589c92b93e59525fe3ba726a2fe2f24cee1bd56e153336070b200272b8c660e7d55ae3d87f8190e2a15132cb14d6b5473d22c464d79ce4a4ba231342232591f30e5cc434585382711ce2d04c6b0d4095f8946408b630f7a89d9b43c9c1a8330041ead045e95dc0cd08226685079f4266d27af2b0b0d503f667beb0611c35e4708000000000000000c000000ba8e3f3cc3ee7b459db66b75cffdaf0523f9cd6b40169e6a6cf7ba6952df6c077fc926362553bd766b4e7153fb79df24f5142420a252444e0bf50b6b7a61cd5d84bd2643fa4e2170c98c82029160bc5e58c63e7ba9c1b5036144cd2c0cdd262e0127d14962d838169bbd796c3d2b334c2c4ad9125959a1561bf98033ad08fc642d0163366fe1763f22675b51aa82f57612f9e37b8d6d3762128c623ba1c54b42d72b88769bd8830e0041c5383aee0a7133f55530cac89457020ac72f3ff75935bb851d30f0b2993ec062a1726ac5246947fc7132d2cda15ca977c20f444706656c5a1f5080741b6ebc745c6b2f3ee379ed93b84bc09b3515b39da4772636100104000000000000000c000000a2895950c58f493514fada0ca9645367b3f1912d17cabc765272023f6522535d427f4d50a00426090be06320d82d6b7d362d0c364f94ae0fa7381d1731c3f70f9fc7ca722c697f1339b26c1fd46e944a8ea6bc30ad1e94003349df1aa1ef821e50bca94b3322d17cc447cc0a7906434d7e7e81515d82da18235d2360c570bf7702000000000000000c000000b2528b3f6200c848b7dd143a0a819a45ee90be0839993d7d7904ab2ec4165f36f917aa1fb1399840aca4a8628d5df23f7b91917948744b2fe5e7ba4f6b2f657601000000000000000c000000ec714b77655afa7ef442fe3853a6b96b4857364934609151c93c412c09cb5a05" +} \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/6.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/6.json new file mode 100644 index 00000000..48f216e1 --- /dev/null +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/6.json @@ -0,0 +1,4 @@ +{ + "public": "113d9a74e607817db12f67256feb001a2fff1573777e0474946a1e1fadb5ef14fc41b169679d6d409d686b74e134150a59a5be75", + "secret": "56a1f2fb528e9a3400c0113a9f591b88ed2665cb509f9369b4d645ef4e86ce6bfc41b169679d6d409d686b74e134150a59a5be7500000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000593a766b3ad72612cdd8c16da28e2f0b24765c5153cba14000f81779b7348d75c6d934106947e878ade1d14cb162b71e3763a87306c8a7322d137e686c62ed752dc206263c9167360bae3163644c1d4c00402f44e27add2535af3a7374c9ed7aba05fb643b742f642a22746fe214fc35d92db96b5f21806eaf684c07c4791f782ec41a268a118c4d3b5fc2465f222705d8e1d9619a9e055225e5cd4176e0fd5065bb2b6b3c1ac86efc54d117b7d9026967dfc23c07ac317628b20a04a1e6e4646fc6d66caa82985358d3930c047be4026a14576a7302003dd75f7500613fb01e8a30f019902a7a473e237c6a3848b733563d3723e81b84000ed6a053497fc56300000000000000000c0000002931f35d249f7a07e77dbb2fcf2a9d48c4456974f5ded220596fcd14282051725b83b615658b537126673c31761862648622c35b5a92696b0b4aea6d4f001952f611676fd1aa6679ab5f70249559ba2b5699d6439a1841449e61141ec9b6dc43afcfcb280c4204037a4b8a090c9e8a71244be6706a79251c07d9b715aff7e45c00000000000000000c0000000366b6637d525d6c61138f60ed0aab005eb6e561dae0d131996dec29c4bd7a16f64f9959dc0383222ba1603b2adef57d7f33041fcae21205a2892c3f0c2e966900000000000000000c000000665b1c4f92356d3fcd8b7a42b7788e59e75e0404a236e4540f6a407816d9563459a2ab72e84f90291469084b94f2d368634eca5afa81c433105ff07dccb4d44c00000000000000000c000000113d9a74e607817db12f67256feb001a2fff1573777e0474946a1e1fadb5ef14187d750b7de53634e9d2e432e766f513fd75760dde12200a0424724745fa8004080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c000000c276672bcae9d7131f72186bc44c2318c406e876d07f9c0b11733b61ed8b101b9c15e57da02d387d71a80b63a532d747d2f1dc6f94a17036c4cff340c00272546c4e5a43132d0727712df41c8e3e0400f68c1f070cb9244476c0f87674106c149fa8d074cc77bb1323f9700ce6bbed2ee9af8264a78f89282ba5095b933e331810a3fa57af01d6692a6d4e29743d08561dd5e920b57bd24666e9977adbe97f4dc56c82473183cf0fbb7ae41d6f9be414f4cba3139a5c83294520256949e360025724ff65a4950c69fad454368c85972487e442465191023645e9e100a1679147b8dc465bfc1a6a7d19ee23359ca6c9008884bf22af0ab050ea6867496dac4c60450ed03af6f4a9732d4cbc617c0801024f0295024983f21b7bf1ba0b1a4edd7999a70d39e4d99c398d6fe92833507409eab8fc7dc2adca082daf60317fbb4f7bc1a3200f25a84d6fc8a4b469b0ec3749e0b9de351bc63774345f3c6c09e3f556b4960c3cabd8ad1b51339707773b00768ea3437172d42f28f39d1c03c0ffda2cf5600b0d8f0c3f48011bce14ccd2b634c47a9f27def1a60ec7ea8e33ef5ad7667b0f6c3662237f7094c27c35bdf5533188eb231d211f654cd5ff317d35077a451693c00826f18769b2aa7963777c6b3965fec82a7a81ea15f458683f69d9dd06b2549c762d9a8c03da8c4547224bd90d095e9455b8d08f1f2e6fec329decc07e00000000000000000c00000018ff343f754360546f55161e06f0ce7a6f03981167b5e65891a0490c488d7b317dfe21048e68b1123e8aed36111d7c1e4bcd2058c053401d51e3885b023f627d866b6842f8cf0a23a6fc905b83849145daa2074c17eb93028bc40f349696094d6cc21b7e02d4df2a6d1340211e3e9934a328e67c5142a1380846023db1743d54e4b9b66b490f1c58a8fae264f6d78676a8b86317c5b6e8712a253b608f39601747035f6a529e013530bffa2da4659f34da829c1a843a51283404e1130fc49f2f146dd25bf8ba174101bfe8765cb953320eca1a23efec0b125f337014ff287565e6dc1704d3651736b1705c312004127da8bcc64d873a0a52d56e6c45b0626b6300000000000000000c0000004f9a0549082baa77f7d87c1147a5d57004721837445bb12373063b351111116c4b1ef85363d93e2316d79c1d458b5c0bc6e8c8119186e013864db43a531887040851167b13e3ee486505eb0888d50f19a9c26942c2243835aa125577af78f23676276b4b81201b39ab63531b214c4a31d85a094ba53d65689bc29504e0c2ad5400000000000000000c00000083b0f058ede3af1b7c31a914db6d4629815a66751577d546fc9bce3750da0f55c4bf687583ef8f2f738dac3adbc6271f685bf30365a00f29028aa646318de12800000000000000000c000000593a766b3ad72612cdd8c16da28e2f0b24765c5153cba14000f81779b7348d75080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000097e2c11dac2e997cabe67627f4a309283d2f6a7011ee472ad18fd34109d0ad2dbb5d0f123872bf2ce441747eb7579848e9617e63c2a7250eed32a041b063e441e845b3448c41bf0ceada38311a4f810b041fda5d298426510cd19210eb048260bb010413eacc1f2d82428270be9625639478703a9fb31a44358b513953948b579b9a223064e9144944c770040d2299420d694b59385be3788d795445a9553b676644fb4708d7b6076901a96238a43078ab9ac760fc50d773c687112cb8b3c367ab81f738a6cf496efd231d4bed96010e20d5e13757f79e771823dc5f86d4415ac8d4816564d52d58af180809dfc4aa3df1f5b77aa844636b4a75434fe24caa78bd7bbf10b970d06e9aa1ed30bef5c366f640923be857c067a4aeed78bb14bb7ada82d86d917fd408433e78473ab95712febb39591f3326244e96e15902ab4a1b36c25b652467e467ea0aac4ead939b2f02ec560112b60f6336497d50aec9c05260ad112d96f93d571793f014d62a657d2ed89f0333f6b63134f9650080facf6e5828e52b5188b66f68bc2e4e6ff0be4f48a6d5131b8b8952fa23823290bfe11566e64a330f14470dfb42366a032e203b242e064ba9c3e6439ef1fe14e08e9302af91dc620399c15168e7c24dda64e66c6ce20a04dd304c0b3e7a922f2e78d507987cd43b64f3dd0f86227131579f4f6e0ec2d36d53cdec743a2794123c86045d08000000000000000c000000662e9914847af2696d17fd0b060fcd56ad5e45788909b675d63fbe06c7146b6b5f62110e29c7d40d7185ab5bb0832f5a3a71d13ad47d2477c72d6670902f9f0c549e721a9993a23e2fb2fb6ecfee7e1f5d6fdf4992a1e70e45bbaa39c945c677d8d524330ebb31310b2f4059be16af4bcd59fa465b5e9b3fff33b812defa223774b23d62e3e2da13bcf42d1cface39213c9f195ce7f1894663698e642d880d23ed57527853a217072509f91ae444d1627f02927e4c6d710bf5ad1a720755ae27179976023653160b7d6aa3234607fc68ad95fa1f545a450db7b90e54a4f5e4412972bb2267a7e6098626e4423f1b587b1b6fdf1807bcd30dd759112c93416e7604000000000000000c00000026d6161bdc752f670758a00f2a243140943a0323694394639b03b80ef469cf6b9fe6543879affe27fe5f8b3dda4c1e5c69537b114c26ad537f79643d47dc374442892556bcdff3778b0cdf35b232e06b3ad3c87cfee8b336f8e59c6cd1a5020f2986ad54a58caf6cf82a4246c0e5f27390ada96f4d34d513203c774c9713e91802000000000000000c0000007b01a660ba66d136f4a28b336be9882788d3507dcc5e995b0332b60a945483708aba89733e15dc33077e747b3d4c6d1950cca26c01af881fd16a4c11eb8ffe2d01000000000000000c000000c6d934106947e878ade1d14cb162b71e3763a87306c8a7322d137e686c62ed75" +} \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/7.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/7.json new file mode 100644 index 00000000..5847b4e4 --- /dev/null +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/7.json @@ -0,0 +1,4 @@ +{ + "public": "ea7f796ea86dd559bd8c8f59dc79842ce24c3c723272fb279cd7165d39fa1b4cd4e71176cd9f3a26b83c5b5f6722853e5fb7254f", + "secret": "ef79cd8636c1561bb44b93ddeb7714581148ce5cee6d3b45655bcddfc3ff2b2dd4e71176cd9f3a26b83c5b5f6722853e5fb7254f00000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c000000cb05ea61343a041fb839d63f0e50ba4df154e30a525fc822c422b56f2534a71b4806034a91d4ae5c1540d008fb41ae3e828f955f7190b4590c53b02e0139830813c1031e0bf0f21c96a251650b41815fe947065dce34c426fda8e10800b8977062f5cd656b642715abdb186a3af88d59131224247304df4e4e21c1482cebcd4420c751648237e704ab7f1262baabed1d151d2b2d4ec848320e5e0e1af8376d09ecf36729f8e37b35fcbbbc1842fe231edbc2d124ab752f6a82f0e2797355cb4319e3432729b9845ceb544315197f7e11577554123bc2137cfedd0a0168c5b729e371871e6b5d4d5cb19a84248e881e0d474f7d0297d3df5801ae76143a36816000000000000000000c0000005de7084f3779f5732b60ed78fdd967747e2b36088d34731ede77af7063bc4061693353758be82309de52dc78e290be6b7bbbd0077c100062b4ab6a1ab6451c5dabbf453fc3573b0f3332401d99f7cd25257e0028550f432bed448d45e2c4ad776449be5543f58f2517c8b955255d0975d57d82434920f944fa458d2411917c1a00000000000000000c000000b720254bef1bf7176b7f686d25c9df1a6b900178151b8922c617a10546385a09f2c0087adacb39258e4bf665fb90395a4920e712c5dc0369e5b6850fcd3eeb3b00000000000000000c00000059ff5175f5ef8f07c4af9026fbef2e78f7577368beed5816d19556599fb01f5e72ea9851a9b0cd76a6eb276673640076966f260706f42c0ddb710542cd4d826900000000000000000c000000ea7f796ea86dd559bd8c8f59dc79842ce24c3c723272fb279cd7165d39fa1b4c1c02ea6763bc5138d861ad4f4c32d8091a90504c5584317d4b4c362f73f38e77080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c00000085fa323ec5e5500421e97951bdf2720efbaeac70b735377ec0238450f20a282bcfbe6a102a8515704e9875427de56751a567664f80f3f238c0c5703ec5947e5b59018f2e1adbd654cff69857fdbdb80eccd71146109f4b2c3964167c17ed757ca628d31085804313f965620affb0b23a5b7d3200a069095aae89b2225c036850c156d22f2b21bf26d482d55d6ac78811f64b1b664bdc7231f0377872d5eebf1b00dc8779377fb430f5a39c29ed4e38042374b22721a9e740c66eb54eb3cdb218c40c2c08abec0a30fe71f34c98efe66c37a0a2504888cd53f3f16c0e266e1b55062f725d5902ef32458a8e61401b6528605c0b28ea98be4af3502d59859fec3e039a682b1063ad4895c80e7d55968c07db5932086df1d20a212cc251c28067074c33b91443627e44e65b2468c769255f4bbb89573035fd4c47c69d1223b8ec164f5d0b129a31804ac3d47c040ea7c31ad295b02c87f93746b5b1a20fef24fe3e68b8856bbbf8561b3683ef2b116da70f7dc8ff1a2b3a775f9e402f53f56efe270b71ee436defc3012073f121ed140a6f5f1a5b31f1916a5bfc346a395fb7137738011b1a591aa66c5ab0047c90e0c624b0c8300ee51bca422d552e62e16dad1094fa5d2ab6e89b370fab2a65a335ff0e3db4583d83f2ad0508365d5909793e50fdf3877dc475a85f6b856770693837236b81ed5db0922809368f213b6514882900000000000000000c000000d2d81a37be0c0606ee2bf31eebdcdf6c7a6ec32de05f7b07cbb21f652c56b67c06965239569a53393f60086bbd19bc2252d7130d87ebfe654141220d348a8d2202c6f0791ae3d212625e7c57e4d597402cd45f0d55c97d082b6c052ab22b315068b93f6241cf2d372df5c639b9f4bf56c4541e608d0bac6eaf7f0c790439eb65ab73df05ed719620fa4071242264235cf77b2376c161fa26d0ef2125f760f3410276eb4b5833b46afd0f305281107a3ae0fd3d1771e1d13875a6414a67587c22546db524750a3b7465d51931cd948e4e382fea6aa3fcb50acd224925a70a9f0c20bb57633844892f8cbb65515504ee29f61ba54944047b6c5790ee2726d8fd1600000000000000000c000000c1af600426b61836b5624b68fd5528048c5ac874ea88752835507e6f8160e779d298ed534ba2da129803be1f262b1f48658ac77b6034a076d07c7d3db835715b6619511dc01cee35970743431617e941404a7a75244e02458c0bf7014f51703e0c0b92696c40d137f1412c77a52caa3c336cf32ba3de5940fa32675be0f0d61500000000000000000c000000dd1a46164756bd28037ecb430b16e1787213fb6839c05e23e2648b0be8c7400774dcf95f11aa8213aa48c47051f1a962b5f2164121fd584554a10d388613be5200000000000000000c000000cb05ea61343a041fb839d63f0e50ba4df154e30a525fc822c422b56f2534a71b080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000ced30d01d580252a2cc2247450212c39603b94094c74ea224fdb984c76d5812ac189f250712b1611c18bc20f0eeb1562015abe55a0cd7f01c186f76b48730e2adcd9880b7b260e4189bb9517f3087b16e9aee857c9f5f837cc6556179933d5189851df1dac96d054e6b1337b5e60c4186a9fde029d8d86776acef479b0181d5c4d6a130c8070aa6db7cdf329043b0475976eec4a31051a2ae05e19071c93c54cd9bf4f25bbdf86502afd9812ce19b140147d7639f9572e4f3c4a4611b1e995286171d3683a7eab29758e8b2bfb5b2c11e3a8ff7c59ffef5703b0a2487a5316523f185c373fec851e4e3e376f77159a31e015f878c5062b50dde1e71e474885322b2d2a61576e2d77744ab9567d89d95082696d7781961a256ebb21699fb4f120ca2a925f60fd2e4a20d1c110962f9a188447fe7b17fc212ef2b4ed5dcbc48310f05f89744f8bec06e0f94278e109d83811d7e27d91b86d0e4a4a495bedc07b2b16d17509e3af10471bd3f42832ce612fbd227e61bde5b841eb6c6f063b5d661fe15e6f25bd068009453ada5e47f18560cda0ee50e9060a18113fd35be0e9b17caa348913ee2886411406a9756635b046c1939d3cf0fffa5c363f484ed026d115fabfd428ecce0e516e94520308ac6971e9fbee38c70eab0c58fb823e66e6cb221f3f807affb5ee76c8568d3a40699d60c76eda0ddbe7d002956afd4bdc7a706b08000000000000000c0000006e98f5190a076e61252a43008fdf71471ec3e5581e332541ef637c2dc1d36a48c57dfd57c429fd04af7c44028d8d833b97de671ab903271135c7c2471b76696bcb54e569e507b430ed0cef70aedcdf74c3bd4c07a0cc67525594c3689cd7ae7ced162802c5f3f813c6954e0786232e39bc29a87574035c4dbeaf4031af2fba2ea7725a03d129b236797a5652cdb1154c1d5d724b90bf160931fa4e406fbea66afa26d54523169c2f42a30925b0034774ac14ff2277f242392f299054c5323969d7f78277b683c17d33771865efb3663a89c6721aeed402716a9d08453fcb2b1533f776033579ee44b9aa2734df409c22d850be5e83359b191760a67b1c6d577404000000000000000c00000004cc6255fe28414217e175136903327aad28993223e9942e49ed00238a43c17e78136f40cb1f90572a2b676bebf2af77b5bc40636a7c1d607bc3402585150e29cc4c2e0d7da05c0daa135b2b3b3d6a51cbc38c79d6046310578dbf4672315d05d3cad40805da1137ce2f273d97f998513d7dc214c4ae84182d92ee21e46cbf1b02000000000000000c000000d936d015692134639b813733ffd85222e2fbff527cd6027577060e08d564d301c6647b1ec882b94a936d192f997d6a61bee83e33fa0be1226855633cb638dc6e01000000000000000c0000004806034a91d4ae5c1540d008fb41ae3e828f955f7190b4590c53b02e01398308" +} \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/8.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/8.json new file mode 100644 index 00000000..fb350614 --- /dev/null +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/8.json @@ -0,0 +1,4 @@ +{ + "public": "d37c5e6b062a9623d706ad213b8ebf1a24fc73529aa9320ec6381964cd157859f12fb823ba95e56ffe059e6dc184026d81cedb71", + "secret": "927312f98aa07b7ff137c3287a0505867a0c3d40211fcf5a1599d8e2cb1a7631f12fb823ba95e56ffe059e6dc184026d81cedb7100000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c00000002bd9f2d0e27315a3723cb11a92b394c789e2d6df15f4e7d1abf65103ed9c73474d40f3892d81634eb0e8f75c6c4dc76905da867a8ac572a6a31153898d4974009b0da00eca4c55f97430d411deec94154ec7d38350d1f4cd2c83158872cf614e979106aefda6302fae857767b7bed58d5e12f0bb01eba4503f4e476bd305414dc5b502e312c6120949b3a76e133335cf9a78565cf4e0c45a0ffa34f8ea89863f472cc416e2364263921396a52c4e9747803fb526792e813e2b9aa4549c5a91af93f385409daaf1a4218f7095f66a052c9d2de1d5a8531125fe35b1071e4043a03202217f271626547bbd305a9b473222d95b36e2430f9625e9336716ce9187300000000000000000c0000002b42031f01b88317f028d83eeea7b95c67593d6c66301815ae20442ec637592a5361b4362a8a96091afdfb78df62cb5da2f7b56101a5824e22c9295cee799779f07c227b549abc4babe0370383864f7a68ae2831ab8a387465756532240ab01e8628637c9fd4ea2c05b0064d00f1205074577358c367896145fb1833872a2d6a00000000000000000c000000c37e061872bb6e30907f4c24944df22724dd633c1796ab6fcdb39d32dcf7e0336238b60efc0c820257d623438b144104ebddcf4d589556423aaa094d1e06b86a00000000000000000c0000002da7b52cd166833aede65141af6f052592f6be20e5c59b2697be97249233e6127b5ef405a2a0096fe4dcff3be2a41a7189d03d286d5c5040c89f5b1e657fa50d00000000000000000c000000d37c5e6b062a9623d706ad213b8ebf1a24fc73529aa9320ec6381964cd157859dbdfe8511370bf73059c610341e9fe5e4f8d535eacd2383c346b0b7a47720359080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000009497d74a3a98477df1bacd7c0049ea0c8ab9f6314fe6da091d7d7d0d14f588210ae3671a96a2781dc6e16044659c9236eed92c2ed3514361fc78c53c77d96a583cca17186e0aeb0bd88c607c40e9794eb72efd1512da775749db4b5d330adc7e6f0bd831579d99357dc0076ec0e5d6299a95d26b3aef0633a1a5f71a1bc27e710d723c223609054c8f902a185dbc8a00fa477e4fba932069e18b7b610a462706b91700241a05ae2222f560562795ef44cd02451b3b0105536dbc5771383d4549500df4717da756463a1a003102977173d3c72b533c2a3d00fe8a4b22aa74d15ea79cd67babe6181b0e941f5a94a7f83783e2750b433a34346bad364d637dbd05feea9b042375975c69d126081abadf41433ad729bfaef81950a42355f2c1ea2d257021335711e04d6419ac6af217d87e525674368ac222737244072c699d157008b3cc21d607700b57739d5caeb43546e5db833575fd010f8bd0f962ba1c9268705116074bf1811ece56386f47ba826c30ba62576a0a9f78cf6b4c0db244ac40a46e44368cf93b3b5518cb0f30a0e21adb302503519b68178ab8c16ea96bbe6cf43baa315f395e0ae786ed2897bf760a32ab7c0ec23f872d35f45b0526875a64f9e36548edf9d13a94502a3dd2491f3503530b02ec534c268d8fa87ab78eab653736f308f6d13e6a87a1232f0ee8b21e6aa6dc5f8b90711b73d692493a96623300000000000000000c000000df75b51fd2716c30fa3a1901b137e1658c097843ad01d913ac2b6c54da6aa21e05ebb82b45b5071861b5f53e4c7a7362e1cfa6655384b523f0bc7d3cde45ed5881cdd60dec33ef61c34f81008cb0d71319bbed25c61dc72618f34b4f7301426c8d7fb517375fb31c350e040db3afb305fa5c6755ff6a160ca0ea844585534a147b24e60715f9c676d303492f38990646beafa56f30503871adf8f9582aec9e485d1d8b1f44b8006f61bef42867762f4566499b1d8623da5606507b638c4a9a45ed78f139a5b42b4a8f2a253f57f6b64324f6c0775de2a605ff7b570dff3e1d74cc13e73bb8c4d01748be670aad55436b477c9051ef553f52608c435e0a8e846400000000000000000c00000091f9cd1529f19117fcab9c1f14a63b20fccd9e216351df7b84af7e36b4267867c6ca0f3a0e280b45e248ae595a50e35d0c06451d51135a0d8b983e40887e586087e9936ee25b645664c8774b990b4e6a4450d711647b9859965e014894e39b4a33e75810b5d85e5ce2974442a9159859b870d1131347c777d8721a24f2ebee0100000000000000000c0000009c9d131d22e6476587ff2318937c8e74d7d1b761c39bcf70ed546f336f9f1f42802b490c786aca08b0b7ce0744ca3d3e2eebf066379f615e4dbdad1254e3473100000000000000000c00000002bd9f2d0e27315a3723cb11a92b394c789e2d6df15f4e7d1abf65103ed9c734080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c000000b2c1d84dcbb65370df3b3d49f080bd37e8da2f2cedd42e7d975e0746dfb69c51a2ed29557fa99b19e76e0b4fb5b0d54de06a66096d361d31e14ad436f2723369b968332708dce538d3e0570d59771b5591bcb5495b03cb773ab3e5020733f846a2464d6855383e72695d1b3452346727a455b02b5d8854704c45d1486d9b381a5a75026584637747502934653b02cc12cd79fb38f62db4492c741f708677ee0e44636e2e4de54750709333321fb0a645bd1e437770c8fd2814c28f46ab41fe7616a3af743c705f22606b052cbe793052f45f5d62a2c90d33005f272a92791b73f9fab66110e43c46d4e10822de13b9590c38d04818986552a18e360e810df70ea24fea3f4e6ac81d7dfa353fd92a5b189a86f31694a8e24fd038ff3c4649da5f87131a154a17d471234add287de4383e5d76ab13b98d2872a56e5d0506de8b1cf71bea7a2f4eeb1c5c7827600ae62548bb71750128835b3c8725d30f29d21d2c13e76c05a2f5362bcdf88d0896918c3da49286561535fa023ff1b405b8fa5e5ce07b0f2b0c3e356a5ede3657fde4db6d03cad42a83b9d82239ff055c068f992aed9e217b0775722ccd86f70034185c1c09203e4c5b0bae039643d36953d4dc120f775d2e7eea1b3d3d33b0216b2ae543415afb369d06a1299f37a9736e25a462fe189c1ef24433698b3d0d040aa07b1198ed6d5f2bcb263752ed2c4cf150ac1608000000000000000c000000af471e543a368746dc37e6060e10903bfeea5e124e720b6d42fe1925fad1295d181b9617a885e314fd84bc28b2562067e23ff1121a5d9945a99b4543449a754293efa62a64e0b53ef833f96b8b49cf4812e08b32534f4b2edc89a75323f1c45f1b2d337528e4ee14b964fc5edb82fa750acd2b37e7457029692aea4e3972ae2e781d2e4708218e61038e4e127c8dc5407199242eea27ca58348d150cb740615f3a257e63a862143e0071ec651ed25d49fb83153c803e2a5609a2931256d17d2b69c7403beabb4814de34d03374338e3373f33c73b56b1d0811c6a74a40cdc80bb5dd6472eccd05304fb9cc3a7de3f5313987ea227c7db567c13b96528fdaef2804000000000000000c00000034b9f12e05131a24cb9cae748303de7a907eac01517621006392bf5290151426a2d138408026f0704681771cd144dd6667d7236fa020e328dc3e1807d7233f5170160c7b3c6d3a51dca1bd205650423dc32c5479101ca82dab105631d1c5b67b10f8cf0c2982735a9b279a6863db8b7b2ed331182ee4fc3aa7728317d69dfd5102000000000000000c000000799a1c4224da0218f7ac090a2037a069d4e7d36ddcbed336c7477a694e640941e3ac2d574abc7156d965950364d97071d341b65ddf15c94c798cd64098560b1701000000000000000c00000074d40f3892d81634eb0e8f75c6c4dc76905da867a8ac572a6a31153898d49740" +} \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_keys/test_scheme/9.json b/packages/testing/src/consensus_testing/test_keys/test_scheme/9.json new file mode 100644 index 00000000..68455d4f --- /dev/null +++ b/packages/testing/src/consensus_testing/test_keys/test_scheme/9.json @@ -0,0 +1,4 @@ +{ + "public": "57f1cc053f6981283455d50b57d41c0aa4576b44f336cf329cbfc33d3150dc320ff06814c0daa609d756233cb7c4f432a7146829", + "secret": "14ccdc56af84e012c818e8942007749fa5caba396eee2b661b1d81391dda21c60ff06814c0daa609d756233cb7c4f432a714682900000000000000007000000000000000580000000000000000000000fc0200004007000008000000000000000400000000000000140000001400000020010000ac010000f80100004402000000000000000000000c0000006e94d9158425364f8849f05781fd2b1ab4cf174339827d1c60d7ff08d691363e726b852c249ba134f1858d0de576a966d1df983ee733ed6a5c3d4460e2dc821dd36afe3bc7101c3ef5230606ec2eb263a88ddc63650f0f33656a311f218bef07aa349919956f6f6846680f6284eafd61206e480080b8343f48c2453a6707d8124e6d045fbf4f603949be3a203879b6523b6eab0254593e456bb2e179dd41ff0d234445204d3a1454b6cba62a2b99b36c7a3e9a1238db133cc951321f95f3bd2806f3af5c664d153532baa401fbf0566fe133f21cde229c31516b0f021cad2438ab56e6505ed1cf494040d1404ed6c27658fcdb66f3f3bf7e6662a833366f194700000000000000000c000000847f154676f71a38ecaa6f50a742915c0b11cd317bad7b665c1ed4196808e02c6baf5344a946f054945711433f31ba7cbaa459700416b4153aa93a7c2297cb77e485b539690d747edba04e7b005d06218c233c6356640d0cd31b6b2eb5d68d269c744b0e9b83924744a1573d4f70585dc1900f39cca0e605b02f2f7a2fd8a10f00000000000000000c0000003224c535ed5cea5b4dcb58467c87d324d35e1979140ae73a5b6cf57a40f50716df395519ce252b2e08d27114938ace50b8ee525ac823ca40923076613cb0620900000000000000000c00000002038577c43ade75abd15a30b1df920d2450ab21fb9fc17623d3a466a526600b72f7e71d98352d1d35dd4102a2a3003d5b2a37003b2cdc2587a5115d7c0c7f1200000000000000000c00000057f1cc053f6981283455d50b57d41c0aa4576b44f336cf329cbfc33d3150dc326aa01c4480d5a40e6f400c6118a1c57d6cd2ab5db1ac6475260bc936eb75bc39080000000000000000000000000000001400000014000000200200002c030000b80300000404000000000000000000000c0000000a95fa431a394a6020faef72bc6f944eca4a702f00613176dc9a4f6045ff6966f5eb644a289f505409d1ba29a000a912a6b867057ea7062a08e3f76ebf5d347e1852d625d1db940e8a10237c6b935b63ce6048710ed1976e9e760929a4b2d667a4c9fc30139f90189b717b52bd8de579b1185e3129ec5a113e0b0c17845fd5495ba2a90b9dca7d739a59d97cea776b0b1061762aced0db542b2d36481ef4527e1147a327a1a98953ad756c27c1529c02a603313610c4487d718a163790b87470c04b3c439335765af5de917528c580626b35a70df3e9fd314d01cd473b55290acbc1101ad662183c24a25e0104d9df1e7236440d61273e60f62e6f311f866d25f3ec6725670f816d19f1a7603e3f8d1c5b470324036c295b1439d531cb2f332fcd69e5511c3c4440aa18146ce1f29122a4016e57c5d9d5333214ae6e35fdc434eae70c06c420221e9eaf06688f87731ff9cd4a519d19ec059fc01607c3c062687f7e3152df8b8a45f80b63331ddd1f69bfd289319e1a1103c16d3930b5794a38996a6160cf2de1141a08aa3d59de20065f8ee11200d7c553b5f90d253ee6324e41565267f11b266f58223f7cb30ca86eb8f65c5cb6232a7df6158c4f2151c0500457da3d6ce262548140264dab680d0a8c37c56fc6bc4e237b63fa634e12d440f8febe3d3b8b252cf4c7ce035b3d0e53cf99bd01f89bad69e240a803b1fdb21800000000000000000c0000002db23f11b358764dd98cd14c43d5580b9fff951e887d3d69971af93a7c42c42f15ac8d7570b08676626fcf3845525163e99e5d03acc2075cd76ce94122828d7e13dc4f359ad9a20a9b55420738342556c4299851cab45552632657151ae60d0dffb4db7c32aef213770af026a9f03611f6ab8d3d1ef93718846dd6148212ff7bc3526e3a28e1f3199b4d5b050907456a681fb10e0e767e2311f5bd3b8924492a8a4dbf62b932fd64b26438613c7259243bc2b1088787bf370681b974b74b480fdc75a00275d7ac12d0d6f251072f3e21373458655c39121895a2443da516d57b35ed0977446fc8317ff0b501f156b96fc2394b49bd94cc1c24b8c945e1ae6b7200000000000000000c0000002c3f9942d99784428713a4446836f75b16be1d220257425a1247ee4df6932c64a239e01a663b9b04a398902d7ba72759f1e0b11bde52ee77b8be73287028541817d95d12dd202339659f5f090c77425482666c61030f340d5b0d87609a07d930d12a3011d966950ea35f0666ea7752743f051d1422e98250c608a221607cdb6300000000000000000c0000005935c851dc9d89170405d51463f0c92267d3f728f803e5799f9f1023f00ead663eecef6de75caa61cb6ec116331eed2b0022f568ed359b21e4dae5649511950f00000000000000000c0000006e94d9158425364f8849f05781fd2b1ab4cf174339827d1c60d7ff08d691363e080000000000000000000000000000001400000014000000200200002c030000b80300000404000010000000000000000c00000046461f16f579de62f103fc1cbe87c84639b0f57d739f102822076d1763b17d673b4ce5039403260b3b7e77260429601cc7418c741dae40480822c54284579a745e29c10d8790f5744519a45ce53e67431b648654ad84e11f63f211446cdf26492616941ed412ae2e11c67b2b5318fb3d6353157e047b4355c09aa752f192b220c9a58c302309d46e1b7d92233055656eadcfc4125cbfad7e54be9332ef66ec259950cc69e781d26f547d45103b924b26d5ec2426d9383f50c2d43e066c5d0a75f9bec50867cf9059ce568d284dc5bf5500a9c5728bd0fa6a618b2d184bf738182309294802fe464c9597c304077b565a42984324722a8c07f8d3a43b8f43b50c0a5fdb44cb0fb83bd38d7f21a7e98967ff0f792f46fb5e3e5b278a340afb0068c468d10c64be22108a4b426cac9bab6df24cdd69190232241cfbdc544b3e032eb60843794a01734fd9b5b460b4df426c1bbd6f135a24e2417b1246205c8a6070dce3bb245081ff3c66c1aa1cc21f7145f7a0931a05e042489ee89f3c99387127686d7519eded0a25f474b12962cedf2ada75ae5df865fc415894336b979d7950543b6f645157273bab036c698960b730e716fe397298d019d896125f10e10060192f5a02c691d712234fe92c5c3cf25381c6d861b356b2683ce61273e215d600fe141d6ed1cbe315a07cb729bf8e6c2dba44062f83568950e8cf94633c7c1a5308000000000000000c000000e97fed1732a04b5956f7641d7820a45061b69e2083730f7d6ea1cb554f6da56ab367f668df06e06d0765f60173f8520b48a1703fcb84776e3a2dbc27fd6d850d2c03a02af1107a359362315421ead621527a2a694938077938a6de53ba5ae46686448323d101e9445395170f8e6c9728b8117a3e9827f2154da6627be46fe457c1f3455178a30c11a4fee23d6022726195d42a0e183db4368f50cf747954e306678f0c303b58b5115d1d48125a4d4f71d2c7bd690498ea6b0c822211582ba440c74af032f414f101aa55bc4ecf739a3c375c383332b35b39cc863d05bf24af65a8b8b02c46df45354bef3b49dd1f076426518643bef53825251bc92845ecd86404000000000000000c00000051cf7c00d5006c528e7d3b61edd4b56b26f8e0345d79e011468ec94fe2017d368e97ec55952bdb22bb42f14a5957be09c3f08f2aea498c5becf9dc4017c95a49fd6a6a1e3a91d956dc7b36726ddc536a656060057af74b0c98b3ac1fdb7f4a353efefa51fc8a5d0063c5f769838d8f560374de39c903b70edaa9fc74eb34b13102000000000000000c00000098bc806a56bf8a2a3a9517681da9627c0310371a351e3e7d4ce673003ef0035e4fc63f36c7fcd412c328e856a469727d8e85347c3d42053e8da000673119987501000000000000000c000000726b852c249ba134f1858d0de576a966d1df983ee733ed6a5c3d4460e2dc821d" +} \ No newline at end of file diff --git a/packages/testing/src/consensus_testing/test_types/genesis.py b/packages/testing/src/consensus_testing/test_types/genesis.py index abd63400..a5d72fb6 100644 --- a/packages/testing/src/consensus_testing/test_types/genesis.py +++ b/packages/testing/src/consensus_testing/test_types/genesis.py @@ -1,29 +1,12 @@ """Consensus layer pre-state generation.""" -from functools import lru_cache from typing import Any -from lean_spec.subspecs.containers.slot import Slot from lean_spec.subspecs.containers.state import State, Validators from lean_spec.subspecs.containers.validator import Validator -from lean_spec.types import Uint64 +from lean_spec.types import Bytes52, Uint64 -from ..keys import XmssKeyManager - - -@lru_cache(maxsize=1) -def _get_shared_key_manager() -> XmssKeyManager: - """ - Get or create the shared XMSS key manager for reusing keys across tests. - - Uses functools.lru_cache to create a singleton instance that's shared - across all test fixture generations within a session. This optimizes - performance by reusing keys when possible. - - Returns: - Shared XmssKeyManager instance with max_slot=10. - """ - return XmssKeyManager(max_slot=Slot(10)) +from ..keys import get_shared_key_manager def generate_pre_state(**kwargs: Any) -> State: @@ -40,11 +23,22 @@ def generate_pre_state(**kwargs: Any) -> State: """ genesis_time = kwargs.get("genesis_time", Uint64(0)) num_validators = kwargs.get("num_validators", 4) - key_manager = _get_shared_key_manager() + + key_manager = get_shared_key_manager() + available_keys = len(key_manager) + + assert num_validators <= available_keys, ( + "Not enough keys to generate state.", + f"Expecting a minimum of {num_validators} validators" + f"but the key manager has only {available_keys} keys", + ) validators = Validators( data=[ - Validator(pubkey=key_manager[Uint64(i)].public.encode_bytes(), index=Uint64(i)) + Validator( + pubkey=Bytes52(key_manager[Uint64(i)].public.encode_bytes()), + index=Uint64(i), + ) for i in range(num_validators) ] ) diff --git a/packages/testing/src/framework/cli/fill.py b/packages/testing/src/framework/cli/fill.py index 2671fd1b..242fec2f 100644 --- a/packages/testing/src/framework/cli/fill.py +++ b/packages/testing/src/framework/cli/fill.py @@ -1,5 +1,6 @@ """Unified CLI command for generating Ethereum test fixtures across all layers.""" +import os import sys from pathlib import Path from typing import Sequence @@ -37,6 +38,12 @@ is_flag=True, help="Clean output directory before generating", ) +@click.option( + "--scheme", + type=click.Choice(["test", "prod"], case_sensitive=False), + default="test", + help="XMSS signature scheme (default: test)", +) @click.pass_context def fill( ctx: click.Context, @@ -45,6 +52,7 @@ def fill( fork: str, layer: str, clean: bool, + scheme: str, ) -> None: """ Generate Ethereum test fixtures from test specifications. @@ -61,7 +69,27 @@ def fill( # Default layer is consensus fill tests/spec_tests/devnet --fork=Devnet --clean -v + + # Use specific XMSS scheme (overrides LEAN_ENV env var) + fill --fork=Devnet --scheme=prod --clean -v """ + # Note: It's important to never import any leanSpec modules in this file, so the + # `LEAN_ENV` variable can be set before the config loads its value from the + # environment. + os.environ["LEAN_ENV"] = scheme.lower() + + # Check and download keys if needed (only for consensus layer) + if layer.lower() == "consensus": + # Import here to avoid loading leanSpec modules before LEAN_ENV is set + from consensus_testing.keys import _download_keys, _get_keys_dir + + keys_dir = _get_keys_dir(scheme.lower()) + + # Check if keys already exist, if not, download them + if not (keys_dir.exists() and any(keys_dir.glob("*.json"))): + click.echo(f"Test keys for '{scheme}' scheme not found. Downloading...") + _download_keys(scheme.lower()) + config_path = Path(__file__).parent / "pytest_ini_files" / "pytest-fill.ini" # Find project root by looking for pyproject.toml with [tool.uv.workspace] project_root = Path.cwd() diff --git a/packages/testing/src/framework/test_fixtures/base.py b/packages/testing/src/framework/test_fixtures/base.py index 50305462..6242362c 100644 --- a/packages/testing/src/framework/test_fixtures/base.py +++ b/packages/testing/src/framework/test_fixtures/base.py @@ -8,6 +8,7 @@ from pydantic import Field from framework.forks import BaseFork +from lean_spec.config import LEAN_ENV from lean_spec.types import CamelModel @@ -39,6 +40,9 @@ class BaseFixture(CamelModel): network: str | None = None """The fork/network this fixture is valid for (e.g., 'Devnet', 'Shanghai').""" + lean_env: str = Field(default=LEAN_ENV) + """The target lean environment (e.g. 'test' or 'prod').""" + info: Dict[str, Any] = Field(default_factory=dict, alias="_info") """Metadata about the test (description, fork, etc.).""" diff --git a/src/lean_spec/config.py b/src/lean_spec/config.py new file mode 100644 index 00000000..d9fae848 --- /dev/null +++ b/src/lean_spec/config.py @@ -0,0 +1,18 @@ +""" +Global configuration for the Lean Ethereum specifications. + +This module contains environment-specific settings that apply across all subspecs. +""" + +import os + +_SUPPORTED_LEAN_ENVS: list[str] = ["prod", "test"] + +LEAN_ENV = os.environ.get("LEAN_ENV", "prod").lower() +"""The environment flag ('prod' or 'test'). Defaults to 'prod' for the specs.""" + +if LEAN_ENV not in _SUPPORTED_LEAN_ENVS: + raise ValueError( + f"Invalid LEAN_ENV environment variable: '{LEAN_ENV}'. " + f"Supported values: {_SUPPORTED_LEAN_ENVS}" + ) diff --git a/src/lean_spec/subspecs/containers/block/block.py b/src/lean_spec/subspecs/containers/block/block.py index 091eacb5..8afcc743 100644 --- a/src/lean_spec/subspecs/containers/block/block.py +++ b/src/lean_spec/subspecs/containers/block/block.py @@ -12,6 +12,7 @@ from typing import TYPE_CHECKING from lean_spec.subspecs.containers.slot import Slot +from lean_spec.subspecs.xmss.interface import TARGET_SIGNATURE_SCHEME, GeneralizedXmssScheme from lean_spec.types import Bytes32, Uint64 from lean_spec.types.container import Container @@ -135,7 +136,9 @@ class SignedBlockWithAttestation(Container): aggregation of all signatures). """ - def verify_signatures(self, parent_state: "State") -> bool: + def verify_signatures( + self, parent_state: "State", scheme: GeneralizedXmssScheme = TARGET_SIGNATURE_SCHEME + ) -> bool: """ Verify all XMSS signatures in this signed block. @@ -147,6 +150,7 @@ def verify_signatures(self, parent_state: "State") -> bool: Args: parent_state: The state at the parent block, used to retrieve validator public keys and verify signatures. + scheme: The XMSS signature scheme to use for verification. Returns: True if all signatures are cryptographically valid. @@ -189,6 +193,7 @@ def verify_signatures(self, parent_state: "State") -> bool: validator.get_pubkey(), aggregated_attestation.data.slot, attestation_root, + scheme, ), "Attestation signature verification failed" # Verify proposer attestation signature @@ -203,6 +208,7 @@ def verify_signatures(self, parent_state: "State") -> bool: proposer.get_pubkey(), proposer_attestation.data.slot, proposer_attestation.data.data_root_bytes(), + scheme, ), "Proposer signature verification failed" return True diff --git a/src/lean_spec/subspecs/containers/validator.py b/src/lean_spec/subspecs/containers/validator.py index fdb23a75..91836e77 100644 --- a/src/lean_spec/subspecs/containers/validator.py +++ b/src/lean_spec/subspecs/containers/validator.py @@ -5,7 +5,6 @@ from lean_spec.types import Bytes52, Container, Uint64 from ..xmss.containers import PublicKey -from ..xmss.interface import TEST_SIGNATURE_SCHEME, GeneralizedXmssScheme from .attestation import Attestation, AttestationData @@ -18,7 +17,7 @@ class Validator(Container): index: Uint64 = Uint64(0) """Validator index in the registry.""" - def get_pubkey(self, scheme: GeneralizedXmssScheme = TEST_SIGNATURE_SCHEME) -> PublicKey: + def get_pubkey(self) -> PublicKey: """Get the XMSS public key from this validator.""" return PublicKey.decode_bytes(bytes(self.pubkey)) diff --git a/src/lean_spec/subspecs/forkchoice/store.py b/src/lean_spec/subspecs/forkchoice/store.py index b7db68c5..04fd3272 100644 --- a/src/lean_spec/subspecs/forkchoice/store.py +++ b/src/lean_spec/subspecs/forkchoice/store.py @@ -33,6 +33,7 @@ from lean_spec.subspecs.containers.slot import Slot from lean_spec.subspecs.ssz.hash import hash_tree_root from lean_spec.subspecs.xmss.containers import Signature +from lean_spec.subspecs.xmss.interface import TARGET_SIGNATURE_SCHEME, GeneralizedXmssScheme from lean_spec.types import ( ZERO_HASH, Bytes32, @@ -366,7 +367,11 @@ def on_attestation( } ) - def on_block(self, signed_block_with_attestation: SignedBlockWithAttestation) -> "Store": + def on_block( + self, + signed_block_with_attestation: SignedBlockWithAttestation, + scheme: GeneralizedXmssScheme = TARGET_SIGNATURE_SCHEME, + ) -> "Store": """ Process a new block and update the forkchoice state. @@ -400,6 +405,7 @@ def on_block(self, signed_block_with_attestation: SignedBlockWithAttestation) -> Args: signed_block_with_attestation: Complete signed block with proposer attestation. + scheme: XMSS signature scheme to use for signature verification. Returns: New Store with block integrated and head updated. @@ -427,7 +433,7 @@ def on_block(self, signed_block_with_attestation: SignedBlockWithAttestation) -> ) # Validate cryptographic signatures - valid_signatures = signed_block_with_attestation.verify_signatures(parent_state) + valid_signatures = signed_block_with_attestation.verify_signatures(parent_state, scheme) # Execute state transition function to compute post-block state post_state = copy.deepcopy(parent_state).state_transition(block, valid_signatures) diff --git a/src/lean_spec/subspecs/xmss/__init__.py b/src/lean_spec/subspecs/xmss/__init__.py index 00b1d349..24d33485 100644 --- a/src/lean_spec/subspecs/xmss/__init__.py +++ b/src/lean_spec/subspecs/xmss/__init__.py @@ -5,9 +5,9 @@ It exposes the core data structures and the main interface functions. """ -from .constants import PROD_CONFIG, TEST_CONFIG +from .constants import PROD_CONFIG, TARGET_CONFIG, TEST_CONFIG from .containers import PublicKey, SecretKey, Signature -from .interface import GeneralizedXmssScheme +from .interface import TARGET_SIGNATURE_SCHEME, GeneralizedXmssScheme from .types import HashTreeOpening __all__ = [ @@ -18,4 +18,6 @@ "HashTreeOpening", "PROD_CONFIG", "TEST_CONFIG", + "TARGET_CONFIG", + "TARGET_SIGNATURE_SCHEME", ] diff --git a/src/lean_spec/subspecs/xmss/constants.py b/src/lean_spec/subspecs/xmss/constants.py index 81029eee..235cfcb7 100644 --- a/src/lean_spec/subspecs/xmss/constants.py +++ b/src/lean_spec/subspecs/xmss/constants.py @@ -11,6 +11,7 @@ from typing_extensions import Final +from lean_spec.config import LEAN_ENV from lean_spec.types import StrictBaseModel, Uint64 from ..koalabear import P_BYTES, Fp @@ -154,3 +155,11 @@ def SIGNATURE_LEN_BYTES(self) -> int: # noqa: N802 PRF_KEY_LENGTH: int = 32 """The length of the PRF secret key in bytes.""" + +_LEAN_ENV_TO_CONFIG = { + "test": TEST_CONFIG, + "prod": PROD_CONFIG, +} + +TARGET_CONFIG: Final = _LEAN_ENV_TO_CONFIG[LEAN_ENV] +"""The active XMSS configuration based on LEAN_ENV environment variable.""" diff --git a/src/lean_spec/subspecs/xmss/containers.py b/src/lean_spec/subspecs/xmss/containers.py index 02811cb8..4ad096ff 100644 --- a/src/lean_spec/subspecs/xmss/containers.py +++ b/src/lean_spec/subspecs/xmss/containers.py @@ -72,14 +72,9 @@ def verify( public_key: PublicKey, epoch: "Uint64", message: bytes, - scheme: "GeneralizedXmssScheme | None" = None, + scheme: GeneralizedXmssScheme, ) -> bool: """Verify the signature using XMSS verification algorithm.""" - from .interface import TEST_SIGNATURE_SCHEME - - if scheme is None: - scheme = TEST_SIGNATURE_SCHEME - try: return scheme.verify(public_key, epoch, message, self) except Exception: diff --git a/src/lean_spec/subspecs/xmss/interface.py b/src/lean_spec/subspecs/xmss/interface.py index 244d6bf7..26679d20 100644 --- a/src/lean_spec/subspecs/xmss/interface.py +++ b/src/lean_spec/subspecs/xmss/interface.py @@ -12,6 +12,7 @@ from pydantic import model_validator +from lean_spec.config import LEAN_ENV from lean_spec.subspecs.xmss.target_sum import ( PROD_TARGET_SUM_ENCODER, TEST_TARGET_SUM_ENCODER, @@ -589,3 +590,11 @@ def advance_preparation(self, sk: SecretKey) -> SecretKey: rand=TEST_RAND, ) """A lightweight instance for test environments.""" + +_LEAN_ENV_TO_SCHEME = { + "test": TEST_SIGNATURE_SCHEME, + "prod": PROD_SIGNATURE_SCHEME, +} + +TARGET_SIGNATURE_SCHEME = _LEAN_ENV_TO_SCHEME[LEAN_ENV] +"""The active XMSS signature scheme based on LEAN_ENV environment variable.""" diff --git a/src/lean_spec/subspecs/xmss/types.py b/src/lean_spec/subspecs/xmss/types.py index 47b9384f..076bf258 100644 --- a/src/lean_spec/subspecs/xmss/types.py +++ b/src/lean_spec/subspecs/xmss/types.py @@ -6,7 +6,7 @@ from ...types.byte_arrays import BaseBytes from ...types.collections import SSZList, SSZVector from ...types.container import Container -from .constants import PRF_KEY_LENGTH, PROD_CONFIG +from .constants import PRF_KEY_LENGTH, TARGET_CONFIG class PRFKey(BaseBytes): @@ -20,30 +20,26 @@ class PRFKey(BaseBytes): LENGTH = PRF_KEY_LENGTH -HASH_DIGEST_LENGTH = PROD_CONFIG.HASH_LEN_FE +HASH_DIGEST_LENGTH = TARGET_CONFIG.HASH_LEN_FE """ The fixed length of a hash digest in field elements. -Derived from `PROD_CONFIG.HASH_LEN_FE`. This corresponds to the output length +Derived from `TARGET_CONFIG.HASH_LEN_FE`. This corresponds to the output length of the Poseidon2 hash function used in the XMSS scheme. - -TODO: Make the configuration generic and don't hardcode `PROD_CONFIG`. """ # Calculate the maximum number of nodes in a sparse Merkle tree layer: # - A bottom tree has at most 2^(LOG_LIFETIME/2) leaves # - With padding, we may add up to 2 additional nodes # - To be generous and future-proof, we use 2^(LOG_LIFETIME/2 + 1) -NODE_LIST_LIMIT = 1 << (PROD_CONFIG.LOG_LIFETIME // 2 + 1) +NODE_LIST_LIMIT = 1 << (TARGET_CONFIG.LOG_LIFETIME // 2 + 1) """ The maximum number of nodes that can be stored in a sparse Merkle tree layer. -Calculated as `2^(LOG_LIFETIME/2 + 1)` from PROD_CONFIG to accommodate: +Calculated as `2^(LOG_LIFETIME/2 + 1)` from TARGET_CONFIG to accommodate: - Bottom trees with up to `2^(LOG_LIFETIME/2)` nodes - Padding overhead (up to 2 additional nodes) - Future-proofing with 2x margin - -TODO: Make the configuration generic and don't hardcode `PROD_CONFIG`. """ @@ -82,12 +78,10 @@ class Parameter(SSZVector[Fp]): This is a unique, randomly generated value associated with a single key pair. It is mixed into every hash computation to "personalize" the hash function, preventing certain cross-key attacks. It is public knowledge. - - TODO: Make the configuration generic and don't hardcode `PROD_CONFIG`. """ ELEMENT_TYPE = Fp - LENGTH = PROD_CONFIG.PARAMETER_LEN + LENGTH = TARGET_CONFIG.PARAMETER_LEN class Randomness(SSZVector[Fp]): @@ -99,12 +93,10 @@ class Randomness(SSZVector[Fp]): the final signature for the verifier to reproduce the same hash. SSZ notation: `Vector[Fp, RAND_LEN_FE]` - - TODO: Make the configuration generic and don't hardcode `PROD_CONFIG`. """ ELEMENT_TYPE = Fp - LENGTH = PROD_CONFIG.RAND_LEN_FE + LENGTH = TARGET_CONFIG.RAND_LEN_FE class HashTreeOpening(Container): @@ -137,14 +129,12 @@ class HashTreeLayer(Container): """SSZ-compliant list of hash digests stored for this layer.""" -LAYERS_LIMIT = PROD_CONFIG.LOG_LIFETIME + 1 +LAYERS_LIMIT = TARGET_CONFIG.LOG_LIFETIME + 1 """ The maximum number of layers in a subtree. This is `LOG_LIFETIME + 1` to accommodate all layers from 0 (leaves) to LOG_LIFETIME (root), -inclusive. For PROD_CONFIG with LOG_LIFETIME=32, this allows up to 33 layers. - -TODO: Make the configuration generic and don't hardcode `PROD_CONFIG`. +inclusive. For example, with LOG_LIFETIME=32, this allows up to 33 layers. """ diff --git a/tests/conftest.py b/tests/conftest.py index 492c7b90..7b99967e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,8 +1,11 @@ """Pytest configuration and shared fixtures.""" +import os + from hypothesis import settings -import lean_spec.subspecs.xmss as xmss +if "LEAN_ENV" not in os.environ: + os.environ["LEAN_ENV"] = "test" # Create a profile named "no_deadline" with deadline disabled. settings.register_profile("no_deadline", deadline=None)