| 
<?phpdeclare(strict_types=1);
 
 if (class_exists('ParagonIE_Sodium_Core_Curve25519_Fe', false)) {
 return;
 }
 
 /**
 * Class ParagonIE_Sodium_Core_Curve25519_Fe
 *
 * This represents a Field Element
 *
 * @psalm-suppress MissingTemplateParam
 */
 class ParagonIE_Sodium_Core_Curve25519_Fe implements ArrayAccess
 {
 /**
 * @var array<int, int>
 */
 protected array $container = [];
 
 /**
 * @var int
 */
 protected int $size = 10;
 
 /**
 * @internal You should not use this directly from another application
 *
 * @param array<int, int> $array
 * @param bool $save_indexes
 * @return self
 */
 public static function fromArray(array $array, bool $save_indexes = false): self
 {
 $count = count($array);
 if ($save_indexes) {
 $keys = array_keys($array);
 } else {
 $keys = range(0, $count - 1);
 }
 $array = array_values($array);
 /** @var array<int, int> $keys */
 
 $obj = new ParagonIE_Sodium_Core_Curve25519_Fe();
 if ($save_indexes) {
 for ($i = 0; $i < $count; ++$i) {
 $obj->offsetSet($keys[$i], $array[$i]);
 }
 } else {
 for ($i = 0; $i < $count; ++$i) {
 $obj->offsetSet($i, $array[$i]);
 }
 }
 return $obj;
 }
 
 /**
 * @internal You should not use this directly from another application
 *
 * @param int|null $offset
 * @param int $value
 * @return void
 */
 #[ReturnTypeWillChange]
 public function offsetSet($offset, $value): void
 {
 if (is_null($offset)) {
 $this->container[] = $value;
 } else {
 $this->container[$offset] = $value;
 }
 }
 
 /**
 * @internal You should not use this directly from another application
 *
 * @param int $offset
 * @return bool
 */
 #[ReturnTypeWillChange]
 public function offsetExists($offset): bool
 {
 return isset($this->container[$offset]);
 }
 
 /**
 * @internal You should not use this directly from another application
 *
 * @param int $offset
 * @return void
 */
 #[ReturnTypeWillChange]
 public function offsetUnset($offset): void
 {
 unset($this->container[$offset]);
 }
 
 /**
 * @internal You should not use this directly from another application
 *
 * @param int $offset
 * @return int
 * @psalm-suppress ImplementedReturnTypeMismatch
 */
 #[ReturnTypeWillChange]
 public function offsetGet($offset): int
 {
 if (!isset($this->container[$offset])) {
 $this->container[$offset] = 0;
 }
 return $this->container[$offset];
 }
 
 /**
 * @internal You should not use this directly from another application
 *
 * @return array
 */
 public function __debugInfo()
 {
 return array(implode(', ', $this->container));
 }
 }
 
 |