To nie jest wyzwanie, ale pytanie, doszedłem do wniosku, że z tego powodu
Tematy niezwiązane z wyzwaniem, które są związane z rozwiązywaniem zagadek programistycznych lub szczególnym rodzajem wyzwania, są również na temat.
Teraz przejdź do pytania:
Czy można napisać kod JavaScript zawierający tylko 5 liter? JSFuck już to robi z 6 symbolami, !+[]()
ale zastanawiam się, czy !
postać jest potrzebna.
JSFuck działa z kombinacją rzutowania na ciąg znaków (przez dodanie pustej tablicy), rzutowania na liczbę (przez napisanie + na początku) i rzutowania na wartość logiczną przez negację. Na przykład:
[] \\ Empty array
+[] \\ Cast to number -> 0
!+[] \\ Negate -> true
!+[]+[] \\ Cast to string -> "true"
Z tego ciągu możemy wyodrębnić wszystkie litery za pomocą nawiasów kwadratowych z cyfrą w środku, a dowolną liczbę można utworzyć, dodając razem prawdę tyle razy.
W ten sposób można znaleźć wiele liter i połączyć je w łańcuchy. Najważniejszym ciągiem, który można utworzyć, jest "constructor"
to, że można go użyć do uzyskania Function
dowolnej funkcji, a tego obiektu można użyć do wykonania ciągów jako JavaScript:
[]["find"] \\ the function Array.prototype.find
[]["find"]["constructor"] \\ the Function object
[]["find"]["constructor"](string)() \\ same as eval(string)
Jak widać, !
ma 2 zastosowania tutaj:
- Tworzenie liczb w celu wybrania liter z ciągów znaków.
- Przesyłanie na boolean, aby uzyskać
"true"
i"false"
.
Pierwszy z tych 2 można również wykonać przy użyciu modułu ++
inkrementora, a nie bezpośrednio 0
, ale można go użyć na elementach wewnątrz tablicy:
+[] \\ 0
[+[]] \\ [0]
[+[]][+[]] \\ [0][0] -> 0
++[+[]][+[]] \\ ++[0][0]-> 1
++[[]][+[]] \\ also works because ++ casts to number
Dzięki temu wszystkie liczby można tworzyć bez !
.
Drugi jest trudniejszy. Znaczenie "true"
i "false"
leży w literach "r"
i "s"
, które oba pojawiają się w "constructor"
. Mam już znaleźć wszystkie kolejne litery "constructor"
za pomocą "undefined"
, "Infinity"
, "NaN"
i oddając funkcje ciągów.
Tak więc ostateczne pytanie: (jak) możesz tworzyć booleany, litery "r"
i "s"
JavaScript, używając tylko +[]()
?
List "l"
może również pomóc. Można go uzyskać w formie, null
ale nie udało mi się uzyskać tej wartości za pomocą tych 5 symboli. Można go na przykład użyć do otrzymania logicznych wartości, jeśli mamy już "s"
:
[]["includes"]() \\ false
[+[]]["includes"](+[]) \\ true
Pismo "l"
i "k"
razem daje dostęp do "r"
:
([]+[])["link"]() \\ "<a href="undefined"></a>"
Każdy sposób uzyskania wartości logicznej null
lub dowolnej litery r s l k
byłby bardzo przydatny!
Biblioteka tego, co mamy:
Array.prototype.find: [] [(([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + ( ++ [[]] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []])])] Nieskończoność: + ((++ [[]] [+ []] + []) + (([] [[]] + []) [(++ [[]] [+ []]) + (+ + [[]] [+ []]) + (++ [[]] [+ []])]) + (++ [[]] [+ []] + []) + (+ []) + (+ []) + (+ [])) NaN: + [] [[]] nieokreślony: [][[]] 0: + [] 1: ++ [[]] [+ []] 2: (++ [[]] [+ []]) + (++ [[]] [+ []]) 3: (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) 4: (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[] ] [+ []]) 5: (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[] ] [+ []]) + (++ [[]] [+ []]) 6: (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[] ] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) 7: (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[] ] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) 8: (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[] ] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) 9: (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[] ] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) a: (+ [] [[]] + []) [++ [[]] [+ []]] c: ([] [(([[] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ [ ]]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [ []] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + [] ) [(++ [[]] [+ []]) + (++ [[]] [+ []])])] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])] d: ([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []])] e: ([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [ + []])] f: ([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [ + []]) + (++ [[]] [+ []])] i: ([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [ + []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])] n: ([] [[]] + []) [++ [[]] [+ []]] o: ([] [(([[] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ [ ]]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [ []] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + [] ) [(++ [[]] [+ []]) + (++ [[]] [+ []])])] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])] t: (+ ((++ [[]] [+ []] + []) + (([] [[]] + []) [(++ [[]] [+ []]) + ( ++ [[]] [+ []]) + (++ [[]] [+ []])]) + (++ [[]] [+ []] + []) + (+ [] ) + (+ []) + (+ [])) + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ [] ])] u: ([] [[]] + []) [+ []] v: ([] [(([[] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ [ ]]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [ []] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + [] ) [(++ [[]] [+ []]) + (++ [[]] [+ []])])] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + [] + ((++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]))] y: (+ ((++ [[]] [+ []] + []) + (([] [[]] + []) [(++ [[]] [+ []]) + ( ++ [[]] [+ []]) + (++ [[]] [+ []])]) + (++ [[]] [+ []] + []) + (+ [] ) + (+ []) + (+ [])) + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ [] ]) + (++ [[]] [+ []])] I: (+ ((++ [[]] [+ []] + []) + (([] [[]] + []) [(++ [[]] [+ []]) + ( ++ [[]] [+ []]) + (++ [[]] [+ []])]) + (++ [[]] [+ []] + []) + (+ [] ) + (+ []) + (+ [])) + []) [+ []] N: (+ [] [[]] + []) [+ []] „”: ([] [(([[] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (+ + [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + [ ]) [(++ [[]] [+ []]) + (++ [[]] [+ []])])] + []) [+ (++ [[]] [+ [] ] + [] + ((++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (+ + [[]] [+ []]) + (++ [[]] [+ []]))]] (: ([] [(([[] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ [ ]]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [ []] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + [] ) [(++ [[]] [+ []]) + (++ [[]] [+ []])])] + []) [+ (++ [[]] [+ []] + [] + ((++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]))]] ): ([] [(([[] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ [ ]]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [ []] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + [] ) [(++ [[]] [+ []]) + (++ [[]] [+ []])])] + []) [+ (++ [[]] [+ []] + [] + ((++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])))] {: ([] [(([[] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ [ ]]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [ []] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + [] ) [(++ [[]] [+ []]) + (++ [[]] [+ []])])] + []) [+ (++ [[]] [+ []] + [] + ((++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])))] }: ([] [(([[] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ [ ]]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [ []] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + [] ) [(++ [[]] [+ []]) + (++ [[]] [+ []])])] + []) [+ ((++ [[]] [+ [] ]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + [] + ((++ [[]] [+ []]) + ( ++ [[]] [+ []])))] .: (+ (++ [[]] [+ []] + [] + (++ [[]] [+ []]) + ([] [[]] + []) [(++ [ []] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])] + (++ [[]] [+ [] ] + [] + (+ []) + (+ []))) + []) [++ [[]] [+ []]] ,:[[]] [([] [(([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + ( ++ [[]] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []])])] + []) [(++ [[]] [+ [ ]]) + (++ [[]] [+ []]) + (++ [[]] [+ []])] + ([] [(([] [[]] + []) [ (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [ + []])]) + (([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + ( ++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[] ] + []) [++ [[]] [+ []]]) + (([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []])])] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [ []] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []] )] + ([] [[]] + []) [++ [[]] [+ []]] + ([] [(([] [[]] + []) [(++ [ ]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) ]) + (([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[] ] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + (([] [[]] + []) [++ [[]] [+ []]]) + (([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [ + []])])] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])] + (+ [] [[]] + []) [++ [[]] [+ []]] + (+ ((++ [[]] [+ []] + []) + (([] [[]] + []) [(++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []])]) + ( ++ [[]] [+ []] + []) + (+ []) + (+ []) + (+ [])) + []) [(++ [[]] [+ [] ]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[]] [+ []]) + (++ [[ ]] [+ []]) + (++ [[]] [+ []])]] ([[]]) + []
źródło
eval
2453 znakiwindow
.Odpowiedzi:
Po burzy mózgów wydaje się, że przynajmniej w nowoczesnych przeglądarkach nie ma takiej możliwości.
Spróbuję podsumować cały proces, dodając uzasadnienie, dlaczego wyczerpaliśmy nasze opcje w dowolnej domenie przed przejściem dalej. Następnie, z wyjątkiem jakiegoś niesamowitego nowego wglądu (jak na przykład przypadek składni JavaScript, o którym wszyscy zapominają), będzie całkiem jasne, że nie ma sposobu, aby uzyskać pozostałe litery.
Literały
Jedyne bezpośrednie literały można zrobić ze
+()[]
są zagnieżdżone puste tablice[]
,[[]]
,[[[]]]
, itd. Stamtąd możemy rozpocząć przesyłanie wartości za pomocą+
:+[]
dostaje zero, co sztuczka Jensa rozwija do dowolnych liczb całkowitych dodatnich przy użyciu++
.[]+[]
jest""
. W rzeczywistości[]+x
daje namx
ogólnie ciąg znaków .[]
Następnym zastosowaniem jest indeksowanie. Indeksowanie obiektu poza granicami ([][[]]
) daje ci szansęundefined
. Rzucenie tego na ciąg i zindeksowanie wyniku daje literyd e f i n u
; rzutowanie go na liczbę całkowitą za pomocą pierwszego+
pozwala uzyskaćNaN
, z którego następują literya N
.Użycie
++
lewy do dowolnej wartości niecałkowitej osiągniętej do tej pory dajeNaN
albo błąd. Ponadto żaden z obiektów, które możemy stworzyć, nie jest możliwy do wywołania (jeszcze), więc()
nie pomaga (z wyjątkiem grupowania).Pozostałe sztuczki w naszym rękawie to rzucanie i indeksowanie. Pytanie zatem brzmi: które łańcuchy możemy stworzyć używając znaków,
0123456789adefinuN
które alboLiterały liczbowe
Jako przykład drugiej opcji możemy wykonać ciąg znaków
"1e1000"
, a następnie pobraćInfinity
z niego+"1e1000"
, a rzutowanie go z powrotem na ciąg spowoduje, że otrzymamy literyy
iI
.Możemy również tworzyć
"11e100"
, rzutować na liczbę i wracać do łańcucha, aby uzyskać"1.1e+101"
, z którego wyodrębniamy.
i+
.Za pomocą tego
.
z kolei możemy wykonać sznurek".0000001"
, rzucić go na numer i z powrotem, aby uzyskać"1e-7"
, wygrywając nas-
.To w zasadzie wszystkie zmiennoprzecinkowe dostaną: nie ma żadnych ciekawszych wartości innych niż
Infinity
iNaN
, i nie ma więcej znaków używanych w ich zwykłych reprezentacjach łańcuchowych innych niż-+.0123456789e
.Nieruchomości
Więc mamy litery
-+.0123456789adefinuyIN
. Do jakich nieruchomości możemy dotrzeć? Zapytajmy JavaScript.Tylko te
[].find
, które Jens już znalazł. Rzućmy to na ciąg, zbieraj wszystkie jego litery i spróbuj ponownie. Reprezentacja ciągu jest nieco inna w różnych przeglądarkach. W Chrome i Edge"function find() { [native code] }"
zawieraacdefinotuv()[]{}
i spację; nasz pełny alfabet jest teraz+-.()[]{}0123456789INacdefinotuvy
. W przeglądarce Firefox jest więcej spacji i znaków nowej linii, ale litery są takie same.Powtarzamy nasze wyszukiwanie:
String.prototype.concat
jest przestarzałe: robi dokładnie to, co+
robi, co możemy już zrobić. Więc mamyArray.prototype.concat
iArray.prototype.find
. Co możemy z nimi zrobić?Funkcje
concat()
pozwala nam stworzyć po raz pierwszy dłuższe tablice.[[]].concat([[]])
jest[[], []]
, a rzucenie tego na sznurek nas dopadnie","
. (To nie pomaga nam znaleźć nowych właściwości.) Ale.concat
nie modyfikuje naszych wartości i nigdy nie może wrócićnull
ani nic takiego.Dzwonienie
find()
też nam nie pomaga: dokumentacja MDN mówiOba te, które możemy już zrobić za pomocą indeksowania.
A stąd nie ma dokąd pójść. Jeśli wątpisz w cokolwiek, co napisałem, daj mi znać w komentarzach.
źródło
null
funkcji powracających:String.prototype.match
,RegExp.exec
, iArray.prototype.includes
. Znalezienie tych wszystkich niemożliwych do sformułowania, chyba że istnieje dziwny sposób utworzenia wyrażenia regularnego, o którym nie wiem, doszedłem również do wniosku, że nie ma możliwego sposobu, aby to zrobić."catch"
i"throw"
czego obecnie nie możemy, potrzebowalibyśmy czegośeval
w rodzaju użycia ich jako słów kluczowych, co jest naszym celem przede wszystkim.-
i rzutowaniu liczb, ale to nie jest bardzo pomocne.Trzy funkcje w odpowiedzi Lynn nie były aż tak bezużyteczne. Ale tryb ścisły w ECMAScript 5 udaremnił mój plan.
W starszych wersjach JavaScript / ECMAScript istnieje dziwactwo. Jeśli metoda zostanie wywołana bez obiektu,
window
zakłada się obiekt globalny . Więc możemy to zrobić:Dotyczy to nadal nowoczesnych przeglądarek, ale tylko wtedy, gdy funkcja nie jest zdefiniowana w trybie ścisłym. I wszystkie wbudowane funkcje (z natywnym kodem) wydawały się działać w trybie ścisłym. W starszych przeglądarkach, w których nie ma jeszcze trybu ścisłego, działa to również w przypadku wbudowanych funkcji.
Załóżmy, że korzystamy ze starszych przeglądarek. Następnie, jeśli chcemy
window
, musimy znaleźć wbudowaną funkcję, która zwraca coś zawierającegothis
. W ramach naszych jedynych wyborów istnieje funkcjaArray.prototype.concat
, która właśnie to robi. Możemy to przetestować w następujący sposób:Zasadniczo więc nie ma znaczenia, czy obiekt, do którego jest wywoływany, jest tablicą (ale przynajmniej musi to być obiekt). Po prostu otacza ją tablicą, jeśli nie.
Gdybyśmy mieli
window
, najpierw moglibyśmy uzyskać ciąg[object Window]
, odlewając go na ciąg. Dzięki nowej postacib
możemy uzyskaćr
is
użyć odpowiednio następujących dwóch wierszy oraz każdej postaci, w której nie mieliśmyconstructor
:Ale innym problemem jest usunięcie odwołania do obiektu
[].concat
. Zawijanie go w tablicę i wypakowywanie nie działa, ponieważ[].concat
już oznacza[]["concat"]
. Jedyny znany mi sposób, który można by zbudować,+[]()
to zwrócenie go z funkcji.Array.prototype.find
wydawało się, że jest w stanie to zrobić:Zawsze mieliśmy prawdziwe funkcje.
Array.prototype.concat
iString.prototype.concat
oba zwracają prawdę, jeśli obiekt jestwindow
. Jeśli skorzystamy z późniejszej, skorzystaliśmy ze wszystkich trzech dostępnych funkcji.Ale niestety
Array.prototype.find
nie istnieje w starej przeglądarce, której używamy. Przynajmniej nie znalazłem takiego, który działa. I nie znalazłem innego sposobu na usunięcie odwołania do obiektu.Pełny kod, który można przetestować w nowoczesnych przeglądarkach, który zwraca
r
is
wraz z.bind(window)
obejściem:źródło
find
przyszedł znacznie później niż tryb ścisły, więc znalezienie czegoś działającego jest mało prawdopodobne. Zapytałem o Edge'a, ponieważ pomyślałem, że może mieć szansę na wolniejszą kompatybilność wsteczną niż przestrzeganie standardu. Próbowałem także Konquerora z tego samego powodu. I niektóre przeglądarki linii poleceń, ale żadna z nich nawet nie obsługuje JavaScript.find
jeszcze nie został zaimplementowany, może częściowo? ... Gdyby tylko znalazł się na ich liście ...