New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

pythclient

Package Overview
Dependencies
Maintainers
1
Versions
29
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pythclient - pypi Package Compare versions

Comparing version
0.2.0
to
0.2.1
+13
-2
PKG-INFO

@@ -1,4 +0,4 @@

Metadata-Version: 2.1
Metadata-Version: 2.2
Name: pythclient
Version: 0.2.0
Version: 0.2.1
Summary: A library to retrieve Pyth account structures off the Solana blockchain.

@@ -44,2 +44,13 @@ Home-page: https://github.com/pyth-network/pyth-client-py

Requires-Dist: pytest-asyncio; extra == "testing"
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: project-url
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

@@ -46,0 +57,0 @@ Pyth Client in Python

@@ -1,4 +0,4 @@

Metadata-Version: 2.1
Metadata-Version: 2.2
Name: pythclient
Version: 0.2.0
Version: 0.2.1
Summary: A library to retrieve Pyth account structures off the Solana blockchain.

@@ -44,2 +44,13 @@ Home-page: https://github.com/pyth-network/pyth-client-py

Requires-Dist: pytest-asyncio; extra == "testing"
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: project-url
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

@@ -46,0 +57,0 @@ Pyth Client in Python

+14
-7

@@ -20,5 +20,5 @@ from __future__ import annotations

_SUPPORTED_VERSIONS = set((_VERSION_1, _VERSION_2))
_ACCOUNT_HEADER_BYTES = 16 # magic + version + type + size, u32 * 4
ACCOUNT_HEADER_BYTES = 16 # magic + version + type + size, u32 * 4
_NULL_KEY_BYTES = b'\x00' * SolanaPublicKey.LENGTH
MAX_SLOT_DIFFERENCE = 25
DEFAULT_MAX_LATENCY = 25

@@ -85,3 +85,3 @@

def _parse_header(buffer: bytes, offset: int = 0, *, key: SolanaPublicKeyOrStr) -> Tuple[PythAccountType, int, int]:
if len(buffer) - offset < _ACCOUNT_HEADER_BYTES:
if len(buffer) - offset < ACCOUNT_HEADER_BYTES:
raise ValueError("Pyth account data too short")

@@ -146,3 +146,3 @@

try:
self.update_from(data[:size], version=version, offset=_ACCOUNT_HEADER_BYTES)
self.update_from(data[:size], version=version, offset=ACCOUNT_HEADER_BYTES)
except Exception as e:

@@ -488,2 +488,3 @@ logger.exception("error while parsing account", exception=e)

product (Optional[PythProductAccount]): the product this price is for, if loaded
max_latency (int): the maximum allowed slot difference for this feed
"""

@@ -510,2 +511,3 @@

self.prev_timestamp: int = 0 # unix timestamp in seconds
self.max_latency: int = 0 # maximum allowed slot difference for this feed

@@ -545,3 +547,3 @@ @property

if self.aggregate_price_info.price_status == PythPriceStatus.TRADING and \
slot - self.aggregate_price_info.pub_slot > MAX_SLOT_DIFFERENCE:
slot - self.aggregate_price_info.pub_slot > self.max_latency:
return PythPriceStatus.UNKNOWN

@@ -580,5 +582,8 @@

offset += 48 # struct.calcsize("6q")
# drv[2-4]_ fields are currently unused
timestamp, min_publishers = struct.unpack_from("<qB", buffer, offset)
offset += 16 # struct.calcsize("qBbhi") ("bhi" is drv_2, drv_3, drv_4)
offset += 9 # struct.calcsize("qB")
_message_sent, max_latency = struct.unpack_from("<bB", buffer, offset)
offset += 2 # struct.calcsize("bB")
_drv_3, _drv_4 = struct.unpack_from("<bi", buffer, offset)
offset += 5 # struct.calcsize("bi")
product_account_key_bytes, next_price_account_key_bytes = struct.unpack_from("32s32s", buffer, offset)

@@ -630,2 +635,4 @@ offset += 64 # struct.calcsize("32s32s")

self.prev_timestamp = prev_timestamp
# a max latency of 0 is the default max latency
self.max_latency = max_latency if max_latency != 0 else DEFAULT_MAX_LATENCY

@@ -632,0 +639,0 @@ def __str__(self) -> str:

@@ -10,3 +10,3 @@ from setuptools import setup

name='pythclient',
version='0.2.0',
version='0.2.1',
packages=['pythclient'],

@@ -13,0 +13,0 @@ author='Pyth Developers',

@@ -6,3 +6,4 @@ import pytest

from pythclient.pythaccounts import (
MAX_SLOT_DIFFERENCE,
ACCOUNT_HEADER_BYTES,
DEFAULT_MAX_LATENCY,
PythPriceAccount,

@@ -16,45 +17,218 @@ PythPriceType,

# Yes, this sucks, but it is actually a monster datastructure (2K)
# Yes, this sucks, but it is actually a monster datastructure
# Equity.US.AAPL/USD symbol
@pytest.fixture
def price_account_bytes():
return base64.b64decode((
b'AQAAAPj///8TAAAAEAAAANupUgYAAAAA2qlSBgAAAAB4XGx3EAAAAJ86jskAAAAA3CH+HAEA'
b'AAD6ORUDAAAAABzzZ5MAAAAA3CH+HAEAAAABAAAAAAAAAAAAAAAAAAAASNYDPXM+J5UMLgNR'
b'4lBUkc2RVIJPcW2VE1FMdLn5j1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANmp'
b'UgYAAAAAIB/LdhAAAADEKi0CAAAAAAAAAAAAAAAAIB/LdhAAAADk7y4CAAAAAAEAAAAAAAAA'
b'26lSBgAAAAD3Zn27jXzTFyGJQUojwmtSHYwZxkUEVVXj4o6CVo5leGBYnXYQAAAAYBBIAQAA'
b'AAABAAAAAAAAANipUgYAAAAAYFiddhAAAABgEEgBAAAAAAEAAAAAAAAA2alSBgAAAAAWD7rB'
b'Ovfd2AXTFwo94Ma9lxJqHgLA0lnQqG74IdblxyAfy3YQAAAACyXuAAAAAAABAAAAAAAAANip'
b'UgYAAAAAIB/LdhAAAAALJe4AAAAAAAEAAAAAAAAA2alSBgAAAAAF0gZPMxz/3cq+lvo2VSTd'
b'ZPSzhuiFo00VLL6uBCzq9cgcPHEQAAAAVAF9BAAAAAABAAAAAAAAANmpUgYAAAAAyBw8cRAA'
b'AABUAX0EAAAAAAEAAAAAAAAA2qlSBgAAAADiuY8mkITUiAURyBFdzvBPU8fiB5kuA//RJt+U'
b'TeTbBEB4h9UNAAAAQFSJAAAAAAABAAAAAAAAANfOOgYAAAAAQHiH1Q0AAABAVIkAAAAAAAEA'
b'AAAAAAAA1846BgAAAAAa5QKj6UK4sRzDdElrTZxcOfgMXawfRZ81og7BuHMIndC7Q3UQAAAA'
b'cNddAAAAAAABAAAAAAAAANipUgYAAAAA0LtDdRAAAABw110AAAAAAAEAAAAAAAAA2alSBgAA'
b'AAANw7zqkVVpdgiwXwSnCtCaQVFyqpu190CHOsB4KysaRYA0/X4QAAAA6PWmKgAAAAABAAAA'
b'AAAAANipUgYAAAAAgDT9fhAAAADo9aYqAAAAAAEAAAAAAAAA2alSBgAAAAAH8ss5/bAp3FF4'
b'TSjvF5Edl8GmnIVyOhtiVbNCU0OtdaDilHgQAAAAQHh9AQAAAAABAAAAAAAAANmpUgYAAAAA'
b'oOKUeBAAAABAeH0BAAAAAAEAAAAAAAAA2qlSBgAAAACfPqV71Am6AMQNkq5XE0HCfjwvft+s'
b'4cJKUbGhXDGytwB+w3YQAAAAAJDQAwAAAAABAAAAAAAAANapUgYAAAAAAH7DdhAAAAAAkNAD'
b'AAAAAAEAAAAAAAAA1qlSBgAAAABDgo+jYZ2mvK7WiRfeHXzOkhfexyuuEjBj/3vn3S+WPp+1'
b'Y3cQAAAAIND8AwAAAAABAAAAAAAAANipUgYAAAAAn7VjdxAAAADQDPwDAAAAAAEAAAAAAAAA'
b'2alSBgAAAAAYg7EkbdpdBxc9vTjVZwAHFYQsH9DolucLCm3S5RpPl5CJPXoQAAAAoH4mAQAA'
b'AAABAAAAAAAAANSpUgYAAAAAkIk9ehAAAACgfiYBAAAAAAEAAAAAAAAA1KlSBgAAAABDt3hL'
b'b4VmyzKDZfvOC0BGFSO67OeFF7MVXDHaozgpj6CarHYQAAAA4MrUAgAAAAABAAAAAAAAANip'
b'UgYAAAAAoJqsdhAAAADgytQCAAAAAAEAAAAAAAAA2alSBgAAAAD1nd3vzBZrLYmko8zz/sS7'
b'S5ihUbTAN/9hXrt4QuM9dQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACp6tPj00vMhTS7LGUOsnqMjD8aItaIKEMoU4xC'
b'qOgjQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAADQyjMc9dnucWvIxpCjAKuoQDs3FBy2OwJlwJjAxY5jrEDJD3cQAAAA'
b'iO90AgAAAAABAAAAAAAAANipUgYAAAAAQMkPdxAAAACI73QCAAAAAAEAAAAAAAAA2alSBgAA'
b'AABfyWT+IQLDTV2m/OVBHX+euZaDX9doeSPt8Afh6snTmyAfy3YQAAAA8MjSAAAAAAABAAAA'
b'AAAAANipUgYAAAAAIB/LdhAAAADwyNIAAAAAAAEAAAAAAAAA2alSBgAAAADshtw0V/2qFXMo'
b'0kCdNAHTz61GgIqwRBk8Hn7J+tXPYra163kQAAAAmhIJAwAAAAABAAAAAAAAANipUgYAAAAA'
b'trXreRAAAACaEgkDAAAAAAEAAAAAAAAA2alSBgAAAADYb4QN6+LtpmaFm/jCx0LD5ke+Thdt'
b'/FIl2ATx1J/iLU9xK3YQAAAAUQDeAQAAAAABAAAAAAAAANipUgYAAAAAT3ErdhAAAABRAN4B'
b'AAAAAAEAAAAAAAAA2alSBgAAAAD3oTB6i0MnB/D217PntQNBRQJinx7o+cT2tZFViRokLtlj'
b'UXkQAAAAhB8gAgAAAAABAAAAAAAAANipUgYAAAAA2WNReRAAAACEHyACAAAAAAEAAAAAAAAA'
b'2alSBgAAAAAQObH1+gS8Ag0HeG1UdQRs2fQLBW50YN8kJo4QAHwOnZ+DNHgQAAAAYe1IAgAA'
b'AAABAAAAAAAAANipUgYAAAAAn4M0eBAAAABh7UgCAAAAAAEAAAAAAAAA2alSBgAAAAA='
))
b'1MOyoQIAAAADAAAAIDEAAAEAAAD7////HQAAABsAAAD/rccLAAAAAP6txwsAAAAATKVnAQAAAACfFQcN'
b'AQAAAP0gJHIAAAAAczcAAAAAAAA8DgiiAAAAAP0gJHIAAAAA9fasZwAAAAADADIDPQEAACkunmg3xiSw'
b'fCBPOBN1xaL8HmQRPUjcgostWu2uVecsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+rccL'
b'AAAAAEp3aAEAAAAA+TcAAAAAAAD09qxnAAAAAM12aAEAAAAAdjgAAAAAAAABAAAAAAAAAP+txwsAAAAA'
b'BHkihWa8qHaHujLYgFXDIwjMb1piz6Z/GIGZQeOFsrJwcWgBAAAAALvEAAAAAAAAAQAAAAAAAAD8rccL'
b'AAAAAHBxaAEAAAAAu8QAAAAAAAABAAAAAAAAAPytxwsAAAAABw99DZApUxxfQ451HfqUNEecEJ+K3q4L'
b'ImQn81mfXBnOemgBAAAAANkUAQAAAAAAAQAAAAAAAADzrccLAAAAAM56aAEAAAAA2RQBAAAAAAABAAAA'
b'AAAAAPOtxwsAAAAAB/LLOf2wKdxReE0o7xeRHZfBppyFcjobYlWzQlNDrXVMd2gBAAAAAEhcAAAAAAAA'
b'AQAAAAAAAAD3rccLAAAAAEx3aAEAAAAASFwAAAAAAAABAAAAAAAAAPetxwsAAAAAC7W169huq2IOUmHg'
b'hY4UR1FAoCOpXo1cicOJgwqilmeucmgBAAAAAPQBAAAAAAAAAQAAAAAAAAD9rccLAAAAAK5yaAEAAAAA'
b'9AEAAAAAAAABAAAAAAAAAP2txwsAAAAAFzpASQCO7GVI83hRl/cs7iBjSV0Av1Bj68V8d837GUHzPVwB'
b'AAAAANBpwAAAAAAABAAAAAAAAAAd35ILAAAAAPM9XAEAAAAA0GnAAAAAAAAEAAAAAAAAAB3fkgsAAAAA'
b'GIOxJG3aXQcXPb041WcABxWELB/Q6JbnCwpt0uUaT5cJbWgBAAAAAFgHAwAAAAAAAQAAAAAAAAD8rccL'
b'AAAAAAltaAEAAAAAWAcDAAAAAAABAAAAAAAAAPytxwsAAAAAJh54j4GAISD3TwZWpS7jDYp6d0mcRf2n'
b'xlxmID4iZ25tgWgBAAAAAOWaAwAAAAAAAQAAAAAAAAD0rccLAAAAAG2BaAEAAAAA5ZoDAAAAAAABAAAA'
b'AAAAAPStxwsAAAAANIa+/riGb203XbXQ8h0HwnTKrhg+e3cLJXNgHPRZHSRRd2gBAAAAABwwAAAAAAAA'
b'AQAAAAAAAAD6rccLAAAAAFF3aAEAAAAAHDAAAAAAAAABAAAAAAAAAPqtxwsAAAAAQ4KPo2Gdpryu1okX'
b'3h18zpIX3scrrhIwY/97590vlj5nf2gBAAAAABh+AAAAAAAAAQAAAAAAAAD8rccLAAAAAGd/aAEAAAAA'
b'GH4AAAAAAAABAAAAAAAAAPytxwsAAAAATXYO0eWeK9NQsMMZj+HvA16XRS7UvMYr42xvExZSkdFcdWgB'
b'AAAAABmLAAAAAAAAAQAAAAAAAAD8rccLAAAAAFx1aAEAAAAAGYsAAAAAAAABAAAAAAAAAPytxwsAAAAA'
b'Tjqyi56CYuBQyurc9ATAapzuKuOgdEwh/hm0Mt5mkOtkdWgBAAAAANsQAQAAAAAAAQAAAAAAAAD+rccL'
b'AAAAAGR1aAEAAAAA2xABAAAAAAABAAAAAAAAAP6txwsAAAAATrAvjfOs/kT57qji7Ps3wu5XqD3//AFC'
b'0CdHbBz0M3QEnGgBAAAAAIpIAgAAAAAAAQAAAAAAAAD7rccLAAAAAAScaAEAAAAAikgCAAAAAAABAAAA'
b'AAAAAPutxwsAAAAAVBkdg3Zb8Ej6G4LYAW466xu/DHb3ezUTWu9Vo3T3/ms8e2gBAAAAAAc0AAAAAAAA'
b'AQAAAAAAAADyrccLAAAAADx7aAEAAAAABzQAAAAAAAABAAAAAAAAAPKtxwsAAAAAaj2lMUYld1Wxfrwl'
b'0Lo22hdeJPxpkprmafPfHmPVnUBafWgBAAAAAElcAAAAAAAAAQAAAAAAAADxrccLAAAAAFp9aAEAAAAA'
b'SVwAAAAAAAABAAAAAAAAAPGtxwsAAAAAfEFChNuJaWdU8R/x7GUP3o44600xL/0IC/SH/5J1561Nd2gB'
b'AAAAAEdcAAAAAAAAAQAAAAAAAAD4rccLAAAAAE13aAEAAAAAR1wAAAAAAAABAAAAAAAAAPitxwsAAAAA'
b'fcK1rXWbYoQKtCq2nzJiCmvpYCTjfvXYuWgji0GQsGpwcWgBAAAAAOAuAAAAAAAAAQAAAAAAAAD5rccL'
b'AAAAAHBxaAEAAAAA4C4AAAAAAAABAAAAAAAAAPmtxwsAAAAAh2GV5NQWzsgLKj06RBPx0QCB97kCA1OV'
b'UrDxEcZNvhhKd2gBAAAAANCPAAAAAAAAAQAAAAAAAAD4rccLAAAAAEp3aAEAAAAA0I8AAAAAAAABAAAA'
b'AAAAAPitxwsAAAAAibazYiCMITlc2drXqvTlt3fSCnk7W1heG3EouJogjZd4eGgBAAAAAGfNAQAAAAAA'
b'AQAAAAAAAAD8rccLAAAAAHh4aAEAAAAAZ80BAAAAAAABAAAAAAAAAPytxwsAAAAAi0AFlC/4wcwisiCx'
b'v13ss5/vcrirPwLzrSXGpy8fewyuZ2gBAAAAAN+IAAAAAAAAAQAAAAAAAAD/rccLAAAAAK5naAEAAAAA'
b'34gAAAAAAAABAAAAAAAAAP+txwsAAAAArU0itxPC4r5fWaGWOzot71pBjR2EcS+WEjK4Bzkzs3Crc2gB'
b'AAAAAPdaAAAAAAAAAQAAAAAAAAD6rccLAAAAAKtzaAEAAAAA91oAAAAAAAABAAAAAAAAAPqtxwsAAAAA'
b'vFRslRVZlbwHP1fHn9TC4H0gHT4cvadEJLsMYazqQb5kpmgBAAAAAG/6AAAAAAAAAQAAAAAAAADxrccL'
b'AAAAAGSmaAEAAAAAb/oAAAAAAAABAAAAAAAAAPGtxwsAAAAAxeks08X3OzuidkIc+gZFbXnnuyIHgNNb'
b'7PpPEpd/qijgKWMBAAAAAHBvAgAAAAAAAQAAAAAAAACdb60LAAAAAOApYwEAAAAAcG8CAAAAAAABAAAA'
b'AAAAAJ1vrQsAAAAA0HoGOdUHEoMy5c1/vlS8fo3SBHH6TZX9zKxofXfx7YOddWgBAAAAAKS2AwAAAAAA'
b'AQAAAAAAAAD6rccLAAAAAJ11aAEAAAAApLYDAAAAAAABAAAAAAAAAPqtxwsAAAAA0sj8lXSClC3CIjOA'
b'kkwaV8JH5xFY0ct7hVWuwlD+R7jNdmgBAAAAABdxAQAAAAAAAQAAAAAAAAD7rccLAAAAAM12aAEAAAAA'
b'F3EBAAAAAAABAAAAAAAAAPutxwsAAAAA1S855pC2mSbP8jFQCvvqX3MpTOXs5/BYHTl/r3O5RalFe2gB'
b'AAAAABBLAAAAAAAAAQAAAAAAAAD+rccLAAAAAEV7aAEAAAAAEEsAAAAAAAABAAAAAAAAAP6txwsAAAAA'
b'4nYQ5DOiRvjmu8YoeyW1DLXF7pdywpOP4PGqQglGiGhkc2gBAAAAAPUBAAAAAAAAAQAAAAAAAAD7rccL'
b'AAAAAGRzaAEAAAAA9QEAAAAAAAABAAAAAAAAAPutxwsAAAAA4tX2SZD3l3FAyKYJNSbTLHNOH4n15gMg'
b'uh53FIMjwtkzjGgBAAAAAHwvAAAAAAAAAQAAAAAAAAD1rccLAAAAADOMaAEAAAAAfC8AAAAAAAABAAAA'
b'AAAAAPWtxwsAAAAA6RNLhwN/jdZo6gCE/jH7lRcwks1xI3vR8WRwtPd0ihQbcGgBAAAAAOwZAAAAAAAA'
b'AQAAAAAAAAD6rccLAAAAABtwaAEAAAAA7BkAAAAAAAABAAAAAAAAAPqtxwsAAAAA75mJdHHcLE7j7fIP'
b'srWt70W9Qm7X3gxVvFw7bbzVMJJrfWgBAAAAAOUrAAAAAAAAAQAAAAAAAAD6rccLAAAAAGt9aAEAAAAA'
b'5SsAAAAAAAABAAAAAAAAAPqtxwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7xHUr72YBwAAAAAA'
b'AAAAAJNnayVdBgAAAAAAAAAAAACBeRAFAAAAAAAAAAAAAAAA'
))

@@ -69,22 +243,23 @@ @pytest.fixture

def test_price_account_update_from(price_account_bytes: bytes, price_account: PythPriceAccount):
price_account.update_from(buffer=price_account_bytes, version=2, offset=0)
price_account.update_from(buffer=price_account_bytes, version=2, offset=ACCOUNT_HEADER_BYTES)
assert price_account.price_type == PythPriceType.PRICE
assert price_account.exponent == -8
assert price_account.num_components == 19
assert price_account.exponent == -5
assert price_account.num_components == 29
assert len(price_account.price_components) == price_account.num_components
assert price_account.last_slot == 106080731
assert price_account.valid_slot == 106080730
assert price_account.last_slot == 197635583
assert price_account.valid_slot == 197635582
assert price_account.product_account_key == SolanaPublicKey(
"5uKdRzB3FzdmwyCHrqSGq4u2URja617jqtKkM71BVrkw"
"3mkwqdkawySvAm1VjD4f2THN5mmXzb76fvft2hWpAANo"
)
assert price_account.max_latency == 50
assert price_account.next_price_account_key is None
assert asdict(price_account.aggregate_price_info) == {
"raw_price": 70712500000,
"raw_confidence_interval": 36630500,
"raw_price": 23623373,
"raw_confidence_interval": 14454,
"price_status": PythPriceStatus.TRADING,
"pub_slot": 106080731,
"exponent": -8,
"price": 707.125,
"confidence_interval": 0.366305,
"pub_slot": 197635583,
"exponent": -5,
"price": 236.23373,
"confidence_interval": 0.14454,
}

@@ -94,25 +269,25 @@ # Only assert the first element of the 19 price components

"publisher_key": SolanaPublicKey(
"HekM1hBawXQu6wK6Ah1yw1YXXeMUDD2bfCHEzo25vnEB"
"JTmFx5zX9mM94itfk2nQcJnQQDPjcv4UPD7SYj6xDCV"
),
"last_aggregate_price_info": {
"raw_price": 70709500000,
"raw_confidence_interval": 21500000,
"raw_price": 23622000,
"raw_confidence_interval": 50363,
"price_status": PythPriceStatus.TRADING,
"pub_slot": 106080728,
"exponent": -8,
"price": 707.095,
"confidence_interval": 0.215,
"pub_slot": 197635580,
"exponent": -5,
"price": 236.22000000000003,
"confidence_interval": 0.50363,
},
"latest_price_info": {
"raw_price": 70709500000,
"raw_confidence_interval": 21500000,
"raw_price": 23622000,
"raw_confidence_interval": 50363,
"price_status": PythPriceStatus.TRADING,
"pub_slot": 106080729,
"exponent": -8,
"price": 707.095,
"confidence_interval": 0.215,
"pub_slot": 197635580,
"exponent": -5,
"price": 236.22000000000003,
"confidence_interval": 0.50363,
},
"exponent": -8,
"exponent": -5,
}
assert price_account.min_publishers == 0
assert price_account.min_publishers == 3

@@ -127,3 +302,3 @@

expected = "PythPriceAccount PythPriceType.PRICE (5ALDzwcRJfSyGdGyhP3kP628aqBNHZzLuVww7o9kdspe)"
price_account.update_from(buffer=price_account_bytes, version=2, offset=0)
price_account.update_from(buffer=price_account_bytes, version=2, offset=ACCOUNT_HEADER_BYTES)
assert str(price_account) == expected

@@ -147,3 +322,3 @@

):
price_account.update_from(buffer=price_account_bytes, version=2, offset=0)
price_account.update_from(buffer=price_account_bytes, version=2, offset=ACCOUNT_HEADER_BYTES)
price_account.slot = price_account.aggregate_price_info.pub_slot

@@ -156,3 +331,3 @@ assert price_account.aggregate_price_confidence_interval == 0.366305

):
price_account.update_from(buffer=price_account_bytes, version=2, offset=0)
price_account.update_from(buffer=price_account_bytes, version=2, offset=ACCOUNT_HEADER_BYTES)
price_account.slot = price_account.aggregate_price_info.pub_slot

@@ -164,3 +339,3 @@ assert price_account.aggregate_price == 707.125

):
price_account.update_from(buffer=price_account_bytes, version=2, offset=0)
price_account.update_from(buffer=price_account_bytes, version=2, offset=ACCOUNT_HEADER_BYTES)
price_account.slot = price_account.aggregate_price_info.pub_slot

@@ -175,4 +350,4 @@ price_account.aggregate_price_info.price_status = PythPriceStatus.UNKNOWN

):
price_account.update_from(buffer=price_account_bytes, version=2, offset=0)
price_account.slot = price_account.aggregate_price_info.pub_slot + MAX_SLOT_DIFFERENCE
price_account.update_from(buffer=price_account_bytes, version=2, offset=ACCOUNT_HEADER_BYTES)
price_account.slot = price_account.aggregate_price_info.pub_slot + DEFAULT_MAX_LATENCY

@@ -185,6 +360,6 @@ price_status = price_account.aggregate_price_status

):
price_account.update_from(buffer=price_account_bytes, version=2, offset=0)
price_account.slot = price_account.aggregate_price_info.pub_slot + MAX_SLOT_DIFFERENCE + 1
price_account.update_from(buffer=price_account_bytes, version=2, offset=ACCOUNT_HEADER_BYTES)
price_account.slot = price_account.aggregate_price_info.pub_slot + DEFAULT_MAX_LATENCY + 1
price_status = price_account.aggregate_price_status
assert price_status == PythPriceStatus.UNKNOWN

@@ -6,3 +6,3 @@ from typing import Any, Dict, Union, Sequence, List

from pythclient.pythaccounts import (
_ACCOUNT_HEADER_BYTES, _VERSION_2, PythMappingAccount, PythPriceType, PythProductAccount, PythPriceAccount
ACCOUNT_HEADER_BYTES, _VERSION_2, PythMappingAccount, PythPriceType, PythProductAccount, PythPriceAccount
)

@@ -238,3 +238,3 @@

def product_account_bytes() -> bytes:
return base64.b64decode(PRODUCT_ACCOUNT_B64_DATA)[_ACCOUNT_HEADER_BYTES:]
return base64.b64decode(PRODUCT_ACCOUNT_B64_DATA)[ACCOUNT_HEADER_BYTES:]

@@ -252,3 +252,3 @@

def price_account_bytes() -> bytes:
return base64.b64decode(PRICE_ACCOUNT_B64_DATA)[_ACCOUNT_HEADER_BYTES:]
return base64.b64decode(PRICE_ACCOUNT_B64_DATA)[ACCOUNT_HEADER_BYTES:]

@@ -255,0 +255,0 @@