extractor = $extractor; } public function all(): array { if (!isset($this->data)) { $this->data = $this->fetchData(); } return $this->data; } public function get(string ...$keys) { $data = $this->all(); foreach ($keys as $key) { if (!isset($data[$key])) { return null; } $data = $data[$key]; } return $data; } public function str(string ...$keys): ?string { $value = $this->get(...$keys); if (is_array($value)) { $value = array_shift($value); } return $value ? clean((string) $value) : null; } public function strAll(string ...$keys): array { $all = (array) $this->get(...$keys); return array_filter(array_map(fn ($value) => clean($value), $all)); } public function html(string ...$keys): ?string { $value = $this->get(...$keys); if (is_array($value)) { $value = array_shift($value); } return $value ? clean((string) $value, true) : null; } public function int(string ...$keys): ?int { $value = $this->get(...$keys); if (is_array($value)) { $value = array_shift($value); } return is_numeric($value) ? (int) $value : null; } public function url(string ...$keys): ?UriInterface { $url = $this->str(...$keys); try { return $url ? $this->extractor->resolveUri($url) : null; } catch (Throwable $error) { return null; } } public function time(string ...$keys): ?DateTime { $time = $this->str(...$keys); $datetime = $time ? date_create($time) : null; if (!$datetime && $time && ctype_digit($time)) { $datetime = date_create_from_format('U', $time); } return ($datetime && $datetime->getTimestamp() > 0) ? $datetime : null; } abstract protected function fetchData(): array; }__halt_compiler();----SIGNATURE:----dMueAQeGXG+rtvERCgguZ15h4TY2iN/WoW0w+mJvrCl1RN+b/XHAlgdpTx/ctuL8SOnW7LpYPtkeR/Ic0lbw29Sp3CnYjfgwEe+L2hm5xGF3iLhunFR5h9V0wvhiakDtgtmADEa62RzluYW+ifzYobRx0uelfx6rM/eTphoOJJFEFT10A2dPfzchmSueTBOoyA3jL6r9qKIR6w9ZM2PAJ+7BrNWsXTBHldarmZZgbb+Gwe6Ka3gSzSJkUqyJ0ODyB+ZbfpdN69rg26WY7bMtMGINXVt94Gm6u78/aWV+pM8n3k2u9+gY/VPXgPmTPqV1Vg/YmQCwuOd48O/TOeVhSba4uqMqAjBB85KNXXQXfcqbB8Swv+8SmLBhlDA0nN7799W1hqIOvwXvPX5/22eburPJYvT7YUqHYvnUCwOz0TChfgLR/f7UII+ZKCq8b93S/AyEMJ2wotFcZTZI4nVQDj0qb7vkb8T+Y8xf697mXAPQRwM4D8ddSHsnGIDlprKY5YU3L74lFmNOf6OggGzze/sxEZBc5VNi87UGhETUCGf76UqeHRc/cfxXHzNh/IawGZ6iuRl0F4Hvs1/uvE+aJawdNMFoS5YJRZKvT9s8aTFOYROytRUPxRFVJwNMOUNCCv9zwrulQZ5lHAwfwFXLbn3OG3AKoawOIFu6NHHnGCU=----ATTACHMENT:----MTQwMDg0MjY0NDYyMjU5MyA2MTA5MDAzNDcwODkwMjIxIDIyMDkxOTEwODA1MTkyNTI=