Προγραμματισμός II

Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr

Εισαγωγή στο μάθημα

Καλώς ήρθατε

Προγραμματισμός II

Αυτοαξιολόγηση

Πόσο άνετα προγραμματίζετε στη Java;

Στόχοι του μαθήματος

Στόχος του μαθήματος είναι όσοι το παρακολουθήσουν να είναι σε θέση να:

Τρόπος διδασκαλίας

Οι σημειώσεις

Βαθμολογία

Ο τελικός βαθμός κάθε φοιτητή θα βασίζεται σε 3 κριτήρια: Απαραίτητη προϋπόθεση για να περάσει ο φοιτητής το μάθημα είναι η απόδοσή στις ασκήσεις και τις εξετάσεις να καλύπτει τουλάχιστον τη βάση. Χωρίς συμμετοχή στην ομαδική άσκηση ο μέγιστος βαθμός είναι 5.

Αξιολόγηση συμμετοχής

HMAC QR participation token

Στατιστικά στοιχεία

Επιδόσεις στις εξετάσεις στο τέλος του εξαμήνου.
ΈτοςΕξετάσειςΑσκήσειςΒαθμόςΕπιτυχία
20146.597.381%
20157.69.18.194%
20167.29886%
20178.08.88.390%
20187.79.18.593%
20217.79.17.580%
20226.98.37.578%
20236.98.87.682%

Οι ασκήσεις

Χρήση του συστήματος των ασκήσεων jarpeb

Για να χρησιμοποιήσετε το σύστημα πρέπει:

Παράδοση της βαθμολογίας

Καθυστερημένη παράδοση

Χρήση ΠΤΝ

Για τη χρήση παραγωγικής τεχνητής νοημοσύνης (π.χ. ChatGPT, Bard, GitHub Copilot) ισχύουν τα εξής.

Διαθέσιμα συγγράμματα

Πρόσθετα δωρεάν συγγράμματα

Επίσης διαθέσιμα στους φοιτητές του ΟΠΑ μέσω του HEAL-Link:

Βιβλιογραφία για προγραμματισμό

Βιβλιογραφία για τη Java

Επισκόπηση θεωρίας

Επισκόπηση των ασκήσεων

  1. εξοικείωση με τις ασκήσεις
  2. ορίσματα, εκφράσεις, βρόχοι και αποφάσεις
  3. δημιουργία αντικειμένων και πρόσβαση στις μεθόδους τους
  4. δημιουργία μιας κλάσης
  5. κληρονομικότητα
  6. παραγωγή και έλεγχος εξαιρέσεων
  7. προγραμματισμός με συμβολοσειρές
  8. μετασχηματισμός αρχείου κειμένου
  9. μια απλή γραφική εφαρμογή
  10. επεξεργασία XML
  11. επικοινωνία πελάτη-εξυπηρετητή
  12. χρήση νημάτων και παραμετρικών τύπων
  13. προγραμματισμός σε ζεύγη
  14. αναδρομικές συναρτήσεις
  15. μορφοποίηση
  16. διεπαφές

Επισκόπηση φροντιστηρίου

  1. Ιδεατή μηχανή Java
  2. Μεταγλωττιστές
  3. Git και Maven
  4. Αντικείμενα και αναφορές
  5. Κληρονομικότητα, υποτύποι
  6. Εξαιρέσεις, ισχυρισμοί, διεπαφές
  7. Γενικεύσεις, συμβολοσειρές συλλογές
  8. Κανονικές εκφράσεις, αρχεία
  9. Ταυτοχρονισμός
  10. Συναρτησιακός προγραμματισμός

Δουλειά για το επόμενο μάθημα

Γλώσσες και περιβάλλοντα ανάπτυξης

Ιστορική ανασκόπηση

Διαδικασιακές γλώσσες

Σε μια αλγοριθμική (imperative) (ή προστακτική ή επιτακτική ή διαδικαστική (procedural)) γλώσσα το πρόγραμμα εκφράζει άμεσα τα βήματα που επιθυμούμε να εκτελέσει ο υπολογιστής.

Τιμές, τύποι και μεταβλητές

Εκφράσεις και τελεστές

Μηχανισμοί αφαίρεσης

Μηχανισμοί ελέγχου της ροής

Αντικειμενοστρεφείς γλώσσες

  • Χαρακτηριστικές γλώσσες: Smalltalk, Squeak, C++, Java, C#, Python, Ruby, JavaScript, TypeScript, Swift

    Συναρτησιακός προγραμματισμός

    Χαρακτηριστικά συναρτησιακού προγραμματισμού

    Γλώσσες ολοκλήρωσης

    Θέματα για μελέτη

    1. Τι κάνει μια γλώσσα κατάλληλη για την υλοποίηση επιχειρηματικών εφαρμογών;
    2. Με ποιον τύπο δεδομένων θα παραστήσετε στη Java χρηματικά ποσά; Δώστε παραδείγματα.

    Άσκηση: εξοικείωση με τις ασκήσεις

    Άσκηση 1

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Τεχνολογίες μεταγλώττισης και εκτέλεσης

    Το χάσμα υλικού και λογισμικού

    Οι δυνατότητες που προσφέρει το υλικό και το λογισμικό έρχονται συχνά σε αντίθεση ή αλληλοσυμπληρώνονται. Οι γλώσσες προγραμματισμού και τα λειτουργικά συστήματα είναι δύο τεχνολογίες που επιτρέπουν τη βέλτιστη συνύπαρξη του υλικού με το λογισμικό.

    Υλοποίηση γλωσσών προγραμματισμού

    Μια γλώσσα προγραμματισμού μπορεί - ανάλογα με τη γλώσσα - να υλοποιηθεί με τους παρακάτω τρόπους: καθώς και με συνδυασμούς τους.

    Αρχιτεκτονική του μεταγλωττιστή

    Η διεργασία της μεταγλώττισης μπορεί να διαχωριστεί στις παρακάτω ξεχωριστές λειτουργίες οι οποίες εκτελούνται σε διαδοχικές φάσεις:

    Λεκτική ανάλυση

    Ο λεκτικός αναλυτής παρέχει τις παρακάτω λειτουργίες: Με τον τρόπο αυτό διαχωρίζονται οι εργασίες της λεκτικής και της συντακτικής ανάλυσης και κάθε μια υλοποιείται με τον πιο αποδοτικό τρόπο.

    Λεκτικές μονάδες

    Χρήση λεκτικών μονάδων

    Ο συντακτικός αναλυτής

    Ο συντακτικός αναλυτής:

    Παράδειγμα

        i = 0;
        while ( i < 10) {
            System.out.println(i);
            i = i + 1;
        }
    

    (Το δέντρο μπορεί να κατασκευαστεί και ζωντανά από 17 άτομα.)

    Συντακτικό δένδρο

    Parse graph

    Παραγωγή κώδικα

    Η παραγωγή κώδικα αποτελεί το πιο ενδιαφέρον και σύνθετο στάδιο της μεταγλώττισης. Κατά το στάδιο αυτό μπορούν να υλοποιηθούν τεχνικές βελτιστοποίησης προσανατολισμένες στη συγκεκριμένη γλώσσα ή αρχιτεκτονική και να υλοποιηθούν αλγόριθμοι βέλτιστης χρήσης των στοιχείων της αρχιτεκτονικής. Η παραγωγή του τελικού εκτελέσιμου κώδικα μπορεί να διακριθεί στα παρακάτω στάδια:

    Βελτιστοποίηση του ενδιάμεσου κώδικα

    Η βελτιστοποίηση του κώδικα μετασχηματίζει τον κώδικα σε μια μορφή που παράγει τα ίδια αποτελέσματα με τον αρχικά αλλά βελτιωμένα κάποια κριτήρια απόδοσης. Τέτοια κριτήρια μπορεί να είναι:

    Πλεονεκτήματα βελτιστοποίησης

    Η βελτιστοποίηση μπορεί να απαλλάξει τον προγραμματιστή από αντιπαραγωγικές αλλαγές του κώδικα που έχουν ως στόχο να ικανοποιήσουν τα κριτήρια αυτά και να του επιτρέψει να συγκεντρωθεί σε άλλα ποιοτικά στοιχεία του παραγόμενου κώδικα όπως την ορθότητα, την ασφάλεια, τη διαθεσιμότητα, τη συντηρησιμότητα, και τη μεταφερσιμότητα. Συχνά βελτιστοποιήσεις που γίνονται από τον προγραμματιστή έρχονται σε αντίθεση με τα παραπάνω ποιοτικά στοιχεία.

    Παράδειγμα βελτιστοποίησης

    Απαλοιφή κοινών υποεκφράσεων (common subexpression elimination)
    Εκφράσεις με κοινά στοιχεία υπολογίζονται μόνο μια φορά. Η ακολουθία:
    x = b / c;
    y = 42 + b / c;
    
    μετασχηματίζεται στην ακολουθία:
    x = b / c;
    y = 42 + x;
    

    Παράδειγμα βελτιστοποίησης

    Μετακίνηση κώδικα βρόχων (loop code motion)
    Εκφράσεις που δεν αλλάζουν μέσα σε ένα βρόχο μετακινούνται έξω από αυτόν. Η ακολουθία:
    {
        int a, b, z;
    
        a = 8; b = 4;
        for (i = 0; i < 10; i++) {
            z = a / b;
            System.out.println(z);
        }
    }
    
    μετασχηματίζεται στην ακολουθία:
    {
        int a, b, z;
    
        a = 8; b = 4;
        z = a / b;
        for (i = 0; i < 10; i++) {
            System.out.println(z);
        }
    }
    

    Παράδειγμα βελτιστοποίησης

    Απαλοιφή άχρηστου κώδικα (dead code removal)
    Κώδικας που δεν εκτελείται ποτέ απαλείφεται. Η ακολουθία:
    {
        int a, q;
    
        q = 48;
        return (q);
        a = q / 2;
    }
    
    μετασχηματίζεται στην ακολουθία:
    {
        int a, q;
    
        q = 48;
        return (q);
    }
    

    Παράδειγμα βελτιστοποίησης

    Απαλοιφή κλήσεων σε συναρτήσεις (function inlining)
    Κλήσεις σε συναρτήσεις μετασχηματίζονται σε απευθείας χρήση του αντίστοιχου κώδικα. Η ακολουθία:
    static int
    square(int a) {
        return (a * a);
    }
    
    public static void main(String args[]) {
        System.out.println(square(12));
    }
    
    μετασχηματίζεται στην ακολουθία:
    public static void main(String args[]) {
        System.out.println(12 * 12);
    }
    

    Παράδειγμα βελτιστοποίησης

    Απαλοιφή αναδρομής από το τέλος συνάρτησης (tail recursion elimination)
    Αναδρομή στο τέλος μιας συνάρτησης μετασχηματίζεται σε βρόχο. Η ακολουθία:
    foo() {
        System.out.println("foo");
        foo();
    }
    
    μετασχηματίζεται στην ακολουθία:
    foo() {
        for (;;)
            System.out.println("foo");
    }
    

    Βελτιστοποίηση του τελικού κώδικα

    Συχνά ο τελικός κώδικας που παράγεται μπορεί να περιέχει ακολουθίες εντολών οι οποίες να μπορούν να βελτιστοποιηθούν για το συγκεκριμένο επεξεργαστή. Οι ακολουθίες αυτές μπορούν να βρεθούν εξετάζοντας ένα μικρό παράθυρο του τελικού κώδικα, όπως αυτό θα φαίνονταν κοιτάζοντας τον κώδικα από μια κλειδαρότρυπα. Για το λόγο αυτό οι βελτιστοποιήσεις αυτές λέγονται και βελτιστοποιήσεις κλειδαρότρυπας (peephole optimizations).

    Παράδειγμα βελτιστοποίησης τελικού κώδικα

    Η ακολουθία:
        mov $12, %rax
        mov %rax, %rbx
        mov $20, %rax
    
    μετασχηματίζεται στην ακολουθία:
        mov $12, %rbx
        mov $20, %rax
    
    Επίσης η διάταξη των εντολών μπορεί να βελτιωθεί για να γίνεται καλύτερη χρήση πολλαπλών υπολογιστικών στοιχείων που διαθέτει ο επεξεργαστής. Για παράδειγμα σε ορισμένους επεξεργαστές η εναλλαγή εντολών κινητής υποδιαστολής με εντολές ακεραίων επιτρέπει στις δύο λειτουργικές μονάδες να δουλεύουν παράλληλα.

    Σύνδεση

    Κατά τη σύνδεση τα ανεξάρτητα μεταγλωττισμένα τμήματα του προγράμματος συνδέονται μεταξύ τους και με τις βιβλιοθήκες της γλώσσας για να δημιουργηθεί το τελικό εκτελέσιμο πρόγραμμα. Συχνά οι βιβλιοθήκες που χρησιμοποιούνται είναι κοινές ανάμεσα σε προγράμματα και φορτώνονται δυναμικά κατά το στάδιο εκτέλεσης του προγράμματος (Unix shared libraries, Windows DLLs). Κατά τη φάση της σύνδεσης γίνεται έλεγχος πως όλες οι συναρτήσεις και μεταβλητές που χρησιμοποιούνται έχουν οριστεί και, για ορισμένες γλώσσες όπως η C++, πως οι τύποι των συμβόλων που έχουν οριστεί σε διαφορετικά αρχεία είναι συμβατοί μεταξύ τους. Ορισμένες γλώσσες όπως η Java υλοποιούν μεγάλο μέρος της σύνδεσης κατά τη φόρτωση του προγράμματος στη μνήμη για εκτέλεση.

    Ιδεατές μηχανές

    Μια ιδεατή μηχανή (virtual machine) εμφανίζει στο λογισμικό που τρέχει πάνω σε αυτήν μια διαφορετική διεπαφή από αυτή στην οποία βασίζεται η μηχανή για την υλοποίησή της. Συχνά οι ιδεατές μηχανές υλοποιούνται σε ιεραρχία.

    Πλεονεκτήματα και προβλήματα ιδεατών μηχανών

    Διαχείριση μνήμης

    Κατά τη διάρκεια ζωής του προγράμματος υπάρχουν απαιτήσεις για τη φύλαξη δεδομένων με διαφορετική διάρκεια ζωής. Συγκεκριμένα, πρέπει να υπάρχει υποστήριξη για δεδομένα που διατηρούνται:

    Παράδειγμα διάταξης μνήμης

    Στοίβα (stack)
    ...

    ...
    Σωρός (heap)
    (Δυναμική μνήμη)
    ...
    Στατικά δεδομένα (static data)
    ...
    Μεταγλωττισμένος κώδικας (code (text))

    Τρόποι διαχείρισης μνήμης

    Όταν ο όγκος της κύριας μνήμης του υπολογιστή δεν επαρκεί μπορεί να χρησιμοποιηθεί:

    Τέλος, για οικονομία στο χώρο που απαιτεί ο κώδικας των προγραμμάτων σε δευτερεύουσα αποθήκευση, χρησιμοποιούνται συχνά μοιρασμένες βιβλιοθήκες (shared libraries) (π.χ. .DLL, .so).

    Άσκηση: ορίσματα, εκφράσεις, βρόχοι και αποφάσεις

    Άσκηση 2

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Προγραμματισμός με αντικείμενα

    Αντικείμενα

    Κλάσεις

    Δημιουργία νέων αντικειμένων

    Καθορισμός μνήμης αντικειμένων με new

    Καθορισμός μνήμης αντικειμένων με αναφορά

    Κλήση μεθόδων

    Πρόσβαση σε ιδιότητες

    Ορατότητα

    Παράδειγμα: Point

    class Point {
      // Public fields
      public int x, y;
      private boolean visible;
      private int serialNumber;
      // Private method
      private void setpos(int sx, int sy) {
        x = sx;
        y = sy;
      }
      // Public methd
      public void moveToCenter() {
        setpos(0, 0);
      }
    
    }
    

    Παράδειγμα: TestPoint

    class TestPoint {
      public static void main(String args[])
      {
        Point a;
    
        a = new Point();
        a.moveToCenter();
        // Use public field
        a.x = 10;
      }
    }
    

    Μέθοδοι κατασκευαστές

    Κλήση κατασκευαστών

    Ιδιότητες και μέθοδοι κλάσης

    Παράδειγμα: εύρεση ημέρας

    import java.util.Calendar;
    
    class FindDay {
      /** Return the name of the given numeric week day */
      public static String weekDayName(int weekDayNumber) {
        switch (weekDayNumber) {
        case Calendar.MONDAY: return "Δευτέρα";
        case Calendar.TUESDAY: return "Τρίτη";
        case Calendar.WEDNESDAY: return "Τετάρτη";
        case Calendar.THURSDAY: return "Πέμπτη";
        case Calendar.FRIDAY: return "Παρασκευή";
        case Calendar.SATURDAY: return "Σάββατο";
        case Calendar.SUNDAY: return "Κυριακή";
        }
        return null;
      }
    
      public static void main(String args[]) throws Exception {
      // ...
    }
    

    Παράδειγμα: εύρεση ημέρας (main)

  • Μέθοδοι όλων των αντικειμένων

    Άσκηση: δημιουργία αντικειμένων και πρόσβαση στις μεθόδους τους

    Άσκηση 3

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Σημείωση: για να διαβάζετε σωστά τα ελληνικά μηνύματα λάθους που εμφανίζει η κλάση που σας δίδεται, μπορείτε στη μεταγλώττιση να δώσετε την παράμετρο -encoding ISO-8859-7.

    javac -encoding ISO-8859-7 MyClass.java
    

    Βιβλιογραφία

    Δημιουργία κλάσεων

    Ορισμός κλάσεων

    Ορισμός πεδίων υπόστασης

    Ορισμός μεθόδων υπόστασης

    Πρόσβαση στα μέλη της κλάσης

    Πρόσβαση στα μέλη της κλάσης: παράδειγμα

    Μέθοδοι κατασκευής

    Μέθοδοι κατασκευής: παράδειγμα

    class Point {
        /* Fields */
    
        /** Point x coordinate */
        private int x;
        /** Point y coordinate */
        private int y;
    
        /* Methods */
        /** Default constructor */
        Point() { x = y = 0; }
        /** Constructor with coordinates */
        Point(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
    

    Έλεγχος πρόσβασης

    Κάθε μέθοδος ή πεδίο μπορεί να έχει ως προσδιοριστή
    public
    Το μέλος είναι ορατό σε όλες τις άλλες κλάσεις
    private
    Το μέλος είναι ορατό μόνο στις μεθόδους της δικής μας κλάσης
    (τίποτα)
    Το μέλος είναι ορατό στις κλάσεις του πακέτου μας
    Μια καλοσχεδιασμένη κλάση έχει:

    Ορισμός ιδιοτήτων και μεθόδων κλάσης

    Παράδειγμα ιδιοτήτων και μεθόδων κλάσης

    Δήλωση μεταβλητών με var

    Μπλοκ αρχικοποίησης

    Σε ανώνυμα μπλοκ { } στο σώμα της κλάσης μπορεί να τοποθετηθεί:

    Εσωτερικές κλάσεις

    Μια κλάση μπορεί να οριστεί εσωτερικά:

    Παράδειγμα εσωτερικής κλάσης

    class Rectangle {
        private static class Point {
            private int x, y;
    
            /** Point constructor */
            Point(int ix, int iy) {
                x = ix;
                y = iy;
            }
        }
    
        private Point topLeft, bottomRight;
    
        /** Rectangle constructor */
        Rectangle(int x, int y, int height, int width) {
            topLeft = new Point(x, y);
            bottomRight = new Point(x + width, y + height);
        }
    }
    

    Παράδειγμα ανώνυμης κλάσης

    class InnerCall {
        public static void main(String args[]) {
            System.out.println(new Object());
            System.out.println(new Object() {
                @Override
                public String toString() {
                    return "I am a woke object";
                }
            });
        }
    }
    

    Απαριθμήσεις

    Παράδειγμα

    enum Ingredients {
      TOMATO,
      ONION,
      TZATZIKI,
      POTATO,
      MUSTARD,
      SOUVLAKI,
      GYROS
    };
    

    Χρήση απαριθμήσεων

    Το σχεδιαστικό πρότυπο singleton

    Παράδειγμα singleton

    Άσκηση: δημιουργία μιας κλάσης

    Άσκηση 4

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Κληρονομικότητα

    Εισαγωγή

    Διάγραμμα κληρονομικότητας

    Κληρονομικότητα σε κλάσεις

    Υπερφόρτωση

    Παράδειγμα: σχήματα

    class Shape {
        private int x, y;       // Position
        public void setPosition(int px, int py) {
            x = px;
            y = py;
        }
    
        @Override public String toString() {
            return "Shape(" + x + ", " + y + ")";
        }
    }
    
    class Circle extends Shape {
        private int radius;
        public void setRadius(int r) {
            radius = r;
        }
    
        @Override public String toString() {
            return super.toString() + ": Circle(" + radius + ")";
        }
    }
    
    class Rectangle extends Shape {
        private int height, width;
    
        public void setDimensions(int h, int w) {
            height = h;
            width = w;
        }
    
        @Override public String toString() {
            return super.toString() + ": Rectangle(" + height + " x " + width + ")";
        }
    }
    
    class Test {
        static public void main(String args[])
        {
            Circle c = new Circle();
            Rectangle r = new Rectangle();
    
            r.setPosition(1, 2);
            r.setDimensions(50, 50);
            c.setPosition(3, 4);
            c.setRadius(10);
            System.out.println(r);
            System.out.println(c);
        }
    }
    

    Σχήματα: διάγραμμα

    Ο προσδιοριστής protected

    Δυναμική διεκπεραίωση

    Παράδειγμα δυναμικής διεκπεραίωσης

    static public void main(String args[])
    {
        Rectangle r = new Rectangle();
        Shape s;
    
        r.setPosition(1, 2);
        r.setDimensions(50, 50);
        s = r;
        s.setPosition(10, 20);
        System.out.println(r);
        System.out.println(s);
        r = (Rectangle)s;
    }
    

    Λειτουργία δυναμικής διεκπεραίωσης

    Πλεονεκτήματα της δυναμικής διεκπεραίωσης

    Αφηρημένες κλάσεις

    Σχεδιάζοντας με αφηρημένες κλάσεις

    Παράδειγμα: σχήματα

    Σχήματα: ο κώδικας

    abstract class Shape {
        private double x, y;        // Position
        protected double getX() { return x; }
        protected double getY() { return y; }
        public void setposition(double px, double py) {
            x = px;
            y = py;
        }
        public abstract double area();
        @Override public String toString() {
            return "Shape(x=" + x + ", y=" + y + ", area=" + area() + ")";
        }
    }
    
    class Circle extends Shape {
        private double radius;
        public void setradius(double r) {
            radius = r;
        }
        @Override public double area() {
            return 2 * Math.PI * radius * radius;
        }
        @Override public String toString() {
            return super.toString() + ": Circle(" + radius + ")";
        }
    }
    
    class Rectangle extends Shape {
        private double height, width;
        public void setdimensions(double h, double w) {
            height = h;
            width = w;
        }
        @Override public double area() {
            return height * width;
        }
        @Override public String toString() {
            return super.toString() + ": Rectangle(" + height + " x " + width + ")";
        }
    }
    
    class Test {
        static public void main(String args[])
        {
            Circle c = new Circle();
            Rectangle r = new Rectangle();
            Shape s[] = new Shape[2];
    
            s[0] = r;
            r.setposition(1, 2);
            r.setdimensions(50, 50);
    
            s[1] = c;
            c.setposition(3, 4);
            c.setradius(10);
            for (int i = 0; i < s.length; i++)
                System.out.println(s[i]);
        }
    }
    
    Το παραπάνω πρόγραμμα θα τυπώσει:
    Shape(x=1.0, y=2.0, area=2500.0): Rectangle(50.0 x 50.0)
    Shape(x=3.0, y=4.0, area=628.3185307179587): Circle(10.0)
    

    Τελικές μεταβλητές

    Τελικά ορίσματα

    Δημόσιες τελικές μεταβλητές

    Μια κλάση μπορεί να ορίσει δημόσιες σταθερές ιδιότητες ως μέλη για να μπορούν να χρησιμοποιηθούν από άλλες κλάσεις.
    class PhysicalConstants {
        // Speed of light in vacuum (m/s)
        public static final double c = 299792458;
        // Permeability of vaccum (N/A/A)
        public static final double mu0 = 4 * Math.PI * 10e-7;
        // Newtonian constant of gravitation (m*m*m/kg/s/s)
        public static final double G = 6.67259e-11;
        // Planck constant (J*s)
        public static final double h = 6.6260755e-34;
        // Elementary charge (C)
        public static final double e = 1.60217733e-19;
    }
    

    Τελικές κλάσεις και μέθοδοι

    Τελικές κλάσεις και μέθοδοι στην πράξη

    Η ιεραρχία κλάσεων στη βιβλιοθήκη της Java

    Java: παράσταση αριθμών-number

    Number class UML diagram

    Java: κλάσεις για το σχηματισμό μηνυμάτων

    Format class UML diagram

    Παράδειγμα χρήσης μηνυμάτων

     Object[] arguments = {
         Integer.valueOf(7),
         new Date(System.currentTimeMillis()),
         "a disturbance in the Force"
     };
    
     String result = MessageFormat.format(
         "At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
         arguments);
    

    Java: Τμήμα της ιεραρχίας Swing

    Format class UML diagram

    Άσκηση: κληρονομικότητα

    Άσκηση 5

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Υλοποίηση εκτενών συστημάτων

    Χειρισμός λαθών και εξαιρέσεις

    Παράσταση εξαιρέσεων

    Παράδειγμα παράστασης εξαιρέσεων

    import java.io.*;
    
    public class NonGreekCharacterException extends IOException {
        public NonGreekCharacterException() {}
        public NonGreekCharacterException(String msg) {
            super(msg);
        }
    }
    

    Δημιουργία εξαιρέσεων

    Στη γλώσσα Java μια εξαίρεση μπορεί να δημιουργηθεί:
    1. Ρητά με την εντολή throw
      if (ammount < 0)
          throw new NegativeAmmountException();
      
    2. Με την κλήση μιας μεθόδου που προκαλεί την εξαίρεση. Για παράδειγμα η μέθοδος print μπορεί να προκαλέσει την NullPointerException.
    3. Με την εκτέλεση κώδικα που δημιουργεί εξαίρεση. Για παράδειγμα ο παρακάτω κώδικας θα δημιουργήσει μια εξαίρεση ArrayIndexOutOfBoundsException.
      int a[] = new int[10];
      a[15] = 42;
      

    Χειρισμός εξαιρέσεων

    Σε μια μέθοδο της Java μια εξαίρεση μπορούμε:

    Τοπικός χειρισμός

    Ο τοπικός χειρισμός γίνεται με μπλοκ try/catch/finally:

    try {
        // Κώδικας που μπορεί να δημιουργήσει την εξαίρεση
    } catch (ExceptionClass_1 e) {
        // Κώδικας που χειρίζεται την ExceptionClass_1
    } catch (ExceptionClass_2 e) {
        // Κώδικας που χειρίζεται την ExceptionClass_2
    } finally {
        // Κώδικας που εκτελείται πάντα στο τέλος
    }
    

    Παράδειγμα από τη μέθοδο readInt της βιβλιοθήκης BIO:

    public static int readInt() {
        int i = 0;
    
        try {
            i = Integer.parseInt(readString());
        } catch (NumberFormatException e) {
            System.err.println("Error reading Integer: " + e);
            System.exit(1);
        }
        return (i);
    }
    

    Δήλωση εξαιρέσεων

    Αν μια δική μας μέθοδος τότε πρέπει να το δηλώσουμε με τη σύνταξη
    myMethodName( /* ... */) throws Exception_1, Exception_2 { }
    
    Παράδειγμα:
    public static int parsePositiveInt(String s) throws NumberFormatException {
        int i = parseInt(s);
        if (i < 0)
            throw new NumberFormatException();
    }
    

    Ολοκληρωμένο παράδειγμα εξαιρέσεων

    class BadArgException extends Throwable {
        public BadArgException() {}
        public BadArgException(String msg) {
            super(msg);
        }
    }
    
    class Test {
    
        /** Verify that the args table is not empty.
         * @throws BadArgException if the table is empty.
         */
        static void verifyArgs(String args[]) throws BadArgException {
            if (args.length == 0)
                throw new BadArgException("Empty table");
        }
    
        static public void main(String args[]) {
            int exitCode = 0;
    
            try {
                int i;
    
                verifyArgs(args);
                for (i = 0; i < args.length; i++)
                    System.out.print(args[i]);
                System.out.println();
            } catch (BadArgException e) {
                System.err.println("Bad argument " + e);
                exitCode = 1;
            } finally {
                System.out.println("Argument processing done");
            }
            System.out.println("Program termination");
            System.exit(exitCode);
        }
    }
    

    Σχεδιασμός με εξαιρέσεις

    Ισχυρισμοί

    Ισχυρισμοί στην πράξη

    Ισχυρισμοί στη Java

    Παράδειγμα χρήσης ισχυρισμών

    /*
     * Run With java -ea FindMax
     */
    
    class FindMax {
    
        /** Return the maximum number in non-empty array v */
        public static int findMax(int v[]) {
            int max = Integer.MIN_VALUE;
    
            // Precondition: v[] is not empty
            assert v.length > 0 : "v[] is empty";
            // Precondition: max <= v[i] for every i
            for (int i = 0; i < v.length; i++)
                assert max <= v[i] : "Found value < MIN_VALUE";
    
            // Locate the real maximum value
            for (int i = 0; i < v.length; i++)
                if (v[i] > max)
                    max = v[i];
    
            // Postcondition: max >= v[i] for every i
            for (int i = 0; i < v.length; i++)
                assert max >= v[i] : "Found value > max";
            return max;
        }
    
        // Test harness
        public static void main(String argv[]) {
            int t[] = new int[5];
    
            t[0] = 4;
            t[1] = -4;
            t[2] = 145;
            t[3] = 0;
            t[4] = Integer.MIN_VALUE;
            System.out.println("Max value is " + findMax(t));
        }
    }
    

    Διεπαφές

    Διεπαφές: κανόνες

    Υλοποίηση διεπαφών

    Διάγραμμα υλοποίησης διεπαφών

    Multiple implementation UML diagram

    Υλοποίηση πολλαπλών διεπαφών

    Μια κλάση μπορεί να υλοποιήσει πολλές διεπαφές.
    class Car implements
        VehicleBody,
        InternalCombustionEngine,
        TransmissionSystem,
        BreakSystem,
        Console
    {
    }
    
    class Truck implements
        VehicleBody,
        InternalCombustionEngine,
        TransmissionSystem,
        BreakSystem,
        Console,
        Container
    {
    }
    

    Διάγραμμα υλοποίησης πολλαπλών διεπαφών

    Multiple inheritance UML diagram

    Επέκταση διεπαφών

    Διαφορά αφηρημένης κλάσης από μια διεπαφή

    Αφηρημένες κλάσεις ή διεπαφές;

    Η αρχή της στιβαρότητας

    H χρήση ορισμάτων αφηρημένων κλάσεων αλλά η επιστροφή διεπαφών αιτιολογείται από την περίφημη αρχή της στιβαρότητας του Jon Postel (http://en.wikipedia.org/wiki/Robustness_principle):
    Να είσαι συντηρητικός σ' αυτά που κάνεις εσύ και ανεκτικός σ' αυτά που δέχεσαι από τους άλλους (Be conservative in what you do, be liberal in what you accept from others).
    Η παραπάνω αρχή θεωρείται από πολλούς ο θεμέλιος λίθος λειτουργίας του διαδικτύου.

    Αιτιολόγηση χρήσης διεπαφών

    Με βάση την αρχή της στιβαρότητας σχεδιάζουμε ως εξής.

    Παράδειγμα στιβαρού σχεδιασμού

    interface  InternalCombustionEngine  { /* ... */ }
    
    abstract class FourStrokeEngine implements InternalCombustionEngine  { /* ... */ }
    
    class GeneralMotorsLS3 extends FourStrokeEngine { /* ... */ }
    
    class ChevroletCorvette implements InternalCombustionEngine {
        FourStrokeEngine engine;
    
        /*
         * Receive abstract class so that changes in it can transparently
         * update all classes that extend the abstract class.
         */
        void setEngine(FourStrokeEngine e) { engine = e; }
    
        // Return interface rather than concrete class to allow widest possible use
        InternalCombustionEngine getEngine() { return engine; }
    
        public static int main(String[] args) {
            var corvette = new ChevroletCorvette();
            corvette.setEngine(new GeneralMotorsLS3());
            return 0;
        }
    }
    

    Πακέτα

    Ορισμός κλάσεων σε πακέτα

    Χρήση κλάσεων σε πακέτα

    Κανόνες χρήσης πακέτων

    Απλοποίηση χρήσης στατικών πεδίων

    Με την εντολή import static μπορούμε να εισάγουμε στατικές μεθόδους και πεδία ώστε να χρησιμοποιηθούν χωρίς το πρόθεμα της κλάσης.

    import static java.lang.Math.*;
    
    class Sqrt {
        public static void main(String args[]) {
            System.out.println(sqrt(2));
        }
    }
    

    Άσκηση: παραγωγή και έλεγχος εξαιρέσεων

    Άσκηση 6 και 16

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Σχεδιασμός, εμφάνιση και ύφος

    Δομημένος προγραμματισμός

    Ο νόμος Demeter

    Σημείωση: Ο νόμος Demeter (προφ. νταϊμέτρ) (Lieberherr και Holland 1989) έλαβε το όνομά του από το ομώνυμο ερευνητικό έργο, το οποίο με τη σειρά του ονομάστηκε προς τιμή της αρχαίας θεάς Δήμητρας.

    Παράδειγμα Demeter

    class Demeter { private A a; private int myFunc() { /* ... */ } public void example (B b) { C c = new C(); int f = myFunc(); // ... b.paramMethod(); a = new A(); a.createdMethod(); c.ownMethod(); } }

    Απλοί κανόνες 1

    Μερικοί κανόνες (Kernighan και Plauger 1976, Davis 1995) που πρέπει να ακολουθούμε κατά την κωδικοποίηση είναι οι παρακάτω:

    Απλοί κανόνες 2

  • Χρησιμοποιείτε αναδρομικές διαδικασίες για αναδρομικές δομές δεδομένων
  • Να χρησιμοποιείτε αποδοτικές δομές δεδομένων και αλγορίθμους
  • Τακτοποιείτε τον κώδικα σε τακτά διαστήματα
  • Μετά την πρώτη έκδοση του προγράμματος, βελτιώστε τον κώδικα
  • Το πρόγραμμά σας να διαβάζεται από πάνω προς τα κάτω
  • Ο κώδικάς σας να στοχεύει κύρια τους ανθρώπους
  • Χρησιμοποιείτε κατανοητά ονόματα μεταβλητών
  • Να εκτελείτε με το χέρι το κάθε τμήμα του κώδικα
  • Γράφετε δομημένα ακόμα και σε αδόμητες γλώσσες
  • Να χρησιμοποιείτε την κατάλληλη γλώσσα για κάθε εφαρμογή
  • Προσέχετε την όψη του κώδικα

    Πόσα σχόλια είναι αρκετά;

    Unneeded comments

    Σχόλια για τα σχόλια

    Έλεγχοι

    Τι να αποφεύγετε

    Οδηγίες και παράδειγμα μορφοποίησης κώδικα

    /*
     * Όνομα της κλάσης
     *
     * Copyright έτος όνομα/οργανισμός.
     */
    
    package gr.aueb.dmst.Package;
    
    import java.blah.blough.bligh;
    
    /**
     * Σύνοψη της κλάσης σε μια γραμμή.
     * Αναλυτική περιγραφή της κλάσης.
     *
     * @version     1.82 18 Mar 1999
     * @author      Όνομα Επώνυμο
     */
    
    public class SpecialHtmlParser extends FileHtmlParser {
    
        /*
         * Εδώ γράφεται το σχόλιο υλοποίησης της κλάσης.
         */
    
        /** Σύνοψη του πεδίου κλάσης classVar1 */
        public static int classVar1;
    
        /** Σύνοψη του πεδίου κλάσης classVar2 */
        protected static int classVar2;
    
        /** Σύνοψη του πεδίου κλάσης classVar3 */
        static int classVar3;
    
        /** Σύνοψη του πεδίου κλάσης classVar3 */
        private static Object classVar3;
    
        /**
         * Σύνοψη του πεδίου υπόστασης instanceVar1
         * Εκτενής επεξήγηση του πεδίου instanceVar1 σε πολλαπλές
         * γραμμές
         */
        public int instanceVar1;
    
        /** Σύνοψη του πεδίου υπόστασης instanceVar2 */
        protected int instanceVar2;
    
        /** Σύνοψη του πεδίου υπόστασης instanceVar3 */
        static int instanceVar3;
    
        /** Σύνοψη του πεδίου υπόστασης instanceVar4 */
        private Object instanceVar4;
    
        /** Construct a parser for the specified HTML dialect. */
        SpecialHtmlParser(string dialect, int maxNesting) {
            // Κώδικας
        }
    
        /** Construct a default HTML parser. */
        SpecialHtmlParser(string dialect, int maxNesting) {}
    
        /**
         * Σύνοψη της μεθόδου.
         * Εκτενής επεξήγηση της μεθόδου σε πολλαπλές
         * γραμμές.
         */
        public void doSomething() {
    
        int nLines = 0;                // HTML lines in the file
        int nChars = 0                // Number of characters in the file
        int i;
        double averageDensity = 1.;        // Average density of comments in the file
        Car transport;                // Transport to use
    
            for (;;)
                a++;
    
            for (int j = 0; j < 10; j++) {
                a++;
                b++;
            }
    
            while (a < 10) {
                a++;
                b += 12;
            }
    
            while (a < 10) {
                a++;
                for (int i = 0; i < 10; i++)
                    b += 12;
            }
    
            do {
                a++;
                b += 12;
            } while (a < 10);
    
            switch (c) {
            case 'a':
                system.out.println("Alpha");
                break;
            case 'b':
                system.out.println("Bravo");
                break;
            case 'c':
                system.out.println("Charlie");
                break;
            default:
                system.out.println("???");
                break;
            }
    
            if (a == 3) {
                system.out.println("Threee");
                k = 52;
            }
    
            if (a == 3) {
                system.out.println("Three");
                k = 52;
            } else {
                system.out.println("Not three");
                k = 55;
            }
    
            if (a == 3)
                system.out.println("Three");
            else
                system.out.println("Not three");
    
            if (s.equals("a")
                system.out.println("Alpha");
            else if (s.equals("b")
                system.out.println("Bravo");
            else if (s.equals("c")
                system.out.println("Charlie");
            else
                system.out.println("???");
    
            try {
                i = 12;
                o.myMethod();
            } catch (ExceptionClass e) {
                statements;
            } finally {
                statements;
            }
    
        if (a && !b) {
            a = 2 * (3 + 8) % 15;
            k = a.myMethod(q, b, c);
        }
        return k;
    
       /**
        * Returns an Image object that can then be painted on the screen.
        * The url argument must specify an absolute {@link URL}. The name
        * argument is a specifier that is relative to the url argument.
        * <p>
        * This method always returns immediately, whether or not the
        * image exists. When this applet attempts to draw the image on
        * the screen, the data will be loaded. The graphics primitives
        * that draw the image will incrementally paint on the screen.
        *
        * @param  url  an absolute URL giving the base location of the image
        *         name the location of the image, relative to the url argument
        * @return      the image at the specified URL
        * @see         Image
        */
        public Image getImage(URL url, String name) {
            try {
                return getImage(new URL(url, name));
            } catch (MalformedURLException e) {
                return null;
            }
        }
    
         /*
          * A non-javadoc comment with a special keyword
          * (recommended keywords in parenthesis)
          *
          * (XXX, FIXME, TODO): The comment
          */
    
    Σημείωση: οι στηλοθέτες (tab) πρέπει να αντιστοιχούν σε 8 κενά, έστω και αν πάντα η στοίχιση γίνεται σε 4 κενά. Στο διορθωτή vim οι σωστές ρυθμίσεις είναι:
    set shiftwidth=4
    set smarttab
    

    Βιβλιογραφία

    Πρόσθετες πληροφορίες

    Ασκήσεις

    Άσκηση 15

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Γενικεύσεις και νήματα

    Παραμετρικοί τύποι

    Παράδειγμα: ζευγάρι

    class Pair <E1, E2> {
        private E1 element1;
        private E2 element2;
        public Pair(E1 e1, E2 e2) {
            element1 = e1;
            element2 = e2;
        }
        public E1 getFirst() {
            return element1;
        }
        public E2 getSecond() {
            return element2;
        }
        public String toString() {
            return "(" + element1.toString() + ", " + element2.toString() + ")";
        }
    }
    
    class Sock {}
    class Man {}
    class Woman {}
    
    class Test {
        public static void main(String args[]) {
            Pair <Sock, Sock> pairOfSocks;
            Pair <Man, Woman> churchMarriedCouple;
            Pair <Man, Man> civilPartners;
        }
    }
    

    Παραμετρικοί τύποι στη Java

    Παραμετρικοί τύποι μπαλαντέρ

    Παράδειγμα γενίκευσης

    class LinkedList <E> {
        /** Node's value */
        private E value;
        /** Next node */
        private LinkedList <E> next;
    
        /** Construct a list with a single element v */
        LinkedList(E v) {
            value = v;
            next = null;
        }
    
        /** Return a list with element n added to it */
        public LinkedList <E> add(E v) {
            var n = new LinkedList <E>(v);
            n.next = this;
            return n;
        }
    
        /** Return a string representation of the list */
        public String toString() {
            String me = value.toString();
    
            /* Recursive implementation */
            if (next == null)
                return me;
            else
                return me + " -> " + next;
        }
    
        /** Test harness */
        static public void main(String args[]) {
            var ilst = new LinkedList <Integer>(0);
    
            ilst = ilst.add(1);
            ilst = ilst.add(18);
            ilst = ilst.add(45);
    
            for (int i = 0; i < 5; i++)
                ilst = ilst.add(i * 10);
            System.out.println(ilst);
        }
    }
    

    Παράδειγμα υπερφόρτωσης μεθόδων

    double
    square(double x)
    {
      return x * x;
    }
    
    Complex
    square(Complex x)
    {
      return new Complex(
        square(x.real) + square(x.imaginary),
        2 * x.real + x.imaginary);
    }
    

    Ανακεφαλαίωση πολυμορφισμού

    Έχουμε στο σημείο αυτό εξετάσει όλα τα είδη πολυμορφισμού (polymorphism):

    Χρήση πολυμορφισμού

    Σε συνηθισμένες εφαρμογές σχεδιάζουμε συχνά με κληρονομικότητα διεπαφών, ενώ συναντάμε:

    Διάγραμμα πολυμορφισμού

    polymorpism types

    Νήματα

    Νήματα: προβλήματα

    Όταν υλοποιούμε κώδικα με νήματα δημιουργούνται συχνά προβλήματα συγχρονισμού που πρέπει να αντιμετωπίσουμε. Τα στοιχεία αυτά δεν καλύπτονται στο συγκεκριμένο μάθημα.
  • Αδιέξοδο

    ="Παράδειγμα"

    Νήματα: εναλλακτικές

    Αντί για νήματα μπορούμε συχνά να χρησιμοποιήσουμε

    Ορισμός νήματος στη Java

    Χρήση νήματος στη Java

    Παράδειγμα χρήσης νημάτων

    public class CocktailGuest implements Runnable {
        /** What the guest will say */
        private String mumble;
        /** How many seconds will he/she pause before speaking */
        private int pause;
        /** How long the guest will stay */
        private int stay;
        /** How long the guest has stayed */
        private int hereFor;
    
        /** Constructor */
        public CocktailGuest(String mumble, int pause, int stay) {
            this.mumble = mumble;
            this.pause = pause;
            this.stay = stay;
            hereFor = 0;
        }
    
        /** Execution method */
        public void run() {
            try {
                while (hereFor < stay) {
                    Thread.sleep(pause * 1000);
                    hereFor += pause;
                    System.out.println(mumble);
                }
            } catch (InterruptedException e) {
                System.out.println("Something has come up; got to go.");
                return;
            } finally {
                System.out.println("Good bye.");
            }
        }
    
        public static void main(String args[]) {
            final int NGUEST = 5;
            var guest = new CocktailGuest[NGUEST];
            var thread = new Thread[NGUEST];
    
            int i = 0;
            guest[i++] = new CocktailGuest("Can I have another drink?", 8, 30);
            guest[i++] = new CocktailGuest("Nice food!", 7, 120);
            guest[i++] = new CocktailGuest("Ha ha ha...", 3, 100);
            guest[i++] = new CocktailGuest("Hi, I am Maria.", 5, 60);
            guest[i++] = new CocktailGuest("Hello, I am Petros.", 15, 60);
    
            // Create the threads
            for (i = 0; i < NGUEST; i++)
                thread[i] = new Thread(guest[i]);
            // Start the threads
            for (i = 0; i < NGUEST; i++)
                thread[i].start();
        }
    }
    

    Άσκηση: xρήση παραμετρικών τύπων και νήματα

    Άσκηση 12

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Δομές δεδομένων

    Συμβολοσειρές

    Συμβολοσειρές: παράδειγμα

    class Book {
        public String toString() { return "Book"; }
        static public void main(String args[]) {
            var b = new Book();
            String k = "*" + b + "*";
            System.out.println(k);
            System.out.println(b);
        }
    }
    

    String: μέθοδοι κατασκευής

    String()
    Κατασκευάζει μια άδεια συμβολοσειρά.
    String(char[] value)
    Κατασκευάζει μια συμβολοσειρά από τον πίνακα value.
    String(char[] value, int offset, int count)
    Κατασκευάζει μια συμβολοσειρά από count στοιχεία του πίνακα value αρχίζοντας από τη θέση offset.
    String(String original)
    Κατασκευάζει ένα αντίγραφο συμβολοσειράς
    String(StringBuffer buffer)
    Κατασκευάζει μια συμβολοσειρά από ένα αντικείμενο StringBuffer

    String: μέθοδοι επεξεργασίας

    Οι θέσεις σε μια συμβολοσειρά αριθμούνται από το 0.
    h e l l o
    0 1 2 3 4
    Η μη ύπαρξη θέσης συμβολίζεται με το -1.
    String substring(int beginIndex)
    Επιστρέφει το τμήμα που αρχίζει στη θέση beginIndex
    String substring(int beginIndex, int endIndex)
    Επιστρέφει το τμήμα που αρχίζει στη θέση beginIndex και τελειώνει στη θέση endIndex - 1
    char charAt(int index)
    Επιστρέφει το χαρακτήρα στη θέση index
    String concat(String string2)
    Επιστρέφει τη συμβολοσειρά ενωμένη με το string2

    String: μέθοδοι ερωτήσεων

    int length()
    Μήκος
    boolean equals(String string2)
    Σύγκριση
    boolean StartsWith(String string2)
    Σύγκριση αρχής
    boolean endsWith(String string2)
    Σύγκριση τέλους
    int compareTo(String string2)
    Λεξικογραφική σύγκριση (απλή)
    int indexOf(String string2)
    Επιστρέφει τη θέση της συμβολοσειράς string2

    String: μέθοδοι μετατροπής

    static String valueOf(int i)
    Μετατρέπει το όρισμα i σε συμβολοσειρά
    static String valueOf(double d)
    Μετατρέπει το όρισμα d σε συμβολοσειρά
    static String valueOf(boolean b)
    Μετατρέπει το όρισμα b σε συμβολοσειρά
    static String valueOf(long l)
    Μετατρέπει το όρισμα l σε συμβολοσειρά
    static String valueOf(float f)
    Μετατρέπει το όρισμα f σε συμβολοσειρά
    static String valueOf(char c)
    Μετατρέπει το όρισμα c σε συμβολοσειρά

    Η κλάση StringBuffer

    StringBuffer append(String string2)
    Προσθήκη της συμβολοσειράς string2 στο τέλος
    StringBuffer insert(int offset, String string2)
    Προσθήκη της συμβολοσειράς string2 στη θέση offset
    StringBuffer delete(int start, int end)
    Διαγραφή των χαρακτήρων από τη θέση start μέχρι την end - 1
    StringBuffer replace(int start, int end, String string2)
    Αντικατάσταση των χαρακτήρων από τη θέση start μέχρι την end - 1 με τη συμβολοσειρά string2

    Εσωτερική χρήση της StringBuffer

    Η κλάση StringBuilder παρέχει τις ίδιες δυνατότητες με την StringBuffer, χωρίς όμως να παρέχει ασφάλεια σε πολυνηματική επεξεργασία.

    Η κλάση StringBuilder χρησιμοποιείται και από το μεταγλωττιστή για την υλοποίηση ένωσης συμβολοσειρών. Η ακολουθία

    x = "a" + 4 + "c"
    
    μεταγλωττίζεται εσωτερικά σε
    x = new StringBuilder().append("a").append(4).append("c").toString()
    

    Πλαίσια συλλογών

    Πλεονεκτήματα

    Τα πλεονεκτήματα της υποστήριξης και του προγραμματισμού με βάση ένα πλαίσιο συλλογών είναι:

    Το πλαίσιο συλλογών της Java

    Το πλαίσιο συλλογών της βιβλιοθήκης της Java περιλαμβάνει:

    Διεπαφές συλλογών

    Υλοποιήσεις συλλογών

    Διαθέσιμες υλοποιήσεις στη Java

    Για τις διεπαφές των συλλογών υπάρχουν οι παρακάτω υλοποιήσεις:

    Set:
    HashSet, TreeSet, LinkedHashSet
    SortedSet:
    TreeSet
    List:
    ArrayList, LinkedList
    Map:
    HashMap, TreeMap, LinkedHashMap
    SortedMap:
    TreeMap

    Πίνακας διεπαφών και υλοποιήσεων

      Υλοποιήσεις
    ΠΚΠίνακας ΙΔΣΛ ΣΛ και ΠΚ
    Διεπαφές SetHashSet   TreeSet   LinkedHashSet
    SortedSet    TreeSet    
    List   ArrayList   LinkedList  
    Map HashMap   TreeMap   LinkedHashMap
    SortedMap     TreeMap    
    (Οι υλοποιήσεις που συνδιάζουν συνδεδεμένη λίστα και πίνακα κατακερματισμού επιτρέπουν την πρόσβαση των στοιχείων με τη σειρά που έγινε η εισαγωγή τους.)

    Διάγραμμα UML

    Η δομή των διεπαφών και κλάσεων που έχουμε εξετάσει μπορεί να παρασταθεί σε μορφή UML ως εξής.
    UML diagram of Java's Collection and Maps
    Σημείωση: στην πράξη η υλοποίηση της Java χρησιμοποιεί και άλλες ενδιάμεσες κλάσεις, όπως AbstractCollection, AbstractSequentialList, AbstractSet.

    Collection: επεξεργασία

    Η γενικευμένη διεπαφή

    Collection <E>
    
    ορίζει μεταξύ άλλων τις παρακάτω μεθόδους (κατά περίπτωση επιστρέφουν αληθές αν η συλλογή μεταβλήθηκε):

    void clear()
    Αφαιρεί όλα τα αντικείμενα από τη συλλογή
    boolean add(E o)
    Προσθήκη στοιχείου
    boolean addAll(Collection <? extends E> c)
    Προσθήκη συλλογής
    boolean remove(Object o)
    Αφαίρεση στοιχείου
    boolean removeAll(Collection <?> c)
    Αφαίρεση συλλογής

    Collection: ερωτήσεις

    boolean contains(Object o)
    Επιστρέφει αληθές αν το στοιχείο περιέχεται
    boolean containsAll(Collection <?> c)
    Επιστρέφει αληθές αν τα στοιχεία της συλλογής περιέχονται
    Iterator <E> iterator()
    Επιστρέφει έναν επαναλήπτη για διάσχιση της συλλογής
    boolean isEmpty()
    Επιστρέφει αληθές αν η συλλογή είναι άδεια
    int size()
    Επιστρέφει τον αριθμό των στοιχείων στη συλλογή

    Παράδειγμα της διεπαφής Collection

    import java.util.Collection;
    import java.util.LinkedList;
    
    public class CollectionTest <E> {
        static <E> void testContain(Collection <E> c, E o) {
            System.out.print("The collection " + c);
            if (c.contains(o))
                System.out.print(" contains");
            else
                System.out.print(" does not contain");
    
            System.out.println(" the object " + o);
        }
    
        public static void main(String args[]) {
            var list = new LinkedList <String>();
    
            list.add("Petros");
            list.add("Maria");
    
            testContain(list, "Maria");
            testContain(list, "John");
            testContain(list, "Petros");
            System.out.println("Number of elements = " + list.size());
        }
    }
    

    Η διεπαφή Iterator

    Η διεπαφή
    Iterator <E>
    
    υποστηρίζει τη διάσχιση και μεταβολή συλλογών. Ορίζει τις παρακάτω μεθόδους:
    boolean hasNext()
    Επιστρέφει αληθές αν υπάρχει επόμενο στοιχείο
    Object next()
    Επιστρέφει το επόμενο στοιχείο
    void remove()
    Διαγράφει το τελευταίο στοιχείο που επιστρέφτηκε

    Η διεπαφή ListIterator

    Η διεπαφή ListIterator επεκτείνει την Iterator με τις παρακάτω μεθόδους:
    boolean hasPrevious()
    Επιστρέφει αληθές αν υπάρχει προηγούμενο στοιχείο
    Object previous()
    Επιστρέφει το προηγούμενο στοιχείο
    void add(Object o)
    Προσθέτει ένα στοιχείο
    void set(Object o)
    Αντικαθιστά το τελευταίο στοιχείο που επιστρέφτηκε

    Παράδειγμα της διεπαφής Iterator

    import java.util.*;
    
    public class IteratorTest {
    
        static void fill(Collection <String> c) {
            c.add("Kerkyra");
            c.add("Zakynthos");
            c.add("Kythira");
            c.add("Santorini");
            c.add("Dilos");
            c.add("Samos");
            c.add("Rodos");
            c.add("Kastelorizo");
        }
    
        static void printAll(Collection <?> c) {
            for (var i = c.iterator(); i.hasNext(); )
                System.out.print(i.next() + " ");
        }
    
        public static void main(String args[]) {
            var hash = new HashSet<String> ();
            var list = new LinkedList<String> ();
    
            fill(hash);
            fill(list);
    
            System.out.println("Hash contains:");
            printAll(hash);
            System.out.println("\nList contains:");
            printAll(list);
        }
    }
    

    Διάσχιση δομών με την εντολή foreach

    Παραδείγματα foreach

    Παράδειγμα διάσχισης συλλογής:
    static void printAll(Collection <?> c) {
        for (Object o : c)
            System.out.print(o + " ");
    }
    
    Παράδειγμα διάσχισης πίνακα:
    class Echo {
        public static void main(String args[]) {
            for (var s : args)
                System.out.print(s + " ");
            System.out.println();
        }
    }
    

    Παράδειγμα: διάσχιση της ακολουθίας Fibonacci

    import java.util.Iterator;
    import java.math.BigInteger;
    
    /**
     * An Iterable interface over the Fibonacci sequence.
     * @author Diomidis Spinellis
     */
    class FibonacciSequence implements Iterable<BigInteger> {
    
        /** The iterator over the Fibonacci sequence. */
        private class  FibonacciIterator implements Iterator<BigInteger> {
            /** Integer n-2 of the series. */
            private BigInteger n0 = null;
            /** Integer n-1 of the series. */
            private BigInteger n1 = null;
    
            /**
             * Return true.
             * The FibonacciSequence sequence is infinite.
             */
            public boolean hasNext() { return true; }
    
            /** Return the next FibonacciSequence integer. */
            public BigInteger next() {
                if (n0 == null) {
                    n0 = BigInteger.ZERO;
                    return n0;
                } else if (n1 == null) {
                    n1 = BigInteger.ONE;
                    return n1;
                } else {
                    BigInteger r = n0.add(n1);
                    n0 = n1;
                    n1 = r;
                    return r;
                }
            }
    
            /**
             * Remove an element.
             * Nothing to see here; move on.
             */
            public void remove() {
                throw new UnsupportedOperationException();
            }
        }
    
        /** Return an iterator for the FibonacciSequence series. */
        public Iterator<BigInteger> iterator() {
            return new FibonacciIterator();
        }
    
        /** A simple test harness. */
        public static void main(String argv[]) {
            var fib = new FibonacciSequence();
    
            for (BigInteger i : fib)
                System.out.println(i);
        }
    }
    
    Βλέπε και το βίντεο για την εμφάνιση της ακολουθίας στη φύση (http://www.youtube.com/watch?v=kkGeOWYOFoA).

    Η διεπαφή Map

    Η διεπαφή
    Map <K, V>
    
    ορίζει μια απεικόνιση από ένα κλειδί (key) K σε μια τιμή (value) V. Η διεπαφή ορίζει μεταξύ άλλων τις παρακάτω μεθόδους:
    void clear()
    Αφαιρεί όλα τα αντικείμενα από τη συλλογή
    Object put(Object key, Object value)
    Προσθήκη στοιχείου (επιστρέφει την προηγούμενη τιμή ή null)
    void putAll(Map <? extends K, ? extends V> m)
    Προσθήκη στοιχείων
    boolean remove(Object key)
    Αφαίρεση στοιχείου (επιστρέφει την προηγούμενη τιμή ή null)

    Ερωτήσεις διεπαφής Map

    V get(Object key)
    Επιστρέφει την τιμή του στοιχείου με το κλειδί key
    boolean containsKey(Object key)
    Επιστρέφει αληθές αν το στοιχείο με το κλειδί key περιέχεται
    boolean containsValue(Object value)
    Επιστρέφει αληθές αν το στοιχείο με την τιμή value περιέχεται (αργή)
    Set<K> keySet()
    Επιστρέφει το σύνολο των κλειδιών
    Collection<V> values()
    Επιστρέφει μια συλλογή με τις αποθηκευμένες τιμές
    boolean isEmpty()
    Επιστρέφει αληθές αν η συλλογή είναι άδεια
    int size()
    Επιστρέφει τον αριθμό των στοιχείων στη συλλογή

    Παράδειγμα: νομισματικές ισοτιμίες

    import java.util.TreeMap;
    
    public class FXConvert {
    
        private static TreeMap<String, Double> FXRate = new TreeMap<String, Double>();
    
        static double FXconvert(String from, String to, double value) {
            double euro = value / FXRate.get(from);
            return euro * FXRate.get(to);
        }
    
        public static void main(String args[]) {
    
            // Euro rates
            FXRate.put("USD", 1.27);
            FXRate.put("JPY", 126.0);
            FXRate.put("GBP", 0.68);
            FXRate.put("CHF", 1.57);
            FXRate.put("CAD", 1.53);
            FXRate.put("SEK", 9.03);
    
            System.out.println("5 SEK = " + FXconvert("SEK", "JPY", 5) + " JPY");
            System.out.println("100 GBP = " + FXconvert("GBP", "CHF", 100) + " CHF");
        }
    }
    

    Η κλάση Stack

    Η κλάση
    Stack <E>
    
    υλοποιεί τη δομή δεδομένων που ονομάζεται στοίβα (stack) με το χαρακτηριστικό τύπο πρόσβασης τελευταίο μέσα πρώτο έξω (last in first out) (LIFO). H κλάση Stack υλοποιεί τη διεπαφή Collection και ορίζει τις παρακάτω μεθόδους:
    boolean empty()
    Αληθές αν η στοίβα είναι άδεια
    E push(E item)
    Προσθέτει το αντικείμενο item στην κορυφή της στοίβας
    E pop()
    Αφαιρεί και επιστρέφει το αντικείμενο από την κορυφή της στοίβας
    E peek()
    Επιστρέφει το αντικείμενο από την κορυφή της στοίβας

    οι πύργοι του Ανόι

    Μπορείτε να δοκιμάστε το παιγνίδι εδώ (https://www.mindgames.com/game/Tower+of+Hanoi).

    Παράδειγμα: οι πύργοι του Ανόι

    import java.util.Stack;
    import java.util.Iterator;
    import java.util.Collection;
    
    public class Hanoi {
        static Stack<Integer> A, B, C;
    
        /** Display the contents of a collection with a given name */
        static <E> void showCollection(String name, Collection <E> c) {
            System.out.print(name + ": ");
            for (E e : c)
                System.out.print(e + " ");
            System.out.println();
        }
    
        /** Display the hanoi towers */
        static void showConfiguration() {
            showCollection("A", A);
            showCollection("B", B);
            showCollection("C", C);
            System.out.println();
        }
    
        /** Move n blocks from to using tmp */
        static <E> void move(int n, Stack<E> from, Stack<E> to, Stack<E> tmp) {
            if (n == 1) {
                to.push(from.pop());
                showConfiguration();
            } else {
                move(n - 1, from, tmp, to);
                to.push(from.pop());
                showConfiguration();
                move(n - 1, tmp, to, from);
            }
        }
    
        public static void main(String args[]) {
            final int N = 64;
            A = new Stack<Integer>();
            B = new Stack<Integer>();
            C = new Stack<Integer>();
    
            for (int i = N; i > 0; i--)
                A.push(i);
            showConfiguration();
            move(N, A, C, B);
        }
    }
    

    Άσκηση: προγραμματισμός με συμβολοσειρές και συλλογές

    Άσκηση 7

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Χειρισμός αρχείων

    Επισκόπηση

    Δευτερεύουσα μνήμη

    Τα προγράμματα συχνά πρέπει να μεταφέρουν τα δεδομένα τους σε δευτερεύουσα μνήμη (μονάδα SSD, μαγνητικό δίσκο, CD/DVD, μνήμη USB, κάρτα μνήμης, ταινία). Οι λόγοι που το επιβάλλουν αυτό είναι οι παρακάτω:

    Η διαδικασία μεταφοράς των δεδομένων μεταξύ του προγράμματος και εξωτερικών συσκευών καλείται είσοδος/έξοδος (input/output) ή Ε/Ε (I/O).

    Παράσταση δεδομένων

    Τα δεδομένα σε ένα αρχείο μπορούμε να τα παραστήσουμε σε δύο μορφές.

    Παραδείγματα παράστασης

    ΤύποςΤιμήΔυαδική παράστασηΠαράσταση κειμένου
    int4200000000 00000000 00000000 0010101000110100 00110010
    short4200000000 0010101000110100 00110010
    chara00000000 0110000101100001
    charα00000011 1011000111001110 10110001
    Το κείμενο παριστάνεται με την κωδικοποίηση UTF-8.

    Παράσταση αριθμών κινητής υποδιαστολής

    ΤύποςΤιμήΔυαδική παράστασηΠαράσταση κειμένου
    double-0.12510111111 11000000 00000000 00000000
    00000000 00000000 00000000 00000000
    00101101
    00110000
    00101110
    00110001
    00110010
    00110101
    double 12.566370614359173 10-7 00111110 10110101 00010101 00110111
    00001111 10011001 11110110 11001011
    00110001
    00110010
    00101110
    00110101
    00110110
    00110110
    00110011
    00110111
    00110000
    00110110
    00110001
    00110100
    00110011
    00110101
    00111001
    00110001
    00110111
    00110011
    01100101
    00101101
    00110111
    (Ο τελευταίος αριθμός παριστάνει τη φυσική σταθερά μ0, τη διαπερατότητα του κενού, 4π 10-7. Το κείμενο παριστάνεται με την κωδικοποίηση UTF-8 και οι αριθμοί κινητής υποδιαστολής σύμφωνα με το πρότυπο IEEE 754-1985.)

    Ομαδοποίηση δεδομένων

    Η ομαδοποίηση στοιχείων μπορεί να γίνει:

    Παράδειγμα: ομαδοποίηση πεδίων σταθερού μήκους

    ΓΓΠΣ/ΑΑΔΕ: Αναλυτική γραμμή πωλήσεων (πελατών)
    ΠΙΝΑΚΑΣ 3. Αναλυτική γραμμή πωλήσεων (στοιχεία πελατών)
    (RECORD τύπου 2)
    ΠΕΡΙΓΡΑΦΗ
    ΠΕΔΙΟΥ
    ΘΕΣΕΙΣ
    ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΠΕΔΙΟΥ
    Σημειώσεις
    ΣΤΑΘΕΡΗ
    ΤΙΜΗ
    ΑΠΟ
    ΕΩΣ
    ΜΗΚΟΣ
    ΤΥΠΟΣ
    1
    Τύπος Record (κωδικός)
    1
    1
    1
    Numeric
    KENO
    2
    2
    Α/Α
    2
    6
    5
    Numeric
    KENO
    KENO
    3
    ΑΦΜ πελάτη
    7
    15
    9
    Character
    KENO
    KENO
    4
    Επωνυμία πελάτη
    16
    42
    27
    Character
    KENO
    KENO
    5
    Επαγγελμα πελάτη
    43
    57
    15
    Character
    KENO
    KENO
    61
    Μη υπόχρεοι υποβολής(αγρότες, περιστασιακά απασχολούμενοι κλπ)
    58
    58
    1
    Character
    0 (μηδέν)= υπόχρεος
    1 (ένα) = μη υπόχρεος
    KENO
    7
    Δ/νση / Πόλη πελάτη
    59
    68
    10
    Character
    KENO
    KENO
    8
    Δ/νση / Οδός πελάτη
    69
    84
    16
    Character
    KENO
    KENO
    9
    Δ/νση / Αριθμ πελάτη
    85
    87
    3
    Character
    KENO
    KENO
    10
    Ταχ. Κώδικας πελάτη
    88
    92
    5
    Numeric
    KENO
    KENO
    113
    Αριθμός τιμολογίων (πλήθος)
    93
    99
    7
    Numeric
    KENO
    KENO
    12
    Καθαρή αξία τιμολογίων
    100
    115
    16
    Numeric
    KENO
    KENO
    13
    FILLER
    116
    150
    35
    Character
    KENO
    spaces

    Παράδειγμα: ομαδοποίηση πεδίων με διαχωριστικό

    Αρχείο /etc/passwd στο λειτουργικό σύστημα Unix

    root:*:0:0:Charlie Root:/root:/bin/csh
    dds:*:1000:1000:Diomidis Spinellis:/home/dds:/usr/local/bin/bash
    nutmon:*:1056:1056:NUT UPS monitor unprivileged user:/nonexistent:/usr/sbin/nologin
    sgrig:*:1001:1001:Stavros Grigorakakis:/home/sgrig:/usr/local/bin/bash
    archie:*:1002:1002:Achilleas Anagnostopoulos:/home/archie:/usr/local/bin/bash
    path:*:1003:1003:Stephanos Androutselis:/home/path:/usr/local/bin/bash
    

    Τιμοκατάλογος της Microsoft (CSV)

    Product Description,1st AP Non-Platform,1st AP Platform,2nd AP Non-Platform,2nd AP Platform,3rd AP Non-Platform,3rd AP Platform,Non-Platform,Platform,,,,,,,
    OFFICE FAMILY,,,,,,,,,,
    Office Enterprise Listed Lic/SA Pack MVL,76J-01468,76J-01637, 190.31 , 161.77 , 190.31 , 161.77 , 190.31 , 161.77 ,,
    Office Enterprise Listed SA MVL,76J-01552,76J-01640, 98.96 , 94.02 , 98.96 , 94.02 , 98.96 , 94.02 ,,
    Office Enterprise Listed SA Step Up MVL from Office Pro,76J-01510,76J-00002, 34.51 , 29.33 , 34.51 , 29.33 , 34.51 , 29.33 ,,,,,,,
    Office Professional Plus Listed Lic/SA Pack MVL,269-05924,269-12441, 155.81 , 132.45 , 155.81 , 132.45 , 155.81 , 132.45 ,,,,,,,
    Office Professional Plus Listed SA MVL,269-05925,269-12444, 81.02 , 76.97 , 81.02 , 76.97 , 81.02 , 76.97 ,,,,,,,
    WINDOWS FAMILY,,,,,,,,,,,,,,,
    Windows Vista Business Listed Upg/SA Pack MVL w/VisEnterprise,66J-00588,66J-00579, 48.01 , 40.81 , 48.01 , 40.81 , 48.01 , 40.81 ,,,,,,,
    Windows Vista Business Listed SA MVL w/VisEnterprise,66J-00844,66J-00582, 31.76 , 30.17 , 31.76 , 30.17 , 31.76 , 30.17 ,,,,,,,
    

    Ανάγνωση δυαδικών δεδομένων

    Αυτόματη αποδέσμευση πόρων

    Παράδειγμα: ανάγνωση byte

    import java.io.*;
    
    /**
     * Count and display the number of bytes in the specified file
     * @author Diomidis Spinellis
     */
    class ByteCount {
        public static void main(String args[]) {
    	if (args.length != 1) {
    	    System.err.println("Usage: ByteCount file");
    	    System.exit(1);
    	}
    
    	// Try with resources; will auto-close in
    	try (var in = new BufferedInputStream(new FileInputStream(args[0]))) {
    
                // Count bytes
                int count = 0;
    	    int b;
    	    while ((b = in.read()) != -1)
    		count++;
    
                System.out.println(count);
    	} catch (FileNotFoundException e) {
    	    System.err.println("Unable to open file " + args[0] + ": " + e.getMessage());
    	    System.exit(1);
    	} catch (IOException e) {
    	    System.err.println("Error reading byte: " + e.getMessage());
    	    System.exit(1);
    	}
    
        }
    }
    

    Εγγραφή δυαδικών δεδομένων

    Παράδειγμα: εγγραφή εικόνας

    import java.io.*;
    
    /**
     * Create a 256*256 24-bit color PNM RGB file containing all combinations
     * of R and G.
     * @author Diomidis Spinellis
     */
    class ColorWrite {
    
        /** Write the specified ASCII string to out as bytes */
        static void writeStringAsBytes(OutputStream out, String s) throws IOException {
            for (int i = 0; i < s.length(); i++)
                    out.write((byte)s.charAt(i));
        }
    
        public static void main(String args[]) {
    	final String fileName = args[0];
    
    	// Open file; try with resources
    	try (var out =
                    new BufferedOutputStream(new FileOutputStream(fileName))) {
                // NetPBM PPM 24-bit color file header
                // https://netpbm.sourceforge.net/doc/ppm.html
                writeStringAsBytes(out, "P6 256 256 255 ");
    	    for (int r = 0; r < 256; r++)
    		for (int g = 0; g < 256; g++) {
    		    out.write(r);
    		    out.write(g);
    		    out.write(0);
    		}
    	} catch (FileNotFoundException e) {
    	    System.err.println("Unable to open file " + fileName
    		+ ": " + e.getMessage());
    	    System.exit(1);
    	} catch (IOException e) {
    	    System.err.println("Error writing byte: " + e.getMessage());
    	    System.exit(1);
    	}
        }
    }
    

    Παράδειγμα: αρχείο PNG

    PNG file format

    Ανάγνωση χαρακτήρων

    Παρένθεση: κωδικοποίηση ελληνικών χαρακτήρων

    Στη Java μπορούμε να επεξεργαστούμε αρχεία με ελληνικούς χαρακτήρες με βάση τα παρακάτω ονόματα κωδικοποίησης της κλάσης Charset.

    Διαθέσιμες κωδικοποιήσεις

    Το παρακάτω πρόγραμμα τυπώνει όλες τις διαθέσιμες κωδικοποιήσεις.
    import java.nio.charset.Charset;
    import java.util.SortedMap;
    
    /**
     * List the available character set encodins.
     * @author Diomidis Spinellis
     */
    class ListCharset {
        public static void main(String args[]) {
            SortedMap<String,Charset> ac = Charset.availableCharsets();
    
            for (String k : ac.keySet())
                System.out.println(k);
        }
    }
    

    Παράδειγμα: κατηγοριοποίηση χαρακτήρων

    import java.io.*;
    import java.util.*;
    import java.lang.Character.UnicodeBlock;
    
    /**
     * Count and display for the specified input file
     * the number of characters contained in various Unicode blocks .
     * @author Diomidis Spinellis
     */
    class CharCount {
        public static void main(String args[]) {
    	if (args.length != 2) {
    	    System.err.println("Usage: CharCount file encoding");
    	    System.exit(1);
    	}
    
    	// Open file; try-with-resources
    	try (var in = new BufferedReader(new InputStreamReader(
                            new FileInputStream(args[0]), args[1]))) {
    
                // Count characters in blocks
                var count = new HashMap<Character.UnicodeBlock, Integer>();
    	    int c;
    	    while ((c = in.read()) != -1) {
    		var u = Character.UnicodeBlock.of(c);
    		    Integer oldN = count.get(u);
    		    if (oldN == null)
    			count.put(u, 1);
    		    else
    			count.put(u, oldN + 1);
    	    }
    
                // Display results
                for (var s : count.entrySet())
                    System.out.println(s.getKey() + ": " + s.getValue());
    	} catch (FileNotFoundException e) {
    	    System.err.println("Unable to open file " + args[0] + ": " + e.getMessage());
    	    System.exit(1);
    	} catch (UnsupportedEncodingException e) {
    	    System.err.println("Unsupported encoding " + args[1] + ": " + e.getMessage());
    	} catch (IOException e) {
    	    System.err.println("Error reading character: " + e.getMessage());
    	    System.exit(1);
    	}
    
        }
    }
    

    Εγγραφή χαρακτήρων

    E/E συμβολοσειρών, πινάκων· σωληνώσεις

    Είσοδο και έξοδο μπορούμε να πραγματοποιήσουμε επιπλέον μέσω:

    Σειριακοποίηση αντικειμένων

    Δόκιμες λύσεις φύλαξης αντικειμένων

    Για να έχουμε συμβατότητα ανάμεσα σε διαφορετικές εκδόσεις του προγράμματος, καλύτερα είναι όταν έχουμε να αποθηκεύσουμε σύνθετες δομές να χρησιμοποιήσουμε μια εναλλακτική λύση, όπως:

    Ανακεφαλαίωση σειριακής πρόσβασης

    Ανάγνωση Εγγραφή
    byte FileInputStream FileOutputStream
    buffered byte BufferedInputStream BufferedOutputStream
    int/double/… DataInputStream DataOutputStream
    Object ObjectInputStream ObjectOutputStream
    char InputStreamReader OutputStreamWriter
    line(char) BufferedReader BufferedWriter
    PrintWriter

    Αρχεία τυχαίας πρόσβασης

    Η διεπαφή NIO

    H Java προσφέρει την διεπαφή προγραμματισμού (API) ΝΙΟ (New I/O) για πρόσβαση σε αρχεία όταν έχουμε ιδιαίτερα υψηλές απαιτήσεις απόδοσης. Σε σχέση με τη διεπαφή IO αυτή προσφέρει:

    Πρόσβαση στο σύστημα αρχείων

    Η κλάση File παρέχει πρόσβαση στη δομή με μεθόδους όπως τις παρακάτω:
    exists
    Ελέγχει την ύπαρξη ενός αρχείου.
    delete
    Διαγράφει ένα αρχείο.
    lastModified
    Επιστρέφει το χρόνο της τελευταίας αλλαγής στο αρχείο.
    renameTo
    Μετονομάζει ένα αρχείο
    length
    Επιστρέφει το μήκος ενός αρχείου
    list
    Επιστρέφει τα αρχεία που βρίσκονται σε ένα φάκελο.
    mkdir
    Δημιουργεί ένα νέο φάκελο
    getFreeSpace
    Επιστρέφει τον ελεύθερο χώρο στο δίσκο.

    Άσκηση: επεξεργασία αρχείου κειμένου

    Άσκηση 8

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Παράρτημα: Παράσταση ελληνικών χαρακτήρων

    ΧαρακτήραςUnicodeISO 8859-7CP 1253CP 737CP 851Mac GreekCP 423CP 869ISO IR-19ISO IR-27ISO IR-88ISO IR-18ISO IR-150ISO IR-55
    Ά0386b6a2ea86cd7186      
    Έ0388b8b8eb8dce728d      
    Ή0389b9b9ec8fd7738f      
    Ί038ababaed90d87590      
    Ϊ03aadada  ab 91      
    Ό038cbcbcee92d97692      
    Ύ038ebebeef95da7795      
    Ϋ03abdbdb  bd 96      
    Ώ038fbfbff098df7898      
    Α0391c1c180a4b041a461 41614141
    Β0392c2c281a5b542a562 42624242
    Γ0393c3c382a6a143a6672343674344
    Δ0394c4c483a7a244a7644044644445
    Ε0395c5c584a8b645a865 45654546
    Ζ0396c6c685a9b746a97a 467a4649
    Η0397c7c786aab847aa68 4768474a
    Θ0398c8c887aca348ac755c4875484b
    Ι0399c9c988adb949ad69 4969494c
    Κ039acaca89b5ba51b56b 4b6b4a4d
    Λ039bcbcb8ab6a452b66c5e4c6c4b4e
    Μ039ccccc8bb8bb53b76d 4d6d4c4f
    Ν039dcdcd8cb7c154b86e 4e6e4d50
    Ξ039ecece8dbda555bd6a214f6a4e51
    Ο039fcfcf8ebec356be6f 506f4f52
    Π03a0d0d08fc6a657c6703f51705053
    Ρ03a1d1d190c7c458c772 52725155
    Σ03a3d3d391cfaa59cf735f53735356
    Τ03a4d4d492d0c662d074 54745458
    Υ03a5d5d593d1cb63d179 55795559
    Φ03a6d6d694d2bc64d2665d5666565a
    Χ03a7d7d795d3cc65d378 5878575b
    Ψ03a8d8d896d4be66d4633a5963585c
    Ω03a9d9d997d5bf67d5765b5a76595d
    ά03acdcdce19bc0b19b      
    έ03addddde29ddbb29d      
    ή03aededee39edcb39e      
    ί03afdfdfe59fddb59f      
    ϊ03cafafae4a0fbb4a0      
    ΐ0390c0c0 a1fd a1      
    ό03ccfcfce6a2deb6a2      
    ύ03cdfdfde7a3e0b7a3      
    ϋ03cbfbfbe8fbfcb8fb      
    ΰ03b0e0e0 fcfe fc      
    ώ03cefefee9fdf1b9fd      
    α03b1e1e198d6e18ad6  61416161
    β03b2e2e299d7e28bd7  62426262
    γ03b3e3e39ad8e78cd8  63476364
    δ03b4e4e49bdde48ddd  64446465
    ε03b5e5e59cdee58ede  65456566
    ζ03b6e6e69de0fa8fe0  665a6669
    η03b7e7e79ee1e89ae1  6748676a
    θ03b8e8e89fe2f59be2  6855686b
    ι03b9e9e9a0e3e99ce3  6949696c
    κ03baeaeaa1e4eb9de4  6b4b6a6d
    λ03bbebeba2e5ec9ee5  6c4c6b6e
    μ03bcececa3e6ed9fe6  6d4d6c6f
    ν03bdededa4e7eeaae7  6e4e6d70
    ξ03beeeeea5e8eaabe8  6f4a6e71
    ο03bfefefa6e9eface9  704f6f72
    π03c0f0f0a7eaf0adea  71507073
    ρ03c1f1f1a8ebf2aeeb  72527175
    ς03c2f2f2aaedf7afed  77577277
    σ03c3f3f3a9ecf3baec  73537376
    τ03c4f4f4abeef4bbee  74547478
    υ03c5f5f5acf2f9bcf2  75597579
    φ03c6f6f6adf3e6bdf3  7646767a
    χ03c7f7f7aef4f8bef4  7858777b
    ψ03c8f8f8aff6e3bff6  7943787c
    ω03c9f9f9e0faf6dbfa  7a56797d

    Παράρτημα: το πρότυπο ASCII

    Ο παρακάτω πίνακας παρουσιάζει τις τιμές των χαρακτήρων, σύμφωνα με το πρότυπο ASCII (American Standard Code for Information Interchange). Οι πρώτες 32 θέσεις δεσμεύονται για χαρακτήρες διαφυγής (escape character).
    ΧαρακτήραςΔεκαδικήΔεκαεξαδικήΟκταδικήΔυαδική
    nul0000000000 0000
    soh1010010000 0001
    stx2020020000 0010
    etx3030030000 0011
    eot4040040000 0100
    enq5050050000 0101
    ack6060060000 0110
    bel7070070000 0111
    bs8080100000 1000
    ht9090110000 1001
    lf100a0120000 1010
    vt110b0130000 1011
    ff120c0140000 1100
    cr130d0150000 1101
    so140e0160000 1110
    si150f0170000 1111
    dle16100200001 0000
    dc117110210001 0001
    dc218120220001 0010
    dc319130230001 0011
    dc420140240001 0100
    nak21150250001 0101
    syn22160260001 0110
    etb23170270001 0111
    can24180300001 1000
    em25190310001 1001
    sub261a0320001 1010
    esc271b0330001 1011
    fs281c0340001 1100
    gs291d0350001 1101
    rs301e0360001 1110
    us311f0370001 1111
    sp32200400010 0000
    !33210410010 0001
    "34220420010 0010
    #35230430010 0011
    $36240440010 0100
    %37250450010 0101
    &38260460010 0110
    '39270470010 0111
    (40280500010 1000
    )41290510010 1001
    *422a0520010 1010
    +432b0530010 1011
    ,442c0540010 1100
    -452d0550010 1101
    .462e0560010 1110
    /472f0570010 1111
    048300600011 0000
    149310610011 0001
    250320620011 0010
    351330630011 0011
    452340640011 0100
    553350650011 0101
    654360660011 0110
    755370670011 0111
    856380700011 1000
    957390710011 1001
    :583a0720011 1010
    ;593b0730011 1011
    <603c0740011 1100
    =613d0750011 1101
    >623e0760011 1110
    ?633f0770011 1111
    @64401000100 0000
    A65411010100 0001
    B66421020100 0010
    C67431030100 0011
    D68441040100 0100
    E69451050100 0101
    F70461060100 0110
    G71471070100 0111
    H72481100100 1000
    I73491110100 1001
    J744a1120100 1010
    K754b1130100 1011
    L764c1140100 1100
    M774d1150100 1101
    N784e1160100 1110
    O794f1170100 1111
    P80501200101 0000
    Q81511210101 0001
    R82521220101 0010
    S83531230101 0011
    T84541240101 0100
    U85551250101 0101
    V86561260101 0110
    W87571270101 0111
    X88581300101 1000
    Y89591310101 1001
    Z905a1320101 1010
    [915b1330101 1011
    \925c1340101 1100
    ]935d1350101 1101
    ^945e1360101 1110
    _955f1370101 1111
    `96601400110 0000
    a97611410110 0001
    b98621420110 0010
    c99631430110 0011
    d100641440110 0100
    e101651450110 0101
    f102661460110 0110
    g103671470110 0111
    h104681500110 1000
    i105691510110 1001
    j1066a1520110 1010
    k1076b1530110 1011
    l1086c1540110 1100
    m1096d1550110 1101
    n1106e1560110 1110
    o1116f1570110 1111
    p112701600111 0000
    q113711610111 0001
    r114721620111 0010
    s115731630111 0011
    t116741640111 0100
    u117751650111 0101
    v118761660111 0110
    w119771670111 0111
    x120781700111 1000
    y121791710111 1001
    z1227a1720111 1010
    {1237b1730111 1011
    |1247c1740111 1100
    }1257d1750111 1101
    ~1267e1760111 1110
    del1277f1770111 1111

    Δημιουργία γραφικών εφαρμογών

    Στοιχεία της εφαρμογής

    Οι εφαρμογές μπορούν διαχωριστούν ανάλογα με την μέθοδο διεπαφής με τον χρήστη σε

    Συστατικά εισαγωγής δεδομένων

    Συστατικά εμφάνισης δεδομένων

    Επίδειξη συστατικών

    Κατεβάστε και τρέξτε το πρόγραμμα SwingSet2.jar.

    Προγραμματιστική διεπαφή συστατικών

    Παράθυρο (javax.swing.JFrame, Κλάση)

    Παράδειγμα: ένα κενό παράθυρο

    Το παρακάτω παράδειγμα δημιουργεί ένα κενό παράθυρο, θέτει ως τίτλο το αλφαριθμητικό "Hello, World!" και το εμφανίζει.

    import javax.swing.JFrame;
    
    public class Window {
        public static void main(String[] args) {
            JFrame jf = new JFrame("Hello, World!");
            
            jf.setBounds(0, 0, 800, 600);
            // Remember, the method show() is deprecated
            jf.setVisible(true);
        }
    }
    

    Προσαρμογή στο τοπικό περιβάλλον

    Μπορούμε να δώσουμε στην εφαρμογή την αίσθηση εφαρμογής φτιαγμένης ειδικά για το λειτουργικό περιβάλλον στο οποίο εκτελείται με τον παρακάτω κώδικα.
    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) {
        e.printStackTrace();
    }
    

    Προγραμματιστική διεπαφή συμβάντων

    Κουμπιά (javax.swing.JButton)

    Διαχειριστές διάταξης

    Οι διαχειριστές διάταξης (layout managers) είναι αόρατα συστατικά που καθορίζουν δυναμικά την τοποθέτηση των ορατών συστατικών (πχ κουμπιά, πίνακες) στην εφαρμογή. Οι κύριοι διαχειριστές διάταξης είναι:

    Προγραμματιστική διεπαφή διάταξης FlowLayout

    FlowLayout (java.awt.FlowLayout)

    Παράδειγμα διάταξης FlowLayout

    java.awt.FlowLayout
    import javax.swing.JFrame;
    import javax.swing.JButton;
    
    import java.awt.FlowLayout;
    
    public class FlowLayoutDemo {
        public static void main(String[] args) {
            JFrame jf = new JFrame("Hello, World!");
            
            jf.setBounds(0, 0, 800, 600);
            
            jf.setLayout(new FlowLayout());
            jf.add(new JButton("button 1"));
            jf.add(new JButton("button 2"));
            jf.add(new JButton("button 3"));
            
            // Remember, the method show() is deprecated
            jf.setVisible(true);
        }
    }
    

    Αποτέλεσμα διάταξης FlowLayout

    Προγραμματιστική διεπαφή διάταξης BorderLayout

    BorderLayout (java.awt.BorderLayout)

    Παράδειγμα διάταξης BorderLayout

    java.awt.BorderLayout
    import javax.swing.JFrame;
    import javax.swing.JButton;
    
    import java.awt.BorderLayout;
    
    public class BorderLayoutDemo {
        public static void main(String[] args) {
            JFrame jf = new JFrame("Hello, World!");
            
            jf.setBounds(0, 0, 800, 600);
            
            jf.setLayout(new BorderLayout());
            jf.add(new JButton("north"), BorderLayout.NORTH);
            jf.add(new JButton("south"), BorderLayout.SOUTH);
            jf.add(new JButton("center"), BorderLayout.CENTER);
            jf.add(new JButton("west"), BorderLayout.WEST);
            jf.add(new JButton("east"), BorderLayout.EAST);
            
            // Remember, the method show() is deprecated
            jf.setVisible(true);
        }
    }
    

    Αποτέλεσμα διάταξης BorderLayout

    Προγραμματιστική διεπαφή διάταξης GridLayout

    GridLayout (java.awt.GridLayout)

    Παράδειγμα διάταξης GridLayout

    java.awt.GridLayout
    import javax.swing.JFrame;
    import javax.swing.JButton;
    
    import java.awt.GridLayout;
    
    public class GridLayoutDemo {
        public static void main(String[] args) {
            JFrame jf = new JFrame("Hello, World!");
            
            jf.setBounds(0, 0, 800, 600);
            
            jf.setLayout(new GridLayout(3, 2));
            jf.add(new JButton("(1, 1)"));
            jf.add(new JButton("(1, 2)"));
            jf.add(new JButton("(2, 1)"));
            jf.add(new JButton("(2, 2)"));
            jf.add(new JButton("(3, 1)"));
            jf.add(new JButton("(3, 2)"));
            
            // Remember, the method show() is deprecated
            jf.setVisible(true);
        }
    }
    

    Αποτέλεσμα διάταξης GridLayout

    Προγραμματισμός με συμβάντα

    Η διαδραστικότητα στις εφαρμογές καθορίζεται από προκαθορισμένα συμβάντα. Η νοοτροπία τους είναι πολύ απλή:
    1. Επιλέγεται ένα γεγονός στο οποίο θέλουμε να επέμβουμε (πάτημα ένος πλήκτρου κτλ)
    2. Υλοποιόντας την κατάλληλη διεπαφή, γράφουμε το κομμάτι κώδικα που θέλουμε να εκτελεστεί για το συγκεκριμένο γεγονός
    3. Συσχετίζουμε το κομμάτι αυτό κώδικα με τη λίστα γεγονότων του συστατικού
    Τα γεγονότα είναι προκαθορισμένα και αφορούν είσοδο από το πληκτρολόγιο ή το ποντίκι, μετακινήσεις ή διαφοροποίηση του μεγέθους παραθύρων κτλ. Συνήθως οι κλάσεις που τα υλοποιούν βρίσκονται στο πακέτο java.awt.event.*.

    Παράδειγμα προγραμματισμού με συμβάντα

    import javax.swing.JFrame;
    import javax.swing.JButton;
    import javax.swing.JOptionPane;
    
    import java.awt.BorderLayout;
    
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    
    public class EventDemo {
        class AlertAction implements ActionListener {
            private JFrame parent;
    
            AlertAction(JFrame parent) {
                this.parent = parent;
            }
    
            @Override public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(parent, "information", "Button Pressed!!", JOptionPane.INFORMATION_MESSAGE);
            }
        }
    
        public EventDemo() {
            JFrame jf = new JFrame("Hello, World!");
            JButton jb = new JButton("Click Me!");
    
            jf.setBounds(0, 0, 800, 600);
    
            jf.setLayout(new BorderLayout());
            jf.add(jb, BorderLayout.CENTER);
    
            jb.addActionListener(new AlertAction(jf));
    
            // Remember, the method show() is deprecated
            jf.setVisible(true);
        }
    
        public static void main(String[] args) {
            new EventDemo();
        }
    }
    

    Αποτέλεσμα προγραμματισμού με συμβάντα

    Συντεταγμένες γραφικών

    Συντεταγμένες γραφικών (διάγραμμα)

    Κλάση προγραμματιστικής διεπαφής χαμηλού επιπέδου

    java.awt.Graphics

    Μέθοδοι χαμηλού επιπέδου

    Παράδειγμα: Σχεδίαση κειμένου

    Όλες οι συναρτήσεις χαμηλού επιπέδου υλοποιούνται στην κλάση java.awt.Graphics. Η κλάση java.awt.Font διαθέτει κατασκευαστή που δέχεται 3 παραμέτρους:

    Κώδικας: Σχεδίαση κειμένου

    import javax.swing.JFrame;
    import javax.swing.JComponent;
    
    import java.awt.BorderLayout;
    import java.awt.Graphics;
    import java.awt.Font;
    
    public class TextDemo {
        class GraphicPane extends JComponent {
            public GraphicPane() {
                super();
            }
        
            @Override public void paint(Graphics g) {
                g.setFont(new Font(Font.SANS_SERIF, Font.ITALIC, 14));
                g.drawString("Hello, World!", 30, 30);
            }
        }
        
        public TextDemo() {
            JFrame jf = new JFrame("Hello, World!");
            GraphicPane gp = new GraphicPane();
            
            jf.setBounds(0,0, 800, 600);
            jf.setLayout(new BorderLayout());        
            jf.add(gp, BorderLayout.CENTER);
            
            // Remember, the method show() is deprecated
            jf.setVisible(true);
        }
    
        public static void main(String[] args) {
            new TextDemo();
        }
    }
    

    Αποτέλεσμα: Σχεδίαση κειμένου

    Παράδειγμα: Χειρισμός χρωμάτων

    Ο χειρισμός των χρωμάτων γίνεται μέσω της κλάσης java.awt.Color.
    import javax.swing.JFrame;
    import javax.swing.JComponent;
    
    import java.awt.BorderLayout;
    import java.awt.Graphics;
    import java.awt.Font;
    import java.awt.Color;
    
    public class ColorDemo {
        class GraphicPane extends JComponent {
            public GraphicPane() {
                super();
            }
        
            @Override public void paint(Graphics g) {
                g.setFont(new Font(Font.SANS_SERIF, Font.ITALIC, 14));
                g.setColor(Color.ORANGE);
                g.drawString("Hello, World! (orange)", 30, 30);
                g.setColor(new Color(250, 100, 120));
                g.drawString("Hello, World! (red ... almost)", 80, 80);
    
            }
        }
        
        public ColorDemo() {
            JFrame jf = new JFrame("Hello, World!");
            GraphicPane gp = new GraphicPane();
            
            jf.setBounds(0,0, 800, 600);
            jf.setLayout(new BorderLayout());        
            jf.add(gp, BorderLayout.CENTER);
            
            // Remember, the method show() is deprecated
            jf.setVisible(true);
        }
    
        public static void main(String[] args) {
            new ColorDemo();
        }
    }
    

    Αποτέλεσμα: Χειρισμός χρωμάτων

    Παράδειγμα: Σχεδίαση σχημάτων

    Κώδικας: Σχεδίαση σχημάτων

    import javax.swing.JFrame;
    import javax.swing.JComponent;
    
    import java.awt.BorderLayout;
    import java.awt.Graphics;
    import java.awt.Font;
    import java.awt.Color;
    
    public class ShapeDemo {
        class GraphicPane extends JComponent {
            public GraphicPane() {
                super();
            }
    
            @Override public void paint(Graphics g) {
                //// line
                g.setColor(Color.BLACK);
                // drawLine(int x1, int y1, int x2, int y2)
                g.drawLine(0, 0, 100, 100);
    
                //// ovals
                g.setColor(new Color(250, 100, 120));
                // drawOval(int x, int y, int width, int height)
                g.drawOval(30, 30, 100, 200);
                // same, but it fills the oval with the current color
                g.fillOval(300, 30, 100, 200);
    
                //// Rectangle
                g.setColor(Color.BLUE);
                // drawRect(int x, int y, int width, int height)
                g.drawRect(30, 300, 100, 200);
                // fillRect(int x, int y, int width, int height)
                g.fillRect(300, 300, 100, 200);
            }
        }
    
        public ShapeDemo() {
            JFrame jf = new JFrame("Hello, World!");
            GraphicPane gp = new GraphicPane();
    
            jf.setBounds(0,0, 800, 600);
            jf.setLayout(new BorderLayout());
            jf.add(gp, BorderLayout.CENTER);
    
            // Remember, the method show() is deprecated
            jf.setVisible(true);
        }
    
        public static void main(String[] args) {
            new ShapeDemo();
        }
    }
    

    Αποτέλεσμα: Σχεδίαση σχημάτων

    Παράδειγμα: Αρχεία εικόνων

    Η βιβλιοθήκες που παρέχονται μαζί με το περιβάλλον ανάπτυξης της Java, υποστηρίζουν την επεξεργασία εικόνων μέσω των πακέτων java.awt.image.* και javax.imageio.*.
    import javax.swing.JFrame;
    import javax.swing.JComponent;
    
    import javax.imageio.ImageIO;
    
    import java.io.File;
    import java.io.IOException;
    
    import java.awt.BorderLayout;
    import java.awt.Graphics;
    
    import java.awt.image.BufferedImage;
    
    public class ImageDemo {
        class GraphicPane extends JComponent {
            private BufferedImage bi;
            private JFrame parent;
    
            public GraphicPane(JFrame parent) {
                this.parent = parent;
                try {
                    // reads a file
                    this.bi = ImageIO.read(new File("planes.jpg"));
                } catch (IOException ioe) {
                    System.err.println("Could not load image");
                }
            }
    
            @Override public void paint(Graphics g) {
                // drawImage(Image img, int x, int y, ImageObserver observer)
                g.drawImage(bi, 0, 0, parent);
            }
        }
    
        public ImageDemo() {
            JFrame jf = new JFrame("Hello, World!");
            GraphicPane gp = new GraphicPane(jf);
    
            jf.setBounds(0,0, 800, 600);
            jf.setLayout(new BorderLayout());
            jf.add(gp, BorderLayout.CENTER);
    
            jf.setVisible(true);
        }
    
        public static void main(String[] args) {
            new ImageDemo();
        }
    }
    

    Αποτέλεσμα: Αρχεία εικόνων

    Άσκηση: Μία απλή γραφική εφαρμογή

    Άσκηση 9

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Ευχαριστίες

    Ευχαριστίες στο Βασίλη Καρακόιδα για την καθοριστική συνεισφορά του στη συγγραφή της ενότητας αυτής των σημειώσεων.

    Περιγραφή δεδομένων με XML και κανονικές εκφράσεις

    Σύνταξη κανονικών εκφράσεων

    Σύμβολα με ειδικό νόημα

    Πρόσθετα σύμβολα με ειδικό νόημα

    Χαρακτήρες διαφυγής

    Πρόσθετοι χαρακτήρες διαφυγής

    Χρήση κανονικών εκφράσεων

    Παράδειγμα: Εύρεση κανονικών εκφράσεων σε αρχείο

    /*
     * Globally match regular expression and print
     * Modelled after the Unix command with the same name
     * D. Spinellis, January 2004
     */
    
    import java.util.regex.*;
    import java.io.*;
    
    class Grep {
        public static void main(String args[]) {
            if (args.length != 2) {
                System.err.println("Usage: Grep pattern file");
                System.exit(1);
            }
    
            Pattern cre = null;        // Compiled RE
            try {
                cre = Pattern.compile(args[0]);
            } catch (PatternSyntaxException e) {
                System.err.println("Invalid RE syntax: " + e.getDescription());
                System.exit(1);
            }
    
            BufferedReader in = null;
            try {
                in = new BufferedReader(new InputStreamReader(new FileInputStream(args[1])));
            } catch (FileNotFoundException e) {
                System.err.println("Unable to open file " + args[1] + ": " + e.getMessage());
                System.exit(1);
            }
    
            try {
                String s;
                while ((s = in.readLine()) != null) {
                    Matcher m = cre.matcher(s);
                    if (m.find())
                        System.out.println(s);
                }
            } catch (Exception e) {
                System.err.println("Error reading line: " + e.getMessage());
                System.exit(1);
            }
        }
    }
    

    Αποτέλεσμα αναζήτησης κανονικών εκφράσεων

    java Grep "abo" /usr/dict/words
    ...
    sabotage
    seaboard
    taboo
    thereabouts
    turnabout
    vagabond
    whereabout
    ...
    
    java Grep "^abo" /usr/dict/words
    aboard
    abode
    abolish
    abolition
    abominable
    abominate
    aboriginal
    
    java Grep bent /usr/dict/words
    absorbent
    bent
    benthic
    debenture
    incumbent
    recumbent
    
    java Grep "bent$" /usr/dict/words
    absorbent
    bent
    incumbent
    recumbent
    
    java Grep "[^AEIOUYaeiouy]{5,}" /usr/dict/words
    angstrom
    Armstrong
    birthplace
    bremsstrahlung
    corkscrew
    Dijkstra
    downstream
    hardscrabble
    jockstrap
    Knightsbridge
    lengthly
    Nietzsche
    nightclub
    offspring
    postscript
    Rothschild
    ...
    
    java Grep "(.)(.)(.)\3\2\1" /usr/dict/words
    braggart
    Brenner
    collocation
    diffident
    dissident
    glossolalia
    grammar
    grammarian
    installation
    staccato
    suffuse
    

    Διαίρεση συμβολοσειρών με πρότυπα

    Παράδειγμα: επεξεργασία αρχείων καταγραφής πρόσβασης σε ιστοσελίδες

    import java.util.*;
    import java.util.regex.*;
    import java.io.*;
    
    /**
     * Collect and print Web statistics
     * @author D. Spinellis
     */
    class WebStats {
    
        /**
         * Increment the integer value of map's member by 1
         * The member is obtained by using the matcher to extract
         * the specified group from the string s
         */
        static void increment(Map<String, Integer> map, String s, Matcher m, int group) {
            String member = s.substring(m.start(group), m.end(group));
            Integer i = map.get(member);
            map.put(member, i == null ? 1 : i + 1);
        }
    
        /** List the contents of the given map */
        static void list(String title, Map<String, Integer> map) {
            System.out.println("\n" + title);
            for (Map.Entry e : map.entrySet())
                System.out.println(e.getValue() + " " + e.getKey());
        }
    
        /** List the contents of the given map ordered by their values.
         * (You are not expected to undestand this).
         */
        static void sortedList(String title, Map<String, Integer> map) {
            System.out.println("\n" + title);
            TreeSet <Map.Entry<String, Integer>> valueOrder
                = new TreeSet<Map.Entry<String, Integer>>(new
                Comparator<Map.Entry<String, Integer>>() {
                    public int compare(Map.Entry<String, Integer> a,
                            Map.Entry<String, Integer> b) {
                        return (-a.getValue().compareTo(b.getValue()));
                    }
                }
            );
            valueOrder.addAll(map.entrySet());
            for (Map.Entry e : valueOrder)
                System.out.println(e.getValue() + " " + e.getKey());
        }
    
    
    
        public static void main(String args[]) {
            if (args.length != 1) {
                System.err.println("Usage: WebStats file");
                System.exit(1);
            }
    
            Pattern cre = null;        // Compiled RE
            try {
                // A standard log line is a line like:
                // 192.168.136.16 - - [26/Jan/2004:19:45:48 +0200] "GET /c136.html HTTP/1.1" 200 1674 "http://office/c120.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007"
                cre = Pattern.compile(
                "([-\\w.]+)\\s+" +    // 1. Host
                "([-\\w]+)\\s+" +    // 2. Logname
                "([-\\w]+)\\s+" +    // 3. User
                "\\[(\\d+)/" +        // 4. Date
                "(\\w+)/" +        // 5. Month
                "(\\d+):" +        // 6. Year
                "(\\d+):" +        // 7. Hour
                "(\\d+)" +        // 8. Minute
                "([^]]+?)\\]\\s+" +    // 9. Rest of time
                "\"([-\\w]+)\\s*" +    // 10. Request verb
                "([^\\s]*)" +        // 11. Request URL
                "([^\"]*?)\"\\s+" +    // 12. Request protocol etc.
                "(\\d+)\\s+" +        // 13. Status
                "([-\\d]+)\\s+" +    // 14. Bytes
                "\"([^\"]*)\"\\s+" +    // 15. Referrer URL
                "\"([^\"]*)\""        // 16. Client
                );
            } catch (PatternSyntaxException e) {
                System.err.println("Invalid RE syntax: " + e.getDescription());
                System.exit(1);
            }
    
            BufferedReader in = null;
            try {
                in = new BufferedReader(new InputStreamReader(new FileInputStream(args[0])));
            } catch (FileNotFoundException e) {
                System.err.println("Unable to open file " + args[1] + ": " + e.getMessage());
                System.exit(1);
            }
    
            HashMap<String, Integer> host, hour, request, referrer;
            host = new HashMap<String, Integer>();
            hour = new HashMap<String, Integer>();
            request = new HashMap<String, Integer>();
            referrer = new HashMap<String, Integer>();
            try {
                String s;
                while ((s = in.readLine()) != null) {
                    Matcher m = cre.matcher(s);
                    if (!m.matches())
                        System.out.println("Invalid line: " + s);
                    else {
                        increment(host, s, m, 1);
                        increment(hour, s, m, 7);
                        increment(request, s, m, 11);
                        increment(referrer, s, m, 15);
                    }
                }
            } catch (Exception e) {
                System.err.println("Error reading line: " + e.getMessage());
                System.exit(1);
            }
            sortedList("Host Access Counts", host);
            sortedList("Hourly Access Counts", hour);
            sortedList("Request URL Access Counts", request);
            sortedList("Referrer URL Access Counts", referrer);
        }
    }
    

    Βάσεις της XML

    Έγγραφα XML

    Παραδείγματα XML

    Παράδειγμα: ένα στοιχείο με κείμενο

    <city>Larisa</city>
    

    Παράδειγμα: στοιχείο με περιεχόμενο άλλα στοιχεία

     <?xml version="1.0" encoding="US-ASCII" ?>
     <city_info>
        <name>Larisa</name>
        <area_code>241</area_code>
        <latitude>39.38</latitude>
        <longitude>-22.25</longitude>
        <country>Greece</country>
     </city_info>
    

    Παράδειγμα: κενό στοιχείο

    <alumnus />
    

    Προσδιορισμοί

    Παράδειγμα:
    <city country="el" id="HER">
    <name>Hrakleio</name>
    </city>
    

    Οντότητες και σχόλια

    Οι παρακάτω οντότητες (entities) μπορούν να οριστούν περιφραστικά:
    ΟντότηταΣύνταξη XML
    <&lt;
    &&amp;
    >&gt;
    "&quot;
    '&apos;

    Σχόλια μέσα σε ένα έγγραφο XML γράφονται ως
    <!-- περιεχόμενο -->

    Διάκριση μεταξύ οντοτήτων, στοιχείων και προσδιορισμών

    Παράδειγμα: ΚΑΔ XML

    Τα παρακάτω αρχείο χρησιμοποιείται από τους φορολογούμενους για να δηλώσουν στη ΑΑΔΕ τον κωδικό αριθμό δραστηριότητάς (ΚΑΔ) τους.
    <?xml version="1.0" encoding="UTF-8"?>
    <ekad xmlns="http://www.gsis.gr/ekad"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      afm="046523469">
        <branch aa="0">
            <kad typeOfKad="1">
                <value>71121908</value>
            </kad>
        </branch>
    </ekad>
    

    Ορισμός σχήματος εγγράφων με τη χρήση XSD

    Σχήμα για απλά στοιχεία

    Στοιχεία XML που περιέχουν απλά δεδομένα όπως το παρακάτω
    <?xml version="1.0" ?>
    <studentID>802345</studentID>
    
    μπορούν να δηλωθούν με το στοιχείο element και τον προσδιορισμό του τύπου.
    <?xml version="1.0" ?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:element name="studentID" type="xsd:integer" />
    </xsd:schema>
    

    Διαθέσιμοι τύποι

    Μερικοί διαθέσιμοι τύποι είναι οι παρακάτω:

    Περιορισμοί σε απλά στοιχεία

    Αν θέλουμε να περιορίσουμε το περιεχόμενο του στοιχείου, μπορούμε να χρησιμοποιήσουμε τα στοιχεία simpleType και restriction μαζί με διάφορους περιορισμούς (restrictions) (στο παράδειγμα pattern).
    <?xml version="1.0" ?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:element name="studentID" >
            <xsd:simpleType>
                <xsd:restriction base="xsd:integer">
                    <xsd:pattern value="80\d{4}" />
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:element>
    </xsd:schema>
    

    Είδη περιορισμών

    Μερικοί υποστηριζόμενοι περιορισμοί είναι οι παρακάτω: Όλοι παίρνουν μια παράμετρο value, που ορίζει την τιμή τους.

    Παραδείγματα περιορισμών

    Παράδειγμα σχήματος για βαθμό:
    <?xml version="1.0" ?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <xsd:element name="grade" >
                    <xsd:simpleType>
                      <xsd:restriction base="xsd:float">
                        <xsd:pattern value="\d+\.[05]"/>
                        <xsd:minInclusive value="0"/>
                        <xsd:maxInclusive value="10"/>
                      </xsd:restriction>
                    </xsd:simpleType>
            </xsd:element>
    </xsd:schema>
    
    Παράδειγμα περιορισμού για επιλογή μιας πόλης:
    <xsd:simpleType>
      <xsd:restriction base="xsd:string">
        <xsd:enumeration value="Athens"/>
        <xsd:enumeration value="Thessaloniki"/>
        <xsd:enumeration value="Argostoli"/>
        <xsd:enumeration value="Volos"/>
        <!-- ... -->
      </xsd:restriction>
    </xsd:simpleType>
    

    Σύνθετοι τύποι

    Ορισμοί προσδιορισμών

    Απλό περιεχόμενο

    Παράδειγμα σχήματος:
    <?xml version="1.0" ?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="country">
      <xsd:complexType>
        <xsd:simpleContent >
            <xsd:extension base="xsd:string" >
                <xsd:attribute name="code" type="xsd:string" use="required" />
            </xsd:extension>
        </xsd:simpleContent >
      </xsd:complexType>
    </xsd:element>
    </xsd:schema>
    
    Παράδειγμα εγγράφου:
    <?xml version="1.0" ?>
    <country code="el">Greece</country>
    

    Ομάδες

    Σε ένα στοιχείο complexType μπορούμε να ορίσουμε και τα παρακάτω στοιχεία Παράδειγμα σχήματος:
    <?xml version="1.0" ?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:element name="javaProgram">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="package" type="xsd:string" />
                    <xsd:element name="import" type="xsd:string" maxOccurs="unbounded" />
                    <xsd:element name="class">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element name="name" type="xsd:string" />
                                <xsd:choice maxOccurs="unbounded">
                                    <xsd:element name="field" type="xsd:string" />
                                    <xsd:element name="ctor" type="xsd:string" />
                                    <xsd:element name="method" type="xsd:string" />
                                </xsd:choice>
                            </xsd:sequence>
                            <xsd:attribute name="extends" type="xsd:string" use="optional" />
                        </xsd:complexType>
                    </xsd:element>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:schema>
    
    Παράδειγμα εγγράφου:
    <?xml version="1.0" ?>
    <javaProgram>
            <package>gr.aueb.dds.bio</package>
            <import>java.util.Date</import>
            <import>java.math.BigDecimal</import>
            <class extends="Object">
                    <name>Point</name>
                    <field>int x</field>
                    <field>int y</field>
                    <ctor>Point(int x, int y)</ctor>
                    <field>static int numPoints</field>
            </class>
    </javaProgram>
    

    Αριθμητικοί περιορισμοί

    Παράδειγμα: Μια τάξη μπορεί να έχει 10-150 φοιτητές.
    <?xml version="1.0" ?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:element name="class" >
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="student" type="xsd:string"
                     minOccurs="10" maxOccurs="150" />
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:schema>
    

    Ανακεφαλαίωση

    Η επιτρεπόμενη δομή ενός εγγράφου XSD εμφανίζεται στο παρακάτω σχήμα.
    the content models in an XML Schema
    (Αναδημοσιεύεται με την άδεια του συγγραφέα Rahul Srivastava).

    Παράδειγμα: ΚΑΔ XSD

    Τα παρακάτω σχήμα ορίζει τη μορφή του αρχείου που χρησιμοποιείται από τους φορολογούμενους για να δηλώσουν στη ΑΑΔΕ τον κωδικό αριθμό δραστηριότητάς (ΚΑΔ) τους.
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns="http://www.gsis.gr/ekad" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.gsis.gr/ekad" elementFormDefault="qualified" attributeFormDefault="unqualified">
      <xs:element name="ekad">
        <xs:annotation>
          <xs:documentation>root element</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="branch" nillable="false" maxOccurs="unbounded">
              <xs:annotation>
                <xs:documentation>Εγκατάσταση</xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="kad" maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="value" nillable="false">
                          <xs:annotation>
                            <xs:documentation>Η τιμή του ΚΑΔ</xs:documentation>
                          </xs:annotation>
                          <xs:simpleType>
                            <xs:restriction base="xs:integer">
                              <xs:totalDigits value="15"/>
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                      </xs:sequence>
                      <xs:attribute name="typeOfKad" use="required">
                        <xs:annotation>
                          <xs:documentation>Είδος ΚΑΔ (δραστηριότητας). 1=Κύρια, 2=Δευτερεύουσα, 3=Λοιπή, 4=Βοηθητική</xs:documentation>
                        </xs:annotation>
                        <xs:simpleType>
                          <xs:restriction base="xs:int">
                            <xs:enumeration value="1"/>
                            <xs:enumeration value="2"/>
                            <xs:enumeration value="3"/>
                            <xs:enumeration value="4"/>
                          </xs:restriction>
                        </xs:simpleType>
                      </xs:attribute>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="aa" use="required">
                  <xs:annotation>
                    <xs:documentation>ΑΑ εγκατάστασης. Η έδρα δηλώνεται σαν υποκατάστημα με ΑΑ=0. Εάν υπάρχει μητρική εταιρεία στο εξωτερικό, ο ΚΑΔ της δηλώνεται ως υποκατάστημα με ΑΑ=9999</xs:documentation>
                  </xs:annotation>
                  <xs:simpleType>
                    <xs:restriction base="xs:int">
                      <xs:minInclusive value="0"/>
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="afm" use="required">
            <xs:annotation>
              <xs:documentation>ΑΦΜ υπόχρεου</xs:documentation>
            </xs:annotation>
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:minLength value="9"/>
                <xs:maxLength value="9"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:schema>
    

    Μετασχηματισμοί με τη χρήση XSLT

    Στοιχεία της XSLT

    Παράδειγμα μετασχηματισμού: σχήμα

    <?xml version="1.0" ?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:element name="project">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="shortname" type="xsd:string" />
                    <xsd:element name="projtitle" type="xsd:string" />
                    <xsd:element name="startdate" type="xsd:date" minOccurs="0" />
                    <xsd:element name="enddate" type="xsd:date" />
                    <xsd:element name="web_site" type="xsd:string" minOccurs="0" />
                    <xsd:element name="our_budget" type="xsd:integer" minOccurs="0" />
                    <xsd:element name="total_budget" type="xsd:integer" minOccurs="0" />
                    <xsd:element name="funding_agency" type="xsd:string" minOccurs="0" />
                    <xsd:element name="funding_programme" type="xsd:string" minOccurs="0" />
                    <xsd:element name="project_code" type="xsd:string" minOccurs="0" />
                    <xsd:element name="partner" minOccurs="0" maxOccurs="unbounded">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element name="shortname" type="xsd:string" />
                                <xsd:element name="country" type="xsd:string" />
                                <xsd:element name="web_site" type="xsd:string" minOccurs="0" />
                            </xsd:sequence>
                        </xsd:complexType>
                    </xsd:element>
                    <xsd:element name="logo" type="xsd:string" minOccurs="0" />
                    <xsd:element name="description" type="xsd:string" />
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:schema>
    

    Παράδειγμα μετασχηματισμού: έγγραφο

    <?xml version="1.0"?>
    <project>
            <shortname>mExpress</shortname>
            <projtitle>mobile in-EXhibition PRovision of Electronic Support Services</projtitle>
            <startdate>2002-03-05</startdate>
            <enddate>2004-04-01</enddate>
            <web_site>http://mexpress.intranet.gr/</web_site>
            <our_budget>328</our_budget>
            <total_budget>3493</total_budget>
            <funding_agency>European Commission</funding_agency>
            <funding_programme>IST</funding_programme>
            <project_code>IST-2001-33432</project_code>
            <partner>
                    <shortname>Intracom</shortname>
                    <country>EL</country>
                    <web_site>http://www.intracom.gr</web_site>
            </partner>
            <partner>
                    <shortname>Ericsson</shortname>
                    <country>DK</country>
                    <web_site>http://www.ericsson.com/</web_site>
            </partner>
            <partner>
                    <shortname>ELISA</shortname>
                    <country>FIN</country>
                    <web_site>http://www.elisa.com</web_site>
            </partner>
            <partner>
                    <shortname>POULIADIS</shortname>
                    <country>EL</country>
                    <web_site>http://www.pouliadis.gr</web_site>
            </partner>
            <partner>
                    <shortname>SSF</shortname>
                    <country>FIN</country>
                    <web_site>http://www.ssf.fi/</web_site>
            </partner>
            <partner>
                    <shortname>HUT</shortname>
                    <country>FIN</country>
                    <web_site>http://www.hut.fi</web_site>
            </partner>
            <partner>
                    <shortname>FFC</shortname>
                    <country>FIN</country>
            </partner>
            <partner>
                    <shortname>ROTA</shortname>
                    <country>EL</country>
                    <web_site>http://www.rota.gr</web_site>
            </partner>
            <logo>../images/p_mexpress.gif</logo>
            <description>
    mEXPRESS aims to exploit the technological opportunities arising from
    evolution in the areas of wireless networks and positioning mechanisms in
    order to support and facilitate the professional exhibition industry in
    a context-aware manner. It will contribute to the economic development of
    the Community by providing means for efficient operation and interaction
    in information-rich environments such as exhibitions, and significantly
    enhancing promotional activities and business communications. The mEXPRESS
    project will provide an integrated mediation platform (mEXPRESS Service
    Provider) oriented to exhibition shows and events.
            </description>
    </project>
    

    Παράδειγμα μετασχηματισμού: XSLT

    <?xml version="1.0"?>
    <!-- Apply using
    xml tr project.xslt mexpress.xml
    -->
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            <xsl:template match="project">
                    <h1>
                    <xsl:value-of select="shortname" />
                    -
                    <xsl:value-of select="projtitle" />
                    </h1>
                    <!-- Show Logo -->
                    <xsl:element name="img">
                            <xsl:attribute name="src"><xsl:value-of select="logo" /></xsl:attribute>
                    </xsl:element>
                    <br /> <br />
                    <!-- Project Summary information -->
                    <xsl:if test="count(project_code) != 0">
                            Project Code:
                            <xsl:value-of select="project_code" />
                            <xsl:if test="@international = 'yes'">
                                    (International)
                            </xsl:if>
                            <br/>
                    </xsl:if>
                    <xsl:if test="count(funding_programme) != 0">
                            Funding programme: <xsl:value-of select="funding_programme" />
                            <br />
                    </xsl:if>
                    <xsl:if test="count(funding_agency) != 0">
                            Funding Agency: <xsl:value-of select="funding_agency" />
                            <br />
                    </xsl:if>
                    <xsl:if test="@type != ''">
                            Project type:
                            <xsl:choose>
                                    <xsl:when test="@type = 'rtd'">RTD</xsl:when>
                                    <xsl:when test="@type = 'consulting'">Consulting</xsl:when>
                                    <xsl:when test="@type = 'training'">Training</xsl:when>
                                    <xsl:when test="@type = 'dissemination'">Dissemination</xsl:when>
                            </xsl:choose>
                            <br />
                    </xsl:if>
                    <xsl:if test="count(web_site) != 0">
                            Web site:
                            <xsl:element name="a">
                                    <xsl:attribute name="href"><xsl:value-of select="web_site"/></xsl:attribute>
                                    <xsl:value-of select="web_site" />
                            </xsl:element>
                            <br />
                            <br />
                    </xsl:if>
                    <xsl:if test="count(our_budget) != 0">
                            ELTRUN budget: <xsl:value-of select="our_budget" /> EUR
                            <br />
                    </xsl:if>
                    <xsl:if test="count(total_budget) != 0">
                            Total budget: <xsl:value-of select="total_budget" /> EUR
                            <br />
                    </xsl:if>
                    <br />
            </xsl:template>
    </xsl:stylesheet>
    

    Παράδειγμα μετασχηματισμού: αποτέλεσμα

    mExpress - mobile in-EXhibition PRovision of Electronic Support Services



    Project Code: IST-2001-33432 (International)
    Funding programme: IST
    Funding Agency: European Commission
    Project type: RTD
    Web site: http://mexpress.intranet.gr/ (http://mexpress.intranet.gr/)

    ELTRUN budget: 328 EUR
    Total budget: 3493 EUR

    Το μοντέλο αντικειμένων εγγράφων

    Μέθοδοι της NodeList

    Η υλοποίηση του μοντέλου αντικειμένων εγγράφων στη Java

    Κλήσεις μέσω της διεπαφής Document

    Παράδειγμα: υπολογισμός μέσου όρου

    import javax.xml.parsers.*;
    import java.io.*;
    import org.w3c.dom.*;
    
    class Average {
        public static void main(String args[]) {
    
            if (args.length != 2) {
                System.err.println("Usage: Average element file");
                System.exit(1);
            }
    
            Document doc = null;
            try {
                // Create the DocumentBuilderFactory
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                // Create the document builder
                DocumentBuilder db = dbf.newDocumentBuilder();
                // Create DOM document from the file
                doc = db.parse(new File(args[1]));
            } catch (Exception e) {
                System.err.println("Parsing failed: " + e);
                System.exit(1);
            }
    
            NodeList nodes = doc.getElementsByTagName(args[0]);
            double sum = 0.0;
            for (int i = 0; i < nodes.getLength(); i++) {
                String grade = nodes.item(i).getFirstChild().getNodeValue();
                sum += (Integer.valueOf(grade)).doubleValue();
            }
            System.out.println(sum / nodes.getLength());
        }
    }
    

    Αποτέλεσμα υπολογισμού

    Η εκτέλεση στο αρχείο
    <result_list>
        <result>
            <id>809678</id>
            <grade>9</grade>
        </result>
        <result>
            <id>809630</id>
            <grade>8</grade>
        </result>
        <result>
            <id>809679</id>
            <grade>10</grade>
        </result>
        <result>
            <id>809673</id>
            <grade>6</grade>
        </result>
    </result_list>
    
    γίνεται ως εξής.
    java Average grade grade.xml
    8.25
    

    Άσκηση: Περιγραφή δεδομένων με XML και κανονικές εκφράσεις

    Άσκηση 10

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

    Παράρτημα: Ορισμός τύπου εγγράφων με τη χρήση DTD

    Υποστηρίζονται οι παρακάτω ορισμοί:
    Απλοί χαρακτήρες (parsed character data)
    <!ELEMENT name (#PCDATA)>
    
    Ένα στοιχείο
    <!ELEMENT student (person_data)>
    
    Ακολουθία στοιχείων
    <!ELEMENT person_data (name, surname)>
    
    Κανένα ή ένα στοιχείο
    <!ELEMENT person_name (given_name, initial?, last_name)>
    
    Μηδέν ή περισσότερα στοιχεία
    <!ELEMENT owned_cars (car*)>
    
    Ένα ή περισσότερα στοιχεία
    <!ELEMENT course_lecturer (person_data+)>
    
    Επιλογή στοιχείων
    <!ELEMENT engine (two_stroke | four_stroke | wankel | rotary)>
    
    Χρήση παρενθέσεων
    <!ELEMENT person_details (name, surname, (vat_number | id_number))>
    
    Κενό περιεχόμενο
    <!ELEMENT alumnus EMPTY>
    
    Τυχαίο περιεχόμενο
    <!ELEMENT text ANY>
    

    Παράδειγμα - DTD

    <!--
     -
     - Document Type Description for the projects
     -
     - $Id: project.dtd,v 1.2 2004/01/24 20:20:04 bkarak Exp $
     -
    -->
    <!ELEMENT project (
        shortname, 
        projtitle, 
        startdate?, 
        enddate, 
        web_site?, 
        our_budget?, 
        total_budget?, 
        funding_agency?, 
        funding_programme?, 
        project_code?, 
        partner*, 
        logo?, 
        description
    )>
    
    <!ELEMENT projtitle (#PCDATA)>
    <!ELEMENT our_budget (#PCDATA)>
    <!ELEMENT total_budget (#PCDATA)>
    <!ELEMENT funding_agency (#PCDATA)>
    <!ELEMENT funding_programme (#PCDATA)>
    <!ELEMENT project_code (#PCDATA)>
    <!ELEMENT web_site (#PCDATA)>
    <!ELEMENT startdate (#PCDATA)>
    <!ELEMENT enddate (#PCDATA)>
    <!ELEMENT shortname (#PCDATA)>
    <!ELEMENT logo (#PCDATA)>
    <!ELEMENT description (#PCDATA)>
    
    <!ELEMENT partner (shortname, country, web_site?)>
    <!ELEMENT shortname (#PCDATA)>
    <!ELEMENT country (#PCDATA)>
    

    Παράδειγμα - αντίστοιχη XML

    <?xml version="1.0"?>
    <project>
        <shortname>mExpress</shortname>
        <projtitle>mobile in-EXhibition PRovision of Electronic Support Services</projtitle>
        <startdate>20020305</startdate>
        <enddate>20040401</enddate>
        <web_site>http://mexpress.intranet.gr/</web_site>
        <our_budget>328 EUR</our_budget>
        <total_budget>3,493 EUR</total_budget>
        <funding_agency>European Commission</funding_agency>
        <funding_programme>IST</funding_programme>
        <project_code>IST-2001-33432</project_code>
        <partner>
            <shortname>Intracom</shortname>
            <country>EL</country>
            <web_site>http://www.intracom.gr</web_site>
        </partner>
        <partner>
            <shortname>Ericsson</shortname>
            <country>DK</country>
            <web_site>http://www.ericsson.com/</web_site>
        </partner>
        <partner>
            <shortname>ELISA</shortname>
            <country>FIN</country>
            <web_site>http://www.elisa.com</web_site>
        </partner>
        <partner>
            <shortname>POULIADIS</shortname>
            <country>EL</country>
            <web_site>http://www.pouliadis.gr</web_site>
        </partner>
        <partner>
            <shortname>SSF</shortname>
            <country>FIN</country>
            <web_site>http://www.ssf.fi/</web_site>
        </partner>
        <partner>
            <shortname>HUT</shortname>
            <country>FIN</country>
            <web_site>http://www.hut.fi</web_site>
        </partner>
        <partner>
            <shortname>FFC</shortname>
            <country>FIN</country>
        </partner>
        <partner>
            <shortname>ROTA</shortname>
            <country>EL</country>
            <web_site>http://www.rota.gr</web_site>
        </partner>
        <logo>../images/p_mexpress.gif</logo>
        <description>
    mEXPRESS aims to exploit the technological opportunities arising from
    evolution in the areas of wireless networks and positioning mechanisms in
    order to support and facilitate the professional exhibition industry in
    a context-aware manner. It will contribute to the economic development of
    the Community by providing means for efficient operation and interaction
    in information-rich environments such as exhibitions, and significantly
    enhancing promotional activities and business communications. The mEXPRESS
    project will provide an integrated mediation platform (mEXPRESS Service
    Provider) oriented to exhibition shows and events.
        </description>
    </project>
    

    Παράρτημα: Ορισμός τύπων προσδιορισμών με τη χρήση DTD

    Οι προδιορισμοί που επιτρέπονται σε ένα στοιχείο ορίζονται με στοιχεία της μορφής
    <!ATTLIST όνομα_στοιχείου
        όνομα_προσδιορισμού τύπος_προσδιορισμού περιορισμός
        ...
    >
    
    Υποστηρίζονται μεταξύ άλλων οι παρακάτω τύποι προσδιορισμού
    Χαρακτήρες
    CDATA
    Απαρίθμηση
    (επιλογή1 | επιλογή2 | ...)
    Κλειδί
    ID
    Αναφορά σε κλειδί
    IDREF
    Αναφορά σε κλειδιά
    IDREFS
    Οι πιο χρήσιμοι περιορισμοί προσδιορισμών είναι:
    #IMPLIED
    Προαιρετικός προσδιορισμός
    #REQUIRED
    Υποχρεωτικός προσδιορισμός

    Παράδειγμα - DTD

    <!ATTLIST project
        id ID #REQUIRED
        contact CDATA #IMPLIED
        scientific_coordinator CDATA #IMPLIED
        project_manager CDATA #IMPLIED
        group CDATA #REQUIRED
        international (yes | no) #REQUIRED
        type (consulting | rtd | training | dissemination) #REQUIRED
    >
    

    Παράδειγμα - XML

    <?xml version="1.0"?>
    <project
        id="p_mexpress"
        group="g_sense g_wrc"
        scientific_coordinator="m_dds"
        contact="m_pateli"
        international="yes"
        type="rtd"
        project_manager="m_pateli"
    >
    <!-- ... -->
    </project>
    

    Συναρτήσεις και ροές

    Συναρτησιακός προγραμματισμός

    Εκφράσεις λάμδα

    (a) -> {  return a * a; }
    (a, b) -> {  return a + b; }
    () -> {  return true; }
    

    Διαθέσιμοι τύποι

    Το πακέτο java.util.function ορίζει μια σειρά από διεπαφές FunctionalInterface:

    Οι παραπάνω μπορούν κατά περίπτωση να εξειδικευτούν παραπάνω με ένα από τα προθέματα: Bi (δέχεται δύο ορίσματα)· Int, Long, Double (τύπος ορίσματος)· Το (τύπος επιστροφής).

    Μέθοδοι σε συναρτήσεις

    Οι παρακάτω μέθοδοι είναι διαθέσιμες ανάλογα με το αντικείμενο.

    Παράδειγμα λάμδα

    import java.util.function.Function;
    
    class Lambda {
        public static void main(String args[]) {
            // Assign lambda to variable
            Function<Integer, Integer> square = (a) -> a * a;
            // Apply function to value
            System.out.println(square.apply(2));
    
            // Pass function to method and obtain function result
            Function<Integer, Integer> fourthPower = square.compose(square);
            System.out.println(fourthPower.apply(2));
        }
    }
    

    Μέθοδοι ως συναρτήσεις

    Μέθοδοι που ικανοποιούν μια διεπαφή Functional μπορούν να χρησιμοποιηθούν ως τέτοιες με τη χρήση του συμβόλου ::.
    import java.util.function.UnaryOperator;
    import java.math.BigInteger;
    
    // Methods compatible with a functional interface
    class FunctionalFactorial {
        public static BigInteger factorial(BigInteger i) {
            if (i.equals(BigInteger.ZERO))
                return BigInteger.ONE;
            else
                return i.multiply(factorial(i.subtract(BigInteger.ONE)));
        }
    
        public BigInteger instanceFactorial(BigInteger n) {
            return factorial(n);
        }
    
        // Prints 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
        public static void main(String args[]) {
            UnaryOperator<BigInteger> f;
    
            f = FunctionalFactorial::factorial;
            System.out.println(f.apply(new BigInteger("100")));
    
            f = new FunctionalFactorial()::instanceFactorial;
            System.out.println(f.apply(new BigInteger("100")));
        }
    }
    

    Παράδειγμα σύνθεσης μεθόδων

    import java.util.function.DoubleUnaryOperator;
    import java.util.function.Function;
    import static java.lang.Math.abs;
    import static java.lang.Math.PI;
    
    class Inverse {
        public static void main(String args[]) {
            Function<DoubleUnaryOperator, DoubleUnaryOperator> inverse =
                f -> x -> 1. / f.applyAsDouble(x);
    
    	DoubleUnaryOperator cot = inverse.apply(Math::tan); // συνεφαπτομένη
    	DoubleUnaryOperator sec = inverse.apply(Math::cos); // τέμνουσα
    	DoubleUnaryOperator csc = inverse.apply(Math::sin); // συντέμνουσα
    
            final double EPSILON = 1e-15;
            assert abs(sec.applyAsDouble(0) - 1) < EPSILON;
            assert abs(csc.applyAsDouble(PI / 2) - 1) < EPSILON;
            assert abs(cot.applyAsDouble(PI / 4) - 1) < EPSILON;
        }
    }
    

    Ροές

    Μια ροή (stream) είναι μια επεξεργάσιμη ακολουθία ενός απροσδιόριστου αριθμού στοιχείων. Σε σχέση με μια συλλογή η ακολουθία έχει τις παρακάτω ιδιότητες.

    Τύποι ροών

    Ο τύπος Optional

    Η παραμετρική κλάση java.util.Optional περιέχει μια τιμή τύπου T που μπορεί και να απουσιάζει.

    Χρήσιμες μέθοδοι

    Πηγές ροών

    Ενδιάμεση επεξεργασία ροών

    Τελική επεξεργασία ροών

    Παράδειγμα: Λέξεις κειμένου

    /*
     * Output ordered list of a file's unique words
     */
    
    import java.nio.file.Files;
    import java.nio.file.Paths;
    import java.util.stream.Stream;
    import java.io.IOException;
    
    class UniqueWords {
        public static void main(String args[]) {
            if (args.length != 1) {
                System.err.println("Usage: UniqueWords file");
                System.exit(1);
            }
    
            try {
                Files
                    .lines(Paths.get(args[0]))
                    .flatMap(line -> Stream.of(line.split("\\W+")))
                    .sorted()
                    .distinct()
                    .filter((x) -> x.length() > 0)
                    .forEach(System.out::println);
            } catch (IOException e) {
                System.err.println("Error reading line: " + e.getMessage());
                System.exit(1);
            }
        }
    }
    

    Η μέθοδος Newton-Raphson

    Η προσεγγιστική μέθοδος Newton-Raphson μας επιτρέπει να βρούμε τη ρίζα οποιασδήποτε πραγματικής συνάρτησης. Η μέθοδος Newton-Raphson

    Τετραγωνική ρίζα με Newton-Raphson

    Παράδειγμα: Υλοποίηση √2 με NR

    Το παρακάτω παράδειγμα υπολογίζει τη √2 δημιουργώντας μια άπειρου μήκους ακολουθία με διαδοχικά καλύτερες προσεγγίσεις.

    import java.util.Optional;
    import java.util.function.Predicate;
    import java.util.function.DoubleFunction;
    import java.util.stream.Stream;
    
    
    /** Find a square root using the Newton-Raphson approximation */
    class SquareRoot {
    
        /** Obtain successive approximations of a function's root using the
         * Newton-Raphson method. */
        static class NewtonRaphson {
            /** f(x) and f'(x) */
            DoubleFunction fx, fdx;
    
            NewtonRaphson(DoubleFunction fx, DoubleFunction fdx) {
                this.fx = fx;
                this.fdx = fdx;
            }
    
            /** Return next approximation, given the previous one */
            Double nextApproximation(double previous) {
                // xₙ₊₁ = xₙ - f(xₙ) / f′(xₙ)
                return previous - (double)fx.apply(previous) / (double)fdx.apply(previous);
            }
        }
    
        /** Test whether successive parts of a series differ more than a value */
        static class NotWithin implements Predicate<Double> {
            /** Previous value in series */
            Optional<Double> previous = Optional.empty();
            /** Difference value above which the test method returns true */
            Double epsilon;
    
            NotWithin(double d) {
                epsilon = d;
            }
    
            /**
             * Return true if successive parts of the series do not differ by
             * less than the specified epsilon.
             */
            @Override
            public boolean test(Double d) {
                boolean r;
    
                if (previous.isPresent())
                    r = (Math.abs(previous.get() - d) > epsilon);
                else
                    r = true;
                previous = Optional.of(d);
                return r;
            }
        }
    
        public static void main(String args[]) {
            final double SQRT_TO_FIND = 2;
            DoubleFunction fx = (x -> x * x - SQRT_TO_FIND); // f(x) = x² - α
            DoubleFunction fdx = (x -> 2 * x); // f'(x) = 2x
            var rootTwo = new NewtonRaphson(fx, fdx);
            var greaterThanEpsilon = new NotWithin(1e-15);
    
    	// SQRT_TO_FIND is also our first approximation
            System.out.println(Stream.iterate(SQRT_TO_FIND, rootTwo::nextApproximation)
                .dropWhile(greaterThanEpsilon)
                .findFirst()
                .get());
        }
    }
    

    Άσκηση: συναρτήσεις και ροές

    Άσκηση 17

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

  • Rogers Candenhead. Πλήρες Εγχειρίδιο της Java 12. 8η Έκδοση. Εκδόσεις X. Γκιούρδα, 2023. Κεφ. 15.
  • Εκτενές παράδειγμα

    Γιορτινή κάρτα

    Ολοκληρωμένο παράδειγμα

    Διάγραμμα των κλάσεων

    XMas card class diagram

    XmasCard

    package gr.aueb.xmascard;
    
    import java.awt.Rectangle;
    
    /**
     * The Christmas Card program main class.
     *
     * @author Giorgos Gousios, Diomidis Spinellis
     * @depend - - - gr.aueb.xmascard.DrawPanel
     * @depend - <instantiate> - gr.aueb.xmascard.MidiPlayer
     * @depend - - - gr.aueb.xmascard.Tree
     * @depend - - - gr.aueb.xmascard.PointSnowFlake
     * @depend - - - gr.aueb.xmascard.SlashSnowFlake
     */
    public class XmasCard {
    
        /** Number of trees */
        private static final int numTrees = 30;
        /** Number of snowflakes */
        private static final int numSnowFlakes = 1500;
        /** Minimum tree width. */
        private static final int treeWidth = 30;
        /** Minimum tree height. */
        private static final int treeHeight = 100;
        /** Additional variation to tree height and width */
        private static final int treeWobble = 100;
        /** Song to play. */
        private static String musicFile = "jbelrock.mid";
    
        public static void main(String[] args) {
    
            // Create a window and the canvas to draw onto.
            DrawPanel d = new DrawPanel();
    
            // Create randomly-positioned trees.
            for (int i = 0; i < numTrees; i++) {
                Rectangle treeBox = new Rectangle(
    		(int)(Math.random() * DrawPanel.WIDTH),
                    (int)(Math.random() * DrawPanel.HEIGHT),
                    treeWidth + (int)(Math.random() * treeWobble),
                    treeHeight + (int)(Math.random() * treeWobble));
    
                Tree t = new Tree(d.getCanvas(), treeBox);
                d.addDrawObject(t);
            }
    
    	// Start playing music
    	MidiPlayer m = new MidiPlayer(musicFile);
    
            // Create the snowflakes.
            for (int i = 0; i < numSnowFlakes; i++) {
    	    switch (i % 6) {
    	    case 0:
    	    case 1:
                    d.addDrawObject(new PointSnowFlake(d.getCanvas(), '.', 15));
    		break;
    	    case 2:
                    d.addDrawObject(new PointSnowFlake(d.getCanvas(), 'o', 10));
    		break;
    	    case 3:
                    d.addDrawObject(new PointSnowFlake(d.getCanvas(), '*', 5));
    		break;
    	    case 4:
    	    case 5:
                    d.addDrawObject(new SlashSnowFlake(d.getCanvas()));
    		break;
    	    }
    	    try {
    		// Allow existing snowflakes to fall a bit, before adding more
    		Thread.sleep(100);
    	    } catch (InterruptedException e) {
    	    }
            }
        }
    }
    

    DrawPanel

    /*- * Copyright 2005-2018 Diomidis Spinellis * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package gr.aueb.card; import java.awt.Color; import java.awt.Dimension; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Vector; import javax.swing.JFrame; import javax.swing.JPanel; /** * The program's main window. * Extends JFrame to display the window where the * trees and snow are drawn. Implements the {@link java.lang.Runnable Runnable} * interface so as to create a thread that repeatedly calls the * {@link gr.aueb.card.Drawable#draw() draw}method. * * @author Giorgos Gousios, Diomidis Spinellis * @opt nodefillcolor lightblue * @assoc 1 drawablePanel 1 DrawablePanel */ public class DrawPanel extends JFrame implements Runnable { /** The window's width. */ public static final int WIDTH = 1024; /** The window's height. */ public static final int HEIGHT = 768; /** The window's background color (blue). */ public static final Color BACKGROUND_COLOR = new Color(0, 153, 204); /* A table that holds the objects to be drawn */ private Vector<Drawable> drawObjects = null; /* The drawing thread (not serializable) */ private transient Thread thread; /* The canvas to draw onto */ private DrawablePanel drawablePanel = null; /** Serial number of persistant data. * Required, because JFrame implements serializable. */ static final long serialVersionUID = 1L; /** * Constructor to initialize an object with the minimal required state. * The constructor is private, as the full initialization is done * in the getInstance method. */ private DrawPanel() { super("Holiday Card"); } /** * Field initialization based on a constructed instance */ private void initialize() { drawObjects = new Vector<Drawable>(); initializeGraphics(); initializeThread(); } /** * Initialize, display the window, and start the animation. * The code here is separate from the constructor in order to * avoid the resulting "this escape". */ public static DrawPanel getInstance() { DrawPanel instance = new DrawPanel(); instance.initialize(); return instance; } /** Initialize the main window. */ private void initializeGraphics() { // Make our window look nice JFrame.setDefaultLookAndFeelDecorated(true); // Create our drawing canvas drawablePanel = new DrawablePanel(this); drawablePanel.setBackground(BACKGROUND_COLOR); drawablePanel.setPreferredSize(new Dimension(WIDTH, HEIGHT)); setContentPane(drawablePanel); // Handle termination setDefaultCloseOperation( javax.swing.WindowConstants.DISPOSE_ON_CLOSE); // Exit when the window is closed addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); // Our size setSize(WIDTH, HEIGHT); // Force the parent window to expand the canvas to all available space pack(); //Display the window setVisible(true); } /** Start the execution of the drawing thread. */ private void initializeThread() { if (thread == null) { thread = new Thread(this); thread.setPriority(Thread.MIN_PRIORITY); thread.start(); } } /** Add a component to be drawn. */ public void addDrawObject(Drawable drawObject) { drawObjects.add(drawObject); } /** Return a copy of the component list to be drawn */ public Vector<Drawable> getDrawables() { return new Vector<Drawable>(drawObjects); } /** * The method to be executed by the running thread. Executes the * {@link DrawablePanel#repaint()}method periodically. */ public void run() { Thread me = Thread.currentThread(); // Allow termination by setting thread to null while (thread == me) { // tell drawablePanel to repaint its contents drawablePanel.repaint(); try { Thread.sleep(250); } catch (InterruptedException e) { } } thread = null; } /** * Get the canvas's drawing panel * * @return javax.swing.JPanel */ public JPanel getCanvas(){ return drawablePanel; } }

    Drawable

    /*- * Copyright 2005-2018 Diomidis Spinellis * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package gr.aueb.card; import javax.swing.JPanel; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; /** * An abstract representation of a self-drawable object. * * @author Giorgos Gousios, Diomidis Spinellis */ public abstract class Drawable { /** * The canvas to draw the object onto */ protected Graphics2D canvas; /** * The canvas's bounds */ protected Rectangle bounds; /** * Create drawable item * * @param panel The panel to draw the object onto */ public Drawable(JPanel panel) { bounds = panel.getBounds(); canvas = (Graphics2D)panel.getGraphics(); } /** * Draws the object onto the canvas * */ public abstract void draw(Graphics g); }

    DrawablePanel

    /*- * Copyright 2005-2018 Diomidis Spinellis * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package gr.aueb.card; import java.awt.Color; import java.awt.Graphics; import java.util.Vector; import javax.swing.JPanel; /** * The Holiday Card program main class. * * @author Georgios Zouganelis * Draw components from this object to reduce flickering. */ public class DrawablePanel extends JPanel { /** The DrawPanel this DrawablePanel is attached to **/ private DrawPanel controller = null; /** Serial number of persistent data. * Required, because JPanel implements serializable. */ private static final long serialVersionUID = 1L; /** * Constructor to initialize the DrawablePanel with it's controller * */ public DrawablePanel(DrawPanel panel) { controller = panel; } /** * Perform all drawing operations * By overriding the JPanel method and initiating all the drawing * from this place we take advantage of JPanel's double-buffering * capability. */ @Override public void paintComponent(Graphics g){ super.paintComponent(g); setBackground(DrawPanel.BACKGROUND_COLOR); // Ask our controller for a copy of items to draw Vector<Drawable> toPaint = controller.getDrawables(); for (Drawable d : toPaint) d.draw(g); } }

    Tree

    /*- * Copyright 2005-2018 Diomidis Spinellis * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package gr.aueb.card; import java.awt.Color; import java.awt.Graphics; import java.awt.Polygon; import java.awt.Rectangle; import javax.swing.JPanel; /** * A self-drawable tree. Uses a box to specify the tree's bounds (the dimensions * constructor parameter). The trunk is placed in the middle of the bottom side * of the box, having a width equal to the 8% of the total width of the tree and * a height equal to the 20% of the total height of the bounding box. The main * body is represented as an isosceles triangle with a height of 80% of the * height of the bounding box. * * @author Giorgos Gousios, Diomidis Spinellis * @opt nodefillcolor green */ public class Tree extends Drawable { /** Tree trunk width as % of the bounding rectangle width */ private final double TRUNK_WIDTH_FACTOR = 0.08; /** Tree trunk height as % of the bounding rectangle height */ private final double TRUNK_HEIGHT_FACTOR = 0.2; /** Tree body height as % of the bounding rectangle height */ private final double BODY_HEIGHT_FACTOR = 0.8; /** Trunk's color (RGB) */ private final Color BROWN = new Color(204, 102, 0); /** Body's color (RGB) */ private final Color GREEN = new Color(0, 254, 0); /** Tree balls' color (RGB) */ private final Color RED = new Color(250, 0, 0); /** The tree's bounding rectangle */ private Rectangle dimensions; /** * Creates a tree from the specified bounding box * * @param panel The panel to draw the object onto * @param dimensions The bounding box dimensions. */ public Tree(JPanel panel, Rectangle dimensions) { super(panel); this.dimensions = dimensions; } /** * Draws the tree. * * @param g The Graphics object on which we will paint */ @Override public void draw(Graphics g) { drawTrunk(g); drawBody(g); } /** * Draws the trunk. For details on how the lengths are calculated * * @param g The Graphics object on which we will paint * @see gr.aueb.Tree the class description. */ private void drawTrunk(Graphics g) { /* Calculate the trunk rectangle first */ Rectangle r = new Rectangle(); r.x = (int) (dimensions.x + (dimensions.width - dimensions.width * TRUNK_WIDTH_FACTOR) / 2); r.y = (int) (dimensions.y + dimensions.height * BODY_HEIGHT_FACTOR); r.width = (int) (dimensions.width * TRUNK_WIDTH_FACTOR); r.height = (int) (dimensions.height * TRUNK_HEIGHT_FACTOR); /* Draw it! */ g.drawRect(r.x, r.y, r.width, r.height); /* Fill it with brown color */ Color c = g.getColor(); g.setColor(BROWN); g.fillRect(r.x, r.y, r.width, r.height); g.setColor(c); //Revert paint color to default } /** * Draws the body. For details on how the lengths are calculated * * @param g The Graphics object on which we will paint * @see gr.aueb.Tree the class description. */ private void drawBody(Graphics g) { /* Create the polygon (triangle) to draw */ Polygon p = new Polygon(); p.addPoint(dimensions.x + dimensions.width / 2, dimensions.y); p.addPoint(dimensions.x, (int) (dimensions.y + dimensions.height * BODY_HEIGHT_FACTOR)); p.addPoint(dimensions.x + dimensions.width, (int) (dimensions.y + dimensions.height * BODY_HEIGHT_FACTOR)); /* Draw the body */ g.drawPolygon(p); /* Fill it with green color */ Color c = g.getColor(); g.setColor(GREEN); g.fillPolygon(p); g.setColor(c); // Revert paint color to default /* Set Ornaments to the body. */ drawTreeOrnaments(g); } /** * Draws the ornaments of the tree. * @param g The Graphics object on which we will paint * @param x The Abscissa of the part of the body to draw the ornament * @param y The Ordinate of the part of the body to draw the ornament */ private void addTreeOrnament(Graphics g, int x, int y) { /* Draw Tree Ornament. */ g.drawOval(x, y, 10, 10); /* Set color to Red. */ g.setColor(RED); /* Fill Tree Ornament with color. */ g.fillOval(x, y, 10, 10); } /** * Calls addTreeOrnament for specific locations on * the tree body. * @param g The Graphics object on which we will paint */ private void drawTreeOrnaments(Graphics g) { /* yAxis of the body. */ int yAxis = (int) (dimensions.y + dimensions.height * BODY_HEIGHT_FACTOR); /* Add ornament to down left. */ addTreeOrnament(g, dimensions.x - 2, yAxis - 2); /* Add ornament to down right. */ addTreeOrnament(g, dimensions.x + dimensions.width - 1, yAxis - 1); /* Add ornament to up left. */ addTreeOrnament(g, dimensions.x + dimensions.width / 2 - 5 - 20, yAxis - 25); /* Add ornament to up right. */ addTreeOrnament(g, dimensions.x + dimensions.width / 2 - 5 + 20, yAxis - 25); /* Add ornament to middle. */ addTreeOrnament(g,dimensions.x + dimensions.width / 2 - 5, yAxis - 65); } }

    SnowFlake

    /*- * Copyright 2005-2018 Diomidis Spinellis * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package gr.aueb.card; import java.awt.Color; import java.awt.FontMetrics; import java.awt.Graphics; import javax.swing.JPanel; /** * A self-drawable 'snowflake' represented by a character. The move pattern and * character to be displayed is determined by subclasses. * * @author Giorgos Gousios, Diomidis Spinellis * @opt nodefillcolor white */ public abstract class SnowFlake extends Drawable { /** The snowflake's background color. */ private static final Color WHITE = new Color(255, 255, 255); /** * The 'x' current coordinate of the snowflake. */ protected int coordX; /** * The 'y' current coordinate of the snowflake. */ protected int coordY; /** * The character to be displayed as a snowflake */ protected char displayChar; /** * Create a snowflake represented by a point-like character. * * @param panel The panel to draw the object onto */ public SnowFlake(JPanel panel) { super(panel); coordX = (int) (bounds.width * Math.random()) + bounds.x; coordY = 0; } /** * Draw the snowflake and wrap around. * * @param g The Graphics object on which we will paint */ @Override public void draw(Graphics g) { // Go back to the top when hitting the bottom if (coordY >= bounds.height + bounds.y) coordY = 0; // Draw the character in white g.setColor(WHITE); g.drawString((Character.valueOf(displayChar)).toString(), coordX, coordY); } }

    SlashSnowFlake

    /*- * Copyright 2005-2018 Diomidis Spinellis * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package gr.aueb.card; import java.awt.Graphics; import javax.swing.JPanel; /** * A class that animates a slash on a canvas. * * @author Giorgos Gousios, Diomidis Spinellis * @opt nodefillcolor white */ public class SlashSnowFlake extends SnowFlake { /** * Create a snowflake represented by a slash. * * @param panel The panel to draw the object onto */ public SlashSnowFlake(JPanel panel) { super(panel); displayChar = '/'; } /** * Display the slash on the drawing canvas. The slash alternates between * forward slash and backslash depending on the current 'y' coordinate. * * @param g The Graphics object on which we will paint */ @Override public void draw(Graphics g) { /* / on even lines, \ on odd lines */ displayChar = ((coordY % 2) == 0) ? '/' : '\\'; /* Move by 0 to 10 pixels down*/ coordY += (int) (Math.random() * 10); // Draw it through the superclass super.draw(g); } }

    PointSnowFlake

    /*- * Copyright 2005-2018 Diomidis Spinellis * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package gr.aueb.card; import java.awt.Graphics; import javax.swing.JPanel; /** * A class that animates a point-like character on a canvas. * The character can be e.g. a . or a * or an o. * * @author Giorgos Gousios, Diomidis Spinellis * @opt nodefillcolor white */ public class PointSnowFlake extends SnowFlake { /** The wieght of the snowflake. */ int weight; /** * Create a snowflake represented by a point-like character. * * @param panel The panel to draw the object onto * @param c The character to draw * @param w The snowflake's weight */ public PointSnowFlake(JPanel panel, char c, int w) { super(panel); displayChar = c; weight = w; } /** * Display the star onto the canvas. The star changes its 'x' coordinate, * depending on the 'y' coordinate. * * @param g The Graphics object on which we will paint */ @Override public void draw(Graphics g) { // Move the snowflake left and right switch (coordY % 3) { case 1: coordX = coordX - 5; break; case 2: coordX = coordX + 5; break; default: break; } // Move down, based on the weight coordY += (int)(Math.random() * weight); // Draw it through the superclass super.draw(g); } }

    MidiPlayer

    /*- * Copyright 2005-2018 Diomidis Spinellis * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package gr.aueb.card; import javax.sound.midi.*; import java.io.InputStream; import java.io.IOException; /** * Play the specified MIDI file * Note: * For this to work you must ensure that the computer's mixer * is configured to play the software synhtesizer output. * * @author Diomidis Spinellis */ public class MidiPlayer { /** The sequencer we are using to play the MIDI data. */ static Sequencer sequencer = null; /** Constructor for playing the specified file. */ MidiPlayer(String file) { playFile(file); } /** Play the specified file. */ public void playFile(String file) { InputStream midiFile = getClass().getResourceAsStream(file); try { if (sequencer == null) sequencer = MidiSystem.getSequencer(); else end(); sequencer.setSequence(MidiSystem.getSequence(midiFile)); sequencer.open(); sequencer.start(); } catch(MidiUnavailableException e) { System.err.println("Midi device unavailable:" + e); } catch(InvalidMidiDataException e) { System.err.println("Invalid MIDI data:" + e); } catch(IOException e) { System.err.println("I/O error:" + e); } } /** Return true if the music is still playing. */ public boolean isPlaying() { return sequencer.isRunning(); } /* Stop playing. */ public void end() { sequencer.stop(); sequencer.close(); sequencer = null; } }

    Τεκμηρίωση

    Τα σχόλια μέσα στον κώδικα επιτρέπουν την αυτόματη δημιουργία της τεκμηρίωσης, με τη χρήση του προγράμματος javadoc.
    Τεκμηρίωση σε μορφή XML

    Προαιρετική άσκηση

    Με βάση τον κώδικα της κάρτας υλοποιήστε ένα παιγνίδι (π.χ. απόφυγε το χιόνι, ή μάζεψε τις μπάλες, ή πιάσε τον τάρανδο, κ.λπ.).

    Πληροφορίες για την άσκηση

    Ανάπτυξη διαδικτυακών εφαρμογών

    Περιεχόμενα

    Το μοντέλο αναφοράς OSI

    Φυσικό επίπεδο

    Επίπεδο σύνδεσης

    Επίπεδο δικτύου

    Πρωτόκολλα διαδικτύου: IPv4, IPv6, IPsec, ICMP

    IPv4

        0                   1                   2                   3   
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |Version|  IHL  |Type of Service|          Total Length         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |         Identification        |Flags|      Fragment Offset    |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |  Time to Live |    Protocol   |         Header Checksum       |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                       Source Address                          |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                    Destination Address                        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                    Options                    |    Padding    |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    

    Επίπεδο μεταφοράς

    Πρωτόκολλα διαδικτύου: TCP, UDP, …

    TCP

        0                   1                   2                   3   
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |          Source Port          |       Destination Port        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                        Sequence Number                        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                    Acknowledgment Number                      |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |  Data |           |U|A|P|R|S|F|                               |
       | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
       |       |           |G|K|H|T|N|N|                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |           Checksum            |         Urgent Pointer        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                    Options                    |    Padding    |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                             data                              |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    

    Επίπεδο συνόδου

    Πρωτόκολλα διαδικτύου: Sockets API

    Επίπεδο παρουσίασης

    (Σε παρένθεση σχετικά πρωτόκολλα του διαδικτύου)

    Επίπεδο εφαρμογής

    (Σε παρένθεση σχετικά πρωτόκολλα του διαδικτύου)

    Αρχιτεκτονική του παγκόσμιου ιστού

    Προσδιορισμός στοιχείων με URI

    URI = scheme ":" ["//" authority] path ["?" query] ["#" fragment]
    
    index.html
    https://www.dmst.aueb.gr/dds/
    https://www.google.com/search?q=AUEB
    https://www.aueb.gr/Hmerologio.pdf#page=3
    

    Το πρωτόκολλο HTTP

    Το πρωτόκολλο HTTP υποστηρίζει τις παρακάτω μεθόδους επικοινωνίας:

    Παράδειγμα HTTP

    Αίτηση

    GET /dds/ HTTP/1.1
    Host: www2.dmst.aueb.gr
    User-Agent: curl/7.71.1
    Accept: */*
    

    Απάντηση

    HTTP/1.1 200 OK
    Date: Sun, 08 Jan 2023 10:00:32 GMT
    Server: Apache/1.3.33 (Linux/RHEL)
    Content-Location: index.en.html
    Vary: negotiate,accept-language,accept-charset
    TCN: choice
    Last-Modified: Fri, 30 Dec 2022 21:03:52 GMT
    Accept-Ranges: bytes
    Content-Length: 22599
    Content-Type: text/html
    Content-Language: en
    

    Αίτημα HTTP στη Java

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.MalformedURLException;
    
    public class UrlRetriever {
        public static void main(String[] args) {
    	if (args.length != 1) {
    	    System.err.println("Usage: UrlRetriever URL");
    	    System.exit(1);
    	}
    
            URL url = null;
            try {
                // Make a request to the specified URL
                url = new URL(args[0]);
            } catch (MalformedURLException e) {
                    System.err.println("Invalid URL: " + e);
                    System.exit(1);
            }
    
            HttpURLConnection connection = null;
            try {
                connection = (HttpURLConnection)url.openConnection();
            } catch (ClassCastException e) {
                System.err.println("Specified protocol is not HTTP");
                System.exit(1);
            } catch (IOException e) {
                System.err.println("Connection error: " + e);
                System.exit(1);
            }
    
            try {
                connection.setRequestMethod("GET");
    
                // Get the response from the server
                int status = connection.getResponseCode();
                BufferedReader in = new BufferedReader(
                    new InputStreamReader(connection.getInputStream()));
                int c;
                StringBuilder content = new StringBuilder();
                while ((c = in.read()) != -1) {
                    content.append((char)c);
                }
                in.close();
    
                // Print the response
                System.out.println(content.toString());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    Χαρακτηριστικά της αρχιτεκτονικής REST

    Παραδείγματα αιτήσεων REST

    java UrlRetriever https://www.gutenberg.org/cache/epub/1342/pg1342.txt
    
    curl 'https://aviationweather.gov/api/data/metar?ids=LGAV&hours=48'
    curl -v -k "https://www.wikidata.org/w/api.php?action=wbgetentities&format=json&titles=Moon&sites=enwiki" |  jq .
    curl -A "Mozilla/5.0" 'http://telematics.oasa.gr/api/?act=getBusLocation&p1=1822'
    curl -LH "Accept: application/vnd.crossref.unixref+xml;q=1, application/rdf+json;q=0.5" https://doi.org/10.1126/science.169.3946.635
    
    curl --request POST -H "Authorization: Bearer $ROBBIE_API_KEY" --url http://robbie.dmst.aueb.gr:50135/completion --header "Content-Type: application/json" --data '{ "prompt": "You are a helpful Assistant responding to User queries. User: Which city is the capital of Germany?\nAssistant: Berlin\nWhich city is the capital of Greece?"}'
    
    curl https://api.openai.com/v1/engines/davinci/completions \
      -X POST \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer $OPENAI_API_KEY" \
      -d '{
        "prompt": "I can convert a String into an int in Java program by ",
        "max_tokens": 50
      }'
    

    Εξυπηρετητής ώρας HTTP στη Java

    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.InetSocketAddress;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    
    import com.sun.net.httpserver.HttpExchange;
    import com.sun.net.httpserver.HttpHandler;
    import com.sun.net.httpserver.HttpServer;
    
    public class TimeServer {
        static class GetHandler implements HttpHandler {
            @Override
            public void handle(HttpExchange exchange) throws IOException {
    
                var calendar = Calendar.getInstance();
                var dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss\n");
                byte[] response = dateFormat.format(calendar.getTime()).getBytes();
    
                // Set the response header and status code
                exchange.sendResponseHeaders(200, response.length);
    
                // Get the response body output stream
                OutputStream responseBody = exchange.getResponseBody();
    
                System.out.print(exchange.getRemoteAddress());
                responseBody.write(response);
                responseBody.close();
            }
        }
    
        public static void main(String[] args) throws Exception {
            // Create a server on port 8000
            HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
    
            server.createContext("/", new GetHandler()); // "GET /" handler
    
            server.start(); // Start serving requests
        }
    }
    

    Διαδικτυακές εφαρμογές στην πράξη

    Άσκηση: Επικοινωνία Πελάτη-Εξυπηρετητή

    Άσκηση 18

    Μπορείτε να κατεβάσετε το αντίστοιχο αρχείο και να στείλετε τους βαθμούς σας από τους δεσμούς που βρίσκονται στη σελίδα των ασκήσεων.

    Βιβλιογραφία

  • Rogers Candenhead. Πλήρες Εγχειρίδιο της Java 12. 8η Έκδοση. Εκδόσεις X. Γκιούρδα, 2023. Κεφ. 17, 20.
  • Ατομικές ασκήσεις και συμμετοχή

    Αρχείο των ασκήσεων και ηλεκτρονική παράδοση

    Οδηγίες

    Οδηγίες για την εκτέλεση, βαθμολογία και παράδοση των ασκήσεων υπάρχουν στην εισαγωγή του μαθήματος.

    Προθεσμίες παράδοσης

    Η ώρα παράδοσης είναι πάντα τοπική ώρα Ελλάδος.

    Άσκηση Ημερομηνία και ώρα παράδοσης
    1 Sun Oct 15 23:59:59 2023
    2 Tue Oct 17 23:59:59 2023
    3 Tue Oct 17 23:59:59 2023
    4 Sun Oct 29 23:59:59 2023
    5 Sun Oct 29 23:59:59 2023
    6 Sun Nov 5 23:59:59 2023
    16 Sun Nov 5 23:59:59 2023
    12 Sun Nov 12 23:59:59 2023
    18 Sun Nov 19 23:59:59 2023
    7 Tue Nov 28 23:59:59 2023
    8 Sun Dec 3 23:59:59 2023
    10 Sun Dec 10 23:59:59 2023
    9 Sun Dec 17 23:59:59 2023
    17 Sun Jan 7 23:59:59 2024

    Συχνές ερωτήσεις και απαντήσεις (FAQ)

    Περιεχόμενα

    Που θα βρω τεκμηρίωση για τις κλάσεις που υποστηρίζει η Java;

    Στον αντίστοιχο ιστότοπο της Oracle (https://docs.oracle.com/en/java/javase/index.html).

    Πως θα ρυθμίσω το Visal Studio Code για να παραδώσω τον τρόπο επίλυσης των ασκήσεων

    Διαβάστε την αντίστοιχη τεκμηρίωση στον οδηγό των ασκήσεων (https://docs.google.com/document/d/1-7XbmxX5ZhTrxFEAcoQcxQdqi2cnGeun/view) καθώς και το σχετικό βίντεο (https://youtu.be/crN7-EabhPs).

    Για κάποιο πολύ σοβαρό λόγο δεν μπόρεσα να παραδώσω την άσκηση στην ώρα της. Μπορώ να πάρω μια παράταση;

    Η προθεσμία παράδοσης της κάθε άσκησης είναι η τελευταία ημερομηνία στην οποία μπορείτε να παραδώσετε την άσκηση χωρίς επιπτώσεις στο βαθμό της. Καλό είναι να την παραδίδετε πριν το επόμενο μάθημα έτσι ώστε
    1. να μπορέσετε να ασχοληθείτε με την καινούρια όταν αυτή ανακοινωθεί
    2. να έχετε ένα περιθώριο χρόνου για να καλύψετε προσωπικά ή τεχνικά προβλήματα που μπορεί να εμφανιστούν
    Σε περίπτωση που δεν μπορέσατε να παραδώσετε την άσκηση μέσα στην προθεσμία, θα πρέπει να την παραδώσετε το συντομότερο δυνατό για να έχετε τη μικρότερη δυνατή επιβάρυνση στο βαθμό. Για λόγους διαφάνειας και αποτελεσματικότητας στη βαθμολόγηση αυτή γίνεται αυτόματα χωρίς να υπάρχει πρόβλεψη για εξαιρέσεις. Ο αριθμός όμως των ασκήσεων σας επιτρέπει να καλύψετε τη διαφορά στις επόμενες ασκήσεις.

    Πότε πρέπει να κατεβάζω ενημερωμένη έκδοση του αρχείου Jarpeb.jar;

    Στη σελίδα αυτή εμφανίζεται η τρέχουσα έκδοση και η ημερομηνία τελευταίας αλλαγής της κάθε άσκησης. Αν έχετε κατεβάσει το αρχείο πριν από την ημερομηνία τελευταίας αλλαγής της άσκησης που σας ενδιαφέρει ή αν η έκδοση της άσκησης στον υπολογιστή σας είναι προγενέστερη αυτής που περιέχει το αρχείο τότε θα πρέπει να κατεβάσετε νεώτερη έκδοση του αρχείου. Για να μπορέσετε να δείτε την έκδοση της άσκησης που έχετε στον υπολογιστή σας μπορείτε να τρέξετε την εντολή
    java -jar Exercise.jar -v <κωδικός μαθήματος> <κωδικός άσκησης> <ΑΜ φοιτητή>
    

    Μπορώ να ασχοληθώ με ασκήσεις που δεν έχουν ανακοινωθεί ακόμα;

    Ναι, αλλά με δική σας ευθύνη. Ασκήσεις που δεν έχουν ανακοινωθεί επίσημα στο μάθημα και για τις οποίες δεν έχει δωθεί ημερομηνία παράδοσης μπορεί να μην έχουν ελεγχθεί πλήρως, να βρίσκονται ακόμα υπό ανάπτυξη και να περιέχουν λάθη στην εκφώνηση και στη βαθμολόγηση. Ο βαθμός που θα καταχωρήσετε ισχύει, αλλά είναι πιθανό κατά την επίλυση να συναντήσετε προβλήματα που θα έχουν διορθωθεί μέχρι την επίσημη ανακοίνωση της άσκησης. Επίσης, σε ασκήσεις που δεν έχουν ανακοινωθεί, μπορεί οι βοηθοί του μαθήματος και οι επιβλέποντες στα εργαστήρια να μην μπορούν να σας βοηθήσουν.

    Γίνεται να υπολογιστούν στο μάθημα οι βαθμοί των ασκήσεων που είχα λάβει την περασμένη χρονιά;

    Δυστυχώς όχι, αυτό δε γίνεται. Κάθε χρόνο οι εκφωνήσεις των ασκήσεων και οι κωδικοί ελέγχου αλλάζουν. Η βαθμολογία των ασκήσεων ισχύει μόνο για την εξεταστική περίοδο του χειμερινού εξαμήνου και την πρόσθετη εξεταστική περίοδο του Σεπτεμβρίου του ίδιου έτους με αυτό στο οποίο έγιναν οι ασκήσεις.

    Ποιες είναι οι ημερομηνίες παράδοσης των ασκήσεων;

    Οι ημερομηνίες παράδοσης εμφανίζονται στη σελίδα αυτή. Για ασκήσεις που δεν έχουν ανακοινωθεί ακόμα σε μάθημα η ημερομηνία παράδοσης είναι ανοιχτή και συνεπώς δεν εμφανίζεται.

    Τι ρόλο παίζει το πεδίο "σχόλια" στη σελίδα παράδοσης της βαθμολογίας; Δεν έχω λάβει απάντηση σε κάποιο σχόλιο που είχα κάνει.

    Τα σχόλια απλώς καταγράφονται στη βάση δεδομένων της βαθμολογίας. Στην καλύτερη περίπτωση μπορεί να τα διαβάσει ο διδάσκων κατά τον υπολογισμό των βαθμών. Αν θέλετε απάντηση σε κάποιο σχόλιο να στείλετε κατευθείαν email στο διδάσκοντα μια και στη σελίδα παράδοσης δεν έχετε τη δυνατότητα να καταχωρήσετε τη διεύθυνσή σας για να μπορέσετε να λάβετε απάντηση.

    Πως ελέγχεται το ποιος υλοποιεί και ποιος καταχωρεί την άσκηση;

    Το πρόγραμμα Jarpeb καταχωρίζει στοιχεία που έχουν σχέση με την άσκηση, τον ΑΜ του φοιτητή ή της φοιτήτριας, τον τρόπο επίλυσης (όπως καταγράφεται από το Visual Studio Code) και το βαθμό. Επιπλέον κατά την καταχώρηση ο βαθμός και ο ΑΜ του φοιτητή συνδέονται με τη διεύθυνση IP του μηχανήματος που έκανε την καταχώρηση. Με τη χρήση στοιχείων ελέγχου οι διευθύνσεις IP αντιστοιχούνται σε συγκεκριμένους φοιτητές. Όπου διαπιστωθούν στοιχεία που δημιουργούν την εντύπωση πως μπορεί στην υλοποίηση να έχει αναμιχθεί τρίτος ή να έχει χρησιμοποιηθεί λογισμικό παραγωγικής τεχνητής νοημοσύνης, ο αντίστοιχος φοιτητής ή φοιτήτρια μπορεί να κληθεί για συμπληρωματική εξέταση.

    Επιτρέπεται η υλοποίηση και καταχώρηση ασκήσεων σε υπολογιστές εκτός του εργαστηρίου;

    Ναι, αλλά η υλοποίηση πρέπει να γίνεται από τον ίδιο το φοιτητή — απαγορεύεται αυστηρά η κάθε συνεργασία. Σε περιπτώσεις που έχουν βρεθεί στοιχεία που δείχνουν πως έχει υπάρξει συνεργασία, έχει ζητηθεί απο τους φοιτητές να επαναλάβουν την άσκηση στο εργαστήριο. Σε περίπτωση υποτροπής όλες οι αντίστοιχες ασκήσεις μηδενίζονται στο τέλος του χρόνου. Επίσης, δε μπορεί να σας παρασχεθεί βοήθεια σχετικά με την εγκατάσταση και διαμόρφωση του περιβάλλοντος εργασίας της Java στον υπολογιστή σας - ειδικά για το θέμα της εμφάνισης των ελληνικών χαρακτήρων στην οθόνη σας.

    Έχω καταχωρήσει το βαθμό μου αλλά δε βλέπω ούτε το βαθμό ούτε την καταχώρηση στις αντίστοιχες σελίδες. Γιατί;

    Ο έλεγχος των καταχωρήσεων και η ενημέρωση των βαθμών γίνονται σε περιοδικά διαστήματα. Κοιτάξτε την ημερομηνία τελευταίας ενημέρωσης που εμφανίζεται στο κάτω μέρος της σελίδας. Αν είναι μικρότερη από την ημερομηνία που καταχωρήσατε την άσκηση, τότε σωστά δεν εμφανίζονται τα στοιχεία της καταχώρησής σας.

    Έχω καταχωρήσει το βαθμό μου παρατηρώ πως η εκφώνηση της άσκησης έχει αλλάξει. Τι πρέπει να κάνω;

    Οι ασκήσεις που καταχωρούνται με επιτυχία κατοχυρώνονται. Δε χρειάζεται να κάνετε απολύτως τίποτα, εκτός αν θέλετε να ξανακάνετε την άσκηση με τη νέα εκφώνηση για να την καταλάβετε καλύτερα ή για να πάρετε υψηλότερο βαθμό.

    Γιατί σε υπολογιστή με λειτουργικό σύστημα Windows η εκφώνηση εμφανίζεται με περίεργους χαρακτήρες;

    Δοκιμάστε να δώσετε την εντολή
    chcp 737
    
    πριν την εκτέλεση του Exercise.jar.

    Δοκιμάστε να αλλάξετε τη γραμματοσειρά του παραθύρου σε Lucida Console (κάντε κλικ πάνω αριστερά - Properties - Font).

    Αν ο υπολογιστής σας τρέχει Windows 7–10 με αγγλικές ρυθμίσεις, θα πρέπει να τις ρυθμίσετε στα ελληνικά, με την παρακάτω διαδικασία:
    Control Panel - Region (and Language) - Administrative - Change System Locale και από εκεί επιλέγουμε "Greek (Greece)".

    Σε υπολογιστή με λειτουργικό σύστημα Windows και Internet Explorer το αρχείο Exercise.jar σώζεται ως Exercise.zip. Τι να κάνω;

    Το πρόβλημα οφείλεται σε δυσλειτουργία (bug) του Internet Explorer. Κατά τη διαδικασία της φύλαξης επιλέξτε από την επιλογή "Save as type" το "All Files" και βεβαιωθείτε πως στην επιλογή "File name" γράφει "Exercise.jar". Εναλλακτικά, χρησιμοποιείστε έναν άλλο φυλλομετρητή όπως τον Firefox (http://www.mozilla.com/en-US/firefox/).

    Γιατί σε υπολογιστή με λειτουργικό σύστημα Linux η εκφώνηση εμφανίζεται με περίεργους χαρακτήρες;

    Καταρχήν, μπράβο που πειραματίζεστε με διαφορετικά λειτουργικά συστήματα! Δοκιμάστε να δώσετε την εντολή
    export LANG=el_GR
    
    πριν την εκτέλεση του Exercise.jar.

    Τι να κάνω αν μου εμφανιστεί το μήνυμα «Δεν βρέθηκε εγκαταστημένος μεταγλωττιστής»;

    Φροντίστε να θέσετε σωστά τις μεταβλητές περιβάλλοντος, όπως αναφέρεται στον οδηγό των ασκήσεων (https://docs.google.com/document/d/1-7XbmxX5ZhTrxFEAcoQcxQdqi2cnGeun/view).

    Τι να κάνω αν μου εμφανιστεί το μήνυμα «Can not find an installed compiler»;

    Φροντίστε να θέσετε σωστά τις μεταβλητές περιβάλλοντος, όπως αναφέρεται στον οδηγό των ασκήσεων (https://docs.google.com/document/d/1-7XbmxX5ZhTrxFEAcoQcxQdqi2cnGeun/view).

    Γιατί ο κωδικός που καταχώρισα δεν έγινε δεκτός από το σύστημα;

    1. Βεβαιωθείτε πως τρέχετε την έκδοση 1.7 της Java ή νεώτερη (βλ. προηγούμενη απάντηση).
    2. Βεβαιωθείτε πως τρέχετε τη φετινή έκδοση του συστήματος Jarpeb. Οι κωδικοί ασκήσεων του προηγούμενου χρόνου δεν ισχύουν.

      Μπορείτε να εκτελέσετε την εντολή

      java -jar Exercise.jar -version
      
      για να δείτε την έκδοση του συστήματος που έχετε στα χέρια σας. Η ημερομηνία της έκδοσης δεν πρέπει να είναι παλαιότερη από το Σεπτέμβριο του αντίστοιχου ακαδημαϊκού έτους.

    Σωστά καταχωρημένες ασκήσεις

    Ξ§ΟΞΏΞ½ΞΏΟƒΟ†ΟΞ±Ξ³Ξ Ξ´Ξ± Ξ‘Ξœ Άσκηση Ξ’Ξ±ΞΈΞΌΟŒΟ‚ Διεύθυνση IP Ξ‘Ξ½Ξ±Ξ³Ξ½Ο‰ΟΞΉΟƒΟ„ΞΉΞΊΟŒ
    2023-11-08T21:29:18 8220160 12 10 [...].4.164.[...]
    2023-10-13T18:30:44 8220210 3 10 [...].46.253.[...]
    2023-11-02T16:06:11 8220229 16 10 [...].140.30.[...]
    2023-10-17T20:35:33 8220088 3 10 [...].168.1.[...]
    2023-10-15T16:41:56 8220101 2 10 [...].73.158.[...]
    2024-02-12T20:49:08 8150104 14 10 [...].54.243.[...]
    2023-11-23T22:32:12 8220115 7 10 [...].49.177.[...]
    2023-10-30T10:03:53 8220061 6 10 [...].86.146.[...]
    2023-12-26T16:05:21 8220089 17 10 [...].203.164.[...]
    2023-12-09T20:15:38 8220119 10 10 [...].58.137.[...]
    2023-12-03T23:59:50 8220139 8 6 [...].242.235.[...]
    2023-11-18T01:08:09 8210063 18 10 [...].74.120.[...]
    2023-11-28T16:48:00 8220064 8 7 [...].26.37.[...]
    2023-12-24T23:09:46 8220074 17 10 [...].64.239.[...]
    2023-10-25T22:06:57 8220116 5 10 [...].168.1.[...]
    2023-11-16T12:28:32 8220084 7 10 [...].176.255.[...]
    2023-10-18T18:14:29 8200119 12 10 [...].86.176.[...]
    2023-12-12T19:16:57 8210003 9 10 [...].103.219.[...]
    2023-11-01T11:18:22 8170199 6 9 [...].92.171.[...]
    2023-10-10T23:28:15 8190304 4 10 [...].44.146.[...]
    2023-12-03T19:23:53 8220098 8 10 [...].66.38.[...]
    2023-12-10T14:43:03 8220146 10 10 [...].70.54.[...]
    2023-11-10T15:56:09 8220126 12 10 [...].92.82.[...]
    2023-12-12T14:51:06 8220051 9 10 [...].26.50.[...]
    2023-10-16T21:48:18 8210003 4 10 [...].92.136.[...]
    2023-12-19T15:41:44 8220078 9 10 [...].6.162.[...]
    2023-11-16T14:49:20 8220035 7 10 [...].55.11.[...]
    2023-11-03T20:52:09 8220078 16 10 [...].65.52.[...]
    2023-11-27T21:48:43 8220061 8 10 [...].86.134.[...]
    2023-11-02T10:26:58 8220066 16 10 [...].84.190.[...]
    2023-11-19T22:48:00 8220069 7 10 [...].177.13.[...]
    2023-11-20T20:33:39 8190091 7 10 [...].86.202.[...]
    2024-02-12T23:27:46 8190334 10 10 [...].229.158.[...]
    2023-11-03T16:51:27 8170206 1 8 [...].74.14.[...]
    2023-10-22T12:56:36 8220101 4 10 [...].73.158.[...]
    2023-12-19T22:09:27 8220004 13 10 [...].66.38.[...]
    2023-11-14T09:36:24 8220116 18 10 [...].168.1.[...]
    2023-11-29T09:52:34 8220147 8 10 [...].237.14.[...]
    2023-11-29T18:49:43 8220159 8 10 [...].168.0.[...]
    2023-11-12T16:30:40 8210070 12 6 [...].4.177.[...]
    2023-11-04T15:29:19 8190304 6 10 [...].44.146.[...]
    2023-12-09T16:43:38 8220073 10 10 [...].210.125.[...]
    2023-10-09T21:26:26 8190134 2 10 [...].64.180.[...]
    2023-10-31T14:27:18 8220077 5 10 [...].65.88.[...]
    2023-12-18T21:35:16 8220030 17 10 [...].242.23.[...]
    2024-02-11T12:16:47 8220056 7 10 [...].177.20.[...]
    2023-12-03T21:18:17 8210079 8 10 [...].140.120.[...]
    2023-10-29T20:27:56 8210089 4 10 [...].6.0.[...]
    2023-12-17T02:16:37 8220137 9 10 [...].6.3.[...]
    2023-10-20T19:20:25 8220026 5 10 [...].177.156.[...]
    2023-12-01T15:54:35 8220005 8 10 [...].70.57.[...]
    2023-12-24T19:28:10 8220056 17 10 [...].210.42.[...]
    2023-12-03T17:43:03 8220150 8 10 [...].168.1.[...]
    2023-10-13T19:07:49 8220043 3 10 [...].177.150.[...]
    2023-10-31T20:29:31 8220144 6 10 [...].66.136.[...]
    2023-11-03T15:10:31 8220155 6 10 [...].168.1.[...]
    2023-12-03T22:37:28 8220026 8 10 [...].166.125.[...]
    2024-02-14T22:35:31 8070147 10 8 [...].73.7.[...]
    2023-10-12T11:10:42 8220146 1 4 [...].251.255.[...]
    2023-10-16T12:57:02 0 2 9 [...].64.77.[...]
    2023-11-28T18:24:10 8220032 8 10 [...].242.226.[...]
    2023-10-14T16:49:13 8200119 7 10 [...].86.176.[...]
    2023-12-08T18:22:33 8180083 8 10 [...].74.233.[...]
    2023-10-12T19:55:23 8210101 3 10 [...].66.36.[...]
    2023-11-28T18:15:17 8220121 7 10 [...].203.246.[...]
    2023-11-02T15:20:00 8220009 6 10 [...].87.186.[...]
    2023-12-08T16:43:50 8220036 10 10 [...].203.218.[...]
    2023-10-16T20:03:03 8220132 3 10 [...].70.57.[...]
    2023-10-29T18:56:18 8200220 5 8 [...].168.0.[...]
    2023-10-15T21:27:05 8220089 2 10 [...].203.233.[...]
    2023-12-07T22:05:04 8220144 10 10 [...].66.136.[...]
    2023-11-08T18:13:24 8220097 12 10 [...].203.212.[...]
    2023-10-18T15:16:57 8220043 7 10 [...].210.39.[...]
    2023-10-22T04:30:49 8180083 3 10 [...].59.224.[...]
    2023-11-12T00:28:55 8220015 12 5 [...].71.169.[...]
    2023-11-15T15:53:01 8220147 18 10 [...].66.57.[...]
    2023-10-22T23:51:45 8190334 2 10 [...].129.28.[...]
    2023-11-12T20:40:46 8220056 12 10 [...].177.144.[...]
    2023-10-10T21:46:13 8150104 1 10 [...].66.58.[...]
    2023-11-29T17:43:13 8220118 18 10 [...].38.139.[...]
    2023-10-23T20:23:30 8220151 3 9 [...].131.75.[...]
    2023-12-19T13:53:06 8200119 17 10 [...].86.178.[...]
    2023-11-26T20:53:56 8220073 7 10 [...].210.125.[...]
    2023-10-13T12:40:17 8220027 3 10 [...].72.119.[...]
    2024-01-04T18:13:22 8220147 14 10 [...].69.97.[...]
    2023-10-28T23:00:25 8220157 5 10 [...].190.83.[...]
    2023-11-08T18:12:29 8220097 12 8 [...].203.212.[...]
    2023-10-25T23:45:31 8220128 5 10 [...].242.137.[...]
    2023-11-22T22:50:14 8190342 1 5 [...].242.227.[...]
    2023-11-07T21:36:39 8220170 12 10 [...].75.255.[...]
    2023-12-12T21:21:29 8220164 9 10 [...].86.141.[...]
    2023-11-28T21:32:25 8210127 8 10 [...].242.234.[...]
    2023-10-12T11:14:08 8220087 2 10 [...].70.82.[...]
    2023-11-19T22:48:34 8220089 18 10 [...].71.4.[...]
    2023-10-12T23:38:22 8200119 6 10 [...].86.176.[...]
    2023-10-20T12:21:30 8220093 4 10 [...].168.1.[...]
    2024-02-11T22:33:42 8190134 10 6 [...].203.82.[...]
    2023-11-05T11:40:34 8220020 6 10 [...].242.234.[...]
    2023-10-31T20:16:34 8220037 16 10 [...].69.126.[...]
    2023-11-19T19:00:59 8220024 18 10 [...].203.211.[...]
    2023-12-10T23:33:40 8180083 10 10 [...].74.233.[...]
    2023-11-03T10:49:02 8220167 16 10 [...].38.242.[...]
    2023-10-17T23:59:46 8220103 1 2 [...].6.0.[...]
    2024-01-16T00:23:07 8070147 7 10 [...].131.228.[...]
    2023-10-12T20:57:08 8220063 3 10 [...].138.149.[...]
    2023-12-10T19:51:16 8220066 10 10 [...].84.198.[...]
    2023-11-08T00:17:03 8220116 12 10 [...].168.1.[...]
    2023-11-04T15:38:30 8220035 6 8 [...].69.118.[...]
    2023-10-12T10:21:05 8220146 1 2 [...].251.255.[...]
    2023-10-27T18:12:58 8180195 5 7 [...].54.207.[...]
    2023-12-26T18:38:57 8180063 17 10 [...].219.37.[...]
    2023-12-16T11:14:28 8220168 9 10 [...].251.255.[...]
    2023-11-02T23:03:59 8190153 6 10 [...].251.52.[...]
    2023-11-03T11:44:17 8220133 16 10 [...].168.1.[...]
    2023-12-16T16:01:44 8200119 9 10 [...].86.178.[...]
    2023-11-12T17:41:30 8220119 12 10 [...].64.23.[...]
    2023-11-17T12:07:31 8200087 7 10 [...].66.36.[...]
    2023-11-01T19:35:04 8220144 16 10 [...].71.4.[...]
    2023-10-25T20:10:43 8220155 5 10 [...].168.0.[...]
    2023-12-13T15:51:24 8210213 17 10 [...].65.88.[...]
    2024-01-17T12:52:28 8220226 2 10 [...].147.202.[...]
    2024-02-08T22:21:57 8190330 16 10 [...].84.200.[...]
    2023-10-31T17:02:21 8220225 6 10 [...].140.3.[...]
    2023-10-31T19:49:45 8220115 6 10 [...].49.177.[...]
    2023-11-14T14:33:03 8220050 15 10 [...].26.36.[...]
    2023-11-03T17:01:56 8220038 6 10 [...].167.164.[...]
    2023-11-01T19:47:06 8220095 16 10 [...].70.57.[...]
    2023-12-03T19:38:10 8220027 8 10 [...].131.231.[...]
    2023-10-15T19:10:10 8210167 3 10 [...].251.52.[...]
    2023-10-17T23:34:55 8220122 3 10 [...].66.136.[...]
    2023-11-02T15:01:47 8220121 16 10 [...].203.182.[...]
    2024-01-05T19:27:14 8220153 17 10 [...].178.245.[...]
    2024-02-12T11:07:02 8220103 10 10 [...].242.227.[...]
    2023-12-09T01:52:05 8220087 10 10 [...].64.136.[...]
    2023-11-10T14:59:21 8180195 12 10 [...].177.119.[...]
    2023-12-08T14:22:10 8220064 10 8 [...].26.37.[...]
    2023-12-14T12:17:57 8220210 9 10 [...].74.18.[...]
    2023-10-19T12:30:43 8220147 4 10 [...].26.70.[...]
    2023-10-31T20:27:17 8220111 16 10 [...].167.62.[...]
    2023-10-16T20:48:50 8220035 3 10 [...].69.118.[...]
    2023-10-24T23:17:50 8220059 4 2 [...].251.52.[...]
    2023-12-10T23:30:03 8190333 10 5 [...].168.1.[...]
    2023-11-01T20:39:12 8220072 16 10 [...].70.57.[...]
    2023-11-19T14:14:16 8220157 18 10 [...].190.13.[...]
    2023-11-23T09:57:02 8220155 7 10 [...].168.0.[...]
    2023-12-06T21:46:11 8220133 10 10 [...].168.1.[...]
    2023-12-11T17:59:09 8220064 9 10 [...].26.37.[...]
    2023-11-21T19:00:43 8220024 7 10 [...].66.38.[...]
    2023-11-30T13:35:24 8220089 8 10 [...].203.224.[...]
    2024-01-10T13:48:56 8220083 3 10 [...].156.60.[...]
    2024-01-17T11:47:30 8200232 9 10 [...].84.237.[...]
    2023-12-20T17:22:08 8220055 17 9 [...].103.239.[...]
    2023-10-18T17:45:55 8220023 4 10 [...].43.40.[...]
    2023-12-13T14:37:37 8190153 9 10 [...].251.52.[...]
    2023-12-10T18:01:44 8220071 10 6 [...].74.153.[...]
    2023-10-13T19:55:54 8190091 1 8 [...].65.40.[...]
    2023-10-30T00:02:55 8190244 4 10 [...].70.57.[...]
    2023-11-02T17:29:12 8220130 6 10 [...].168.0.[...]
    2023-10-20T19:48:38 8210127 4 10 [...].190.58.[...]
    2023-11-01T20:27:31 8200066 2 6 [...].87.65.[...]
    2023-10-18T17:21:40 8220074 4 10 [...].237.28.[...]
    2023-11-28T16:47:17 8220064 8 7 [...].26.37.[...]
    2023-10-30T21:03:31 8220084 16 10 [...].59.217.[...]
    2024-01-15T22:07:01 8220001 9 10 [...].55.219.[...]
    2023-11-12T17:48:43 8210167 18 10 [...].210.179.[...]
    2024-01-24T12:53:18 8220071 9 2 [...].74.149.[...]
    2023-11-17T13:16:44 8220072 7 10 [...].251.255.[...]
    2023-10-12T13:16:08 8220146 1 3 [...].203.131.[...]
    2023-12-05T03:43:28 8210089 8 10 [...].242.137.[...]
    2023-11-19T16:17:35 8220158 12 10 [...].237.94.[...]
    2023-10-13T15:06:18 8210217 3 10 [...].87.17.[...]
    2023-10-24T17:01:06 8220121 4 10 [...].203.223.[...]
    2023-10-31T17:38:23 8220107 6 10 [...].242.187.[...]
    2024-01-15T23:13:39 8220001 10 10 [...].55.219.[...]
    2024-02-12T11:58:46 8180001 2 6 [...].217.165.[...]
    2023-10-13T11:03:29 8220115 2 10 [...].49.62.[...]
    2023-12-07T22:48:47 8220102 10 10 [...].92.212.[...]
    2023-10-16T18:57:19 8220076 3 10 [...].168.1.[...]
    2023-11-22T14:22:40 8180195 7 9 [...].74.238.[...]
    2023-10-15T19:33:36 8220229 2 10 [...].43.80.[...]
    2023-11-06T21:44:32 8220017 16 10 [...].177.151.[...]
    2023-11-08T21:33:22 8220146 12 10 [...].139.212.[...]
    2023-10-14T19:01:33 8220034 3 10 [...].58.194.[...]
    2023-10-16T20:32:06 8220023 3 10 [...].43.40.[...]
    2023-11-01T11:53:48 8220051 6 10 [...].242.226.[...]
    2023-11-03T23:18:24 8220093 16 10 [...].168.1.[...]
    2023-10-26T22:52:08 8220066 4 10 [...].84.190.[...]
    2024-01-08T23:47:48 8220128 15 10 [...].140.88.[...]
    2023-11-19T23:22:01 8220100 18 10 [...].251.52.[...]
    2023-12-10T20:17:38 8220092 10 10 [...].168.2.[...]
    2023-12-05T06:40:19 8220023 10 10 [...].4.169.[...]
    2023-10-29T22:18:40 8220103 5 8 [...].6.0.[...]
    2023-10-17T12:38:21 8220008 3 10 [...].26.24.[...]
    2024-02-11T22:39:25 8220103 12 10 [...].242.227.[...]
    2023-10-13T23:14:24 8220102 3 10 [...].246.133.[...]
    2023-11-14T22:23:59 8220116 7 10 [...].168.1.[...]
    2023-10-24T13:51:06 8220012 4 10 [...].131.255.[...]
    2023-12-08T06:46:30 8200220 10 8 [...].168.1.[...]
    2023-10-15T18:56:21 8210003 3 10 [...].92.136.[...]
    2023-11-12T16:50:20 8210070 12 10 [...].4.177.[...]
    2023-10-15T19:31:40 8220120 3 10 [...].167.126.[...]
    2023-10-17T12:09:41 8220010 2 10 [...].26.70.[...]
    2023-10-21T13:22:16 8220022 7 10 [...].6.74.[...]
    2023-10-14T01:04:55 8220008 2 10 [...].84.242.[...]
    2023-12-03T21:58:55 8220020 8 10 [...].86.137.[...]
    2023-10-31T17:11:44 8190156 5 10 [...].26.62.[...]
    2023-11-16T22:02:03 8220126 18 10 [...].92.82.[...]
    2023-12-10T18:22:06 8220071 10 8 [...].74.153.[...]
    2023-11-02T10:35:18 8220134 16 10 [...].70.57.[...]
    2023-10-25T20:39:43 8220150 5 10 [...].168.0.[...]
    2024-02-12T12:29:40 8180001 6 10 [...].217.165.[...]
    2023-11-19T23:09:35 8220100 18 10 [...].251.52.[...]
    2023-11-18T18:03:48 8220225 18 10 [...].140.65.[...]
    2024-02-06T19:11:56 8220083 3 10 [...].130.141.[...]
    2023-11-19T13:55:10 8220120 18 10 [...].167.126.[...]
    2023-12-12T23:51:28 8220128 9 10 [...].58.193.[...]
    2023-11-09T11:07:10 8220036 16 10 [...].168.2.[...]
    2023-12-03T20:32:04 8200087 8 7 [...].210.101.[...]
    2023-12-17T22:06:51 8220035 9 0 [...].176.150.[...]
    2024-01-14T18:34:42 8220083 15 9 [...].130.130.[...]
    2023-11-08T11:44:36 8170199 15 10 [...].103.107.[...]
    2023-11-24T02:14:37 8220210 7 10 [...].74.56.[...]
    2023-12-13T11:39:54 8220100 9 10 [...].251.52.[...]
    2023-11-22T19:57:18 8210092 7 9 [...].167.47.[...]
    2023-12-19T21:33:20 8220120 17 10 [...].167.126.[...]
    2023-11-30T12:33:44 8220022 8 10 [...].168.1.[...]
    2023-10-16T20:12:14 8190091 2 10 [...].65.40.[...]
    2023-10-13T14:58:04 8220115 3 10 [...].219.78.[...]
    2023-10-23T19:53:43 8210092 4 10 [...].237.29.[...]
    2023-12-15T12:38:41 8220107 9 10 [...].58.195.[...]
    2023-10-17T18:38:30 8200038 3 9 [...].26.6.[...]
    2023-11-03T12:39:40 8210217 6 10 [...].203.34.[...]
    2023-11-26T23:00:12 8220038 7 10 [...].167.155.[...]
    2023-10-18T21:55:10 8220133 5 10 [...].168.1.[...]
    2023-11-10T16:23:41 8190304 18 10 [...].44.146.[...]
    2023-12-09T23:20:05 8220137 10 10 [...].87.148.[...]
    2023-10-25T21:26:13 8180083 5 10 [...].74.115.[...]
    2023-10-31T21:59:17 8210127 16 10 [...].6.0.[...]
    2023-12-23T16:08:27 8200107 17 10 [...].73.148.[...]
    2023-10-12T13:08:03 8220169 1 5 [...].26.75.[...]
    2023-12-10T18:36:07 8220047 10 10 [...].246.181.[...]
    2023-10-28T20:19:26 8220065 4 10 [...].92.156.[...]
    2023-11-18T18:28:27 8220035 18 10 [...].55.11.[...]
    2023-12-19T22:54:20 8210101 17 10 [...].66.36.[...]
    2023-10-10T20:06:49 8220226 1 10 [...].147.77.[...]
    2023-10-12T14:36:34 8200119 2 10 [...].86.176.[...]
    2023-11-14T22:39:34 8140109 7 10 [...].131.232.[...]
    2023-11-12T16:53:02 8220120 12 10 [...].167.126.[...]
    2023-12-03T19:01:04 8220154 8 10 [...].73.173.[...]
    2024-01-02T21:22:17 8220138 10 8 [...].10.75.[...]
    2023-10-30T20:23:12 8220061 16 10 [...].86.146.[...]
    2023-12-11T16:02:43 8180078 8 6 [...].166.63.[...]
    2023-10-26T11:51:38 8200087 4 10 [...].66.36.[...]
    2023-10-29T22:48:11 8220047 5 10 [...].4.136.[...]
    2023-10-13T13:41:59 8220081 2 10 [...].86.150.[...]
    2023-11-09T19:13:47 8220047 12 10 [...].70.57.[...]
    2023-10-25T21:29:03 8220116 4 8 [...].168.1.[...]
    2023-10-24T17:09:41 8210101 4 10 [...].66.36.[...]
    2023-10-29T17:37:09 8220032 6 10 [...].6.1.[...]
    2023-12-14T22:03:42 8190156 9 10 [...].74.228.[...]
    2023-10-20T19:44:35 8220056 4 10 [...].177.5.[...]
    2023-11-05T17:28:35 8220076 6 10 [...].168.1.[...]
    2023-10-18T20:38:39 8220111 5 10 [...].167.62.[...]
    2023-12-13T17:59:14 8220121 10 10 [...].203.147.[...]
    2024-01-09T11:39:42 8220020 17 10 [...].246.243.[...]
    2023-11-17T19:48:22 8220015 18 10 [...].71.169.[...]
    2023-11-03T04:31:34 8220069 6 10 [...].49.188.[...]
    2023-11-12T17:39:44 8200107 12 10 [...].71.109.[...]
    2023-12-12T12:03:14 8170199 13 5 [...].103.107.[...]
    2023-10-10T18:42:57 8220134 1 10 [...].70.57.[...]
    2023-10-16T21:37:10 8220115 4 10 [...].219.78.[...]
    2023-10-19T19:43:18 8210092 3 10 [...].237.29.[...]
    2023-10-28T04:39:01 8220023 5 10 [...].74.15.[...]
    2023-11-06T19:50:01 8170206 4 10 [...].75.24.[...]
    2023-12-10T23:36:57 8190333 10 6 [...].168.1.[...]
    2023-10-19T00:20:02 8220128 4 10 [...].242.138.[...]
    2023-11-01T00:18:35 8220008 16 10 [...].58.138.[...]
    2024-01-14T17:25:28 8220154 18 10 [...].235.106.[...]
    2023-11-02T00:19:20 8220024 16 10 [...].66.38.[...]
    2023-10-14T22:56:47 8190330 2 10 [...].71.210.[...]
    2023-10-11T01:13:33 8190134 3 10 [...].64.180.[...]
    2023-11-30T01:34:51 8220128 8 10 [...].58.194.[...]
    2023-11-12T15:20:25 8220150 12 10 [...].168.0.[...]
    2023-11-17T18:52:41 8210003 18 10 [...].92.89.[...]
    2023-12-20T23:28:36 8220128 17 10 [...].140.88.[...]
    2023-11-08T14:14:34 8170199 12 2 [...].103.107.[...]
    2023-10-30T19:49:17 8220168 5 10 [...].237.218.[...]
    2023-12-06T13:35:23 8220059 10 6 [...].251.52.[...]
    2023-11-22T12:06:24 8220056 18 10 [...].177.144.[...]
    2023-12-13T18:04:26 8210101 9 10 [...].66.36.[...]
    2023-12-09T00:30:23 8220062 10 8 [...].168.1.[...]
    2023-10-16T17:35:48 8220078 2 10 [...].6.0.[...]
    2023-10-14T20:58:21 8220001 2 10 [...].69.52.[...]
    2023-12-08T17:21:29 8210061 8 10 [...].58.226.[...]
    2023-12-03T12:12:51 8220092 8 10 [...].74.46.[...]
    2023-11-04T16:26:59 8220073 16 10 [...].103.103.[...]
    2023-12-10T21:09:43 8220089 10 10 [...].66.57.[...]
    2023-11-03T15:53:41 8220028 6 10 [...].168.1.[...]
    2023-11-22T15:40:22 8220093 7 10 [...].55.102.[...]
    2023-10-26T12:16:53 8180063 1 10 [...].43.102.[...]
    2023-11-12T12:17:30 8200087 12 10 [...].66.36.[...]
    2023-11-02T20:10:13 8220059 6 10 [...].251.52.[...]
    2023-12-08T17:15:49 8220122 10 10 [...].66.136.[...]
    2023-10-14T14:39:40 8220137 3 10 [...].167.103.[...]
    2023-11-19T23:47:01 8220020 18 10 [...].49.56.[...]
    2023-12-01T12:10:55 8170206 3 8 [...].75.24.[...]
    2023-10-27T23:19:31 8220035 4 10 [...].69.118.[...]
    2023-10-30T00:06:53 8220118 5 10 [...].38.139.[...]
    2023-10-31T12:28:33 8220119 6 10 [...].26.56.[...]
    2023-11-11T14:34:46 8220134 12 10 [...].70.57.[...]
    2023-11-12T23:58:01 8220158 12 6 [...].237.94.[...]
    2023-12-17T22:07:02 8220035 9 2 [...].176.150.[...]
    2023-10-12T21:40:28 8220232 3 10 [...].242.245.[...]
    2023-10-17T20:50:28 8220029 3 10 [...].6.196.[...]
    2023-11-08T11:32:25 8170199 15 9 [...].103.107.[...]
    2023-10-27T18:17:25 8180195 5 10 [...].54.207.[...]
    2023-11-03T16:16:12 8220094 16 10 [...].71.169.[...]
    2023-10-28T02:42:11 8220035 5 4 [...].69.118.[...]
    2023-11-12T18:59:16 8220065 12 10 [...].210.120.[...]
    2024-02-12T22:45:20 8070147 9 2 [...].131.142.[...]
    2023-12-20T21:38:45 8190156 17 10 [...].74.228.[...]
    2023-11-16T14:22:27 8170206 7 10 [...].74.39.[...]
    2023-10-14T22:19:12 8220035 2 10 [...].69.118.[...]
    2023-12-24T15:48:54 8220064 17 10 [...].176.113.[...]
    2023-12-03T22:01:31 8220035 8 4 [...].55.151.[...]
    2023-11-10T15:15:29 8210212 18 10 [...].84.161.[...]
    2023-10-15T17:12:39 8220101 3 10 [...].73.158.[...]
    2023-12-10T18:28:16 8220071 10 8 [...].74.153.[...]
    2023-10-20T14:20:44 8180195 2 8 [...].59.224.[...]
    2023-11-15T15:25:10 8200231 12 6 [...].140.29.[...]
    2023-12-05T23:25:19 8150066 8 10 [...].1.208.[...]
    2023-11-15T21:21:48 8220063 18 10 [...].138.148.[...]
    2023-10-31T20:21:50 8220034 6 10 [...].242.187.[...]
    2023-11-13T17:36:15 8170199 9 2 [...].103.107.[...]
    2023-10-13T17:50:30 8220072 4 10 [...].70.57.[...]
    2023-11-10T16:57:29 8210213 12 10 [...].251.255.[...]
    2023-11-19T21:40:19 8210127 18 10 [...].190.58.[...]
    2023-10-13T00:32:15 8220087 3 10 [...].70.82.[...]
    2023-10-23T20:43:45 8220130 5 10 [...].168.0.[...]
    2023-10-27T13:14:53 8220008 5 10 [...].26.76.[...]
    2023-10-13T12:57:08 8220027 2 10 [...].72.119.[...]
    2023-11-26T21:46:13 8210229 7 9 [...].64.237.[...]
    2023-11-29T21:16:51 8220030 8 10 [...].107.110.[...]
    2023-11-19T20:09:47 8220074 18 10 [...].55.98.[...]
    2023-10-28T02:38:51 8220035 5 8 [...].69.118.[...]
    2023-11-07T23:44:13 8220075 12 10 [...].66.38.[...]
    2023-11-01T19:21:50 8210092 16 10 [...].167.47.[...]
    2023-10-29T20:18:43 8220078 4 10 [...].6.0.[...]
    2023-10-24T20:12:43 8220225 5 10 [...].140.3.[...]
    2023-11-18T22:44:40 8070147 1 8 [...].74.44.[...]
    2023-11-18T16:50:54 8220164 18 10 [...].86.141.[...]
    2023-12-10T19:24:41 8220035 10 8 [...].55.151.[...]
    2023-12-19T01:38:14 8220075 17 10 [...].84.190.[...]
    2023-12-03T02:04:21 8200119 8 10 [...].86.178.[...]
    2023-11-01T19:33:13 8220134 6 10 [...].70.57.[...]
    2023-10-16T17:32:22 8220162 2 10 [...].140.6.[...]
    2023-10-14T15:47:23 8220129 2 10 [...].84.181.[...]
    2023-10-20T18:28:07 8220038 4 10 [...].167.157.[...]
    2023-10-12T13:15:38 8220050 3 10 [...].26.36.[...]
    2023-10-13T21:12:31 8220069 2 10 [...].246.133.[...]
    2023-10-12T23:40:11 8220009 2 10 [...].87.189.[...]
    2023-11-14T16:43:20 8220097 7 10 [...].176.114.[...]
    2023-10-23T20:30:27 8210092 5 10 [...].237.29.[...]
    2023-12-19T13:19:46 8220005 17 10 [...].70.57.[...]
    2023-10-17T23:33:59 8220077 2 10 [...].168.1.[...]
    2024-01-07T02:09:49 8220015 4 10 [...].74.34.[...]
    2023-12-11T00:10:34 8220050 10 10 [...].54.245.[...]
    2023-11-14T21:11:18 8220021 18 10 [...].6.148.[...]
    2023-12-14T14:40:54 8220122 9 10 [...].66.136.[...]
    2023-12-27T13:58:32 8200087 17 10 [...].84.223.[...]
    2023-10-13T13:09:20 8200232 3 10 [...].84.237.[...]
    2023-12-02T13:25:11 8220119 8 10 [...].210.118.[...]
    2023-11-19T17:20:25 8070147 3 10 [...].74.37.[...]
    2023-12-21T19:35:11 8210092 17 10 [...].66.56.[...]
    2023-12-19T18:59:35 8220037 17 10 [...].55.152.[...]
    2023-12-02T20:32:42 8220069 8 10 [...].66.52.[...]
    2023-10-12T09:35:48 8220146 1 8 [...].64.77.[...]
    2024-01-01T17:03:51 8210212 15 10 [...].84.170.[...]
    2023-12-05T23:42:51 8210213 10 8 [...].251.255.[...]
    2023-12-07T21:47:42 8220225 10 10 [...].140.65.[...]
    2023-10-12T22:07:17 8210222 2 9 [...].66.221.[...]
    2023-11-26T14:25:00 8190346 18 10 [...].203.202.[...]
    2023-12-05T22:00:44 8210217 10 10 [...].168.2.[...]
    2023-11-06T15:16:24 8150104 16 10 [...].210.32.[...]
    2023-11-02T19:32:58 8180090 2 10 [...].131.142.[...]
    2023-10-24T00:22:01 8210213 5 10 [...].65.88.[...]
    2023-11-10T02:23:03 8220074 12 10 [...].55.98.[...]
    2023-11-26T23:35:02 8220132 7 10 [...].66.38.[...]
    2024-01-07T22:20:22 8220077 17 10 [...].74.97.[...]
    2023-11-12T17:25:40 8210217 12 10 [...].54.147.[...]
    2023-12-18T17:40:07 8220072 17 10 [...].26.63.[...]
    2023-12-06T13:15:10 8220100 10 10 [...].251.52.[...]
    2023-11-12T08:26:21 8200220 12 9 [...].168.1.[...]
    2023-11-19T00:31:34 8070147 2 9 [...].74.44.[...]
    2023-11-18T21:04:48 8220109 18 10 [...].242.235.[...]
    2023-10-13T01:05:03 8190134 4 10 [...].64.180.[...]
    2023-11-25T21:21:24 8220056 7 10 [...].177.144.[...]
    2023-10-18T11:19:57 8220030 4 10 [...].251.255.[...]
    2023-11-05T17:51:18 8100069 16 10 [...].70.57.[...]
    2023-10-20T21:03:53 8220130 4 10 [...].168.1.[...]
    2023-10-23T20:23:52 8220093 5 10 [...].168.1.[...]
    2023-10-27T18:36:05 8220145 1 10 [...].251.255.[...]
    2023-11-02T16:23:47 8210003 16 10 [...].92.89.[...]
    2023-10-17T17:17:31 8220092 3 10 [...].74.58.[...]
    2023-11-03T17:23:45 8220038 16 10 [...].167.164.[...]
    2023-12-23T18:34:04 8220133 17 10 [...].168.1.[...]
    2023-10-12T09:54:08 8220146 1 8 [...].251.255.[...]
    2023-11-18T19:48:35 8190304 7 10 [...].44.146.[...]
    2023-10-18T14:07:47 8220159 4 10 [...].168.1.[...]
    2023-11-20T00:17:32 8210229 18 10 [...].64.237.[...]
    2023-11-22T18:17:56 8220050 18 10 [...].55.102.[...]
    2023-11-22T23:23:59 8190342 1 10 [...].242.227.[...]
    2023-12-18T17:07:03 8220094 9 10 [...].203.185.[...]
    2023-10-26T22:35:26 8150066 4 10 [...].246.147.[...]
    2023-11-12T19:57:20 8220117 12 10 [...].86.120.[...]
    2023-11-18T21:10:37 8220132 18 10 [...].66.38.[...]
    2023-10-14T10:31:27 8220051 3 10 [...].6.163.[...]
    2023-11-02T20:17:21 8220076 16 10 [...].168.1.[...]
    2023-11-28T10:32:32 8220116 8 10 [...].168.1.[...]
    2023-12-10T23:37:22 8180195 10 10 [...].74.233.[...]
    2023-10-24T19:05:22 8220164 5 10 [...].86.141.[...]
    2023-11-12T15:12:55 8220028 12 10 [...].168.0.[...]
    2023-10-10T17:01:55 8220097 1 5 [...].26.73.[...]
    2023-12-29T17:46:01 8220083 7 10 [...].74.149.[...]
    2023-11-14T18:38:10 8220051 7 10 [...].242.226.[...]
    2023-12-10T20:45:04 8220065 10 10 [...].92.132.[...]
    2023-10-24T21:26:50 8220032 5 10 [...].242.227.[...]
    2023-10-05T13:10:36 2 1 3 [...].64.77.[...]
    2023-12-27T20:32:46 8220084 17 10 [...].176.243.[...]
    2023-10-25T15:24:07 8170199 4 10 [...].92.171.[...]
    2023-11-27T14:57:16 8190342 18 10 [...].242.225.[...]
    2023-11-09T12:44:20 8220034 12 10 [...].140.90.[...]
    2023-10-16T12:24:22 8220021 3 10 [...].6.153.[...]
    2024-02-11T17:49:45 8220005 10 10 [...].70.57.[...]
    2023-10-16T22:59:36 8220056 2 10 [...].177.5.[...]
    2023-12-06T00:54:01 8220032 10 10 [...].6.1.[...]
    2023-12-08T18:28:16 8220075 10 10 [...].84.190.[...]
    2023-12-11T22:27:00 8210229 10 6 [...].64.237.[...]
    2023-10-16T16:55:02 8220139 2 10 [...].92.14.[...]
    2023-11-26T13:35:54 8190342 4 10 [...].242.224.[...]
    2023-12-20T16:46:14 8210070 17 10 [...].49.125.[...]
    2023-10-11T23:55:42 8220075 2 10 [...].84.201.[...]
    2023-11-08T21:18:07 8190156 12 10 [...].167.53.[...]
    2023-10-24T20:35:57 8220008 4 10 [...].58.136.[...]
    2023-10-11T19:25:55 8210213 2 10 [...].65.88.[...]
    2023-10-28T16:26:55 8220163 5 10 [...].84.170.[...]
    2023-11-06T19:48:36 8210061 4 10 [...].75.24.[...]
    2023-12-04T12:08:48 8200107 8 6 [...].84.36.[...]
    2024-01-06T15:51:36 8220157 17 10 [...].190.13.[...]
    2024-02-11T17:46:20 8220005 10 10 [...].70.57.[...]
    2023-10-28T02:30:09 8220035 5 4 [...].69.118.[...]
    2023-11-04T13:20:14 8220027 16 10 [...].72.119.[...]
    2023-12-03T17:24:22 8220170 8 10 [...].66.222.[...]
    2023-10-16T13:25:10 8220159 2 10 [...].168.1.[...]
    2023-12-10T16:55:12 8220028 10 10 [...].168.1.[...]
    2023-11-09T00:41:25 8170206 16 9 [...].38.251.[...]
    2023-10-24T13:49:40 8220124 4 10 [...].131.255.[...]
    2023-12-12T21:48:40 8220023 9 10 [...].4.169.[...]
    2023-11-11T20:10:05 8200232 12 10 [...].84.232.[...]
    2024-01-15T15:59:16 8220226 9 10 [...].147.202.[...]
    2023-10-17T22:54:44 8210092 2 10 [...].237.29.[...]
    2023-12-02T16:48:50 8220050 8 10 [...].54.245.[...]
    2023-11-02T11:12:55 8220124 16 10 [...].26.19.[...]
    2023-11-13T12:36:38 8220036 12 10 [...].168.2.[...]
    2023-11-05T17:34:26 8220150 6 10 [...].168.0.[...]
    2023-10-24T21:18:42 8220073 3 10 [...].251.255.[...]
    2023-12-01T23:16:05 8190153 8 10 [...].251.52.[...]
    2023-10-21T11:40:56 8220022 5 10 [...].6.74.[...]
    2023-10-11T14:49:43 8220079 2 10 [...].26.66.[...]
    2023-10-29T20:13:05 8220078 5 10 [...].6.0.[...]
    2023-12-17T01:26:18 8220066 9 10 [...].65.146.[...]
    2023-10-28T16:12:38 8210212 5 10 [...].84.161.[...]
    2023-12-17T12:31:07 8140109 9 10 [...].65.213.[...]
    2023-12-13T14:38:26 8220154 9 10 [...].73.173.[...]
    2023-12-16T13:46:01 8220033 9 10 [...].177.156.[...]
    2023-11-05T16:27:33 8210217 7 10 [...].203.34.[...]
    2023-10-26T17:58:48 8220012 7 10 [...].139.212.[...]
    2023-10-13T16:00:51 8220004 2 10 [...].66.38.[...]
    2023-11-10T01:09:00 8220038 12 6 [...].237.215.[...]
    2023-11-05T18:06:43 8220119 16 10 [...].242.233.[...]
    2023-10-26T14:15:39 8220169 5 10 [...].26.75.[...]
    2023-12-03T22:04:09 8220035 8 4 [...].55.151.[...]
    2023-11-04T13:04:13 8220073 6 10 [...].103.103.[...]
    2023-10-22T14:22:22 8220168 4 10 [...].92.49.[...]
    2023-12-22T13:14:34 8220022 17 10 [...].6.212.[...]
    2023-11-23T13:58:45 8200220 7 6 [...].168.0.[...]
    2024-01-10T14:33:31 8200081 17 10 [...].70.57.[...]
    2023-12-19T14:54:21 8220023 17 10 [...].4.71.[...]
    2023-11-13T22:04:44 8220020 12 10 [...].49.51.[...]
    2023-11-07T15:24:52 8210089 6 10 [...].242.136.[...]
    2023-10-31T12:12:54 8220055 6 10 [...].26.23.[...]
    2023-10-17T00:09:48 8220010 1 10 [...].87.4.[...]
    2023-11-14T20:05:56 8190244 6 10 [...].70.57.[...]
    2023-11-29T03:24:27 8220118 12 9 [...].38.139.[...]
    2023-10-22T15:28:24 8190346 4 10 [...].66.221.[...]
    2023-12-03T23:51:39 8220157 8 10 [...].190.13.[...]
    2023-11-12T10:56:28 8220155 12 10 [...].168.1.[...]
    2023-12-20T13:07:24 8220107 17 10 [...].58.192.[...]
    2023-12-21T19:20:53 8220170 17 10 [...].217.166.[...]
    2023-10-13T18:43:47 8220075 5 10 [...].84.201.[...]
    2023-11-25T18:46:35 8220129 7 10 [...].87.230.[...]
    2023-11-20T18:18:18 8210089 18 10 [...].242.138.[...]
    2023-10-17T12:19:32 8220150 2 10 [...].168.1.[...]
    2023-11-13T13:56:59 8220124 12 10 [...].26.19.[...]
    2023-11-02T09:54:20 8220066 6 10 [...].84.190.[...]
    2023-12-11T19:51:28 8220077 10 10 [...].65.88.[...]
    2023-11-18T11:30:20 8220168 18 10 [...].166.72.[...]
    2023-12-16T15:38:12 8220120 9 10 [...].103.212.[...]
    2023-10-17T15:21:41 8220058 1 8 [...].26.65.[...]
    2023-12-20T13:54:53 8220026 17 10 [...].66.221.[...]
    2023-11-15T23:14:30 8220133 7 10 [...].168.1.[...]
    2023-10-13T19:41:57 8200232 5 10 [...].84.237.[...]
    2023-11-09T19:28:13 8210101 18 10 [...].66.36.[...]
    2023-12-20T11:47:18 8220063 17 10 [...].251.255.[...]
    2023-12-03T16:25:28 8220088 8 10 [...].168.1.[...]
    2023-12-19T01:37:06 8220118 10 8 [...].38.139.[...]
    2023-12-13T16:50:02 8180063 9 10 [...].219.37.[...]
    2023-12-23T14:16:30 8220092 17 9 [...].74.56.[...]
    2023-10-15T16:55:31 8220126 2 10 [...].140.123.[...]
    2023-12-07T22:41:58 8220102 10 8 [...].92.212.[...]
    2023-10-21T19:26:46 8220102 5 10 [...].140.29.[...]
    2023-12-12T20:01:11 8220115 9 10 [...].43.88.[...]
    2023-11-20T22:30:26 8210092 18 10 [...].167.47.[...]
    2023-12-23T16:45:19 8220032 17 10 [...].6.162.[...]
    2023-11-20T14:56:34 8220036 18 10 [...].203.214.[...]
    2023-12-03T19:47:11 8220015 8 6 [...].71.169.[...]
    2023-10-17T17:04:48 8200081 2 2 [...].70.57.[...]
    2023-10-29T18:01:11 8220033 4 10 [...].177.142.[...]
    2023-11-05T18:02:58 8220055 16 10 [...].210.118.[...]
    2023-10-29T21:06:23 8220109 4 10 [...].58.226.[...]
    2023-10-14T11:40:06 8200220 2 6 [...].168.1.[...]
    2023-11-19T12:55:41 8220115 18 10 [...].49.177.[...]
    2023-11-11T15:28:22 8220128 12 10 [...].140.91.[...]
    2023-11-19T19:19:27 8070147 4 10 [...].74.37.[...]
    2023-10-22T21:37:25 8140109 5 10 [...].75.156.[...]
    2023-10-13T20:27:54 8220102 2 10 [...].246.133.[...]
    2023-11-14T15:17:32 8220111 18 10 [...].167.62.[...]
    2023-12-17T15:54:20 8210212 9 10 [...].84.170.[...]
    2023-11-25T22:19:53 8190244 18 7 [...].70.57.[...]
    2023-11-14T17:32:24 8220078 12 10 [...].6.1.[...]
    2023-11-01T19:01:16 8220121 5 10 [...].203.241.[...]
    2023-12-23T18:01:12 8220083 3 8 [...].75.252.[...]
    2024-01-05T12:34:01 8220134 17 10 [...].66.56.[...]
    2023-11-08T22:47:57 8220019 12 10 [...].168.1.[...]
    2023-10-11T21:00:17 8220147 3 10 [...].66.38.[...]
    2023-12-04T00:00:22 8220132 8 7 [...].70.57.[...]
    2023-11-21T22:21:50 8220094 7 10 [...].71.169.[...]
    2023-12-24T23:18:47 8220117 17 10 [...].66.59.[...]
    2023-11-05T17:37:21 8220071 16 10 [...].74.153.[...]
    2023-12-22T17:02:12 8220083 1 9 [...].75.252.[...]
    2023-11-25T15:22:16 8220120 7 10 [...].74.18.[...]
    2023-12-28T13:14:25 8220139 17 10 [...].242.224.[...]
    2023-12-11T21:46:51 8220072 9 10 [...].70.57.[...]
    2024-02-10T17:21:42 8220083 18 10 [...].75.240.[...]
    2023-12-11T21:16:15 8220093 9 10 [...].55.102.[...]
    2023-10-12T20:34:02 8220232 2 10 [...].242.245.[...]
    2023-12-10T18:19:09 8220078 10 10 [...].6.163.[...]
    2023-10-26T19:42:55 8220089 5 10 [...].71.4.[...]
    2023-10-14T13:15:30 8220093 3 10 [...].168.1.[...]
    2023-11-01T00:17:59 8220168 6 10 [...].237.218.[...]
    2023-10-14T20:09:40 8220066 2 10 [...].84.190.[...]
    2023-11-13T17:55:27 8170199 9 10 [...].103.107.[...]
    2023-10-11T23:31:52 8220128 3 10 [...].242.139.[...]
    2023-11-01T19:20:31 8220167 6 10 [...].87.136.[...]
    2023-12-16T11:22:35 8220167 9 10 [...].38.242.[...]
    2023-10-24T19:10:04 8190261 3 10 [...].242.233.[...]
    2023-11-19T18:55:24 8220129 18 10 [...].65.72.[...]
    2023-10-31T14:02:29 8220103 4 10 [...].6.0.[...]
    2023-10-19T21:51:13 8220072 6 10 [...].70.57.[...]
    2023-11-19T17:12:27 8220063 7 10 [...].138.148.[...]
    2023-11-12T13:06:54 8140109 12 10 [...].65.222.[...]
    2023-11-12T19:30:11 8220062 12 10 [...].168.1.[...]
    2023-12-02T20:52:26 8220137 8 10 [...].6.1.[...]
    2023-11-20T21:14:39 8220122 7 10 [...].66.136.[...]
    2023-11-14T21:32:07 8210089 12 10 [...].242.137.[...]
    2023-12-05T22:57:52 8210063 10 10 [...].70.36.[...]
    2023-11-09T15:49:42 8220151 5 5 [...].84.97.[...]
    2023-10-16T20:23:44 8220105 3 10 [...].49.77.[...]
    2023-11-18T02:13:20 8220009 18 10 [...].131.187.[...]
    2023-11-02T16:43:32 8220146 16 10 [...].203.145.[...]
    2023-10-27T23:21:07 8220062 4 10 [...].168.1.[...]
    2023-12-03T15:52:21 8220062 8 10 [...].168.1.[...]
    2023-11-01T12:05:41 8200232 16 10 [...].87.240.[...]
    2023-12-14T14:17:39 8210089 15 10 [...].242.137.[...]
    2023-11-22T23:13:52 8210167 7 10 [...].251.52.[...]
    2023-12-03T13:30:16 8220130 8 10 [...].168.1.[...]
    2023-12-10T23:00:27 8180083 10 6 [...].74.233.[...]
    2023-11-04T00:45:59 8220109 6 10 [...].58.225.[...]
    2023-11-30T19:41:02 8210167 8 10 [...].251.52.[...]
    2023-11-10T22:11:29 8220117 15 10 [...].75.42.[...]
    2023-10-26T13:39:35 8220169 4 10 [...].26.75.[...]
    2023-10-31T17:04:03 8220019 6 10 [...].168.1.[...]
    2023-10-19T12:56:56 8220147 5 10 [...].26.70.[...]
    2023-12-10T19:26:49 8220035 10 3 [...].55.151.[...]
    2023-12-10T18:38:13 8220071 10 10 [...].74.153.[...]
    2023-10-18T14:20:11 8220097 4 10 [...].26.73.[...]
    2023-10-11T22:19:37 8220160 2 6 [...].49.133.[...]
    2023-10-30T19:10:52 8220032 16 10 [...].6.1.[...]
    2024-02-11T17:50:42 8220005 10 10 [...].70.57.[...]
    2023-10-14T14:27:44 8220029 2 10 [...].6.196.[...]
    2023-11-20T17:36:59 8220064 7 10 [...].203.228.[...]
    2023-12-24T23:22:54 8220098 17 10 [...].176.206.[...]
    2023-10-15T15:08:53 8220047 3 10 [...].16.240.[...]
    2023-12-05T16:06:33 8220160 10 8 [...].49.231.[...]
    2023-11-28T20:47:31 8210101 8 10 [...].66.36.[...]
    2023-11-05T18:20:46 8190333 16 10 [...].168.1.[...]
    2023-12-10T19:12:30 8220035 10 3 [...].55.151.[...]
    2023-10-13T10:46:04 8220009 2 10 [...].87.189.[...]
    2023-11-15T23:21:06 8220133 7 10 [...].168.1.[...]
    2023-12-07T12:11:23 8220061 10 8 [...].74.17.[...]
    2023-11-10T18:48:04 8220064 12 10 [...].168.0.[...]
    2023-10-11T14:56:13 8220072 2 10 [...].26.16.[...]
    2023-10-26T20:59:26 8220153 6 10 [...].190.53.[...]
    2023-11-14T20:39:09 8220170 18 10 [...].66.222.[...]
    2023-10-21T12:12:48 8220022 6 10 [...].6.74.[...]
    2023-11-14T19:48:30 8200066 5 10 [...].87.65.[...]
    2023-10-28T01:08:28 8220062 5 10 [...].168.1.[...]
    2023-11-09T10:24:30 8220036 6 10 [...].168.2.[...]
    2023-10-24T20:21:14 8220073 3 10 [...].251.255.[...]
    2023-10-25T19:19:21 8220036 5 10 [...].26.21.[...]
    2023-11-10T19:25:08 8220226 12 5 [...].147.188.[...]
    2023-12-16T18:36:11 8210211 9 10 [...].1.101.[...]
    2023-11-02T12:24:52 8220229 6 10 [...].140.28.[...]
    2023-10-18T00:32:33 8200081 4 10 [...].70.57.[...]
    2023-12-19T21:09:58 8220019 17 10 [...].168.1.[...]
    2023-11-26T17:29:45 8220071 7 10 [...].74.153.[...]
    2023-12-02T17:01:29 8220162 8 10 [...].140.101.[...]
    2023-12-19T13:52:33 8200119 17 10 [...].86.178.[...]
    2023-10-23T23:55:14 8210213 4 10 [...].65.88.[...]
    2023-11-05T18:58:07 8210070 6 10 [...].156.60.[...]
    2023-10-13T18:56:43 8220017 3 10 [...].177.151.[...]
    2023-10-24T19:11:14 8220170 5 10 [...].130.143.[...]
    2023-12-05T16:14:40 8210101 10 10 [...].66.36.[...]
    2023-10-13T19:06:15 8220138 3 10 [...].84.46.[...]
    2023-10-24T18:30:57 8220017 5 10 [...].177.151.[...]
    2023-12-30T14:00:28 8190304 17 10 [...].178.253.[...]
    2023-10-13T00:04:58 8220009 3 10 [...].87.189.[...]
    2023-10-19T19:11:05 8220055 4 10 [...].210.118.[...]
    2023-10-20T00:13:01 8200231 1 10 [...].140.28.[...]
    2023-10-19T01:53:32 8220102 4 10 [...].246.133.[...]
    2023-10-17T19:52:59 8220119 2 10 [...].210.118.[...]
    2023-12-19T17:10:11 8210089 9 10 [...].242.137.[...]
    2023-12-10T18:04:14 8220056 10 6 [...].166.81.[...]
    2023-11-30T22:47:13 8210167 9 10 [...].251.52.[...]
    2023-10-24T20:57:30 8200026 5 10 [...].74.5.[...]
    2023-11-28T15:02:23 8220107 8 10 [...].58.195.[...]
    2023-10-17T19:13:17 8220170 3 10 [...].130.132.[...]
    2024-02-10T17:20:37 8220083 3 10 [...].75.240.[...]
    2023-12-15T01:46:01 8220032 9 10 [...].242.226.[...]
    2023-11-08T01:02:06 8220153 12 10 [...].6.155.[...]
    2023-11-27T23:02:06 8220028 7 10 [...].168.1.[...]
    2023-12-21T17:53:19 8210222 17 10 [...].176.255.[...]
    2023-10-15T18:40:36 8210167 2 10 [...].251.52.[...]
    2023-11-16T14:02:31 8220032 7 10 [...].6.1.[...]
    2023-10-11T23:19:07 8220097 2 9 [...].176.105.[...]
    2023-10-13T18:50:24 8210222 3 10 [...].66.221.[...]
    2023-12-06T13:37:58 8220059 10 8 [...].251.52.[...]
    2023-10-24T20:31:43 8220073 4 10 [...].103.103.[...]
    2023-11-08T11:29:58 8170199 15 1 [...].103.107.[...]
    2023-11-19T22:36:34 8180090 18 10 [...].138.195.[...]
    2023-11-18T02:37:22 8220144 18 10 [...].66.136.[...]
    2023-11-04T16:20:33 8220035 16 10 [...].69.118.[...]
    2023-12-02T18:28:10 8200220 8 5 [...].168.1.[...]
    2023-11-10T23:47:32 8220130 12 10 [...].168.0.[...]
    2023-10-16T13:51:23 8210211 3 10 [...].41.47.[...]
    2023-12-17T06:13:02 8220102 9 10 [...].43.52.[...]
    2023-12-10T19:18:21 8140109 10 10 [...].65.213.[...]
    2023-12-04T17:31:03 8220139 8 10 [...].242.233.[...]
    2023-10-28T17:13:21 8220071 3 10 [...].74.153.[...]
    2023-10-24T20:18:56 8220073 4 10 [...].251.255.[...]
    2023-10-29T21:26:11 8220056 5 10 [...].177.5.[...]
    2023-10-27T12:57:40 8220081 4 10 [...].86.128.[...]
    2023-11-18T21:26:24 8220064 18 8 [...].251.255.[...]
    2023-10-14T21:42:44 8210211 1 10 [...].43.44.[...]
    2023-10-24T20:28:55 8220073 4 10 [...].103.103.[...]
    2023-10-10T18:57:18 8210212 2 10 [...].84.161.[...]
    2023-12-03T22:03:18 8220035 8 10 [...].55.151.[...]
    2023-12-17T22:10:22 8220035 9 8 [...].176.150.[...]
    2023-11-25T00:28:14 8220062 7 10 [...].168.1.[...]
    2023-10-28T02:34:29 8220035 5 3 [...].69.118.[...]
    2023-12-13T11:59:38 8220095 9 10 [...].70.57.[...]
    2023-10-24T21:39:00 8220021 5 10 [...].74.62.[...]
    2023-10-27T22:09:55 8220132 5 10 [...].70.57.[...]
    2023-10-25T15:18:55 8170199 4 2 [...].92.171.[...]
    2023-12-03T03:19:55 8220019 8 10 [...].168.1.[...]
    2023-11-26T20:26:06 8220124 7 10 [...].103.57.[...]
    2023-10-13T19:34:48 8220043 5 10 [...].177.150.[...]
    2023-10-13T17:07:04 8220004 5 10 [...].66.38.[...]
    2023-10-25T16:12:08 8220154 4 10 [...].103.255.[...]
    2023-10-11T00:50:20 8220097 2 5 [...].176.105.[...]
    2023-10-15T17:55:18 8150104 2 10 [...].167.118.[...]
    2023-11-12T09:53:29 8220155 12 6 [...].168.1.[...]
    2024-01-06T16:08:06 8220147 11 10 [...].69.97.[...]
    2023-10-12T10:04:54 8220146 1 8 [...].251.255.[...]
    2023-12-08T16:55:43 8220079 10 10 [...].103.143.[...]
    2023-10-24T11:36:32 8220119 4 10 [...].26.56.[...]
    2023-12-17T20:36:28 8220027 9 10 [...].87.35.[...]
    2023-11-01T21:31:40 8210167 6 10 [...].251.52.[...]
    2023-11-05T22:31:05 8220015 16 9 [...].71.169.[...]
    2023-10-30T21:15:56 8220026 16 10 [...].166.75.[...]
    2024-02-11T17:44:38 8220005 10 8 [...].70.57.[...]
    2023-10-26T11:37:21 8220134 5 10 [...].70.57.[...]
    2023-10-13T15:26:22 8220075 3 10 [...].84.201.[...]
    2023-10-26T14:41:20 8150066 1 10 [...].246.147.[...]
    2023-12-03T19:35:51 8220102 8 10 [...].49.177.[...]
    2023-11-19T03:54:36 8200231 7 10 [...].140.28.[...]
    2023-10-16T12:02:37 8220117 3 10 [...].87.193.[...]
    2023-10-13T22:59:35 8220038 2 10 [...].237.29.[...]
    2023-10-15T14:55:20 8190346 2 10 [...].203.188.[...]
    2023-12-03T22:04:25 8220035 8 7 [...].55.151.[...]
    2023-10-24T20:35:13 8200026 4 10 [...].74.5.[...]
    2023-12-05T02:30:36 8210089 7 10 [...].242.137.[...]
    2023-11-12T15:19:15 8220029 12 10 [...].6.218.[...]
    2024-01-05T12:34:08 8220134 17 10 [...].66.56.[...]
    2023-11-05T21:01:12 8220118 16 8 [...].38.139.[...]
    2023-12-19T17:24:38 8220124 9 10 [...].219.132.[...]
    2023-10-15T12:09:33 8140109 3 10 [...].131.156.[...]
    2023-12-07T15:13:20 8220029 18 9 [...].107.134.[...]
    2023-10-12T14:56:01 8220063 2 10 [...].26.59.[...]
    2023-10-21T16:39:41 8210217 5 10 [...].55.140.[...]
    2023-11-06T20:50:26 8220017 6 10 [...].177.151.[...]
    2023-11-21T15:52:51 8220158 7 10 [...].26.35.[...]
    2023-10-16T18:45:45 8220005 3 10 [...].70.57.[...]
    2023-11-09T00:03:10 8220004 18 10 [...].66.38.[...]
    2023-10-19T12:46:57 8220061 5 10 [...].74.12.[...]
    2024-01-03T22:51:48 8220097 17 10 [...].69.58.[...]
    2023-11-15T19:35:53 8220133 18 10 [...].168.1.[...]
    2023-11-25T22:56:44 8220150 7 10 [...].168.0.[...]
    2023-10-16T17:09:50 8220081 3 10 [...].64.245.[...]
    2023-11-02T23:40:32 8210079 16 10 [...].6.125.[...]
    2023-11-03T18:13:20 8220164 16 10 [...].86.141.[...]
    2023-10-27T18:56:29 8180063 5 10 [...].43.102.[...]
    2023-10-15T14:30:29 8210079 3 10 [...].6.125.[...]
    2023-12-12T19:16:00 8220056 9 2 [...].166.81.[...]
    2023-11-12T19:27:16 8190134 12 10 [...].75.24.[...]
    2023-10-26T20:13:55 8220089 4 10 [...].71.4.[...]
    2023-11-19T19:11:50 8220130 18 10 [...].140.29.[...]
    2023-10-24T17:44:34 8220088 4 10 [...].168.1.[...]
    2023-12-08T19:53:19 8220159 10 10 [...].168.0.[...]
    2023-11-12T17:05:57 8220055 12 8 [...].210.118.[...]
    2023-10-24T16:36:24 8220095 4 10 [...].70.57.[...]
    2023-11-01T18:52:10 8200066 1 10 [...].87.65.[...]
    2023-11-13T13:58:41 8220071 12 6 [...].74.153.[...]
    2023-10-24T23:23:32 8220059 4 2 [...].251.52.[...]
    2023-11-29T21:32:19 8220093 8 10 [...].55.102.[...]
    2023-12-17T22:37:22 8100069 18 10 [...].70.57.[...]
    2023-12-15T01:51:31 8220118 8 10 [...].38.139.[...]
    2023-10-15T19:32:41 8220064 5 10 [...].140.123.[...]
    2023-11-06T13:39:05 8210052 1 6 [...].66.36.[...]
    2023-11-14T12:59:30 8220075 18 10 [...].203.247.[...]
    2023-11-18T21:29:04 8220158 12 10 [...].237.94.[...]
    2023-12-03T19:18:14 8220115 8 10 [...].49.177.[...]
    2023-11-15T16:47:13 8220022 18 10 [...].190.3.[...]
    2023-12-03T21:21:16 8210079 8 10 [...].140.120.[...]
    2024-01-02T13:32:18 8190346 17 10 [...].87.17.[...]
    2023-11-11T13:24:14 8220157 12 6 [...].190.95.[...]
    2023-10-25T23:34:25 8220038 5 10 [...].237.17.[...]
    2023-11-05T21:01:28 8220162 16 10 [...].140.107.[...]
    2023-10-13T16:20:08 8220004 3 10 [...].66.38.[...]
    2023-11-19T20:13:23 8210070 18 10 [...].4.177.[...]
    2023-11-05T14:37:02 8220163 16 10 [...].84.170.[...]
    2023-11-01T15:00:31 8220064 16 10 [...].26.37.[...]
    2023-11-17T11:42:36 8220061 7 10 [...].86.134.[...]
    2023-11-05T23:40:08 8210229 3 10 [...].165.223.[...]
    2024-02-08T19:54:40 8190330 5 8 [...].84.200.[...]
    2023-11-03T13:41:49 8220029 6 10 [...].6.198.[...]
    2023-10-23T19:22:02 8220051 5 10 [...].6.162.[...]
    2023-10-28T02:39:54 8220035 5 4 [...].69.118.[...]
    2023-10-17T20:26:15 8220098 3 10 [...].66.38.[...]
    2023-10-31T15:26:56 8220030 16 10 [...].107.175.[...]
    2023-10-17T22:57:00 8100069 3 10 [...].70.57.[...]
    2023-10-25T00:32:31 8220137 5 10 [...].167.103.[...]
    2023-10-14T15:21:06 8220122 2 10 [...].66.136.[...]
    2023-10-14T19:17:08 8210079 2 10 [...].6.125.[...]
    2023-11-06T18:44:09 8180195 16 10 [...].177.119.[...]
    2023-11-26T23:20:45 8190342 12 10 [...].242.224.[...]
    2023-12-03T22:00:14 8220035 8 4 [...].55.151.[...]
    2023-11-11T11:35:50 8220144 12 10 [...].38.242.[...]
    2023-10-16T13:35:25 8220047 4 10 [...].16.240.[...]
    2023-11-26T21:41:43 8100069 12 10 [...].70.57.[...]
    2023-11-02T22:52:51 8210079 6 10 [...].6.125.[...]
    2023-10-29T23:36:28 8200231 5 10 [...].140.28.[...]
    2023-12-12T10:48:37 8170199 8 6 [...].103.107.[...]
    2023-10-17T19:55:41 8220119 3 10 [...].210.118.[...]
    2023-12-17T22:10:38 8220035 9 10 [...].176.150.[...]
    2023-11-04T00:20:59 8220133 15 10 [...].168.1.[...]
    2024-02-12T13:08:33 8180001 7 9 [...].217.165.[...]
    2023-10-13T18:49:04 8220043 3 10 [...].177.150.[...]
    2023-12-19T18:59:46 8220037 17 10 [...].55.152.[...]
    2023-10-27T10:20:59 8220132 4 10 [...].70.57.[...]
    2023-10-14T16:13:56 8220164 2 10 [...].84.57.[...]
    2023-10-15T19:32:15 8220126 5 10 [...].140.123.[...]
    2023-12-23T14:57:58 8180090 7 10 [...].66.136.[...]
    2023-11-01T10:55:35 8170199 6 2 [...].92.171.[...]
    2023-11-24T03:05:35 8220023 7 10 [...].1.100.[...]
    2023-12-10T19:41:24 8220098 10 10 [...].66.38.[...]
    2023-12-13T00:56:15 8220010 9 10 [...].86.147.[...]
    2023-11-13T17:56:40 8170199 9 10 [...].103.107.[...]
    2023-10-19T19:13:54 8220120 4 10 [...].167.126.[...]
    2023-11-12T01:58:44 8220137 12 10 [...].176.122.[...]
    2023-12-12T22:05:00 8220069 9 10 [...].74.125.[...]
    2023-11-10T19:27:45 8220050 12 10 [...].54.245.[...]
    2023-12-03T21:58:32 8220081 8 10 [...].251.255.[...]
    2023-10-26T19:25:00 8220059 5 10 [...].251.52.[...]
    2023-10-13T19:07:19 8220160 4 10 [...].49.133.[...]
    2023-12-17T21:28:01 8220073 9 10 [...].210.125.[...]
    2023-11-08T20:50:57 8220122 12 10 [...].66.136.[...]
    2024-01-18T14:10:40 8200232 10 8 [...].203.161.[...]
    2023-12-11T03:01:49 8190153 10 8 [...].251.52.[...]
    2023-11-29T13:25:11 8220144 8 10 [...].26.41.[...]
    2023-12-06T18:59:05 8220134 10 10 [...].66.56.[...]
    2023-11-25T12:14:26 8220059 7 10 [...].251.52.[...]
    2023-10-16T18:25:12 8220023 2 10 [...].43.40.[...]
    2023-12-27T20:33:16 8200026 17 10 [...].71.93.[...]
    2023-12-14T17:00:43 8220056 9 10 [...].166.81.[...]
    2023-10-12T11:03:13 8220050 2 10 [...].139.212.[...]
    2023-10-31T17:48:00 8220137 16 10 [...].166.91.[...]
    2023-11-26T13:53:40 8220088 7 10 [...].168.1.[...]
    2023-10-14T22:45:37 8210211 2 10 [...].43.44.[...]
    2023-11-18T20:07:12 8150066 12 9 [...].246.147.[...]
    2023-10-31T18:05:19 8220232 16 10 [...].6.214.[...]
    2023-10-19T16:41:40 8220012 1 10 [...].131.255.[...]
    2023-10-14T22:17:19 8220062 3 10 [...].168.1.[...]
    2023-10-16T18:38:06 8220153 3 10 [...].6.118.[...]
    2023-12-17T23:20:20 8210079 9 10 [...].242.20.[...]
    2023-10-14T12:00:08 8220073 3 10 [...].92.176.[...]
    2023-11-26T20:31:03 8200026 7 10 [...].74.176.[...]
    2023-10-13T18:37:28 8220069 1 10 [...].246.133.[...]
    2023-10-21T16:48:35 8220144 5 10 [...].156.63.[...]
    2023-12-25T21:46:17 8220051 17 10 [...].190.113.[...]
    2024-01-05T19:39:47 8220035 17 10 [...].242.139.[...]
    2023-11-12T14:25:49 8220137 12 10 [...].176.122.[...]
    2023-10-28T21:56:15 8190091 4 8 [...].65.40.[...]
    2023-11-03T17:02:21 8210061 1 8 [...].74.14.[...]
    2023-10-29T12:31:05 8220071 5 10 [...].74.153.[...]
    2023-12-24T19:33:12 8220122 17 10 [...].66.56.[...]
    2023-12-17T22:03:06 8220035 9 0 [...].176.150.[...]
    2023-12-24T13:35:04 8220078 17 10 [...].65.62.[...]
    2023-11-01T19:32:04 8220151 4 10 [...].131.75.[...]
    2023-12-06T13:23:06 8220163 10 10 [...].242.186.[...]
    2023-10-17T14:01:13 8220154 3 10 [...].103.255.[...]
    2023-10-15T14:42:29 8220107 3 10 [...].242.184.[...]
    2023-10-12T16:45:38 8210070 3 10 [...].219.117.[...]
    2023-12-10T18:55:41 8220056 10 10 [...].166.81.[...]
    2023-11-13T16:40:31 8220109 12 10 [...].26.36.[...]
    2023-11-25T11:51:58 8220167 7 10 [...].38.242.[...]
    2023-11-19T20:48:37 8210211 18 10 [...].49.68.[...]
    2023-11-26T10:27:47 8220157 7 6 [...].190.13.[...]
    2023-11-10T18:44:14 8170206 12 6 [...].75.24.[...]
    2023-10-26T23:22:33 8150066 5 10 [...].246.147.[...]
    2023-11-05T16:24:44 8210229 2 10 [...].165.223.[...]
    2023-11-25T19:32:02 8190323 7 10 [...].107.120.[...]
    2023-11-15T00:35:58 8200066 7 6 [...].87.65.[...]
    2023-10-14T21:50:09 8210003 2 10 [...].251.255.[...]
    2023-11-16T10:59:52 8220061 18 10 [...].1.207.[...]
    2023-12-07T13:34:17 8220030 10 10 [...].74.57.[...]
    2023-10-15T16:15:08 8220158 3 10 [...].237.94.[...]
    2023-11-19T22:40:08 8220019 18 10 [...].168.1.[...]
    2023-10-15T23:35:16 8200038 1 7 [...].87.143.[...]
    2023-10-12T18:19:17 8170199 2 10 [...].167.86.[...]
    2023-10-17T17:22:25 8200081 3 10 [...].70.57.[...]
    2023-12-20T16:23:29 8220095 17 10 [...].70.57.[...]
    2023-12-18T03:52:48 8190334 9 10 [...].86.230.[...]
    2023-10-31T16:46:36 8220064 6 10 [...].92.75.[...]
    2023-11-09T10:25:36 8220005 12 10 [...].70.57.[...]
    2023-12-02T20:47:30 8170206 8 10 [...].38.251.[...]
    2023-11-09T22:40:33 8220072 12 10 [...].70.57.[...]
    2023-10-14T16:24:57 8220062 2 10 [...].168.1.[...]
    2023-12-02T19:37:29 8220043 8 10 [...].210.63.[...]
    2024-01-09T03:12:44 8220069 15 10 [...].130.122.[...]
    2023-10-12T23:23:38 8220033 2 10 [...].55.197.[...]
    2023-11-19T23:31:47 8220032 18 10 [...].6.1.[...]
    2024-01-17T14:10:14 8220226 4 10 [...].147.202.[...]
    2023-11-19T17:51:36 8220155 18 10 [...].168.0.[...]
    2023-11-21T23:31:02 8220088 18 10 [...].168.1.[...]
    2023-10-12T15:26:13 8220079 3 10 [...].26.66.[...]
    2023-11-02T21:45:54 8190330 6 10 [...].84.207.[...]
    2023-11-05T19:12:58 8220129 16 10 [...].71.25.[...]
    2023-11-12T17:29:50 8210217 12 10 [...].54.147.[...]
    2023-10-21T17:26:48 8210127 6 10 [...].190.58.[...]
    2023-12-11T20:30:46 8220004 9 10 [...].66.38.[...]
    2023-12-05T12:13:06 8220094 8 10 [...].251.255.[...]
    2023-11-30T19:03:23 8220133 8 10 [...].168.1.[...]
    2023-10-17T14:53:20 8190346 3 10 [...].6.2.[...]
    2023-11-08T19:56:54 8220147 12 10 [...].167.131.[...]
    2023-10-29T17:22:25 8220145 7 10 [...].87.88.[...]
    2024-01-05T19:39:39 8220035 17 10 [...].242.139.[...]
    2023-10-12T10:42:58 8220146 1 2 [...].251.255.[...]
    2023-11-01T12:00:41 8210213 6 10 [...].26.55.[...]
    2023-12-17T20:40:47 8220163 9 10 [...].87.176.[...]
    2024-01-17T14:28:06 8220226 6 2 [...].147.202.[...]
    2023-11-19T22:44:35 8220126 7 10 [...].92.82.[...]
    2023-11-26T20:29:21 8220010 7 10 [...].86.147.[...]
    2023-12-19T16:09:54 8220111 17 10 [...].237.28.[...]
    2023-11-22T17:41:04 8220100 7 10 [...].251.255.[...]
    2023-10-16T14:06:03 8190333 2 10 [...].168.1.[...]
    2023-11-06T19:18:44 8210070 15 10 [...].4.177.[...]
    2023-11-04T20:50:39 8210211 16 10 [...].49.217.[...]
    2023-12-19T18:50:58 8210212 17 10 [...].84.170.[...]
    2023-11-29T03:26:04 8220118 2 7 [...].38.139.[...]
    2023-10-16T19:02:03 8220155 2 10 [...].168.1.[...]
    2023-11-22T23:42:39 8220037 7 10 [...].55.152.[...]
    2024-01-06T17:35:41 8220137 17 10 [...].73.237.[...]
    2023-11-01T13:50:49 8220012 16 10 [...].131.255.[...]
    2023-11-05T23:52:34 8200026 6 10 [...].74.5.[...]
    2023-11-27T19:55:58 8220081 7 10 [...].251.255.[...]
    2023-11-03T15:53:57 8220047 6 10 [...].4.136.[...]
    2023-10-31T20:08:21 8220154 6 10 [...].103.255.[...]
    2023-12-06T20:08:08 8180078 18 10 [...].166.63.[...]
    2023-10-12T14:45:48 8200119 3 10 [...].86.176.[...]
    2023-11-14T13:25:00 8210101 7 10 [...].66.36.[...]
    2023-11-28T22:04:00 8220168 8 10 [...].166.12.[...]
    2023-10-19T16:47:54 8210003 5 10 [...].139.212.[...]
    2023-10-14T13:24:00 8220020 3 10 [...].103.213.[...]
    2023-12-07T14:37:31 8220097 10 10 [...].26.73.[...]
    2023-10-25T10:53:00 8220226 4 2 [...].147.77.[...]
    2023-11-22T17:57:01 8210217 17 10 [...].55.135.[...]
    2024-01-06T19:33:50 8190323 17 10 [...].129.215.[...]
    2023-11-30T17:14:35 8220078 8 10 [...].6.1.[...]
    2023-11-04T04:56:07 8220047 16 10 [...].4.136.[...]
    2023-12-12T17:08:05 8180090 5 10 [...].66.136.[...]
    2023-12-11T20:33:29 8220075 9 10 [...].84.190.[...]
    2023-10-24T23:24:40 8220059 4 2 [...].251.52.[...]
    2023-11-18T18:28:05 8220035 18 8 [...].55.11.[...]
    2023-10-18T17:05:54 8220163 4 10 [...].84.170.[...]
    2023-10-15T18:41:41 8220124 2 10 [...].103.57.[...]
    2023-12-16T12:47:49 8190323 9 10 [...].73.46.[...]
    2023-11-25T19:20:34 8220119 7 10 [...].58.137.[...]
    2023-11-06T19:17:28 8210070 15 10 [...].4.177.[...]
    2023-12-01T19:32:29 8220161 8 10 [...].166.51.[...]
    2023-11-05T20:10:17 8210070 6 10 [...].156.60.[...]
    2023-10-16T17:46:32 8220024 3 10 [...].66.38.[...]
    2023-11-10T22:43:29 8220087 12 10 [...].74.249.[...]
    2023-10-12T18:30:53 8210063 2 10 [...].87.196.[...]
    2023-10-28T18:01:33 8200231 4 10 [...].140.28.[...]
    2023-11-12T09:57:15 8220035 12 10 [...].55.11.[...]
    2023-12-08T18:36:16 8190156 10 10 [...].74.228.[...]
    2023-11-20T09:51:13 8220121 12 10 [...].203.175.[...]
    2023-11-26T15:07:14 8190342 5 10 [...].242.224.[...]
    2023-12-11T17:30:45 8220155 9 10 [...].168.1.[...]
    2023-12-19T16:37:28 8220061 17 10 [...].86.139.[...]
    2023-11-13T14:27:27 8170199 7 6 [...].103.107.[...]
    2023-10-27T14:49:12 8220081 5 10 [...].86.128.[...]
    2023-12-19T20:40:27 8220124 17 10 [...].74.12.[...]
    2023-10-30T06:26:36 8190320 3 10 [...].66.57.[...]
    2023-11-07T17:18:28 8220093 12 10 [...].168.1.[...]
    2023-11-01T19:13:39 8220130 16 10 [...].168.0.[...]
    2023-10-27T00:45:33 8220117 5 10 [...].74.121.[...]
    2023-12-10T18:51:56 8220056 10 4 [...].166.81.[...]
    2023-11-05T22:07:16 8220145 16 10 [...].84.40.[...]
    2023-10-18T20:08:25 8220024 5 10 [...].66.38.[...]
    2023-11-12T23:51:31 8220158 12 6 [...].237.94.[...]
    2023-11-19T22:46:14 8220051 18 10 [...].242.226.[...]
    2023-11-03T01:49:55 8220115 16 10 [...].49.177.[...]
    2023-10-22T00:49:52 8190334 3 10 [...].129.28.[...]
    2023-11-24T02:31:41 8210213 7 6 [...].65.88.[...]
    2023-11-20T19:34:22 8220232 7 10 [...].140.77.[...]
    2023-11-19T20:56:52 8220076 18 10 [...].168.1.[...]
    2023-10-15T19:00:04 8220124 3 10 [...].103.57.[...]
    2023-11-05T18:27:25 8220056 6 10 [...].69.63.[...]
    2023-10-11T21:35:54 8220100 1 10 [...].251.52.[...]
    2023-11-02T00:48:42 8210003 6 10 [...].92.89.[...]
    2023-11-19T18:18:41 8220137 18 10 [...].210.72.[...]
    2023-12-21T23:58:49 8220047 17 10 [...].251.255.[...]
    2023-10-13T18:13:27 8220020 2 10 [...].103.213.[...]
    2024-01-07T01:43:19 8220146 17 10 [...].70.54.[...]
    2023-12-16T12:38:34 8220009 9 10 [...].87.191.[...]
    2023-12-02T18:29:49 8200220 8 8 [...].168.1.[...]
    2023-12-03T13:14:06 8220167 8 10 [...].87.149.[...]
    2023-10-26T12:23:42 8220100 4 10 [...].74.46.[...]
    2023-11-10T12:47:07 8210212 12 10 [...].84.161.[...]
    2023-10-26T21:02:10 8180078 5 10 [...].166.63.[...]
    2023-10-22T14:34:10 8220005 6 10 [...].70.57.[...]
    2023-10-20T01:06:23 8220012 2 10 [...].131.255.[...]
    2023-12-10T19:29:33 8220035 10 4 [...].55.151.[...]
    2024-01-02T21:20:30 8220138 10 8 [...].10.75.[...]
    2023-11-16T13:23:57 8210061 16 9 [...].70.255.[...]
    2023-12-20T21:40:40 8220115 17 10 [...].1.225.[...]
    2023-10-11T19:50:19 8220074 2 10 [...].166.189.[...]
    2024-01-09T18:24:08 8220017 15 10 [...].54.254.[...]
    2023-12-10T11:43:38 8220022 10 10 [...].6.84.[...]
    2023-10-24T20:35:06 8220232 5 10 [...].6.214.[...]
    2023-12-03T19:37:36 8220157 8 6 [...].190.13.[...]
    2023-11-13T19:51:27 8220027 12 10 [...].72.119.[...]
    2023-11-12T17:10:56 8220055 12 10 [...].210.118.[...]
    2023-11-01T14:22:09 8170199 16 8 [...].103.107.[...]
    2023-12-10T15:45:49 8220115 10 10 [...].43.88.[...]
    2023-11-19T15:34:43 8220100 18 10 [...].251.52.[...]
    2023-11-25T19:59:02 8220033 7 10 [...].166.118.[...]
    2023-10-17T01:33:05 8200026 1 10 [...].74.5.[...]
    2023-10-31T14:17:59 8180078 16 10 [...].166.63.[...]
    2023-12-02T15:17:47 8220164 8 10 [...].86.141.[...]
    2023-12-10T00:57:51 8220157 10 10 [...].190.13.[...]
    2023-10-28T19:28:55 8220157 4 10 [...].190.83.[...]
    2023-12-03T23:50:33 8220157 8 7 [...].190.13.[...]
    2023-12-08T16:37:44 8220020 10 10 [...].242.33.[...]
    2023-10-13T20:46:44 8210212 3 10 [...].84.161.[...]
    2023-10-13T19:06:23 8220138 3 10 [...].84.46.[...]
    2023-11-19T13:01:03 8220055 18 2 [...].210.118.[...]
    2023-12-06T18:58:24 8220162 10 10 [...].140.101.[...]
    2023-11-12T13:14:35 8170199 12 10 [...].103.107.[...]
    2023-11-12T18:23:03 8220073 12 10 [...].92.147.[...]
    2023-12-16T18:20:14 8220150 9 10 [...].168.0.[...]
    2023-12-11T17:54:53 8210101 9 2 [...].66.36.[...]
    2023-11-18T18:44:22 8220017 18 10 [...].177.13.[...]
    2023-10-21T17:46:54 8210079 5 10 [...].6.125.[...]
    2023-12-03T11:20:44 8220028 8 10 [...].168.1.[...]
    2023-12-29T21:02:11 8220124 15 10 [...].219.112.[...]
    2023-12-10T17:12:09 8220088 10 10 [...].168.1.[...]
    2024-02-13T23:12:56 8070147 15 9 [...].74.36.[...]
    2023-10-28T10:47:45 8190323 5 10 [...].71.97.[...]
    2023-10-17T12:45:24 8220167 2 10 [...].26.73.[...]
    2023-10-18T14:52:17 8220155 4 10 [...].168.1.[...]
    2023-10-30T20:58:31 8220063 6 10 [...].138.148.[...]
    2023-11-26T22:21:57 8220094 18 10 [...].71.169.[...]
    2023-11-13T00:27:16 8190333 12 10 [...].168.0.[...]
    2023-12-09T00:41:18 8220062 10 10 [...].168.1.[...]
    2023-11-04T23:28:38 8210229 5 4 [...].165.223.[...]
    2023-11-11T19:10:27 8220069 12 10 [...].87.197.[...]
    2023-11-04T15:39:10 8220035 6 8 [...].69.118.[...]
    2023-10-14T21:34:22 8190153 2 10 [...].251.52.[...]
    2024-01-16T00:40:10 8070147 5 10 [...].131.228.[...]
    2023-11-03T13:42:07 8220120 16 10 [...].167.126.[...]
    2023-10-23T20:18:52 8220115 5 10 [...].49.177.[...]
    2023-11-04T15:38:08 8220035 6 8 [...].69.118.[...]
    2023-11-04T03:21:53 8200220 16 10 [...].168.0.[...]
    2023-11-11T14:40:46 8220098 12 10 [...].66.38.[...]
    2023-10-16T17:49:37 8190333 5 10 [...].168.1.[...]
    2024-01-14T12:45:21 8210127 17 10 [...].6.114.[...]
    2023-10-30T21:43:40 8220102 6 10 [...].49.188.[...]
    2023-10-19T21:52:09 8220097 5 8 [...].176.105.[...]
    2023-12-26T19:15:32 8200026 9 10 [...].71.93.[...]
    2023-10-31T16:10:25 8190156 4 10 [...].26.62.[...]
    2023-11-18T16:28:02 8220210 18 10 [...].74.39.[...]
    2023-11-22T16:32:15 8200081 16 10 [...].70.57.[...]
    2023-12-10T19:29:19 8220035 10 6 [...].55.151.[...]
    2023-10-16T18:39:31 8220037 3 10 [...].219.117.[...]
    2023-11-12T18:37:29 8220076 12 10 [...].168.1.[...]
    2024-02-12T20:30:08 8150104 9 10 [...].54.243.[...]
    2023-10-17T14:22:54 8220158 4 10 [...].203.205.[...]
    2023-11-12T20:05:25 8220089 12 10 [...].71.4.[...]
    2024-01-07T14:05:48 8220062 17 10 [...].168.1.[...]
    2023-10-17T22:18:40 8100069 2 10 [...].70.57.[...]
    2023-12-19T00:23:45 8200038 9 10 [...].87.143.[...]
    2023-10-26T00:33:43 8220084 5 10 [...].177.81.[...]
    2023-10-17T21:27:45 8210127 3 10 [...].87.79.[...]
    2023-12-23T12:17:17 8220132 17 10 [...].66.223.[...]
    2023-11-09T21:37:05 8220103 6 10 [...].242.233.[...]
    2023-10-30T22:17:11 8220147 16 10 [...].167.189.[...]
    2023-10-16T20:28:32 8150104 3 10 [...].167.118.[...]
    2023-10-13T11:13:48 8220043 2 10 [...].177.150.[...]
    2023-10-26T17:13:10 8220139 5 10 [...].26.48.[...]
    2023-10-28T02:31:53 8220035 5 4 [...].69.118.[...]
    2023-11-03T19:38:07 8200087 16 10 [...].66.36.[...]
    2023-12-12T03:24:37 8190304 9 10 [...].44.146.[...]
    2023-10-18T23:27:33 8220111 6 10 [...].167.62.[...]
    2023-11-07T21:29:58 8210222 12 10 [...].66.221.[...]
    2023-10-13T17:31:45 8220022 3 10 [...].6.74.[...]
    2023-12-23T18:15:53 8220101 17 10 [...].152.255.[...]
    2023-10-30T12:42:32 8190244 5 10 [...].86.83.[...]
    2023-11-05T21:51:56 8220077 16 10 [...].65.88.[...]
    2023-12-10T18:04:10 8220170 10 10 [...].66.222.[...]
    2023-10-19T23:14:01 8200231 2 10 [...].140.28.[...]
    2023-10-27T19:10:15 8150066 3 10 [...].246.147.[...]
    2023-11-04T15:39:50 8220035 6 10 [...].69.118.[...]
    2024-01-04T12:13:22 8220138 17 10 [...].10.75.[...]
    2023-10-25T20:13:09 8220159 5 10 [...].168.0.[...]
    2023-11-11T20:28:28 8220024 12 10 [...].66.38.[...]
    2023-12-09T01:40:12 8220056 8 10 [...].166.81.[...]
    2023-11-23T13:58:39 8200220 7 6 [...].168.0.[...]
    2023-12-11T18:12:26 8220005 9 10 [...].70.57.[...]
    2023-11-04T01:34:15 8220109 16 10 [...].58.225.[...]
    2023-10-27T20:25:28 8220145 2 10 [...].251.255.[...]
    2023-11-18T14:37:45 8220095 7 10 [...].70.57.[...]
    2023-10-24T18:22:47 8220088 5 10 [...].168.1.[...]
    2023-12-19T14:01:39 8220160 17 10 [...].49.231.[...]
    2023-12-11T19:50:18 8220159 9 10 [...].168.0.[...]
    2023-11-07T19:21:54 8220010 6 10 [...].251.255.[...]
    2023-11-04T16:59:06 8220081 16 10 [...].86.128.[...]
    2023-12-08T00:00:18 8220116 10 10 [...].168.1.[...]
    2023-10-12T19:56:43 8210101 3 10 [...].66.36.[...]
    2023-12-09T01:38:34 8220056 8 7 [...].166.81.[...]
    2023-10-13T13:43:32 8220095 3 10 [...].70.57.[...]
    2023-12-10T18:41:13 8220056 10 8 [...].166.81.[...]
    2023-11-26T12:55:09 8220055 7 10 [...].210.118.[...]
    2023-11-04T15:39:34 8220035 6 8 [...].69.118.[...]
    2024-02-11T23:49:51 8220103 18 10 [...].242.227.[...]
    2024-01-10T17:52:11 8200081 9 10 [...].70.57.[...]
    2023-12-06T00:51:26 8220015 10 10 [...].71.169.[...]
    2023-12-08T18:42:32 8220019 10 10 [...].168.1.[...]
    2023-10-13T19:35:58 8220138 4 10 [...].84.46.[...]
    2023-10-13T14:20:25 8220015 1 10 [...].71.169.[...]
    2023-10-14T14:35:31 8220059 2 10 [...].75.98.[...]
    2023-11-05T15:49:53 8220033 16 10 [...].176.97.[...]
    2023-12-01T09:26:25 8220226 8 9 [...].147.188.[...]
    2023-12-01T21:12:34 8220077 7 10 [...].131.151.[...]
    2023-12-06T18:31:47 8220120 10 10 [...].167.126.[...]
    2023-12-03T21:59:35 8220035 8 7 [...].55.151.[...]
    2023-10-28T17:10:24 8220084 6 10 [...].177.81.[...]
    2023-12-28T17:17:22 8210167 17 10 [...].55.164.[...]
    2023-12-18T23:10:09 8220225 17 10 [...].140.65.[...]
    2023-10-16T23:28:10 8220158 5 10 [...].237.94.[...]
    2023-12-07T14:33:14 8220210 10 10 [...].44.97.[...]
    2023-10-18T15:32:46 8220079 4 10 [...].103.137.[...]
    2023-11-26T12:00:48 8220162 7 10 [...].140.107.[...]
    2023-12-27T16:12:54 8220083 6 10 [...].75.252.[...]
    2023-12-09T18:55:17 8190342 10 10 [...].242.225.[...]
    2023-12-10T18:44:45 8220056 10 8 [...].166.81.[...]
    2023-11-03T12:13:11 8220081 6 10 [...].86.128.[...]
    2024-01-02T19:59:57 8190346 9 2 [...].87.17.[...]
    2023-12-01T18:32:29 8220087 8 10 [...].251.255.[...]
    2023-10-18T00:11:44 8220056 3 0 [...].177.5.[...]
    2023-11-01T13:59:17 8220120 6 10 [...].103.212.[...]
    2023-10-13T15:14:34 8220024 2 10 [...].66.38.[...]
    2023-11-15T22:34:39 8220037 18 10 [...].84.125.[...]
    2023-12-23T21:53:16 8220076 17 10 [...].168.1.[...]
    2023-11-09T12:02:03 8220147 7 10 [...].167.131.[...]
    2023-11-03T01:22:48 8200038 16 10 [...].87.143.[...]
    2023-11-18T17:31:51 8220059 18 10 [...].75.98.[...]
    2023-11-20T13:01:07 8220124 18 10 [...].26.19.[...]
    2023-12-10T16:57:03 8220038 10 10 [...].237.23.[...]
    2023-10-28T23:37:35 8220145 4 10 [...].87.88.[...]
    2023-10-11T15:16:51 8190304 5 10 [...].44.146.[...]
    2023-10-28T20:28:16 8190320 1 10 [...].66.57.[...]
    2024-02-08T18:38:53 8190330 10 6 [...].84.200.[...]
    2023-11-15T19:43:43 8210229 12 6 [...].165.223.[...]
    2023-12-13T16:44:39 8210063 9 10 [...].26.24.[...]
    2023-11-07T20:21:37 8220010 16 10 [...].251.255.[...]
    2023-10-22T12:53:18 8220026 6 10 [...].177.156.[...]
    2023-10-12T16:11:39 8200119 5 10 [...].86.176.[...]
    2023-11-15T00:34:32 8200066 7 6 [...].87.65.[...]
    2023-10-26T19:22:14 8220101 4 10 [...].73.158.[...]
    2023-10-30T22:21:16 8220146 5 10 [...].139.212.[...]
    2023-11-05T20:04:11 8210070 16 10 [...].156.60.[...]
    2023-11-19T23:49:51 8220020 18 10 [...].49.56.[...]
    2023-11-01T19:03:55 8210092 6 10 [...].167.47.[...]
    2023-10-17T11:45:40 8220028 3 10 [...].168.1.[...]
    2023-11-28T18:05:40 8220072 8 10 [...].66.136.[...]
    2023-10-15T13:08:14 8190346 1 10 [...].203.188.[...]
    2023-11-19T23:41:12 8220162 18 2 [...].140.107.[...]
    2023-10-13T23:21:51 8220038 3 10 [...].237.29.[...]
    2023-11-06T23:48:42 8190134 16 10 [...].64.180.[...]
    2023-12-18T19:27:45 8220147 17 10 [...].69.97.[...]
    2023-10-24T00:34:35 8220050 5 10 [...].166.112.[...]
    2024-01-05T20:03:24 8220081 17 10 [...].251.255.[...]
    2023-11-16T17:31:12 8220072 18 10 [...].177.227.[...]
    2023-11-19T22:45:54 8220051 18 10 [...].242.226.[...]
    2023-11-12T09:55:02 8220035 12 8 [...].55.11.[...]
    2023-11-01T19:43:13 8220163 6 10 [...].84.170.[...]
    2024-01-05T19:39:35 8220035 17 10 [...].242.139.[...]
    2023-10-16T12:08:51 8220072 5 10 [...].70.57.[...]
    2023-10-25T10:36:35 8220147 6 10 [...].26.70.[...]
    2023-10-24T13:51:42 8220077 3 10 [...].168.1.[...]
    2023-11-21T22:16:47 8220100 7 10 [...].251.52.[...]
    2024-02-08T20:05:48 8190330 9 8 [...].84.200.[...]
    2024-01-13T19:01:17 8200232 17 9 [...].70.57.[...]
    2023-10-29T16:35:11 8220094 5 10 [...].71.169.[...]
    2023-11-07T16:33:36 8220161 12 10 [...].167.62.[...]
    2023-12-03T18:17:21 8190134 7 10 [...].74.100.[...]
    2023-10-12T19:55:16 8210101 3 10 [...].66.36.[...]
    2023-10-13T19:11:29 8220021 2 10 [...].6.155.[...]
    2023-10-17T01:06:58 8200220 3 10 [...].168.1.[...]
    2023-10-12T13:14:29 8220169 1 10 [...].74.61.[...]
    2023-11-04T03:48:33 8200220 6 8 [...].168.0.[...]
    2023-12-07T17:53:14 8210211 10 8 [...].41.47.[...]
    2023-11-05T23:35:26 8190334 16 10 [...].129.28.[...]
    2023-11-30T23:01:10 8220037 8 10 [...].55.152.[...]
    2023-10-28T22:45:46 8190091 5 5 [...].65.40.[...]
    2023-10-31T22:57:02 8220225 16 10 [...].140.3.[...]
    2023-12-17T22:04:26 8220035 9 0 [...].176.150.[...]
    2023-10-17T15:44:21 8190330 3 10 [...].74.202.[...]
    2023-12-02T13:15:32 8220119 8 7 [...].210.118.[...]
    2023-11-09T03:18:47 8210167 12 10 [...].210.179.[...]
    2023-10-18T15:09:56 8220146 4 10 [...].139.212.[...]
    2023-12-08T17:53:13 8180195 8 10 [...].74.233.[...]
    2023-12-05T20:25:14 8220077 8 10 [...].65.88.[...]
    2023-10-21T19:42:34 8220005 4 10 [...].70.57.[...]
    2023-11-02T00:14:12 8180063 16 10 [...].43.102.[...]
    2023-10-24T21:48:31 8220107 5 10 [...].242.185.[...]
    2023-11-17T19:39:37 8220093 18 10 [...].251.255.[...]
    2023-11-05T20:49:20 8220105 6 10 [...].49.77.[...]
    2023-12-02T14:27:10 8220009 8 10 [...].66.241.[...]
    2023-11-30T18:04:53 8220122 8 10 [...].139.215.[...]
    2024-01-10T09:14:26 8220096 15 10 [...].217.162.[...]
    2023-10-16T12:56:46 0 2 10 [...].64.77.[...]
    2023-11-12T20:01:21 8200038 12 4 [...].87.143.[...]
    2023-10-22T21:41:14 8220074 5 10 [...].167.129.[...]
    2023-12-16T18:13:06 8220043 9 10 [...].210.63.[...]
    2023-11-01T23:59:45 8220079 16 10 [...].103.137.[...]
    2023-12-16T19:31:51 8190261 7 10 [...].70.107.[...]
    2023-10-24T20:13:47 8220073 4 10 [...].251.255.[...]
    2023-11-04T13:55:29 8200107 6 10 [...].71.109.[...]
    2023-10-26T14:09:51 8220028 5 10 [...].168.2.[...]
    2023-10-28T17:06:28 8220027 4 10 [...].72.119.[...]
    2023-10-15T22:02:00 8220154 2 10 [...].103.255.[...]
    2023-10-30T23:50:47 8220074 16 10 [...].166.6.[...]
    2023-10-21T13:43:51 8220151 2 8 [...].131.65.[...]
    2023-11-01T20:57:13 8210101 16 10 [...].66.36.[...]
    2023-12-01T14:18:35 8210070 8 10 [...].43.33.[...]
    2023-12-07T13:23:54 8220030 10 8 [...].74.57.[...]
    2023-11-07T17:37:36 8220096 12 10 [...].66.58.[...]
    2023-11-12T20:01:31 8210092 12 6 [...].71.4.[...]
    2023-10-17T12:37:44 8220150 3 10 [...].168.1.[...]
    2023-11-03T15:29:05 8220170 16 10 [...].84.183.[...]
    2023-11-18T17:31:41 8220079 18 10 [...].74.58.[...]
    2023-11-11T16:15:33 8220059 12 10 [...].75.98.[...]
    2023-12-16T12:06:23 8220130 9 10 [...].168.0.[...]
    2023-10-14T13:42:38 8220168 3 10 [...].167.155.[...]
    2023-11-02T11:43:34 8210212 16 10 [...].84.161.[...]
    2023-12-09T18:54:47 8170206 10 8 [...].38.251.[...]
    2023-11-20T18:31:36 8220029 7 10 [...].107.162.[...]
    2023-10-26T14:46:53 8220097 6 7 [...].203.138.[...]
    2023-10-13T17:11:29 8220033 3 10 [...].55.197.[...]
    2023-11-09T13:53:48 8220154 12 10 [...].103.255.[...]
    2023-11-19T02:48:38 8220102 18 10 [...].92.212.[...]
    2023-12-22T04:28:25 8220029 10 10 [...].107.160.[...]
    2023-10-12T01:39:15 8220019 2 10 [...].168.1.[...]
    2023-11-29T14:22:45 8220111 8 10 [...].166.51.[...]
    2023-11-01T20:19:30 8220153 16 10 [...].107.70.[...]
    2023-11-03T15:43:46 8220159 6 10 [...].168.0.[...]
    2023-11-15T21:41:18 8220097 18 10 [...].176.114.[...]
    2023-12-11T18:11:53 8220005 9 10 [...].70.57.[...]
    2024-02-14T22:27:44 8070147 14 10 [...].73.7.[...]
    2023-11-10T15:20:41 8180083 12 10 [...].177.119.[...]
    2023-11-01T19:12:33 8220130 16 10 [...].168.0.[...]
    2023-10-31T00:01:59 8220075 15 10 [...].84.192.[...]
    2023-10-17T22:14:37 8220075 6 10 [...].84.201.[...]
    2023-10-15T00:00:24 8190134 5 10 [...].64.180.[...]
    2023-12-03T23:43:37 8220158 8 10 [...].130.83.[...]
    2023-12-15T13:02:47 8220022 9 10 [...].6.192.[...]
    2023-12-02T16:55:06 8190156 8 10 [...].167.175.[...]
    2023-11-02T15:48:37 8220126 16 10 [...].74.57.[...]
    2023-11-01T19:39:45 8220043 16 10 [...].92.45.[...]
    2023-11-01T20:30:20 8210101 6 10 [...].66.36.[...]
    2023-11-14T20:32:48 8190244 16 10 [...].70.57.[...]
    2023-11-26T23:16:51 8200038 7 8 [...].87.135.[...]
    2023-11-03T21:35:20 8210063 16 10 [...].74.120.[...]
    2023-12-03T21:17:10 8220073 8 10 [...].210.125.[...]
    2023-10-14T19:25:09 8220026 2 10 [...].66.221.[...]
    2023-12-06T04:20:33 8220023 10 10 [...].4.169.[...]
    2023-11-02T11:08:29 8220100 6 10 [...].26.21.[...]
    2023-12-13T20:26:44 8220146 9 10 [...].139.212.[...]
    2023-11-03T20:11:16 8220084 15 10 [...].176.237.[...]
    2023-12-01T13:31:24 8220063 8 10 [...].70.57.[...]
    2023-10-14T19:36:19 8220105 2 10 [...].71.210.[...]
    2024-02-12T05:07:53 8190134 9 2 [...].203.82.[...]
    2023-10-29T07:19:08 8190320 2 10 [...].66.57.[...]
    2023-10-22T20:59:53 8220167 4 10 [...].87.130.[...]
    2023-10-28T16:41:54 8220059 4 10 [...].75.98.[...]
    2023-10-24T16:42:11 8220073 3 10 [...].103.103.[...]
    2023-10-15T17:38:36 8220126 3 10 [...].140.123.[...]
    2024-01-15T00:02:46 8070147 6 10 [...].87.64.[...]
    2023-11-18T18:28:35 8220035 18 10 [...].55.11.[...]
    2023-11-16T14:27:18 8220107 7 10 [...].58.195.[...]
    2023-11-19T19:57:47 8220225 18 10 [...].140.65.[...]
    2023-10-15T20:22:14 8220055 3 10 [...].210.118.[...]
    2023-10-26T15:40:35 8150066 2 9 [...].246.147.[...]
    2023-11-18T14:21:24 8220163 18 10 [...].87.176.[...]
    2024-01-17T12:27:44 8190244 8 10 [...].86.108.[...]
    2023-10-14T19:29:54 8220105 2 6 [...].71.210.[...]
    2023-10-21T13:36:29 8220022 7 10 [...].6.74.[...]
    2023-12-02T11:12:33 8220232 8 10 [...].168.2.[...]
    2023-10-29T21:39:53 8220109 5 10 [...].58.226.[...]
    2023-11-11T20:58:46 8210063 12 10 [...].74.120.[...]
    2023-12-08T17:29:25 8220037 10 10 [...].55.152.[...]
    2023-11-18T21:32:04 8220074 18 10 [...].86.247.[...]
    2023-11-08T21:48:41 8220132 12 10 [...].66.38.[...]
    2024-01-10T15:21:38 8200081 12 10 [...].70.57.[...]
    2023-11-03T17:49:27 8220126 6 10 [...].92.82.[...]
    2023-11-04T10:28:05 8220022 16 10 [...].190.29.[...]
    2023-10-17T19:22:25 8220096 3 10 [...].66.58.[...]
    2023-11-19T02:45:37 8220102 18 10 [...].92.212.[...]
    2024-01-17T13:21:27 8190244 17 10 [...].86.108.[...]
    2023-12-17T22:06:38 8220035 9 0 [...].176.150.[...]
    2023-10-18T17:57:20 8220105 4 10 [...].49.77.[...]
    2024-01-17T13:34:32 8220226 18 10 [...].147.202.[...]
    2023-12-02T15:32:09 8220111 9 10 [...].166.51.[...]
    2023-11-27T17:11:01 8210217 14 10 [...].55.135.[...]
    2023-10-29T18:42:03 8220033 5 10 [...].177.142.[...]
    2023-10-16T13:08:21 8210089 2 10 [...].6.2.[...]
    2023-12-14T01:10:24 8210213 9 10 [...].65.88.[...]
    2023-12-17T22:03:53 8220035 9 0 [...].176.150.[...]
    2023-11-04T16:20:23 8220035 16 10 [...].69.118.[...]
    2023-11-23T00:18:25 8210070 7 10 [...].43.33.[...]
    2023-12-15T17:16:46 8220059 9 10 [...].251.255.[...]
    2023-11-04T16:14:02 8190304 16 10 [...].44.146.[...]
    2023-10-11T20:22:49 8220147 2 10 [...].66.38.[...]
    2023-10-10T17:03:38 8220097 1 10 [...].26.73.[...]
    2023-10-22T04:20:11 8180195 3 10 [...].59.224.[...]
    2023-11-09T11:54:17 8220063 12 10 [...].219.117.[...]
    2023-12-10T19:28:46 8220035 10 6 [...].55.151.[...]
    2023-12-23T12:47:08 8220017 17 10 [...].176.112.[...]
    2023-11-03T12:36:41 8220170 6 10 [...].84.183.[...]
    2023-10-15T18:00:49 8220064 3 10 [...].140.123.[...]
    2023-12-06T20:09:56 8180078 7 10 [...].166.63.[...]
    2023-11-12T20:00:17 8220163 12 10 [...].73.5.[...]
    2023-12-10T19:14:25 8220094 10 10 [...].71.169.[...]
    2023-11-26T17:40:18 8210127 7 10 [...].242.38.[...]
    2023-11-19T20:35:05 8210070 18 10 [...].4.177.[...]
    2023-11-05T19:53:44 8220118 6 9 [...].38.139.[...]
    2023-10-13T18:12:46 8220134 3 10 [...].70.57.[...]
    2023-10-24T20:16:51 8220073 3 10 [...].251.255.[...]
    2023-11-04T13:58:56 8220117 6 10 [...].65.9.[...]
    2023-10-13T14:40:11 8210213 3 10 [...].251.255.[...]
    2023-11-26T18:40:27 8190342 16 10 [...].242.224.[...]
    2023-11-26T15:51:06 8220139 7 10 [...].242.233.[...]
    2023-10-17T21:11:44 8220158 6 10 [...].237.94.[...]
    2023-10-13T17:49:51 8220134 2 10 [...].70.57.[...]
    2024-02-12T02:24:58 8220103 9 10 [...].242.227.[...]
    2023-11-02T02:12:50 8220121 6 10 [...].66.136.[...]
    2023-12-09T21:43:00 8200038 10 8 [...].87.143.[...]
    2023-10-22T17:48:10 8220139 4 10 [...].58.225.[...]
    2023-11-19T22:36:10 8220038 18 10 [...].237.19.[...]
    2023-10-24T20:45:49 8220019 5 10 [...].168.1.[...]
    2023-10-22T17:03:15 8220005 7 10 [...].70.57.[...]
    2023-12-12T18:02:45 8220134 9 10 [...].70.57.[...]
    2023-12-10T11:55:54 8220005 10 10 [...].70.57.[...]
    2023-11-04T13:42:51 8220029 16 10 [...].6.198.[...]
    2023-11-05T11:09:34 8210229 6 10 [...].165.223.[...]
    2023-12-10T18:54:58 8220056 10 8 [...].166.81.[...]
    2023-12-22T14:07:21 8200066 9 10 [...].74.185.[...]
    2023-12-10T19:16:44 8220035 10 8 [...].55.151.[...]
    2023-11-01T22:48:50 8200231 16 10 [...].140.28.[...]
    2023-10-12T20:10:42 8220084 3 10 [...].255.91.[...]
    2023-12-17T17:19:01 8220037 9 10 [...].55.152.[...]
    2023-10-26T15:00:34 8220150 4 10 [...].168.0.[...]
    2023-11-12T09:56:36 8220035 12 10 [...].55.11.[...]
    2023-11-28T17:36:07 8220023 8 10 [...].4.169.[...]
    2023-10-11T20:08:18 8220061 2 10 [...].86.146.[...]
    2023-12-10T20:23:35 8220130 10 10 [...].168.0.[...]
    2023-11-16T20:27:54 8220034 18 10 [...].140.88.[...]
    2023-12-12T21:42:56 8220024 9 10 [...].66.38.[...]
    2023-10-16T21:13:29 8220161 4 10 [...].167.62.[...]
    2023-11-02T14:12:33 8190261 6 10 [...].26.52.[...]
    2023-11-29T01:39:25 8220145 12 8 [...].87.19.[...]
    2023-10-10T15:14:54 8190304 1 10 [...].44.146.[...]
    2023-11-17T20:27:57 8220015 2 9 [...].71.169.[...]
    2023-11-15T14:30:39 8200107 18 10 [...].71.109.[...]
    2023-10-13T17:09:42 8220051 3 10 [...].6.160.[...]
    2023-10-29T13:38:59 8220065 5 10 [...].92.156.[...]
    2023-11-05T20:28:55 8220077 6 10 [...].65.88.[...]
    2023-12-11T10:38:54 8220022 10 10 [...].6.84.[...]
    2023-10-16T18:01:19 8220141 1 8 [...].254.7.[...]
    2023-12-17T20:45:04 8220015 9 10 [...].66.223.[...]
    2023-12-29T15:34:41 8220083 12 6 [...].74.149.[...]
    2023-12-02T15:18:07 8220120 8 10 [...].210.118.[...]
    2023-10-25T20:48:58 8210167 5 10 [...].251.52.[...]
    2023-10-24T20:46:57 8220161 7 10 [...].167.62.[...]
    2024-01-07T20:31:08 8220024 17 10 [...].203.193.[...]
    2023-11-26T12:31:29 8220055 7 8 [...].210.118.[...]
    2023-10-25T22:06:02 8180078 3 10 [...].166.63.[...]
    2023-11-19T18:11:45 8220062 18 2 [...].168.1.[...]
    2024-02-12T01:06:30 8220103 7 10 [...].242.227.[...]
    2023-11-22T20:53:39 8220001 7 10 [...].166.93.[...]
    2023-11-06T17:05:14 8200107 7 10 [...].71.109.[...]
    2023-11-19T14:01:52 8220066 18 10 [...].84.200.[...]
    2023-12-16T18:16:34 8180083 9 9 [...].66.221.[...]
    2023-11-01T21:15:48 8220138 7 10 [...].84.46.[...]
    2023-12-20T01:44:47 8210003 17 10 [...].167.92.[...]
    2023-11-04T15:03:00 8220117 16 10 [...].65.9.[...]
    2023-11-06T23:48:19 8190134 16 10 [...].64.180.[...]
    2023-12-05T23:27:21 8190334 7 10 [...].86.227.[...]
    2023-11-29T22:44:33 8220100 8 10 [...].251.52.[...]
    2023-10-31T17:34:16 8220088 6 10 [...].168.1.[...]
    2023-12-01T17:39:32 8220079 8 10 [...].103.136.[...]
    2023-12-02T15:32:27 8220111 9 10 [...].166.51.[...]
    2023-11-26T02:53:40 8220015 5 10 [...].71.169.[...]
    2023-12-17T23:12:55 8220089 9 10 [...].66.57.[...]
    2023-11-30T00:06:24 8220134 8 10 [...].70.57.[...]
    2024-02-08T19:22:26 8190330 4 8 [...].84.200.[...]
    2023-11-29T13:06:23 8220126 8 10 [...].26.26.[...]
    2023-10-14T17:49:11 8220005 2 8 [...].70.57.[...]
    2023-11-30T12:01:36 8220210 8 10 [...].44.98.[...]
    2024-01-06T16:45:34 8220066 17 10 [...].65.146.[...]
    2023-10-19T16:56:28 8220129 4 10 [...].26.69.[...]
    2023-12-09T17:16:12 8220158 10 10 [...].130.83.[...]
    2023-12-10T23:44:43 8200026 8 10 [...].74.176.[...]
    2023-11-01T14:46:52 8190346 16 10 [...].26.24.[...]
    2023-10-14T14:35:25 8220160 5 10 [...].49.133.[...]
    2023-11-02T16:05:29 8220126 6 10 [...].74.57.[...]
    2023-11-05T17:58:10 8220001 6 10 [...].166.94.[...]
    2023-11-19T20:52:32 8180090 16 10 [...].138.195.[...]
    2023-12-14T21:26:50 8220109 9 10 [...].203.148.[...]
    2023-10-17T13:09:10 8220144 2 10 [...].26.41.[...]
    2023-11-18T22:49:40 8070147 1 10 [...].74.44.[...]
    2023-10-11T23:16:36 8220097 2 10 [...].176.105.[...]
    2023-11-25T22:37:59 8190244 7 10 [...].70.57.[...]
    2023-10-12T18:03:29 8190156 3 10 [...].86.249.[...]
    2023-10-19T21:52:23 8220097 5 4 [...].176.105.[...]
    2023-11-18T21:38:25 8150066 18 10 [...].246.147.[...]
    2023-10-21T11:26:44 8220022 4 10 [...].6.74.[...]
    2023-12-17T19:49:16 8210127 9 10 [...].6.114.[...]
    2023-10-15T21:43:58 8210089 3 10 [...].6.1.[...]
    2023-10-23T23:53:00 8220032 4 10 [...].6.161.[...]
    2023-10-15T00:12:19 8190153 3 10 [...].251.52.[...]
    2023-10-28T02:33:35 8220035 5 4 [...].69.118.[...]
    2023-10-11T23:35:28 8220146 1 7 [...].64.77.[...]
    2023-11-02T23:17:33 8220133 6 10 [...].168.1.[...]
    2023-11-03T21:11:16 8210063 6 10 [...].74.120.[...]
    2023-12-05T15:04:14 8190304 10 10 [...].44.146.[...]
    2023-11-26T15:43:08 8190346 7 10 [...].178.230.[...]
    2023-11-19T21:29:08 8220005 18 10 [...].70.57.[...]
    2024-02-12T19:10:24 8150104 11 8 [...].54.243.[...]
    2023-12-09T19:41:04 8210070 10 8 [...].43.33.[...]
    2024-01-04T15:34:31 8220154 17 10 [...].235.106.[...]
    2023-10-31T21:09:07 8220160 16 10 [...].4.164.[...]
    2023-12-10T16:04:14 8220101 10 10 [...].66.61.[...]
    2023-12-03T22:04:53 8210217 8 10 [...].168.2.[...]
    2023-11-21T10:24:24 8210212 7 10 [...].84.165.[...]
    2023-10-13T17:52:32 8200087 2 10 [...].66.36.[...]
    2023-12-20T13:51:04 8220124 8 10 [...].26.19.[...]
    2023-10-11T23:17:32 8220022 2 10 [...].6.74.[...]
    2024-01-02T15:12:53 8190346 7 10 [...].87.17.[...]
    2023-10-18T20:10:05 8220130 3 10 [...].168.1.[...]
    2023-12-05T12:53:30 8220128 10 10 [...].58.194.[...]
    2023-12-25T15:47:55 8210211 17 10 [...].74.17.[...]
    2023-10-14T14:37:55 8190323 1 10 [...].64.72.[...]
    2024-01-11T12:35:08 8220083 1 10 [...].251.6.[...]
    2023-10-25T17:35:35 8210222 5 10 [...].66.221.[...]
    2023-12-03T20:51:35 8220153 8 6 [...].6.238.[...]
    2023-12-08T20:57:29 8220076 10 10 [...].168.1.[...]
    2023-11-03T19:46:28 8220078 6 10 [...].65.52.[...]
    2023-11-15T21:00:41 8220232 18 10 [...].6.71.[...]
    2023-11-08T11:56:11 8170199 12 2 [...].103.107.[...]
    2023-10-13T21:06:55 8220117 1 10 [...].74.124.[...]
    2023-12-17T15:02:18 8220055 9 2 [...].103.239.[...]
    2023-11-08T15:15:52 8170206 5 8 [...].75.24.[...]
    2024-02-12T18:15:02 8150104 10 8 [...].54.243.[...]
    2023-10-12T11:56:09 8220017 2 10 [...].177.151.[...]
    2023-11-29T17:29:39 8210222 8 10 [...].66.221.[...]
    2023-10-14T16:32:20 8220100 3 10 [...].251.52.[...]
    2023-10-24T20:15:39 8220073 3 10 [...].251.255.[...]
    2023-10-16T15:22:10 8190333 3 10 [...].168.1.[...]
    2024-01-01T20:06:35 8220144 17 10 [...].66.59.[...]
    2023-11-07T21:36:21 8210003 12 10 [...].65.196.[...]
    2023-11-28T20:46:17 8210101 8 10 [...].66.36.[...]
    2023-10-14T19:47:12 8220163 2 10 [...].84.162.[...]
    2023-11-06T23:11:44 8220004 12 10 [...].66.38.[...]
    2023-10-28T17:36:09 8220027 5 10 [...].72.119.[...]
    2023-10-31T23:09:45 8190156 16 10 [...].86.249.[...]
    2023-10-24T17:18:32 8220225 4 10 [...].140.3.[...]
    2023-11-06T21:55:30 8220061 12 10 [...].86.146.[...]
    2023-11-05T16:16:23 8220071 6 10 [...].74.153.[...]
    2024-01-07T17:43:22 8220065 17 10 [...].210.97.[...]
    2023-10-19T13:44:48 8220089 3 10 [...].203.249.[...]
    2023-12-21T14:47:06 8190153 17 10 [...].190.100.[...]
    2023-10-21T17:20:01 8220094 4 10 [...].71.169.[...]
    2023-11-04T00:10:23 8220157 6 10 [...].190.95.[...]
    2023-11-05T21:37:01 8210229 4 10 [...].165.223.[...]
    2023-10-24T20:27:13 8220073 3 10 [...].103.103.[...]
    2023-12-10T23:29:51 8220117 10 8 [...].152.145.[...]
    2023-11-04T11:51:39 8220027 6 10 [...].72.119.[...]
    2023-12-08T14:13:21 8220109 10 10 [...].203.187.[...]
    2023-11-05T21:44:20 8220162 6 10 [...].140.107.[...]
    2023-12-16T21:27:50 8180078 10 10 [...].166.63.[...]
    2023-12-03T19:53:01 8220098 16 10 [...].66.38.[...]
    2023-10-16T18:21:30 8220037 2 10 [...].219.117.[...]
    2023-11-14T14:54:48 8220161 18 10 [...].167.62.[...]
    2023-10-25T21:55:38 8220116 4 10 [...].168.1.[...]
    2023-11-10T22:29:55 8220102 12 10 [...].71.169.[...]
    2023-10-21T13:33:46 8220022 4 10 [...].6.74.[...]
    2023-11-13T00:00:14 8190333 12 6 [...].168.0.[...]
    2023-10-26T14:23:43 8200107 5 10 [...].71.109.[...]
    2023-11-04T17:58:08 8220023 6 10 [...].4.73.[...]
    2023-10-31T14:20:57 8180078 6 10 [...].166.63.[...]
    2023-12-16T20:06:09 8220063 9 10 [...].70.57.[...]
    2023-10-17T19:30:52 8190323 2 10 [...].64.72.[...]
    2023-12-12T09:49:03 8220061 9 10 [...].70.77.[...]
    2023-12-17T18:16:13 8220170 9 10 [...].217.166.[...]
    2023-10-14T11:44:07 8200220 2 7 [...].168.1.[...]
    2023-10-14T13:26:39 8220157 3 10 [...].190.83.[...]
    2024-01-08T20:21:41 8220232 15 10 [...].140.77.[...]
    2023-11-10T15:15:46 8210212 18 10 [...].84.161.[...]
    2023-12-20T17:29:26 8220021 17 10 [...].251.255.[...]
    2023-11-26T17:19:50 8190342 6 10 [...].242.224.[...]
    2023-11-28T18:47:48 8220160 8 10 [...].49.231.[...]
    2023-10-11T02:04:56 8220111 2 10 [...].55.130.[...]
    2023-10-19T21:49:10 8220097 5 8 [...].176.105.[...]
    2023-12-03T09:53:02 8220155 8 10 [...].168.0.[...]
    2023-12-17T21:41:01 8220081 9 10 [...].251.255.[...]
    2023-12-07T18:55:28 8220059 10 10 [...].251.52.[...]
    2023-12-03T22:01:13 8220035 8 7 [...].55.151.[...]
    2023-12-19T21:33:26 8190261 9 10 [...].58.224.[...]
    2023-10-18T00:18:59 8200119 16 10 [...].86.176.[...]
    2023-10-29T15:07:42 8220145 6 10 [...].87.88.[...]
    2023-11-12T21:17:00 8220017 12 10 [...].74.58.[...]
    2023-12-12T11:26:37 8170199 11 2 [...].103.107.[...]
    2023-11-17T11:45:51 8200087 18 10 [...].66.36.[...]
    2023-10-29T15:35:41 8220001 5 10 [...].166.94.[...]
    2023-11-24T03:29:08 8190330 7 10 [...].64.205.[...]
    2023-10-18T19:31:31 8220073 4 10 [...].103.9.[...]
    2023-11-15T17:22:51 8190156 7 10 [...].167.53.[...]
    2023-10-24T17:36:16 8220095 5 10 [...].70.57.[...]
    2023-11-23T19:14:55 8190342 2 10 [...].242.227.[...]
    2023-10-15T19:37:59 8220153 2 10 [...].6.118.[...]
    2023-10-24T20:21:05 8220073 4 10 [...].251.255.[...]
    2023-11-15T18:02:28 8220096 18 10 [...].66.58.[...]
    2023-12-26T15:27:30 8220109 17 10 [...].66.136.[...]
    2023-11-09T00:57:47 8220021 12 10 [...].6.159.[...]
    2023-11-01T21:24:01 8220024 6 10 [...].66.38.[...]
    2023-11-19T18:32:04 8220119 18 10 [...].242.234.[...]
    2023-10-24T16:40:49 8220107 4 10 [...].242.185.[...]
    2023-11-18T14:44:10 8220027 7 10 [...].131.231.[...]
    2023-11-05T15:08:53 8220033 6 10 [...].176.97.[...]
    2023-11-13T16:14:28 8220097 9 10 [...].26.73.[...]
    2023-10-27T17:26:29 8220229 4 10 [...].167.62.[...]
    2023-11-22T11:40:06 8210061 7 10 [...].26.3.[...]
    2023-11-21T12:15:31 8220081 18 10 [...].26.46.[...]
    2023-11-10T17:07:26 8210211 12 10 [...].49.77.[...]
    2024-01-10T13:53:00 8220083 16 10 [...].156.60.[...]
    2023-10-18T23:17:01 8220161 6 10 [...].167.62.[...]
    2023-12-21T16:18:30 8220029 8 10 [...].107.160.[...]
    2023-11-16T19:45:01 8220101 18 10 [...].73.158.[...]
    2023-11-03T16:39:42 8220138 16 10 [...].84.46.[...]
    2023-10-24T23:54:37 8220153 5 10 [...].190.53.[...]
    2023-10-31T12:23:12 8190244 2 8 [...].86.83.[...]
    2023-11-19T19:28:51 8220023 18 10 [...].74.58.[...]
    2023-11-21T20:25:41 8220159 7 10 [...].168.0.[...]
    2023-11-19T19:00:46 8220226 18 2 [...].147.188.[...]
    2023-11-18T21:26:49 8220064 18 10 [...].251.255.[...]
    2023-11-12T03:24:41 8220010 12 10 [...].75.30.[...]
    2023-12-02T11:48:14 8190323 8 10 [...].129.213.[...]
    2024-02-11T17:48:51 8220005 10 10 [...].70.57.[...]
    2023-12-13T18:33:43 8220162 9 10 [...].140.101.[...]
    2023-11-18T15:40:56 8220005 7 10 [...].70.57.[...]
    2023-12-12T18:34:09 8220160 9 10 [...].49.231.[...]
    2023-10-18T00:17:19 8220103 1 10 [...].6.0.[...]
    2023-11-10T23:56:41 8180195 18 10 [...].177.119.[...]
    2023-11-12T15:14:50 8220028 12 10 [...].168.0.[...]
    2023-11-20T19:23:30 8200081 7 10 [...].70.57.[...]
    2023-11-05T18:56:08 8220065 6 10 [...].167.90.[...]
    2023-10-14T10:35:25 8200232 6 10 [...].84.237.[...]
    2023-10-13T14:26:00 8220051 2 10 [...].6.160.[...]
    2023-10-21T17:55:37 8200038 4 9 [...].87.143.[...]
    2023-10-28T22:43:56 8220145 3 10 [...].87.88.[...]
    2023-10-25T20:20:52 8210167 4 10 [...].251.52.[...]
    2023-10-27T17:44:25 8180063 4 10 [...].43.102.[...]
    2023-10-24T21:59:07 8220029 5 10 [...].6.204.[...]
    2023-11-30T18:00:34 8220065 8 10 [...].103.47.[...]
    2023-12-08T17:23:32 8150066 10 10 [...].1.208.[...]
    2023-10-28T08:42:50 8210063 5 10 [...].74.120.[...]
    2023-12-10T19:35:47 8220035 10 10 [...].55.151.[...]
    2023-10-29T23:26:52 8210089 5 10 [...].6.0.[...]
    2023-11-08T20:51:20 8220226 7 10 [...].147.188.[...]
    2023-11-01T20:36:52 8220034 16 10 [...].242.187.[...]
    2023-12-07T14:40:12 8220154 10 10 [...].73.173.[...]
    2023-11-03T11:45:30 8220059 6 10 [...].251.52.[...]
    2024-01-04T14:49:45 8220150 17 10 [...].168.1.[...]
    2023-10-12T14:29:24 8220111 3 10 [...].167.62.[...]
    2023-12-17T20:33:41 8220139 9 10 [...].242.234.[...]
    2023-11-03T21:51:39 8220100 16 10 [...].251.52.[...]
    2023-11-08T21:58:54 8220115 12 10 [...].49.177.[...]
    2023-11-19T22:34:31 8220038 18 10 [...].237.19.[...]
    2023-10-17T23:43:37 8220098 2 10 [...].66.38.[...]
    2023-11-08T15:52:04 8210061 6 10 [...].70.255.[...]
    2023-10-24T19:09:42 8190261 2 10 [...].242.233.[...]
    2023-11-06T00:36:20 8200026 16 0 [...].74.5.[...]
    2023-10-12T11:51:38 8220059 1 10 [...].251.52.[...]
    2023-10-25T20:54:02 8180078 2 10 [...].166.63.[...]
    2023-10-18T10:22:17 8220144 3 10 [...].66.136.[...]
    2023-11-11T13:55:00 8220129 12 10 [...].87.230.[...]
    2023-10-26T00:46:14 8220160 6 10 [...].49.133.[...]
    2023-12-28T19:42:43 8140109 17 10 [...].65.213.[...]
    2023-10-20T16:08:57 8180195 2 8 [...].59.224.[...]
    2023-10-24T20:15:22 8220073 3 10 [...].251.255.[...]
    2023-12-12T17:31:20 8220096 9 10 [...].66.58.[...]
    2023-10-24T15:15:11 8220121 3 10 [...].203.223.[...]
    2024-01-15T16:20:05 8220005 1 10 [...].70.57.[...]
    2023-12-17T11:04:04 8220028 9 10 [...].168.1.[...]
    2023-11-16T11:40:49 8220037 18 10 [...].84.125.[...]
    2023-12-21T14:33:23 8220157 15 10 [...].190.13.[...]
    2023-12-03T20:37:43 8100069 7 10 [...].70.57.[...]
    2023-11-19T19:09:09 8220107 18 10 [...].58.195.[...]
    2023-11-22T12:10:08 8220056 18 10 [...].177.144.[...]
    2023-11-23T21:19:56 8220098 7 10 [...].66.38.[...]
    2023-11-01T22:08:05 8220168 16 10 [...].167.46.[...]
    2024-01-15T16:44:45 8220226 17 10 [...].147.202.[...]
    2023-10-15T09:58:45 8220096 2 10 [...].66.56.[...]
    2023-12-16T17:54:21 8220137 9 10 [...].6.3.[...]
    2023-11-12T21:00:37 8220066 12 10 [...].84.200.[...]
    2023-10-14T04:11:27 8220157 2 6 [...].190.83.[...]
    2023-12-12T16:34:45 8220101 9 10 [...].26.16.[...]
    2023-12-11T18:11:22 8140109 10 10 [...].65.213.[...]
    2023-10-10T16:44:02 8220097 1 0 [...].26.73.[...]
    2023-11-29T20:05:21 8220095 8 10 [...].70.57.[...]
    2023-11-05T17:19:09 8190333 6 10 [...].168.1.[...]
    2023-11-16T15:33:59 8220030 18 10 [...].242.46.[...]
    2024-02-12T02:19:52 8190134 17 10 [...].203.82.[...]
    2023-10-13T11:01:53 8220133 2 10 [...].168.1.[...]
    2023-11-19T19:25:34 8220028 18 10 [...].168.0.[...]
    2023-11-19T15:11:17 8220055 18 9 [...].210.118.[...]
    2023-11-20T00:07:34 8220087 9 10 [...].64.136.[...]
    2023-10-17T01:22:29 8220001 3 10 [...].69.52.[...]
    2023-11-07T22:58:42 8220084 12 10 [...].176.237.[...]
    2023-10-16T21:38:43 8220115 4 10 [...].219.78.[...]
    2023-11-08T17:46:59 8180001 16 10 [...].210.121.[...]
    2023-12-25T20:06:20 8220036 9 10 [...].178.252.[...]
    2023-12-22T18:17:25 8220083 2 4 [...].75.252.[...]
    2024-02-12T12:23:33 8180001 5 8 [...].217.165.[...]
    2023-11-04T20:39:36 8150066 16 10 [...].246.147.[...]
    2023-11-04T19:20:51 8200231 15 10 [...].140.28.[...]
    2023-11-29T18:55:00 8210211 8 10 [...].41.47.[...]
    2023-11-20T21:44:20 8220096 7 10 [...].66.58.[...]
    2023-10-13T18:17:07 8220155 3 10 [...].168.1.[...]
    2024-01-04T17:18:43 8220094 17 9 [...].71.169.[...]
    2024-01-10T16:32:29 8200081 10 3 [...].70.57.[...]
    2023-10-11T21:05:42 8220061 3 10 [...].251.255.[...]
    2023-11-08T18:12:01 8220097 12 8 [...].203.212.[...]
    2023-11-26T23:01:59 8220117 7 10 [...].130.29.[...]
    2023-12-08T06:40:31 8200220 10 5 [...].168.1.[...]
    2023-12-05T21:11:48 8220084 10 10 [...].54.202.[...]
    2023-12-20T18:32:04 8220119 17 10 [...].58.227.[...]
    2023-11-02T14:59:09 8190261 16 10 [...].26.52.[...]
    2023-11-09T13:07:54 8220079 12 10 [...].26.66.[...]
    2023-10-18T20:02:01 8220130 2 10 [...].168.1.[...]
    2023-10-24T23:10:16 8220084 4 10 [...].177.81.[...]
    2023-12-04T20:13:09 8190304 8 10 [...].44.146.[...]
    2023-12-10T23:26:14 8210079 10 10 [...].190.38.[...]
    2023-10-12T19:55:08 8210101 3 10 [...].66.36.[...]
    2023-10-14T15:40:04 8220094 2 10 [...].71.169.[...]
    2023-11-29T00:15:59 8220075 8 10 [...].131.98.[...]
    2023-10-13T19:13:41 8220034 2 10 [...].58.192.[...]
    2023-11-07T19:43:59 8180083 16 10 [...].177.119.[...]
    2023-12-03T20:14:33 8190134 8 10 [...].74.100.[...]
    2023-12-03T22:02:55 8220035 8 7 [...].55.151.[...]
    2023-10-15T20:34:38 8220010 1 10 [...].87.4.[...]
    2023-12-19T00:10:33 8220079 17 10 [...].103.143.[...]
    2023-12-19T13:05:55 8220116 17 10 [...].168.1.[...]
    2023-10-12T12:40:20 8200232 2 10 [...].84.237.[...]
    2023-10-21T13:01:22 8220073 3 10 [...].103.9.[...]
    2023-11-16T01:36:41 8220122 18 10 [...].66.136.[...]
    2023-12-17T22:10:30 8220035 9 10 [...].176.150.[...]
    2023-10-25T17:30:43 8220036 4 10 [...].26.21.[...]
    2023-10-21T18:50:13 8220050 4 10 [...].166.112.[...]
    2023-11-01T00:57:42 8220087 6 10 [...].251.255.[...]
    2024-01-17T10:45:09 8220083 9 10 [...].251.6.[...]
    2023-12-10T23:50:02 8190333 10 8 [...].168.1.[...]
    2023-11-02T09:38:42 8220096 16 10 [...].66.58.[...]
    2023-11-22T17:52:05 8220170 7 10 [...].66.222.[...]
    2023-11-15T14:42:59 8190346 12 10 [...].203.167.[...]
    2023-10-19T01:21:23 8220075 7 10 [...].203.208.[...]
    2023-12-10T19:31:07 8220163 10 10 [...].242.184.[...]
    2023-11-18T06:05:13 8210217 18 10 [...].251.255.[...]
    2023-11-03T14:14:34 8220094 6 10 [...].71.169.[...]
    2023-12-03T22:04:46 8220035 8 7 [...].55.151.[...]
    2023-10-28T02:36:09 8220035 5 5 [...].69.118.[...]
    2023-12-02T15:36:08 8220038 8 10 [...].167.135.[...]
    2023-10-31T14:20:21 8220030 6 10 [...].107.175.[...]
    2023-11-21T00:01:22 8200026 18 10 [...].74.176.[...]
    2023-11-22T14:51:33 8220170 7 10 [...].66.222.[...]
    2023-12-25T12:30:30 8220168 17 10 [...].251.255.[...]
    2023-11-19T21:03:18 8220065 18 10 [...].103.62.[...]
    2023-12-27T13:33:28 8220124 13 10 [...].4.81.[...]
    2023-12-29T18:07:29 8220083 8 6 [...].74.149.[...]
    2023-12-07T19:02:39 8210003 10 10 [...].103.219.[...]
    2023-11-27T16:20:13 8220130 7 10 [...].168.1.[...]
    2023-10-28T02:43:24 8220035 5 10 [...].69.118.[...]
    2023-12-10T19:54:40 8220024 10 10 [...].203.167.[...]
    2023-10-20T14:05:33 8180195 2 6 [...].59.224.[...]
    2023-10-20T23:29:54 8220009 4 10 [...].73.99.[...]
    2023-11-17T18:00:00 8220087 7 10 [...].64.136.[...]
    2023-10-15T13:27:06 8220158 2 10 [...].203.156.[...]
    2023-11-12T11:07:10 8220159 12 10 [...].168.0.[...]
    2023-11-06T18:47:55 8180195 6 10 [...].177.119.[...]
    2023-11-10T18:55:10 8220009 12 10 [...].66.247.[...]
    2023-12-04T03:04:50 8190134 18 10 [...].74.100.[...]
    2024-02-12T01:52:23 8220103 8 10 [...].242.227.[...]
    2023-10-26T17:49:55 8220210 5 10 [...].198.166.[...]
    2023-11-01T21:30:40 8220063 16 10 [...].138.148.[...]
    2023-12-03T21:45:54 8210217 8 6 [...].168.2.[...]
    2023-12-25T18:23:07 8220162 17 10 [...].140.101.[...]
    2023-12-12T18:18:17 8220232 9 10 [...].140.77.[...]
    2023-11-19T22:53:08 8220069 7 10 [...].87.197.[...]
    2024-01-16T20:00:46 8190261 10 10 [...].139.212.[...]
    2023-12-08T21:59:18 8220096 10 10 [...].66.58.[...]
    2023-12-09T18:38:01 8190342 10 8 [...].242.225.[...]
    2023-12-17T20:40:13 8220163 9 10 [...].140.88.[...]
    2023-10-30T20:15:41 8220101 6 10 [...].73.158.[...]
    2023-10-31T19:52:18 8220087 16 10 [...].203.248.[...]
    2023-10-10T18:38:30 8220134 1 10 [...].70.57.[...]
    2023-11-29T00:35:56 8210063 8 10 [...].74.120.[...]
    2023-10-31T22:15:20 8190156 6 10 [...].86.249.[...]
    2023-11-13T18:38:51 8220081 12 10 [...].84.176.[...]
    2023-12-20T22:35:44 8220164 17 10 [...].86.141.[...]
    2023-12-19T13:18:41 8220005 17 10 [...].70.57.[...]
    2023-10-10T17:00:46 8220097 1 5 [...].26.73.[...]
    2023-10-17T22:58:02 8220004 6 10 [...].66.38.[...]
    2023-10-26T19:35:59 8220101 5 10 [...].73.158.[...]
    2023-10-24T15:21:52 8220012 5 10 [...].131.255.[...]
    2023-10-24T20:14:01 8220073 3 10 [...].251.255.[...]
    2023-12-03T21:45:46 8220066 8 10 [...].84.200.[...]
    2023-11-19T12:55:56 8220069 18 10 [...].87.197.[...]
    2023-10-16T23:25:13 8220109 2 9 [...].58.227.[...]
    2023-10-13T10:30:57 8200220 2 7 [...].168.1.[...]
    2023-11-02T17:02:09 8220062 16 10 [...].168.1.[...]
    2023-11-04T21:17:28 8190091 6 10 [...].65.40.[...]
    2023-12-10T19:19:25 8220035 10 6 [...].55.151.[...]
    2023-11-22T21:23:46 8210167 15 10 [...].251.52.[...]
    2023-12-05T19:31:24 8210222 10 10 [...].66.221.[...]
    2023-11-22T14:16:50 8220154 7 10 [...].67.42.[...]
    2023-11-02T19:02:57 8220150 16 10 [...].168.0.[...]
    2023-10-14T13:57:05 8220043 6 10 [...].74.38.[...]
    2023-12-17T20:25:52 8220088 9 10 [...].168.1.[...]
    2023-10-31T03:32:32 8220102 16 10 [...].49.188.[...]
    2023-10-22T04:16:42 8180195 3 10 [...].59.224.[...]
    2023-11-16T12:30:50 8220089 7 10 [...].71.4.[...]
    2023-10-24T20:32:14 8220232 5 10 [...].6.214.[...]
    2024-01-13T19:36:13 8200232 18 10 [...].70.57.[...]
    2023-12-25T22:46:59 8220009 17 10 [...].72.244.[...]
    2023-12-22T02:20:18 8220029 9 10 [...].107.160.[...]
    2023-10-10T18:47:25 8220128 2 10 [...].242.139.[...]
    2023-12-11T22:12:27 8220116 9 10 [...].168.1.[...]
    2023-10-15T00:41:17 8210212 4 10 [...].84.161.[...]
    2023-12-09T17:14:47 8220158 10 8 [...].130.83.[...]
    2023-10-14T16:32:59 8210127 2 10 [...].40.212.[...]
    2023-10-11T00:51:09 8220097 2 4 [...].176.105.[...]
    2023-11-12T17:16:29 8220229 12 10 [...].167.62.[...]
    2023-11-02T20:05:45 8180090 4 10 [...].131.142.[...]
    2023-11-02T14:08:46 8220169 6 10 [...].26.75.[...]
    2023-10-23T16:01:56 8220129 5 10 [...].26.69.[...]
    2024-02-12T11:17:05 8220103 17 10 [...].242.227.[...]
    2023-10-16T17:02:59 8220146 3 10 [...].73.230.[...]
    2024-01-17T13:48:32 8220226 16 10 [...].147.202.[...]
    2023-11-04T18:38:52 8220023 16 10 [...].4.73.[...]
    2023-12-08T14:15:46 8220008 10 10 [...].26.76.[...]
    2023-10-15T22:28:48 8220225 3 10 [...].140.3.[...]
    2024-02-11T00:57:42 8190330 18 10 [...].131.96.[...]
    2023-12-09T20:00:55 8220129 10 10 [...].87.230.[...]
    2023-11-19T23:26:31 8220033 18 10 [...].166.118.[...]
    2023-10-26T20:18:22 8180078 4 10 [...].166.63.[...]
    2023-12-24T12:17:26 8220083 4 10 [...].74.149.[...]
    2023-10-11T22:00:22 8220160 3 10 [...].49.133.[...]
    2023-10-12T10:23:13 8220146 1 2 [...].251.255.[...]
    2023-10-29T15:24:25 8220020 4 10 [...].86.128.[...]
    2024-01-10T12:44:53 8220210 15 10 [...].74.13.[...]
    2023-10-24T20:28:38 8220029 4 10 [...].6.204.[...]
    2023-11-06T22:10:14 8210061 5 8 [...].58.137.[...]
    2023-12-03T20:49:26 8220153 8 6 [...].6.238.[...]
    2024-01-10T15:07:36 8200081 18 10 [...].70.57.[...]
    2023-12-04T00:15:38 8220129 8 10 [...].87.230.[...]
    2023-11-05T21:23:43 8220107 16 10 [...].58.195.[...]
    2023-11-06T19:03:30 8210061 2 10 [...].75.24.[...]
    2023-10-28T08:27:26 8210063 4 10 [...].74.120.[...]
    2023-11-19T23:58:10 8220138 18 10 [...].65.92.[...]
    2023-11-26T22:23:18 8220065 7 10 [...].103.61.[...]
    2023-12-09T21:15:12 8220168 10 10 [...].69.54.[...]
    2023-10-19T21:54:27 8220097 5 10 [...].176.105.[...]
    2023-10-13T19:07:52 8220146 2 10 [...].70.55.[...]
    2023-11-17T15:12:10 8220026 7 10 [...].176.110.[...]
    2023-12-03T23:50:02 8220117 8 6 [...].130.29.[...]
    2023-11-19T22:57:31 8220115 18 10 [...].49.177.[...]
    2023-11-13T23:25:22 8220026 18 10 [...].176.110.[...]
    2024-02-11T22:40:48 8190134 10 8 [...].203.82.[...]
    2023-12-16T19:01:41 8220079 9 10 [...].103.143.[...]
    2023-10-29T13:50:29 8220098 4 10 [...].66.38.[...]
    2023-10-15T20:55:02 8220069 3 10 [...].87.193.[...]
    2023-10-10T23:06:18 8220033 1 10 [...].55.197.[...]
    2023-12-12T15:00:18 8220021 9 10 [...].251.255.[...]
    2023-11-26T17:35:13 8220050 7 10 [...].251.255.[...]
    2023-10-24T19:11:48 8190261 4 10 [...].242.233.[...]
    2024-02-12T23:45:23 8070147 11 9 [...].131.142.[...]
    2023-10-18T19:38:18 8220103 3 10 [...].6.1.[...]
    2023-11-23T12:27:21 8220163 7 10 [...].178.251.[...]
    2023-12-29T17:02:09 8220083 2 7 [...].74.149.[...]
    2023-10-11T20:35:51 8210217 2 10 [...].87.17.[...]
    2023-10-21T14:17:08 8220017 4 10 [...].177.151.[...]
    2023-10-11T23:34:23 8220146 1 2 [...].64.77.[...]
    2024-01-07T14:02:42 8220147 13 10 [...].69.97.[...]
    2024-01-03T00:29:01 8220084 13 10 [...].176.243.[...]
    2023-12-17T23:23:32 8220117 9 10 [...].74.126.[...]
    2023-10-16T12:54:28 8220076 2 10 [...].168.1.[...]
    2023-10-31T19:01:45 8210127 15 10 [...].6.0.[...]
    2023-11-19T17:47:07 8220047 18 10 [...].140.29.[...]
    2023-12-17T15:31:16 8210070 9 10 [...].43.33.[...]
    2023-11-04T18:57:20 8210079 15 10 [...].6.125.[...]
    2024-01-07T13:11:37 8220088 17 10 [...].168.1.[...]
    2023-12-11T22:24:26 8220225 9 10 [...].140.65.[...]
    2023-10-19T00:35:30 8220122 4 10 [...].66.136.[...]
    2023-10-17T17:13:52 8200038 2 9 [...].26.6.[...]
    2023-12-05T16:21:32 8220093 10 10 [...].55.102.[...]
    2023-11-04T12:40:50 8200107 16 10 [...].71.109.[...]
    2023-11-12T16:15:21 8220101 12 10 [...].73.158.[...]
    2023-11-19T23:57:12 8220050 18 2 [...].54.245.[...]
    2023-11-01T13:43:31 8220124 6 10 [...].131.255.[...]
    2023-10-16T04:03:39 8190333 2 8 [...].168.1.[...]
    2023-10-26T14:48:14 8220097 6 10 [...].203.138.[...]
    2023-11-05T15:58:24 8210229 1 10 [...].165.223.[...]
    2023-12-19T01:00:00 8220118 9 10 [...].251.255.[...]
    2023-12-19T16:03:10 8220161 17 10 [...].237.28.[...]
    2023-12-18T17:25:44 8220098 9 10 [...].26.15.[...]
    2023-10-31T18:31:44 8180063 6 10 [...].43.102.[...]
    2023-12-19T23:22:23 8220100 17 10 [...].251.52.[...]
    2023-12-03T22:02:39 8220035 8 4 [...].55.151.[...]
    2023-11-07T17:09:55 8220111 12 10 [...].167.62.[...]
    2023-10-13T13:45:41 8220095 3 10 [...].70.57.[...]
    2023-10-21T13:34:54 8220022 5 10 [...].6.74.[...]
    2023-12-10T22:26:43 8210127 10 10 [...].6.114.[...]
    2023-12-03T19:30:21 8220034 8 10 [...].74.57.[...]
    2023-12-04T00:03:03 8220132 8 10 [...].70.57.[...]
    2023-12-10T18:25:27 8220150 10 10 [...].168.1.[...]
    2023-10-22T13:44:50 8220005 5 10 [...].70.57.[...]
    2023-11-04T15:05:04 8220092 16 10 [...].74.14.[...]
    2023-11-04T11:20:56 8220157 16 10 [...].190.95.[...]
    2023-10-29T21:41:35 8180090 1 10 [...].66.136.[...]
    2023-12-20T17:25:35 8220055 17 10 [...].103.239.[...]
    2023-12-07T23:05:52 8220033 10 10 [...].177.156.[...]
    2024-02-12T02:46:27 8190134 9 2 [...].203.82.[...]
    2023-11-24T10:45:56 8220098 6 9 [...].26.15.[...]
    2023-12-10T12:48:29 8200107 10 10 [...].71.104.[...]
    2023-12-08T00:15:50 8220126 10 10 [...].43.27.[...]
    2023-11-08T17:24:45 8210101 12 10 [...].66.36.[...]
    2023-10-18T20:12:13 8220161 5 10 [...].167.62.[...]
    2023-12-08T01:12:37 8220167 10 10 [...].87.149.[...]
    2023-12-08T17:49:58 8220051 10 10 [...].242.226.[...]
    2023-10-10T15:43:03 8190304 2 10 [...].44.146.[...]
    2023-11-22T20:24:31 8220062 18 10 [...].168.1.[...]
    2023-10-12T17:22:04 8190156 2 10 [...].86.249.[...]
    2023-10-14T11:30:18 8220097 3 10 [...].176.105.[...]
    2023-12-03T22:29:26 8220146 8 10 [...].129.190.[...]
    2023-12-19T20:11:26 8220159 17 10 [...].168.0.[...]
    2024-01-16T15:09:10 8220083 9 10 [...].251.6.[...]
    2023-11-17T05:27:04 8210063 18 10 [...].74.120.[...]
    2023-11-19T21:03:09 8220117 18 10 [...].130.29.[...]
    2023-11-02T19:04:02 8150104 5 10 [...].210.32.[...]
    2023-10-15T18:56:33 8210003 3 10 [...].92.136.[...]
    2023-10-27T17:55:23 8180195 4 10 [...].54.207.[...]
    2023-10-28T13:24:35 8220162 5 10 [...].140.6.[...]
    2023-12-10T19:26:31 8220035 10 6 [...].55.151.[...]
    2023-10-17T23:34:47 8220122 3 10 [...].66.136.[...]
    2023-10-30T21:37:49 8220050 6 10 [...].54.245.[...]
    2023-10-16T23:35:01 8220109 2 10 [...].58.227.[...]
    2023-10-20T23:10:31 8210127 5 10 [...].190.58.[...]
    2023-11-05T15:06:31 8190323 6 10 [...].107.127.[...]
    2023-11-25T19:01:19 8220146 7 10 [...].73.236.[...]
    2023-10-24T17:49:43 8220063 5 10 [...].138.149.[...]
    2023-11-30T15:45:03 8210212 8 10 [...].84.169.[...]
    2023-12-10T19:07:36 8220035 10 5 [...].55.151.[...]
    2023-10-23T20:53:44 8220232 4 10 [...].6.220.[...]
    2023-12-08T11:52:39 8170199 10 4 [...].103.107.[...]
    2023-11-12T17:44:52 8210167 18 10 [...].210.179.[...]
    2023-11-19T20:12:24 8070147 5 8 [...].74.37.[...]
    2023-10-18T19:08:49 8220056 3 10 [...].177.5.[...]
    2023-12-12T16:41:37 8220084 9 10 [...].26.0.[...]
    2023-11-20T00:21:58 8220158 18 10 [...].237.94.[...]
    2024-02-12T11:02:35 8220103 10 8 [...].242.227.[...]
    2024-02-10T22:39:08 8190330 9 10 [...].131.96.[...]
    2023-11-18T18:28:16 8220035 18 8 [...].55.11.[...]
    2023-12-02T17:26:03 8220059 8 10 [...].251.52.[...]
    2024-01-17T13:12:58 8190244 9 10 [...].86.108.[...]
    2023-11-12T16:51:31 8220026 12 10 [...].66.221.[...]
    2023-10-13T16:07:13 8220075 4 10 [...].84.201.[...]
    2023-11-17T12:42:52 8220001 18 10 [...].166.94.[...]
    2023-10-17T16:26:12 8220092 2 10 [...].74.58.[...]
    2023-10-17T20:45:09 8200026 3 10 [...].74.5.[...]
    2023-10-28T02:41:47 8220035 5 8 [...].69.118.[...]
    2023-11-01T21:03:18 8200066 4 10 [...].87.65.[...]
    2023-12-02T17:21:43 8220051 8 10 [...].242.224.[...]
    2023-10-26T23:25:19 8220117 4 10 [...].74.121.[...]
    2023-10-14T11:31:28 8220097 3 10 [...].176.105.[...]
    2023-10-10T09:43:12 2 1 3 [...].64.77.[...]
    2023-12-11T12:53:47 8220074 10 10 [...].219.117.[...]
    2023-10-19T12:24:28 8220021 4 10 [...].6.123.[...]
    2023-10-17T20:35:21 8220088 2 10 [...].168.1.[...]
    2023-10-17T21:19:07 8220139 3 10 [...].58.226.[...]
    2023-12-17T13:58:02 8220020 9 10 [...].246.243.[...]
    2023-12-14T17:06:58 8220017 9 10 [...].177.31.[...]
    2023-11-03T19:13:12 8200087 6 10 [...].66.36.[...]
    2024-01-08T18:19:14 8220084 12 10 [...].55.43.[...]
    2023-11-24T13:24:18 8210213 7 10 [...].65.88.[...]
    2023-10-15T14:06:49 8220074 3 10 [...].166.187.[...]
    2023-11-02T13:14:05 8190334 4 10 [...].65.101.[...]
    2023-10-28T16:32:53 8220034 5 10 [...].130.172.[...]
    2023-12-12T00:02:10 8220087 9 10 [...].64.136.[...]
    2023-12-20T17:13:18 8220055 17 9 [...].103.239.[...]
    2023-12-19T19:44:20 8220096 17 10 [...].178.160.[...]
    2023-10-17T16:11:33 8220167 3 10 [...].26.73.[...]
    2023-11-15T20:23:19 8220153 18 10 [...].6.119.[...]
    2023-10-26T07:54:11 8220096 5 10 [...].66.58.[...]
    2023-11-10T16:58:56 8210213 12 10 [...].251.255.[...]
    2023-12-08T14:37:56 8220064 10 10 [...].26.37.[...]
    2023-12-17T22:06:45 8220035 9 0 [...].176.150.[...]
    2024-01-15T15:28:56 8220226 10 10 [...].147.202.[...]
    2023-12-24T01:47:47 8220102 17 10 [...].43.52.[...]
    2024-01-16T00:52:55 8180090 8 8 [...].66.136.[...]
    2023-10-17T01:22:04 8220109 3 10 [...].58.227.[...]
    2023-12-16T22:04:26 8220119 9 10 [...].58.226.[...]
    2023-11-08T12:12:26 8220058 6 10 [...].26.65.[...]
    2023-10-20T14:34:01 8180083 1 7 [...].59.224.[...]
    2023-10-14T12:35:18 8220055 2 10 [...].210.118.[...]
    2023-10-27T16:06:27 8220076 4 10 [...].168.1.[...]
    2023-10-11T15:05:10 8210070 2 10 [...].26.68.[...]
    2023-10-26T22:39:26 8190153 5 10 [...].251.52.[...]
    2023-10-16T18:39:34 8220026 4 10 [...].66.221.[...]
    2023-10-25T21:21:22 8140109 16 10 [...].75.156.[...]
    2023-10-11T23:15:53 8220160 2 10 [...].49.133.[...]
    2023-12-10T16:51:50 8220155 10 10 [...].168.1.[...]
    2023-10-13T19:48:07 8140109 2 10 [...].131.156.[...]
    2023-11-10T09:31:10 8220022 12 10 [...].190.29.[...]
    2023-12-03T22:02:26 8220035 8 7 [...].55.151.[...]
    2023-12-05T16:08:53 8220160 10 10 [...].49.231.[...]
    2023-12-31T18:11:32 8220163 17 10 [...].87.176.[...]
    2023-12-18T19:43:25 8220232 17 10 [...].140.77.[...]
    2023-10-16T21:16:00 8220111 4 10 [...].167.62.[...]
    2023-10-17T23:10:21 8220010 3 10 [...].87.4.[...]
    2024-01-07T11:07:04 8220043 17 10 [...].74.56.[...]
    2023-12-17T22:07:23 8220035 9 2 [...].176.150.[...]
    2024-01-24T13:08:05 8220071 18 2 [...].74.149.[...]
    2023-11-11T22:53:19 8220038 12 10 [...].168.1.[...]
    2023-12-23T14:14:51 8180090 6 10 [...].66.136.[...]
    2023-11-04T22:17:16 8190091 16 10 [...].65.40.[...]
    2023-10-28T16:28:24 8200087 5 10 [...].66.36.[...]
    2023-12-17T16:03:08 8210212 10 8 [...].84.170.[...]
    2023-12-20T17:26:45 8220021 17 10 [...].251.255.[...]
    2023-10-12T14:32:01 8220138 2 10 [...].26.74.[...]
    2023-10-16T18:19:44 8220170 2 9 [...].130.132.[...]
    2023-11-15T19:22:12 8220095 18 10 [...].70.57.[...]
    2023-12-18T17:23:20 8220155 17 10 [...].168.1.[...]
    2023-10-18T09:57:44 8220226 2 6 [...].147.77.[...]
    2023-11-03T17:42:22 8220164 6 10 [...].86.141.[...]
    2023-12-01T19:41:00 8220161 9 10 [...].166.51.[...]
    2023-11-01T20:23:44 8220138 6 10 [...].84.46.[...]
    2023-10-16T16:55:40 8190333 4 10 [...].168.1.[...]
    2023-10-22T19:51:41 8200231 3 10 [...].140.28.[...]
    2023-11-09T01:19:40 8220092 12 10 [...].74.47.[...]
    2023-11-18T12:32:31 8220167 18 10 [...].38.242.[...]
    2023-11-23T22:51:42 8220225 7 10 [...].140.65.[...]
    2023-10-28T10:38:04 8190323 4 10 [...].71.97.[...]
    2023-10-28T16:28:41 8220129 6 10 [...].130.13.[...]
    2023-11-01T13:40:52 8220089 16 10 [...].26.13.[...]
    2023-10-24T13:07:59 8220079 5 10 [...].26.66.[...]
    2023-10-29T12:38:18 8210211 5 10 [...].74.47.[...]
    2023-10-29T18:32:42 8200220 4 10 [...].168.0.[...]
    2023-11-29T19:25:55 8220109 8 10 [...].203.197.[...]
    2023-11-25T00:35:14 8220009 7 10 [...].87.152.[...]
    2023-11-04T13:35:46 8200231 6 10 [...].140.28.[...]
    2023-12-17T22:13:39 8220071 17 10 [...].74.150.[...]
    2023-10-24T13:32:21 8220162 4 10 [...].140.6.[...]
    2023-10-16T22:02:50 8220078 3 10 [...].6.0.[...]
    2023-10-25T18:11:10 8220210 4 10 [...].74.15.[...]
    2023-11-01T13:45:38 8220089 6 10 [...].26.13.[...]
    2023-10-13T16:06:40 8220155 2 6 [...].168.1.[...]
    2023-12-07T21:58:29 8220072 10 10 [...].70.57.[...]
    2023-10-27T10:21:33 8210211 4 10 [...].49.217.[...]
    2023-11-15T23:24:00 8220133 7 10 [...].168.1.[...]
    2023-10-24T19:12:52 8100069 5 10 [...].70.57.[...]
    2023-10-25T14:01:40 8220012 6 10 [...].26.20.[...]
    2023-11-21T21:53:47 8220034 7 10 [...].140.90.[...]
    2023-10-19T16:20:53 8220063 4 10 [...].26.59.[...]
    2023-12-01T17:43:09 8220021 8 10 [...].6.148.[...]
    2023-11-20T12:33:17 8220121 18 10 [...].203.175.[...]
    2024-01-09T20:57:16 8210063 15 10 [...].87.193.[...]
    2023-10-23T20:35:55 8140109 6 10 [...].75.156.[...]
    2024-01-04T12:42:24 8220084 13 10 [...].176.243.[...]
    2023-11-10T16:44:08 8190304 13 10 [...].44.146.[...]
    2023-12-03T20:12:33 8220163 8 10 [...].87.176.[...]
    2023-12-11T20:04:22 8220132 9 10 [...].66.38.[...]
    2023-11-20T00:22:16 8220158 18 10 [...].237.94.[...]
    2023-11-04T18:41:12 8220139 16 10 [...].140.30.[...]
    2024-01-02T21:24:03 8220138 10 10 [...].10.75.[...]
    2023-12-10T23:32:05 8180195 10 8 [...].74.233.[...]
    2023-11-19T23:18:05 8220010 18 10 [...].177.13.[...]
    2023-10-26T20:19:01 8220167 5 10 [...].66.136.[...]
    2023-11-10T15:06:13 8190304 12 10 [...].44.146.[...]
    2024-01-01T14:34:29 8220167 17 10 [...].246.143.[...]
    2023-11-28T23:51:44 8190333 7 10 [...].168.1.[...]
    2023-12-02T22:55:46 8210003 8 10 [...].103.219.[...]
    2023-11-03T16:30:24 8220139 6 10 [...].58.224.[...]
    2023-10-28T23:31:26 8210222 6 10 [...].66.221.[...]
    2023-10-12T01:13:22 8220225 2 10 [...].140.3.[...]
    2023-11-25T23:57:22 8220015 7 10 [...].71.169.[...]
    2023-11-07T23:05:35 8220030 12 10 [...].107.133.[...]
    2023-10-15T02:28:41 8210079 3 10 [...].251.255.[...]
    2023-10-15T22:02:34 8210089 2 9 [...].6.1.[...]
    2023-12-09T01:00:54 8220069 10 10 [...].74.120.[...]
    2023-10-11T23:12:27 8220100 2 10 [...].251.52.[...]
    2023-10-17T19:45:25 8190323 3 10 [...].64.72.[...]
    2024-01-02T15:25:52 8220036 10 10 [...].66.38.[...]
    2023-10-14T14:49:27 8220036 2 10 [...].66.38.[...]
    2023-10-25T20:20:05 8190346 5 10 [...].26.24.[...]
    2023-11-07T19:34:10 8180083 6 10 [...].177.119.[...]
    2023-12-07T14:55:06 8220026 10 10 [...].66.221.[...]
    2024-01-15T15:36:57 8220058 15 10 [...].71.169.[...]
    2023-11-04T20:29:07 8150066 6 9 [...].246.147.[...]
    2023-11-20T17:20:14 8220101 7 10 [...].66.61.[...]
    2023-11-03T17:52:16 8220126 16 10 [...].92.82.[...]
    2023-10-31T19:54:02 8220159 16 10 [...].168.0.[...]
    2023-12-19T17:54:42 8210089 10 10 [...].242.137.[...]
    2023-11-08T18:40:04 8220008 12 10 [...].26.76.[...]
    2023-12-08T01:56:05 8200119 10 10 [...].86.179.[...]
    2023-10-13T13:19:38 8220095 2 10 [...].70.57.[...]
    2023-11-13T19:33:59 8190156 18 10 [...].167.53.[...]
    2023-10-14T12:48:31 8190323 1 10 [...].64.72.[...]
    2023-11-10T23:56:58 8220167 12 10 [...].87.136.[...]
    2023-10-30T23:27:26 8220095 6 10 [...].70.57.[...]
    2023-10-15T22:42:24 8190244 1 10 [...].70.57.[...]
    2023-11-02T18:52:11 8220155 16 10 [...].168.1.[...]
    2023-10-29T13:47:42 8220098 5 10 [...].66.38.[...]
    2023-11-23T00:20:58 8220098 18 10 [...].66.38.[...]
    2023-10-20T15:02:53 8180083 2 10 [...].59.224.[...]
    2023-10-12T14:21:46 8220161 3 10 [...].167.62.[...]
    2023-12-17T17:31:38 8220038 9 10 [...].237.23.[...]
    2023-10-24T20:16:09 8220073 3 10 [...].251.255.[...]
    2023-10-17T11:41:27 8220028 2 10 [...].168.1.[...]
    2023-11-28T23:37:32 8220017 8 10 [...].177.13.[...]
    2023-11-19T23:33:28 8220078 18 10 [...].6.1.[...]
    2023-11-19T19:22:25 8220028 18 10 [...].168.0.[...]
    2023-11-23T22:41:25 8220168 7 10 [...].251.255.[...]
    2023-11-19T21:58:40 8220059 18 10 [...].251.52.[...]
    2023-10-13T01:07:18 8180195 1 8 [...].59.224.[...]
    2023-11-16T11:33:28 8220092 7 10 [...].74.20.[...]
    2023-10-21T13:35:26 8220022 6 10 [...].6.74.[...]
    2023-10-13T15:17:30 8220064 2 10 [...].54.248.[...]
    2023-12-12T18:33:03 8210063 9 2 [...].70.36.[...]
    2023-10-13T12:07:32 8220133 3 10 [...].168.1.[...]
    2023-10-31T17:03:19 8220116 6 10 [...].168.1.[...]
    2023-11-04T20:05:33 8210211 6 8 [...].49.217.[...]
    2023-11-09T20:15:49 8190261 12 10 [...].58.138.[...]
    2023-11-13T14:14:02 8170199 7 2 [...].103.107.[...]
    2023-12-03T18:53:27 8220076 8 10 [...].168.1.[...]
    2023-11-05T23:47:01 8190334 1 10 [...].129.28.[...]
    2023-11-26T14:48:14 8220066 7 10 [...].84.200.[...]
    2024-02-12T19:37:06 8150104 17 9 [...].54.243.[...]
    2023-10-31T22:33:39 8220116 16 10 [...].168.1.[...]
    2023-10-24T21:33:08 8150104 4 10 [...].92.17.[...]
    2023-11-21T16:45:22 8220036 7 10 [...].203.237.[...]
    2023-11-13T13:47:16 8220084 18 10 [...].64.113.[...]
    2023-11-30T18:32:33 8220133 8 10 [...].168.1.[...]
    2023-12-07T21:50:29 8220009 10 10 [...].66.245.[...]
    2024-01-17T11:38:07 8200232 8 10 [...].84.237.[...]
    2023-12-01T00:04:38 8220033 8 10 [...].69.60.[...]
    2023-11-03T16:08:49 8220153 7 10 [...].6.155.[...]
    2023-11-11T20:16:35 8210222 18 10 [...].66.221.[...]
    2023-12-31T18:50:01 8220124 14 10 [...].251.114.[...]
    2023-10-29T14:30:08 8220071 4 10 [...].74.153.[...]
    2023-12-24T19:28:07 8220056 17 10 [...].210.42.[...]
    2023-10-12T19:33:10 8220084 2 10 [...].255.91.[...]
    2023-11-08T15:34:22 8170206 6 8 [...].75.24.[...]
    2023-11-26T12:49:37 8220055 7 9 [...].210.118.[...]
    2023-10-10T17:27:28 8190304 3 10 [...].44.146.[...]
    2023-11-19T23:21:41 8220059 18 10 [...].251.52.[...]
    2023-10-25T21:56:01 8220076 5 10 [...].168.1.[...]
    2023-12-12T09:38:38 8220061 9 8 [...].70.77.[...]
    2023-12-14T20:22:29 8220133 9 10 [...].168.1.[...]
    2023-11-13T12:15:37 8220138 12 9 [...].26.74.[...]
    2024-01-17T13:23:48 8220226 12 10 [...].147.202.[...]
    2023-11-05T16:04:29 8220020 16 10 [...].242.234.[...]
    2023-11-13T16:09:39 8220097 9 8 [...].26.73.[...]
    2024-01-14T14:39:54 8220083 5 10 [...].130.130.[...]
    2023-10-14T17:33:40 8220094 3 10 [...].71.169.[...]
    2023-11-17T13:26:20 8220043 18 10 [...].55.209.[...]
    2023-12-07T12:17:47 8220061 10 10 [...].74.17.[...]
    2023-12-07T15:00:08 8220021 10 10 [...].26.56.[...]
    2023-11-16T20:24:37 8220134 18 10 [...].66.56.[...]
    2023-11-23T23:20:21 8190342 3 10 [...].242.227.[...]
    2023-11-23T23:20:31 8190342 3 10 [...].242.227.[...]
    2023-11-26T16:52:19 0 2 8 [...].129.224.[...]
    2023-11-02T00:14:09 8220128 6 10 [...].73.237.[...]
    2023-12-13T18:26:05 8220077 9 10 [...].65.88.[...]
    2023-12-13T14:05:34 8220026 9 10 [...].131.255.[...]
    2023-11-03T00:44:00 8190153 16 10 [...].251.52.[...]
    2023-11-01T12:47:55 8220124 5 10 [...].131.255.[...]
    2023-11-01T16:23:04 8220146 6 10 [...].26.41.[...]
    2023-11-19T15:05:07 8220055 18 8 [...].210.118.[...]
    2023-12-23T18:33:58 8220133 17 10 [...].168.1.[...]
    2023-10-31T20:30:56 8220161 16 10 [...].167.62.[...]
    2023-10-18T17:14:21 8220024 4 10 [...].203.223.[...]
    2023-10-13T19:09:06 8220043 4 10 [...].177.150.[...]
    2023-11-05T20:18:12 8220001 16 10 [...].166.94.[...]
    2023-10-16T15:30:39 8220129 3 10 [...].84.181.[...]
    2023-10-14T17:53:12 8220005 2 8 [...].70.57.[...]
    2023-10-20T14:57:37 8220077 4 10 [...].168.1.[...]
    2023-10-12T23:26:31 8220033 2 10 [...].55.197.[...]
    2023-10-22T19:12:55 8100069 4 10 [...].70.57.[...]
    2023-11-07T17:02:25 8220107 12 10 [...].58.195.[...]
    2023-11-19T21:18:44 8220232 18 10 [...].70.57.[...]
    2024-02-11T22:08:46 8190134 7 10 [...].203.82.[...]
    2023-10-14T21:50:14 8220132 2 10 [...].70.57.[...]
    2023-10-29T19:44:36 8170199 5 6 [...].92.171.[...]
    2023-10-15T18:46:34 8220126 4 10 [...].140.123.[...]
    2023-11-12T09:56:13 8220035 12 8 [...].55.11.[...]
    2023-12-17T21:49:08 8190333 9 10 [...].168.1.[...]
    2023-10-26T13:06:29 8200107 4 10 [...].71.109.[...]
    2023-10-21T14:56:16 8220037 4 10 [...].84.125.[...]
    2023-10-14T22:16:42 8220035 2 8 [...].69.118.[...]
    2023-10-30T00:29:51 8190244 3 10 [...].70.57.[...]
    2023-12-01T14:03:51 8220096 8 10 [...].66.58.[...]
    2023-11-04T13:19:30 8220092 6 10 [...].74.14.[...]
    2023-11-21T13:04:01 8200038 18 8 [...].87.142.[...]
    2023-12-08T16:11:15 8220063 10 10 [...].70.57.[...]
    2023-10-09T22:42:21 8220210 2 10 [...].44.98.[...]
    2023-10-24T17:36:21 8210101 5 10 [...].66.36.[...]
    2023-10-17T14:29:47 8220169 2 8 [...].26.75.[...]
    2023-12-16T17:10:36 8180090 7 10 [...].66.136.[...]
    2023-12-06T21:28:23 8220133 10 8 [...].168.1.[...]
    2023-10-31T18:14:29 8210222 16 10 [...].66.221.[...]
    2023-11-10T19:41:52 8220095 12 10 [...].70.57.[...]
    2023-10-30T15:05:36 8180078 1 10 [...].166.63.[...]
    2023-11-12T20:19:35 8220088 12 10 [...].168.1.[...]
    2023-11-08T00:55:32 8180078 12 10 [...].166.63.[...]
    2023-10-12T20:16:44 8220093 2 10 [...].168.1.[...]
    2023-12-02T22:38:57 8220225 8 10 [...].140.65.[...]
    2023-10-21T17:15:42 8220069 5 10 [...].73.82.[...]
    2023-10-28T16:26:02 8220071 2 10 [...].74.153.[...]
    2023-10-31T20:30:48 8220161 16 10 [...].167.62.[...]
    2023-10-30T22:33:17 8220075 16 10 [...].84.192.[...]
    2023-10-18T14:10:39 8220103 2 10 [...].26.76.[...]
    2023-11-16T00:52:58 8220128 7 10 [...].140.91.[...]
    2023-11-12T12:40:41 8220043 12 10 [...].39.234.[...]
    2023-11-08T17:28:55 8180001 4 10 [...].210.121.[...]
    2023-11-01T11:22:27 8170199 6 10 [...].92.171.[...]
    2023-10-15T12:19:10 8220117 2 10 [...].74.124.[...]
    2023-12-22T13:54:16 8200066 6 10 [...].74.185.[...]
    2023-10-10T20:01:16 8220226 1 8 [...].147.77.[...]
    2023-10-29T15:59:04 8220020 5 10 [...].86.128.[...]
    2024-01-05T11:43:00 8220028 17 10 [...].168.1.[...]
    2023-10-16T22:21:12 8200107 2 9 [...].71.109.[...]
    2023-11-05T16:09:40 8150104 6 10 [...].210.32.[...]
    2023-10-11T20:31:19 8220030 2 10 [...].251.255.[...]
    2023-10-24T19:38:59 8220019 4 10 [...].168.1.[...]
    2023-10-30T22:21:25 8220004 16 10 [...].66.38.[...]
    2023-10-23T19:12:48 8220226 3 0 [...].147.77.[...]
    2023-11-24T12:37:02 8220078 7 10 [...].6.1.[...]
    2023-11-01T14:25:26 8170199 16 9 [...].103.107.[...]
    2023-11-15T17:54:24 8190153 12 10 [...].251.52.[...]
    2023-10-31T04:00:58 8190320 4 10 [...].66.57.[...]
    2023-12-01T15:22:44 8210213 8 6 [...].65.88.[...]
    2023-10-16T21:22:27 8220051 4 10 [...].6.160.[...]
    2023-12-06T16:58:10 8220111 10 10 [...].237.28.[...]
    2023-11-22T21:21:20 8190153 7 10 [...].251.52.[...]
    2023-11-22T18:47:42 8220134 7 10 [...].70.57.[...]
    2023-10-23T16:39:57 8220122 5 10 [...].203.224.[...]
    2023-12-17T13:28:27 8220008 9 10 [...].58.136.[...]
    2023-10-28T02:33:13 8220035 5 4 [...].69.118.[...]
    2023-12-15T16:34:21 8220063 9 10 [...].70.57.[...]
    2023-12-09T19:43:03 8210070 10 10 [...].43.33.[...]
    2023-11-06T10:38:16 8220210 6 10 [...].44.97.[...]
    2023-11-03T11:32:10 8210217 16 10 [...].203.34.[...]
    2023-12-24T19:24:21 8220056 17 9 [...].210.42.[...]
    2023-10-31T16:44:12 8220064 6 8 [...].92.75.[...]
    2024-01-08T17:56:24 8220084 6 10 [...].55.43.[...]
    2023-10-15T21:54:05 8210089 2 9 [...].6.1.[...]
    2023-11-12T20:32:22 8190323 12 10 [...].129.213.[...]
    2023-12-19T17:13:19 8220050 17 10 [...].74.234.[...]
    2023-10-15T18:49:52 8220064 4 10 [...].140.123.[...]
    2023-10-17T21:44:49 8220120 2 10 [...].167.126.[...]
    2023-12-16T17:19:12 8220129 9 10 [...].87.230.[...]
    2024-01-10T16:25:41 8200081 8 10 [...].70.57.[...]
    2023-10-12T10:52:11 8220137 2 10 [...].167.103.[...]
    2023-11-19T20:31:32 8220087 18 10 [...].64.136.[...]
    2023-10-16T13:36:30 8220019 3 10 [...].168.1.[...]
    2023-10-12T13:17:24 8220146 1 10 [...].203.131.[...]
    2023-11-11T21:10:55 8210127 12 10 [...].190.58.[...]
    2023-10-31T23:46:07 8220122 16 10 [...].66.136.[...]
    2023-10-24T19:18:51 8190261 5 10 [...].242.233.[...]
    2023-11-23T12:20:25 8180083 7 10 [...].74.238.[...]
    2023-11-09T15:10:08 8220169 12 10 [...].178.224.[...]
    2024-01-16T00:45:20 8070147 2 10 [...].131.228.[...]
    2023-10-14T20:42:59 8220066 3 10 [...].84.190.[...]
    2023-10-31T17:14:55 8220137 6 10 [...].166.91.[...]
    2023-10-20T17:58:00 8220229 3 10 [...].140.29.[...]
    2023-12-25T18:51:26 8220087 17 10 [...].203.194.[...]
    2023-10-16T18:44:00 8220162 3 9 [...].140.6.[...]
    2023-12-08T00:06:35 8220232 10 10 [...].140.77.[...]
    2023-12-17T17:20:39 8220055 9 10 [...].103.239.[...]
    2023-11-29T13:06:11 8220101 8 10 [...].26.16.[...]
    2023-10-13T16:42:21 8220004 4 10 [...].66.38.[...]
    2023-10-14T11:50:39 8220159 3 10 [...].168.1.[...]
    2024-02-12T22:28:38 8070147 8 10 [...].131.142.[...]
    2023-10-19T12:36:25 8220030 5 10 [...].140.28.[...]
    2023-12-06T18:59:41 8220095 10 10 [...].251.255.[...]
    2023-12-27T13:53:54 8220083 5 6 [...].75.252.[...]
    2023-11-25T19:14:14 8220047 7 10 [...].246.181.[...]
    2023-11-19T15:15:00 8220055 18 10 [...].210.118.[...]
    2023-11-04T15:37:31 8220035 6 8 [...].69.118.[...]
    2023-12-17T23:46:37 8220144 9 10 [...].251.255.[...]
    2023-11-20T18:48:27 8210222 7 10 [...].66.221.[...]
    2023-11-26T21:47:04 8210079 7 10 [...].190.29.[...]
    2023-12-27T20:28:27 8220027 17 10 [...].87.35.[...]
    2023-11-05T23:35:36 8220158 9 10 [...].237.94.[...]
    2023-11-11T17:17:00 8220033 12 10 [...].176.97.[...]
    2023-11-02T15:40:42 8220009 16 10 [...].87.186.[...]
    2023-10-30T21:03:19 8200081 6 10 [...].38.67.[...]
    2023-12-10T19:22:37 8220132 10 10 [...].66.38.[...]
    2023-10-31T22:17:41 8220132 6 10 [...].70.57.[...]
    2024-01-02T18:14:42 8220038 17 10 [...].166.187.[...]
    2023-10-27T16:31:06 8220021 6 10 [...].6.144.[...]
    2023-10-20T01:24:17 8190134 6 10 [...].64.180.[...]
    2023-10-24T20:28:09 8220073 3 10 [...].103.103.[...]
    2023-10-19T13:52:35 8220069 4 10 [...].73.82.[...]
    2023-10-18T20:37:46 8220121 2 10 [...].66.136.[...]
    2023-11-18T14:51:25 8220029 12 10 [...].107.162.[...]
    2023-11-01T22:00:02 8220079 6 10 [...].103.137.[...]
    2023-10-11T00:52:53 8220161 2 10 [...].167.62.[...]
    2023-11-07T18:35:15 8220232 12 10 [...].6.71.[...]
    2023-10-12T14:47:05 8190156 1 10 [...].203.184.[...]
    2023-12-10T19:09:12 8220035 10 5 [...].55.151.[...]
    2023-11-27T20:28:52 8220074 7 10 [...].55.102.[...]
    2023-12-02T13:08:59 8220055 8 7 [...].210.118.[...]
    2023-10-22T22:25:48 8220074 6 10 [...].167.129.[...]
    2023-10-16T12:10:12 0 2 9 [...].64.77.[...]
    2024-01-01T20:46:23 8220008 17 10 [...].84.250.[...]
    2023-10-29T19:11:56 8220010 5 10 [...].64.245.[...]
    2023-12-19T16:25:37 8220210 17 10 [...].251.255.[...]
    2023-11-01T12:32:03 8220051 16 10 [...].242.226.[...]
    2023-11-28T01:16:33 8220118 7 9 [...].38.139.[...]
    2023-10-15T22:04:40 8200107 1 9 [...].71.109.[...]
    2023-10-12T19:56:49 8210101 3 10 [...].66.36.[...]
    2024-01-02T20:49:51 8220138 9 10 [...].10.75.[...]
    2023-11-22T16:19:51 8220144 7 10 [...].26.41.[...]
    2023-11-25T22:40:04 8190244 18 10 [...].70.57.[...]
    2023-10-30T23:24:30 8220004 15 10 [...].66.38.[...]
    2023-12-12T14:39:46 8220019 9 10 [...].26.37.[...]
    2024-02-11T22:45:15 8190134 10 10 [...].203.82.[...]
    2023-11-22T16:57:27 8180063 7 9 [...].49.110.[...]
    2023-11-03T04:48:23 8220069 16 10 [...].49.188.[...]
    2023-11-11T00:23:52 8220168 12 10 [...].237.203.[...]
    2023-10-12T13:14:11 8220050 3 10 [...].26.36.[...]
    2023-11-11T14:57:05 8220133 12 10 [...].168.1.[...]
    2023-12-03T21:29:52 8220074 8 10 [...].55.102.[...]
    2023-10-14T14:34:23 8220036 3 10 [...].66.38.[...]
    2023-12-29T18:48:36 8220069 17 10 [...].74.122.[...]
    2023-12-17T23:21:40 8220065 9 10 [...].210.97.[...]
    2023-12-15T20:43:55 8210222 9 10 [...].66.221.[...]
    2023-11-05T17:31:03 8220028 16 10 [...].168.0.[...]
    2023-11-21T15:06:24 8210217 9 10 [...].55.135.[...]
    2023-10-27T10:50:37 8220226 5 6 [...].147.77.[...]
    2023-11-18T21:10:34 8150066 7 9 [...].246.147.[...]
    2023-12-12T00:03:17 8220126 9 10 [...].43.27.[...]
    2024-01-10T17:29:47 8200081 10 10 [...].70.57.[...]
    2023-10-17T18:02:09 8170199 3 10 [...].167.86.[...]
    2023-12-17T18:29:41 8200087 9 10 [...].210.101.[...]
    2023-10-12T15:18:18 8200119 4 10 [...].86.176.[...]
    2023-12-14T20:17:04 8220133 9 10 [...].168.1.[...]
    2023-10-21T15:10:54 8220028 4 10 [...].168.1.[...]
    2023-11-19T21:37:50 8220017 7 10 [...].177.13.[...]
    2023-11-10T14:29:15 8220037 12 10 [...].203.133.[...]
    2023-11-19T23:15:08 8210079 18 10 [...].190.25.[...]
    2023-11-02T12:06:43 8190346 6 10 [...].84.21.[...]
    2023-10-29T11:35:35 8220055 5 10 [...].210.118.[...]
    2023-11-24T19:54:56 8210211 7 10 [...].178.212.[...]
    2023-11-12T18:40:50 8220117 12 2 [...].86.120.[...]
    2023-12-06T16:49:03 8220161 10 10 [...].237.28.[...]
    2023-11-12T16:28:36 8220001 12 10 [...].166.94.[...]
    2023-11-14T15:49:04 8220160 7 10 [...].4.164.[...]
    2023-10-26T00:35:32 8220084 5 10 [...].177.81.[...]
    2023-12-23T20:11:15 8210063 17 10 [...].74.127.[...]
    2023-12-25T21:45:57 8220051 17 10 [...].190.113.[...]
    2023-10-24T21:11:36 8220073 4 10 [...].103.103.[...]
    2024-02-14T22:19:11 8070147 13 10 [...].73.7.[...]
    2023-11-02T08:58:53 8220096 6 10 [...].66.58.[...]
    2023-12-10T19:25:10 8220035 10 5 [...].55.151.[...]
    2023-12-16T14:42:28 8220062 9 10 [...].168.1.[...]
    2024-02-10T12:58:18 8220005 2 10 [...].70.57.[...]
    2023-10-13T16:51:05 8200087 1 10 [...].66.36.[...]
    2023-10-18T20:46:32 8220133 4 10 [...].168.1.[...]
    2023-11-19T14:56:12 8220164 18 10 [...].86.141.[...]
    2023-10-12T18:54:11 8210063 3 10 [...].87.196.[...]
    2023-11-15T13:25:11 8180063 7 10 [...].49.110.[...]
    2023-10-18T17:05:57 8220034 4 10 [...].242.187.[...]
    2023-12-16T18:19:37 8180195 9 9 [...].66.221.[...]
    2023-10-14T14:33:47 8220036 3 10 [...].66.38.[...]
    2023-10-27T08:13:35 8220066 5 10 [...].84.190.[...]
    2023-12-28T17:33:58 8220129 17 10 [...].6.162.[...]
    2023-10-18T17:54:29 8210222 4 10 [...].66.221.[...]
    2023-11-19T22:03:27 8220092 18 10 [...].49.128.[...]
    2023-11-28T01:55:05 8220109 7 10 [...].203.197.[...]
    2023-11-08T17:48:35 8220122 15 10 [...].66.136.[...]
    2023-11-01T14:58:21 8220097 16 10 [...].26.73.[...]
    2023-10-17T02:14:00 8200026 2 10 [...].74.5.[...]
    2024-01-10T15:32:42 8200081 15 10 [...].70.57.[...]
    2023-12-07T20:24:55 8150104 7 10 [...].166.83.[...]
    2023-11-13T21:37:29 8220004 7 10 [...].66.38.[...]
    2023-11-16T14:12:41 8210061 12 6 [...].70.255.[...]
    2023-12-12T14:17:35 8220092 9 10 [...].26.37.[...]
    2023-11-02T14:38:57 8220169 16 10 [...].26.75.[...]
    2023-10-29T13:15:59 8200081 5 10 [...].70.57.[...]
    2023-11-02T12:18:02 8220100 16 10 [...].26.21.[...]
    2023-11-12T15:15:16 8220160 18 10 [...].4.164.[...]
    2023-12-03T22:00:26 8220035 8 4 [...].55.151.[...]
    2023-10-14T12:40:24 8210217 4 10 [...].87.17.[...]
    2023-11-19T12:14:26 8190323 18 10 [...].107.86.[...]
    2023-10-21T15:16:04 8220137 4 10 [...].167.103.[...]
    2023-11-04T15:21:27 8220005 16 10 [...].70.57.[...]
    2023-12-03T14:48:09 8220062 8 6 [...].168.1.[...]
    2023-10-17T14:21:04 8220065 3 10 [...].168.1.[...]
    2023-12-16T22:15:54 8180078 9 10 [...].166.63.[...]
    2023-12-14T01:44:12 8210213 13 10 [...].65.88.[...]
    2023-10-27T18:11:41 8220229 5 10 [...].167.62.[...]
    2023-12-20T17:26:51 8220055 17 10 [...].103.239.[...]
    2023-11-18T07:54:54 8200220 18 9 [...].168.0.[...]
    2023-11-01T21:34:39 8220088 16 10 [...].168.1.[...]
    2023-11-27T17:08:28 8190342 7 10 [...].242.225.[...]
    2024-01-17T10:52:07 8220083 12 10 [...].251.6.[...]
    2023-11-03T01:12:43 8190334 6 10 [...].65.101.[...]
    2023-10-26T13:06:36 8180063 2 5 [...].43.102.[...]
    2023-11-16T13:15:24 8190346 12 10 [...].130.74.[...]
    2023-12-03T19:05:05 8220024 8 10 [...].203.159.[...]
    2023-11-05T22:43:12 8220158 16 10 [...].237.94.[...]
    2023-10-14T19:11:27 8220138 5 10 [...].107.135.[...]
    2023-11-16T00:05:24 8220128 18 10 [...].140.91.[...]
    2023-11-14T22:16:35 8220021 7 10 [...].6.148.[...]
    2024-01-10T14:04:49 8220083 9 2 [...].156.60.[...]
    2023-11-12T12:06:51 8220162 12 10 [...].140.107.[...]
    2023-10-26T12:25:40 8220073 5 10 [...].103.103.[...]
    2023-11-19T18:18:10 8220137 18 10 [...].210.72.[...]
    2023-11-12T22:08:19 8210079 12 10 [...].242.37.[...]
    2023-10-17T17:29:13 8220023 1 10 [...].43.40.[...]
    2023-10-24T21:10:53 8220073 3 10 [...].103.103.[...]
    2023-10-17T23:21:25 8200081 2 10 [...].70.57.[...]
    2023-11-12T21:51:15 8220023 12 10 [...].4.170.[...]
    2023-11-17T18:52:32 8220030 7 10 [...].190.19.[...]
    2023-11-25T17:02:55 8220008 7 10 [...].58.138.[...]
    2023-10-29T17:42:13 8100069 6 10 [...].70.57.[...]
    2023-10-14T02:54:47 8220157 1 9 [...].190.83.[...]
    2023-11-17T13:55:15 8220008 18 10 [...].242.235.[...]
    2023-11-01T15:36:19 8170199 16 10 [...].103.107.[...]
    2023-10-15T19:33:46 8220059 3 10 [...].75.98.[...]
    2023-10-24T16:26:49 8220170 4 10 [...].130.143.[...]
    2023-12-11T00:56:09 8170199 10 6 [...].103.107.[...]
    2023-11-13T00:24:24 8190333 12 10 [...].168.0.[...]
    2023-11-25T22:36:55 8190244 7 8 [...].70.57.[...]
    2023-12-06T21:05:18 8210167 10 10 [...].251.52.[...]
    2023-11-05T15:16:38 8190323 16 10 [...].107.127.[...]
    2023-11-05T20:58:25 8220065 16 10 [...].167.90.[...]
    2023-12-27T18:21:44 8220083 16 9 [...].75.252.[...]
    2023-10-18T17:14:52 8220024 4 10 [...].203.223.[...]
    2023-10-30T22:09:39 8220050 16 10 [...].54.245.[...]
    2023-11-28T16:53:35 8220064 8 10 [...].26.37.[...]
    2024-01-02T14:46:34 8220071 17 10 [...].74.150.[...]
    2024-01-07T13:55:14 8200038 17 10 [...].87.143.[...]
    2023-10-15T15:24:50 8220107 2 10 [...].242.184.[...]
    2023-10-26T14:29:14 8220119 5 10 [...].203.128.[...]
    2023-10-15T17:34:56 8220047 2 10 [...].16.240.[...]
    2023-12-10T19:29:44 8220035 10 4 [...].55.151.[...]
    2024-01-07T23:48:13 8210079 17 10 [...].140.122.[...]
    2023-10-24T16:42:37 8220073 4 10 [...].103.103.[...]
    2023-12-24T23:37:28 8220130 17 10 [...].168.0.[...]
    2023-11-05T20:25:48 8220056 16 10 [...].69.63.[...]
    2023-10-27T17:47:55 8180083 4 10 [...].54.207.[...]
    2023-11-02T19:58:48 8180090 3 10 [...].131.142.[...]
    2023-10-22T21:39:25 8220118 4 9 [...].38.139.[...]
    2023-11-07T17:01:57 8220032 12 10 [...].6.1.[...]
    2023-10-12T11:51:23 8220004 2 10 [...].66.38.[...]
    2023-10-20T19:44:12 8220056 4 10 [...].177.5.[...]
    2023-10-24T18:55:16 8220037 5 10 [...].69.126.[...]
    2024-02-11T16:15:44 8190330 10 10 [...].131.96.[...]
    2023-12-17T16:53:39 8220157 9 10 [...].190.13.[...]
    2023-11-14T23:25:14 8220019 7 10 [...].168.1.[...]
    2023-10-17T15:44:44 8190330 3 10 [...].74.202.[...]
    2023-11-26T19:34:14 8220020 7 10 [...].49.56.[...]
    2023-12-13T14:31:35 8220030 9 10 [...].251.255.[...]
    2023-12-15T16:09:12 8220047 9 10 [...].140.29.[...]
    2023-10-24T23:09:52 8220084 4 10 [...].177.81.[...]
    2023-10-20T19:42:00 8220153 4 10 [...].92.31.[...]
    2023-12-04T23:13:34 8220094 8 6 [...].71.169.[...]
    2023-10-16T19:40:39 8220065 2 10 [...].168.1.[...]
    2024-01-10T12:34:43 8220102 15 10 [...].251.98.[...]
    2023-10-15T22:12:57 8210089 2 10 [...].6.1.[...]
    2023-11-26T22:39:29 8220050 7 10 [...].55.102.[...]
    2023-12-06T18:54:00 8220095 10 10 [...].251.255.[...]
    2023-11-01T21:57:07 8210167 16 10 [...].251.52.[...]
    2023-11-01T14:58:28 8220097 16 10 [...].26.73.[...]
    2023-11-07T15:33:27 8210089 16 10 [...].242.136.[...]
    2024-01-13T18:57:22 8200232 7 8 [...].70.57.[...]
    2023-11-04T00:49:25 8220128 16 10 [...].58.192.[...]
    2023-12-07T22:50:30 8220153 10 10 [...].6.238.[...]
    2023-10-21T19:34:08 8220010 4 10 [...].64.245.[...]
    2023-11-08T21:50:45 8220225 12 10 [...].107.89.[...]
    2023-12-03T16:38:00 8220001 8 10 [...].166.93.[...]
    2023-12-06T21:17:41 8220055 10 10 [...].103.239.[...]
    2023-10-31T23:15:47 8220008 6 10 [...].58.138.[...]
    2023-11-25T21:55:47 8220079 7 10 [...].251.255.[...]
    2023-10-15T17:35:28 8220059 1 10 [...].75.98.[...]
    2023-12-03T22:01:50 8220035 8 4 [...].55.151.[...]
    2023-11-11T00:23:16 8180083 18 10 [...].177.119.[...]
    2023-10-16T22:19:55 8190091 3 10 [...].65.40.[...]
    2023-10-11T19:04:40 8220072 3 10 [...].70.57.[...]
    2023-10-15T20:24:43 8220055 3 10 [...].210.118.[...]
    2023-11-18T01:36:57 8210213 18 10 [...].65.88.[...]
    2023-10-21T12:42:03 8220144 4 10 [...].156.63.[...]
    2023-11-01T19:12:23 8220021 16 10 [...].6.146.[...]
    2023-12-10T23:04:29 8180195 10 6 [...].74.233.[...]
    2023-11-22T12:13:29 8220055 7 5 [...].210.118.[...]
    2024-01-08T18:21:10 8190346 10 10 [...].26.24.[...]
    2023-11-16T22:45:21 8220022 18 10 [...].190.3.[...]
    2023-10-14T00:24:22 8220168 2 10 [...].167.155.[...]
    2023-10-24T11:55:02 8210070 5 10 [...].4.177.[...]
    2023-11-11T10:52:39 8220210 12 10 [...].74.17.[...]
    2023-12-03T17:54:39 8220047 8 10 [...].246.181.[...]
    2023-10-30T23:47:01 8220037 6 10 [...].69.126.[...]
    2023-10-25T14:18:36 8220120 5 10 [...].167.126.[...]
    2023-10-18T03:57:47 8200119 15 10 [...].86.176.[...]
    2023-11-25T13:17:47 8220164 7 10 [...].86.141.[...]
    2023-10-17T10:57:39 8220061 4 10 [...].74.13.[...]
    2023-11-19T00:11:31 8200231 18 10 [...].140.28.[...]
    2023-11-27T23:32:44 8220004 8 10 [...].66.38.[...]
    2023-10-27T11:40:22 8220092 4 10 [...].74.18.[...]
    2023-12-02T13:27:33 8220055 8 10 [...].210.118.[...]
    2023-12-14T22:31:39 8220074 9 10 [...].167.32.[...]
    2023-10-17T23:40:04 8210070 4 10 [...].4.177.[...]
    2023-12-08T17:32:57 8200087 10 6 [...].66.36.[...]
    2023-10-14T19:49:20 8220026 3 10 [...].66.221.[...]
    2023-12-10T10:38:06 8190323 10 10 [...].73.46.[...]
    2023-12-01T09:24:54 8220226 8 9 [...].147.188.[...]
    2023-11-05T13:45:50 8210229 16 10 [...].165.223.[...]
    2023-10-15T20:12:18 8220116 3 10 [...].168.1.[...]
    2023-11-17T14:17:05 8220146 18 10 [...].86.236.[...]
    2023-12-08T20:05:08 8220027 10 10 [...].131.231.[...]
    2023-11-16T01:59:26 8200119 18 10 [...].86.178.[...]
    2024-01-07T21:24:07 8190333 17 10 [...].168.1.[...]
    2023-10-14T18:14:29 8220116 2 10 [...].168.1.[...]
    2023-10-11T22:03:38 8220030 3 10 [...].190.83.[...]
    2023-10-25T10:12:37 8220096 4 10 [...].66.58.[...]
    2023-11-04T15:39:21 8220035 6 8 [...].69.118.[...]
    2023-10-24T21:18:58 8220073 4 10 [...].251.255.[...]
    2023-12-02T16:08:20 8220097 8 10 [...].210.118.[...]
    2023-10-21T13:02:10 8220073 4 10 [...].103.9.[...]
    2023-10-27T15:12:20 8220009 5 10 [...].87.158.[...]
    2023-10-19T21:49:53 8220097 5 5 [...].176.105.[...]
    2023-10-14T12:23:12 8200087 3 10 [...].66.36.[...]
    2023-10-13T13:36:11 8200232 4 10 [...].84.237.[...]
    2023-12-08T23:17:32 8220017 10 10 [...].177.31.[...]
    2023-11-17T23:00:10 8220139 18 10 [...].6.162.[...]
    2024-01-15T16:43:44 8220226 17 10 [...].147.202.[...]
    2023-12-16T18:15:42 8220076 9 10 [...].168.1.[...]
    2023-10-17T21:03:21 8220120 2 10 [...].167.126.[...]
    2023-12-02T13:14:31 8200038 8 10 [...].152.185.[...]
    2023-10-17T20:11:31 8220032 3 10 [...].251.255.[...]
    2023-12-10T19:59:09 8220066 10 10 [...].84.198.[...]
    2023-12-06T17:13:55 8220004 10 10 [...].66.38.[...]
    2023-10-09T21:02:35 8220073 2 10 [...].210.121.[...]
    2023-11-02T23:27:55 8200038 6 6 [...].87.143.[...]
    2023-10-27T12:36:41 8220092 5 10 [...].74.18.[...]
    2023-11-15T21:24:32 8200026 12 10 [...].74.176.[...]
    2023-10-14T16:47:12 8220164 3 10 [...].84.57.[...]
    2023-12-03T22:03:32 8220035 8 4 [...].55.151.[...]
    2023-12-26T18:14:14 8220124 10 10 [...].4.81.[...]
    2023-12-18T04:54:56 8190334 12 10 [...].86.230.[...]
    2023-11-27T22:44:32 8220076 7 10 [...].168.1.[...]
    2023-12-10T22:59:42 8220139 10 10 [...].66.57.[...]
    2024-01-15T19:54:02 8220010 17 10 [...].86.128.[...]
    2023-12-19T21:38:34 8220093 17 10 [...].55.102.[...]
    2023-12-17T19:08:56 8220153 9 10 [...].6.112.[...]
    2024-02-12T16:38:42 8150104 15 10 [...].54.243.[...]
    2023-12-19T13:19:53 8220005 17 10 [...].70.57.[...]
    2023-11-19T18:32:07 8220159 18 10 [...].168.0.[...]
    2023-12-10T19:04:27 8220081 10 10 [...].86.146.[...]
    2023-11-16T00:56:56 8220084 7 10 [...].176.255.[...]
    2023-11-11T22:24:21 8220139 12 10 [...].58.227.[...]
    2023-11-18T20:20:27 8220073 18 10 [...].92.147.[...]
    2023-12-30T23:43:59 8220163 17 10 [...].140.88.[...]
    2023-10-29T23:57:20 8190334 5 10 [...].129.28.[...]
    2023-10-30T21:14:36 8220062 6 10 [...].168.1.[...]
    2023-10-21T15:54:37 8220087 4 10 [...].74.249.[...]
    2023-11-17T04:14:08 8210063 7 10 [...].74.120.[...]
    2023-11-06T11:29:57 8220210 16 10 [...].44.97.[...]
    2023-10-31T00:05:02 8220101 16 10 [...].73.158.[...]
    2024-01-03T16:17:51 8220083 17 10 [...].75.252.[...]
    2023-10-31T22:16:34 8220122 6 10 [...].66.136.[...]
    2023-11-20T23:13:26 8150104 12 10 [...].210.33.[...]
    2023-10-22T17:11:28 8220001 4 10 [...].69.52.[...]
    2023-12-02T14:47:57 8140109 8 10 [...].65.213.[...]
    2023-11-01T12:26:13 8220154 16 10 [...].103.255.[...]
    2023-12-09T16:52:45 8210213 15 10 [...].65.88.[...]
    2024-02-11T19:47:47 8070147 17 10 [...].84.53.[...]
    2023-12-02T15:04:11 8220084 8 10 [...].6.162.[...]
    2023-11-03T13:21:23 8220059 16 10 [...].251.52.[...]
    2023-10-17T19:44:03 8220032 2 10 [...].168.1.[...]
    2023-10-16T23:05:32 8200107 3 10 [...].71.109.[...]
    2023-11-21T17:25:01 8210003 7 10 [...].92.89.[...]
    2023-11-08T17:53:37 8220012 12 10 [...].26.20.[...]
    2023-11-16T13:39:49 8170206 18 9 [...].74.39.[...]
    2024-01-15T18:30:08 8190261 17 10 [...].58.137.[...]
    2023-10-15T16:42:06 8220163 3 10 [...].84.162.[...]
    2023-11-11T13:57:37 8220157 12 10 [...].190.95.[...]
    2023-11-27T19:08:18 8220103 16 10 [...].26.76.[...]
    2023-11-29T03:39:22 8220118 2 9 [...].38.139.[...]
    2023-12-04T14:52:57 8220036 8 6 [...].203.230.[...]
    2023-10-09T11:07:35 2 1 3 [...].168.10.[...]
    2023-10-12T13:11:58 8220169 1 8 [...].74.61.[...]
    2023-10-21T17:20:04 8220087 5 10 [...].74.249.[...]
    2023-10-31T18:08:04 8220232 6 10 [...].6.214.[...]
    2023-12-16T15:53:01 8220043 10 10 [...].210.63.[...]
    2023-10-15T13:11:56 8140109 4 10 [...].131.156.[...]
    2023-12-19T09:40:27 8220004 17 10 [...].26.22.[...]
    2023-12-01T18:19:16 8220008 8 10 [...].58.138.[...]
    2023-11-11T19:22:09 8220094 12 10 [...].71.169.[...]
    2023-11-18T23:58:47 8220077 12 10 [...].131.151.[...]
    2023-10-15T21:57:58 8210079 4 10 [...].6.125.[...]
    2024-01-09T03:06:34 8220087 15 10 [...].130.122.[...]
    2023-10-27T17:19:48 8220071 1 10 [...].74.153.[...]
    2023-11-16T15:35:59 8210061 18 10 [...].74.39.[...]
    2023-10-09T19:59:16 8210101 2 10 [...].66.36.[...]
    2023-10-29T18:50:07 8170199 5 4 [...].92.171.[...]
    2023-12-03T22:05:07 8220035 8 10 [...].55.151.[...]
    2023-11-18T10:00:11 8220051 18 10 [...].242.225.[...]
    2023-12-12T14:52:07 8220051 9 10 [...].26.50.[...]
    2023-10-29T00:25:14 8220145 5 8 [...].87.88.[...]
    2023-10-24T21:41:46 8220111 7 10 [...].167.62.[...]
    2023-10-24T18:49:24 8190261 1 8 [...].242.233.[...]
    2023-10-12T14:01:05 8220161 1 10 [...].167.62.[...]
    2023-11-11T18:17:20 8220164 12 10 [...].86.141.[...]
    2023-10-14T11:37:47 8200220 2 5 [...].168.1.[...]
    2023-12-22T20:20:20 8220015 17 9 [...].66.223.[...]
    2023-10-28T18:16:43 8220100 5 10 [...].176.203.[...]
    2023-11-02T11:28:51 8210212 6 10 [...].84.161.[...]
    2023-12-23T13:55:19 8220073 17 10 [...].210.125.[...]
    2023-12-04T01:01:14 8220010 8 10 [...].177.31.[...]
    2024-01-07T18:42:25 8220033 17 10 [...].177.156.[...]
    2023-12-11T00:06:57 8220050 10 6 [...].54.245.[...]
    2023-12-12T19:51:47 8220147 9 10 [...].69.97.[...]
    2023-11-20T20:04:55 8220102 7 10 [...].92.212.[...]
    2023-11-26T04:39:19 8220137 7 10 [...].176.122.[...]
    2023-11-03T17:36:24 8170206 2 9 [...].74.14.[...]
    2023-11-17T05:25:44 8210063 18 10 [...].74.120.[...]
    2023-11-01T12:21:16 8210213 16 10 [...].26.55.[...]
    2023-12-18T21:58:52 8220050 9 10 [...].54.245.[...]
    2023-10-23T16:37:13 8220012 3 10 [...].177.89.[...]
    2023-10-19T16:35:08 8190153 4 10 [...].251.52.[...]
    2023-12-19T15:08:32 8220059 17 10 [...].251.52.[...]
    2023-10-29T12:33:25 8200038 5 5 [...].87.143.[...]
    2023-12-06T01:04:23 8220107 10 10 [...].251.255.[...]
    2023-12-16T21:20:22 8200107 9 10 [...].202.109.[...]
    2023-11-09T13:11:36 8220100 12 10 [...].251.52.[...]
    2023-10-25T17:25:45 8220154 5 10 [...].103.255.[...]
    2023-11-05T17:40:12 8220015 6 9 [...].71.169.[...]
    2023-10-20T17:35:55 8220164 4 10 [...].84.57.[...]
    2023-12-03T16:58:34 8220071 8 6 [...].74.153.[...]
    2023-12-05T23:30:46 8220147 10 10 [...].237.14.[...]
    2023-11-03T22:22:34 8220093 6 10 [...].168.1.[...]
    2023-12-19T13:40:58 8220126 17 10 [...].43.27.[...]
    2023-11-09T11:11:27 8170199 18 2 [...].103.107.[...]
    2023-11-19T15:12:13 8220055 18 9 [...].210.118.[...]
    2023-12-03T22:03:59 8220035 8 7 [...].55.151.[...]
    2023-12-08T18:38:09 8220164 10 10 [...].86.141.[...]
    2023-12-26T21:22:03 8220158 17 10 [...].152.195.[...]
    2023-11-19T01:43:40 8190153 18 10 [...].190.104.[...]
    2024-01-04T17:26:44 8220084 5 10 [...].176.243.[...]
    2023-11-08T21:24:29 8220051 12 10 [...].242.224.[...]
    2023-10-24T22:31:57 8220134 4 10 [...].70.57.[...]
    2023-10-31T22:57:04 8220132 16 10 [...].70.57.[...]
    2023-10-30T22:07:27 8220075 6 10 [...].84.192.[...]
    2023-10-16T21:54:21 8220101 2 10 [...].73.158.[...]
    2023-10-31T23:29:29 8220019 16 10 [...].168.1.[...]
    2023-11-02T16:06:03 8220229 16 10 [...].140.30.[...]
    2023-11-19T20:56:56 8190091 12 5 [...].86.202.[...]
    2024-01-13T15:32:40 8220083 2 9 [...].130.130.[...]
    2023-11-01T20:45:49 8200066 3 10 [...].87.65.[...]
    2023-11-05T15:08:20 8220097 15 10 [...].55.200.[...]
    2023-12-14T17:00:33 8220056 9 8 [...].166.81.[...]

    Βαθμοί ασκήσεων ανά Α.Μ.

    Α.Μ. Βαθμοί ατομικής άσκησης Μ.Ο. ατομικών ασκήσεων που έχουν παραδοθεί Μ.Ο. απαιτούμενων ατομικών ασκήσεων (14) Ομαδικές ασκήσεις
    0Α1=4 4.00.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    2Α1=3 3.00.2 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8070147Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=2 Α10=8 Α11=9 Α13=10 Α14=10 Α15=9 Α17=10 9.29.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8100069Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α12=10 Α16=10 Α18=10 10.07.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8140109Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 10.09.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8150066Α1=10 Α2=9 Α3=10 Α4=10 Α5=10 Α6=9 Α7=9 Α8=10 Α10=10 Α12=9 Α16=10 Α18=10 9.78.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8150104Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α9=10 Α10=8 Α11=8 Α12=10 Α14=10 Α15=10 Α16=10 Α17=9 9.79.8 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8170199Α1=10 Α2=10 Α3=10 Α4=10 Α5=6 Α6=10 Α7=6 Α8=6 Α9=10 Α10=6 Α11=2 Α12=10 Α13=5 Α15=10 Α16=10 Α18=2 7.78.5 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8170206Α1=8 Α2=9 Α3=8 Α4=10 Α5=8 Α6=8 Α7=10 Α8=10 Α10=8 Α12=6 Α16=9 Α18=9 8.67.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8180001Α1=10 Α2=6 Α4=10 Α5=8 Α6=10 Α7=9 Α16=10 9.04.5 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8180063Α1=10 Α2=5 Α4=10 Α5=10 Α6=10 Α7=10 Α9=10 Α16=10 Α17=10 9.46.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8180078Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=6 Α9=10 Α10=10 Α12=10 Α16=10 Α18=10 9.79.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8180083Α1=7 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=9 Α10=10 Α12=10 Α16=10 Α18=10 9.79.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8180090Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=8 Α16=10 Α18=10 9.87.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8180195Α1=8 Α2=8 Α3=10 Α4=10 Α5=10 Α6=10 Α7=9 Α8=10 Α9=9 Α10=10 Α12=10 Α16=10 Α18=10 9.58.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190091Α1=8 Α2=10 Α3=10 Α4=8 Α5=5 Α6=10 Α7=10 Α12=5 Α16=10 8.45.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190134Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=2 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 9.49.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190153Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=8 Α12=10 Α16=10 Α17=10 Α18=10 9.99.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190156Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190244Α1=10 Α2=8 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α16=10 Α17=10 Α18=10 9.88.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190261Α1=8 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 9.88.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190301Α1=10 10.00.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190304Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α13=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190320Α1=10 Α2=10 Α3=10 Α4=10 10.02.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190323Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190330Α1=10 Α2=10 Α3=10 Α4=8 Α5=8 Α6=10 Α7=10 Α9=10 Α10=10 Α16=10 Α18=10 9.67.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190333Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α9=10 Α10=8 Α12=10 Α16=10 Α17=10 9.88.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190334Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α9=10 Α10=10 Α12=10 Α16=10 10.07.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190342Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α10=10 Α12=10 Α16=10 Α18=10 10.07.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190346Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α9=2 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 9.48.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200026Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α12=10 Α16=0 Α17=10 Α18=10 9.28.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200038Α1=7 Α2=9 Α3=9 Α4=9 Α5=5 Α6=6 Α7=8 Α8=10 Α9=10 Α10=8 Α12=4 Α16=10 Α17=10 Α18=8 8.18.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200066Α1=10 Α2=6 Α3=10 Α4=10 Α5=10 Α6=10 Α7=6 Α9=10 9.05.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200081Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200087Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=7 Α9=10 Α10=6 Α12=10 Α16=10 Α17=10 Α18=10 9.59.5 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200107Α1=9 Α2=9 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=6 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 9.69.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200119Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200220Α1=10 Α2=7 Α3=10 Α4=10 Α5=8 Α6=8 Α7=6 Α8=8 Α10=8 Α12=9 Α16=10 Α18=9 8.67.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200231Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α12=6 Α15=10 Α16=10 Α18=10 9.67.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200232Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=8 Α8=10 Α9=10 Α10=8 Α12=10 Α16=10 Α17=9 Α18=10 9.69.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    820161Α1=10 10.00.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210003Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210052Α1=6 6.00.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210061Α1=8 Α2=10 Α4=10 Α5=8 Α6=10 Α7=10 Α8=10 Α12=6 Α16=9 Α18=10 9.16.5 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210063Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210070Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210079Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210089Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210092Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=9 Α12=6 Α16=10 Α17=10 Α18=10 9.57.5 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210101Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210127Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210167Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210211Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=8 Α7=10 Α8=10 Α9=10 Α10=8 Α12=10 Α16=10 Α17=10 Α18=10 9.79.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210212Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=8 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 9.910.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210213Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=6 Α9=10 Α10=8 Α12=10 Α13=10 Α15=10 Α16=10 Α17=10 Α18=10 9.610.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210217Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α14=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210222Α1=10 Α2=9 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 9.99.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210229Α1=10 Α2=10 Α3=10 Α4=10 Α5=4 Α6=10 Α7=9 Α10=6 Α12=6 Α16=10 Α18=10 8.66.8 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220001Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α18=10 10.09.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220004Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α13=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220005Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220008Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220009Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220010Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α12=10 Α16=10 Α17=10 Α18=10 10.09.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220011Α1=10 10.00.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220012Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α12=10 Α16=10 10.06.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220015Α1=10 Α2=9 Α4=10 Α5=10 Α6=9 Α7=10 Α8=6 Α9=10 Α10=10 Α12=5 Α16=9 Α17=9 Α18=10 9.08.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220017Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220019Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220020Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220021Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220022Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220023Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220024Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220026Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220027Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 10.09.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220028Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220029Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α18=9 9.99.2 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220030Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220032Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220033Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220034Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α12=10 Α16=10 Α18=10 10.07.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220035Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220036Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=6 Α9=10 Α10=10 Α12=10 Α16=10 Α18=10 9.79.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220037Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220038Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220043Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220046Α1=10 10.00.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220047Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220050Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220051Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220052Α1=6 6.00.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220055Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220056Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220057Α1=10 10.00.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220058Α1=8 Α6=10 Α15=10 9.32.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220059Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220061Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220062Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220063Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220064Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220065Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220066Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220069Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220071Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=6 Α9=2 Α10=10 Α12=6 Α16=10 Α17=10 Α18=2 8.38.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220072Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220073Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220074Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220075Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220076Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220077Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 10.09.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220078Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220079Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220081Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220083Α1=10 Α2=9 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=6 Α9=10 Α12=10 Α15=9 Α16=10 Α17=10 Α18=10 9.69.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220084Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α13=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220085Α1=10 10.00.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220086Α1=10 10.00.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220087Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220088Α1=9 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 9.99.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220089Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220092Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=9 Α18=10 9.99.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220093Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220094Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=9 Α18=10 9.99.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220095Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220096Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220097Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220098Α1=6 Α2=10 Α3=10 Α4=10 Α5=10 Α6=9 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 9.69.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220100Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220101Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220102Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220103Α1=10 Α2=10 Α3=10 Α4=10 Α5=8 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 9.99.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220104Α1=5 5.00.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220105Α1=10 Α2=10 Α3=10 Α4=10 Α6=10 10.03.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220107Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220109Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220110Α1=6 6.00.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220111Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220115Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220116Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220117Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=6 Α9=10 Α10=8 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 9.69.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220118Α1=7 Α2=9 Α4=9 Α5=10 Α6=9 Α7=9 Α8=10 Α9=10 Α10=8 Α12=9 Α16=8 Α18=10 9.07.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220119Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220120Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220121Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α10=10 Α12=10 Α16=10 Α18=10 10.07.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220122Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220124Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α13=10 Α14=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220126Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220128Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220129Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220130Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220132Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220133Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220134Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220137Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220138Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α9=10 Α10=10 Α12=9 Α16=10 Α17=10 Α18=10 9.99.2 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220139Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220141Α1=8 8.00.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220142Α1=10 10.00.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220144Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220145Α1=10 Α2=10 Α3=10 Α4=10 Α5=8 Α6=10 Α7=10 Α12=8 Α16=10 9.66.1 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220146Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220147Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α11=10 Α12=10 Α13=10 Α14=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220148Α1=10 10.00.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220150Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 10.09.3 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220151Α1=7 Α2=8 Α3=9 Α4=10 Α5=5 7.82.8 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220153Α1=6 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=6 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 9.49.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220154Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220155Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220157Α1=10 Α2=6 Α3=10 Α4=10 Α5=10 Α6=10 Α7=6 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 9.59.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220158Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220159Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220160Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220161Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220162Α1=8 Α2=10 Α3=9 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=2 9.29.2 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220163Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220164Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220167Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220168Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220169Α1=10 Α2=8 Α4=10 Α5=10 Α6=10 Α12=10 Α16=10 9.74.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220170Α1=10 Α2=9 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 9.99.9 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220210Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220225Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220226Α1=10 Α2=10 Α3=0 Α4=10 Α5=6 Α6=2 Α7=10 Α8=9 Α9=10 Α10=10 Α12=10 Α16=10 Α17=10 Α18=10 8.48.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220228Α1=10 10.00.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220229Α1=9 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α12=10 Α16=10 9.95.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220232Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α12=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220301Α1=10 10.00.7 Ομ.1=0 Ομ.2=0 Αρχηγός=0

    Φοιτητές που παραδίδουν ασκήσεις: 188
    Μέσος όρος ατομικής άσκησης για φοιτητές που παραδίδουν ασκήσεις: 9.6
    Ατομικές ασκήσεις με προθεσμία παράδοσης: 14
    Μέσος όρος 14 ατομικών ασκήσεων για φοιτητές που παραδίδουν ασκήσεις: 8.4

    Λάθη στην καταχώρηση

    2/10/2023 23:29: λανθασμένη καταχώρηση στοιχείων: ΑΜ [] άσκηση [] βαθμός [] IP [85.75.216.207] κωδικός ελέγχου []
    3/10/2023 13:45: λανθασμένη καταχώρηση στοιχείων: ΑΜ [] άσκηση [] βαθμός [] IP [85.75.216.207] κωδικός ελέγχου []
    3/10/2023 13:53: λανθασμένη καταχώρηση στοιχείων: ΑΜ [] άσκηση [] βαθμός [] IP [85.75.216.207] κωδικός ελέγχου []
     : λανθασμένη καταχώρηση στοιχείων: ΑΜ [] άσκηση [] βαθμός [] IP [] κωδικός ελέγχου []
    5/10/2023 15:26: λανθασμένη καταχώρηση στοιχείων: ΑΜ [8180001] άσκηση [1] βαθμός [10] IP [10.26.56.125] κωδικός ελέγχου []
    

    Λάθη στον έλεγχο του βαθμού

    Ξ§ΟΞΏΞ½ΞΏΟƒΟ†ΟΞ±Ξ³Ξ Ξ´Ξ± Ξ‘Ξœ Άσκηση Ξ’Ξ±ΞΈΞΌΟŒΟ‚ Διεύθυνση IP Ξ‘Ξ½Ξ±Ξ³Ξ½Ο‰ΟΞΉΟƒΟ„ΞΉΞΊΟŒ

    Ενδιαφέρουσα βιβλιογραφία

    Θέματα εξετάσεων

    Πιλοτικά θέματα εξετάσεων

    Τα πιλοτικά θέματα σε μορφή PDF (έκδοση 1.1 - 2004.02.13).

    Για να βρείτε τις σωστές απαντήσεις αρκεί να μεταγλωττίσετε το πρόγραμμα με μερικές εντολές println στο τέλος.

    Εξεταστική περίοδος Φεβρουαρίου 2004

    Μια διατύπωση των θεμάτων σε μορφή PDF.

    Για να βρείτε τις σωστές απαντήσεις αρκεί να μεταγλωττίσετε το πρόγραμμα με μερικές εντολές println στο τέλος.

    Παράδειγμα προγράμματος

    class Exam {
        public static void main(String args[]) {
            int gargoyle = 5;
            int i = 2;
            int dobby = 5;
            while (i < 11) {
                i = i + 4;
                gargoyle = gargoyle + 2;
            }
            for (i = 2; i < 11; i = i + 4)
                dobby = dobby + 2;
            int dockhead = 6;
            try {
                dockhead = 11;
                if (dockhead == 11)
                    throw new Exception();
                dockhead = 21;
            } catch (Exception e) {
                dockhead = 16;
            }
            Ingluvial y = new Ingluvial(2);
            Ingluvial z = new Ingluvial();
            Ingluvial w = y;
            Aneurism x = new Aneurism();
            Ingluvial u = y; Aneurism v = x;
            int toeplate = 11;
            int tubeful = z.m() + 2 * x.m() + 3 * x.t();
            int fenrir = y.naumk;
            toeplate = 20;
            if (w.naumk != y.naumk)
                toeplate += 1;
            else
                toeplate += 10;
            String s = "footful" + "hexameron";
            int unparty = s.substring(1, 13).length();
            int umbelwort = Aneurism.count;
            int arusa = 23;
            Ingluvial r = new Aneurism();
            arusa = r.m();
            int smethe = 25;
            boolean array[] = new boolean[16];
            try {
                if (array[24])
                    smethe = 54;
                else
                    smethe = 44;
            } catch (ArrayIndexOutOfBoundsException e) {
                smethe = 31;
            }
        }
    }
    class Ingluvial {
        public int naumk;
        private char kahan;
        Ingluvial() {naumk = 11; }
        Ingluvial(int v0) { naumk = v0; }
        public int t() { return 1; }
        public int m() { return 37; }
    }
    class Aneurism extends Ingluvial {
        public static int count = 6;
        Aneurism() { count += 6; }
        public int n() { return naumk; }
        public int m() { return 15; }
    }
    

    Μεταβλητές

    Προσοχή

    Τα παραπάνω θέματα μοιάζουν αρκετά με τα πιλοτικά θέματα. Αυτό είναι απίθανο να συμβεί σε επόμενες εξεταστικές περιόδους.

    Εξεταστική περίοδος Σεπτεμβρίου 2005

    Μια διατύπωση των θεμάτων σε μορφή PDF.

    Για να βρείτε τις σωστές απαντήσεις αρκεί να μεταγλωττίσετε το πρόγραμμα με μερικές εντολές println στο τέλος.

    Παράδειγμα προγράμματος

    class Exam {
        static boolean ba[] = new boolean[6];
        public static void main(String args[]) {
            int lunula = 12;
            for (int i = 3; i < 11; i += 1)
                if (i % 3 == 1)
                    lunula = lunula + 2;
            int upglean = upslant(4, 9);
            String s = "alfet";
            s += "ceras" + "alfet";
            int chinaware = (s.substring(1, 8) + s).length();
            int bedstock = 6;
            try {
                bedstock = 10;
                if (bedstock == 10)
                    throw new Exception();
                bedstock = 20;
            } catch (Exception e) {
                bedstock = 15;
            }
            Bitted y = new Bitted(2);
            Bitted z = new Bitted();
            Bitted w = y;
            Samantha x = new Samantha();
            Bitted u = y; Samantha v = x;
            int megachile = 11;
            int powerless = z.m(16) - 2 * x.m(18) - 3 * x.t();
            int peccable = y.kangaroo;
            megachile = 23;
            if (w.kangaroo != y.kangaroo)
                megachile += 2;
            else
                megachile += 12;
            int archwise = Samantha.count;
            int drumming = 26;
            int ai = 0;
            ba[ai++] = false; ba[ai++] = true; ba[ai++] = true;
            ba[ai++] = true; ba[ai++] = true; ba[ai++] = true;
            for (int i = 0; i < ba.length - 1; i++) {
                if (!ba[i]) drumming += 11;
                if (ba[i] || ba[i + 1]) drumming += 9;
                if (ba[i] && ba[i + 1]) drumming -= 3;
            }
            int unhumble = 25;
            Bitted r = new Samantha();
            unhumble = r.m(17);
        }
        private static int upslant(int a, int b) {
            int loc1 = a;
            int loc2 = b;
            return (3 * loc1 + 2 * loc2 * loc2);
        }
    }
    class Bitted {
        public int kangaroo;
        Bitted() {kangaroo = 11; }
        Bitted(int v0) { kangaroo = v0 + 1; }
        public int t() { return 2 * 2; }
        public int m(int v) { return 31 - v; }
    }
    class Samantha extends Bitted {
        public static int count = 5;
        Samantha() { count += 7; }
        public int m(int v) { return v - 13 * 2; }
    }
    

    Μεταβλητές

    Περιεχόμενα