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

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

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

Καλώς ήρθατε

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

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

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

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

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

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

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

Βαθμολογία

Ο τελικός βαθμός κάθε φοιτήτριας ή φοιτητή θα βασίζεται σε 3 κριτήρια: Προσοχή:

Βαθμολογία χωρίς ομαδική εργασία

Σε περίπτωση μη συμμετοχής στην ομαδική εργασία ο βαθμός υπολογίζεται κατά 40% από τις εξετάσεις και 30% από τις ατομικές ασκήσεις, ώστε να να είναι δίκαιο για τα άτομα που κάνουν την ομαδική εργασία. Επιπλέον, στην περίπτωση αυτή ο μέγιστος δυνατός βαθμός είναι το 5. Ενδεικτικά, ο τύπος υπολογισμού είναι κάτι σαν:

MIN(ROUND(
  IF(@Exam>=5,
    IF(ISNA(@group),
      MAX(@exam*0.3 + IFNA(@Exercise, 0)*0.3, 5),
      @Exam*0.2+IFNA(@Participation, 0)*0.1+IFNA(@Bonus, 0)+IFNA(@Exercise, 0)*0.3+IFNA(@Group, 0)*0.5),MAX(INT(@Exam),0))
  *2,0)/2,10)

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

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;
      }
    }
    

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

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

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

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

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

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

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

    
      public static void main(String[] args) throws Exception {
          // Are appropriate arguments given?
          if (args.length != 3) {
            System.err.println("usage: FindDay year month day");
            System.exit(1);
          }
    
          // Parse year, month, day
          int year = Integer.parseInt(args[0]);
          int month = Integer.parseInt(args[1]) - 1;
          int monthDay = Integer.parseInt(args[2]);
    
          // Set the calendar and calculate the day name
          var d = new GregorianCalendar(year, month, monthDay);
          String dn = weekDayName(d.get(Calendar.DAY_OF_WEEK));
    
          // Print the day name
          System.out.println(dn);
        }
    

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

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

    Άσκηση 3

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

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

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

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

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

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

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

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

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

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

    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
    Το μέλος είναι ορατό μόνο στις μεθόδους της δικής μας κλάσης
    (τίποτα)
    Το μέλος είναι ορατό στις κλάσεις του πακέτου μας
    Μια καλοσχεδιασμένη κλάση έχει:

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

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

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

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

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

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

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

    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
    };
    

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

    Απαρίθμηση ως κλάση

    Η αντίστοιχη κλάση χωρίς τη χρήση απαρίθμησης θα είχε την παρακάτω μορφή.
    
    public class Ingredients {
        // Static array to hold all ingredient constants
        private static final Ingredients[] VALUES = new Ingredients[7];
    
        // Constants with names and ordinal values
        public static final Ingredients TOMATO = new Ingredients("TOMATO", 0);
        public static final Ingredients ONION = new Ingredients("ONION", 1);
        public static final Ingredients TZATZIKI = new Ingredients("TZATZIKI", 2);
        public static final Ingredients POTATO = new Ingredients("POTATO", 3);
        public static final Ingredients MUSTARD = new Ingredients("MUSTARD", 4);
        public static final Ingredients SOUVLAKI = new Ingredients("SOUVLAKI", 5);
        public static final Ingredients GYROS = new Ingredients("GYROS", 6);
    
        private final String name;
        private final int ordinal;
    
        private Ingredients(String name, int ordinal) {
            this.name = name;
            this.ordinal = ordinal;
            VALUES[ordinal] = this;  // Add to the static array
        }
    
        // Getters
        public int ordinal() {
            return ordinal;
        }
    
        public String getName() {
            return name;
        }
    
        public static Ingredients[] values() {
            return VALUES.clone();  // Return a copy of the array
        }
    
        public static Ingredients valueOf(String name) {
            for (Ingredients ingredient : VALUES) {
                if (ingredient.name.equals(name)) {
                    return ingredient;
                }
            }
            throw new IllegalArgumentException("No enum constant " + name);
        }
    
        @Override
        public String toString() {
            return name;
        }
    }
    

    Πολυμορφισμός με ταίριαγμα προτύπων

    Με εντολές switch μπορούμε να γράψουμε κώδικα για συγκεκριμένους τύπους με βάση το ταίριασμα προτύπων (pattern matching).
    
    class PaternMatch {
    
        class RetailCustomer {}
        class BusinessCustomer {}
    
        /** Return the document a given object shall receive */
        private static String documentName(Object o) {
            return switch (o) {
                case RetailCustomer rc -> "receipt";
                case BusinessCustomer bc -> "invoice";
                default -> "unknown document";
            };
        }
    
        public static void main(String[] args) {
            var retailCustomer = new RetailCustomer();
            var businessCustomer = new BusinessCustomer();
            System.out.println("Retail customer gets "
                    + documentName( retailCustomer));
            System.out.println("Business customer gets "
                    + documentName(businessCustomer));
        }
    }
    

    Εγγραφές

    Παράδειγμα

    
    public class RecordDemo {
        record Point(int x, int y) {}
    
        public static void main(String[] args) {
            var a = new Point(5, 12); // Pythagorean triple
            System.out.println("Point " + a + " has magnitude "
                    + Math.sqrt(a.x() * a.x() + a.y() * a.y()));
        }
    }
    

    Εγγραφή ως κλάση

    Η αντίστοιχη κλάση χωρίς τη χρήση εγγραφής θα είχε την παρακάτω μορφή.
    
    public class Point {
        private final int x;
        private final int y;
    
        public Point(int x, int y) {
            this.x = x;
            this.y = y;
        }
    
        // Getters
        public int getX() {
            return x;
        }
    
        public int getY() {
            return y;
        }
    
        // Object methods
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Point point = (Point) o;
            return x == point.x && y == point.y;
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(x, y);
        }
    
        @Override
        public String toString() {
            return "Point{" + "x=" + x + ", y=" + y + '}';
        }
    }
    

    Ταίριαγμα προτύπων σε εγγραφές

    Σε εγγραφές μπορούμε να ταιριάξουμε και τα ορίσματά τους.
    
    class PaternMatch {
    
        record Point2D(double x, double y) {}
        record Point3D(double x, double y, double z) {}
    
        /** Output the magnitude of the specified object */
        private static void printMagnitude(Object o) {
            System.out.println("Magnitude of " + o + " is " +
                switch (o) {
                    case Point2D(double x, double y) -> Math.sqrt(x * x + y * y);
                    case Point3D(double x, double y, double z) ->
                        Math.sqrt(x * x + y * y + z * z);
                    default -> throw new IllegalArgumentException("Unexpected type: "
                            + o.getClass().getName());
                }
            );
        }
    
        public static void main(String[] args) {
            printMagnitude(new Point2D(3, 4)); // Pythagorean triple
            printMagnitude(new Point3D(1, 4, 8)); // Pythagorean quadruple
        }
    }
    

    Το σχεδιαστικό πρότυπο 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 Test1 {
        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;
    }
    

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

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

    Σφραγισμένες κλάσεις

    Με τους προσδιοριστές sealed και permits μπορούμε να ορίσουμε ποιες κλάσεις επιτρέπεται να επεκτείνουν τη μητρική κλάση.
    
    public sealed class Shape permits Circle, Rectangle {
    }
    
    class Circle extends Shape {
    }
    
    class Rectangle extends Shape {
    }
    

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

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

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

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

    
    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 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 Test2 {
        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 html = """
        <html>
            <body>
                <h1>Welcome to my page</h1>
                <p>This is a paragraph.</p>
            </body>
        </html>
        """;
    

    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);
            }
        }
    }
    

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

    
    /**
     * Estimate the number of distinct elements in a data stream
     * (F0 estimation problem) based on the algorithm published in the
     * Proceedings of 30th Annual European Symposium on Algorithms (ESA 2022)
     * https://doi.org/10.48550/arXiv.2301.10191
     */
    
    import java.util.HashSet;
    import java.util.Random;
    import java.util.Set;
    import java.util.function.Function;
    import java.util.stream.IntStream;
    import java.util.stream.Stream;
    
    public class F0Estimator {
    
        /**
         * Estimate number of unique elements in the passed stream
         * @param storageSize The storage to use
         */
        public static <T> long estimateF0(Stream<T> stream, int storageSize) {
            final float LOAD_FACTOR = 0.5f;
    
            // Probability to add an element; in an array as a workaround
            // for using it in a lammbda expression
            final double[] p = {1.0};
            Set<T> X = new HashSet<>(storageSize , LOAD_FACTOR);
            Random random = new Random();
    
            stream.forEach(element -> {
                if (random.nextDouble() < p[0])
                    X.add(element);
                else
                    X.remove(element);
    
                if (X.size() >= storageSize) {
                    // Randomly keep each element in X with probability 1/2
                    X.removeIf(e -> random.nextDouble() < 0.5);
                    p[0] /= 2;
                    if (X.size() >= storageSize) {
                        throw new IllegalStateException("Threshold exceeded after sampling");
                    }
                }
            });
    
            return (long) (X.size() / p[0]);
        }
    
        public static void main(String[] args) {
            // Create a Random instance
            Random random = new Random();
    
            // Create a stream of 1e9 random integers with 65536 distinct values
            Stream<Integer> stream = IntStream
                .generate(random::nextInt).limit(1_000_000_000)
                .map(i -> i & 0xffff)
                .boxed();
    
            final int STORAGE_SIZE = 1000;
    
            long uniqueCount = estimateF0(stream, STORAGE_SIZE);
            System.out.println("Estimated number of unique elements: " + uniqueCount);
        }
    }
    

    Η μέθοδος 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

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

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

    Εκτενές παράδειγμα

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

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

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

    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 13 23:59:59 2024
    2 Sun Oct 20 23:59:59 2024
    3 Sun Oct 27 23:59:59 2024
    4 Sun Nov 3 23:59:59 2024
    5 Sun Nov 10 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 Αναγνωριστικό
    2024-10-16T22:03:40 8230154 3 10 [...].92.162.[...] 006EFADB42874B2F92D1AE7F9A7891E6
    2024-10-10T02:37:31 8230129 1 10 [...].65.88.[...] 00BE1C52390243D7B5E2B844FC2D49F5
    2024-10-16T19:49:19 8220086 1 8 [...].168.0.[...] 00EFBF669EB848B2BFF34B2CC569D937
    2024-11-02T15:29:01 8230040 4 10 [...].55.80.[...] 013E7AC462954B2787528BF9CDA84E67
    2024-11-02T18:10:12 8200168 1 8 [...].177.150.[...] 0165239F1DA44D7C81002A478489FD4E
    2024-11-02T13:58:16 8230151 4 10 [...].225.135.[...] 016EB0975CB24C98A1639C6986D92C0D
    2024-10-25T21:30:13 8230164 4 10 [...].167.110.[...] 017B09EE71A9444A86378C1083F55AE4
    2024-10-15T19:05:04 8230014 2 9 [...].49.236.[...] 019856DB705F4CC9A3214ED5EA47AE27
    2024-11-10T22:03:17 8220145 7 10 [...].87.88.[...] 01F92DFB910241B7AD09C7226A0DE4FB
    2024-10-20T14:04:51 8220071 4 10 [...].74.158.[...] 020120A5BB5C48CB867DC0DE52F60F1B
    2024-11-02T16:33:36 8230161 4 10 [...].58.226.[...] 021D4952A6E140C082A7951C273483E2
    2024-10-26T17:03:17 8210220 3 10 [...].217.175.[...] 02342DC9D1714CF09490E58C328B95D7
    2024-10-28T20:23:57 8230001 4 10 [...].246.142.[...] 02735151024B4EAC994B250B214C888B
    2024-10-23T23:16:20 8230023 3 10 [...].58.194.[...] 02E753E0B35C42FAAD49A8A41A7EA07F
    2024-11-05T12:39:23 8170204 2 8 [...].65.116.[...] 02FA876A7794498CA61F8443610D571D
    2024-10-28T00:18:47 8220211 1 10 [...].168.2.[...] 02FE72C6ECB34ED1A958F5BBC360FA3E
    2024-10-31T14:14:57 8230150 2 10 [...].203.234.[...] 032A92E016ED4A05A54295BCF15DAD63
    2024-10-13T16:28:45 8230111 1 10 [...].103.189.[...] 035C9D682D9941EF83F187E478D82ED5
    2024-10-10T00:39:51 8220057 1 10 [...].217.161.[...] 0389A0A03A034CC78677F138F565DC6D
    2024-10-12T16:41:10 8220149 10 10 [...].168.0.[...] 03DC297DD516446EB200B24CCBE6279C
    2024-10-26T23:09:12 8230023 4 8 [...].177.132.[...] 042AC61140E54FACB563BBF6D39AEBDB
    2024-10-13T21:55:27 8200095 1 10 [...].168.0.[...] 04713B3BB15240049927BFEA4D86A2A2
    2024-10-11T22:14:24 8230006 1 10 [...].140.44.[...] 0571A7E6F403456CBCDA8778E29513AE
    2024-11-09T12:53:31 8230104 5 10 [...].178.235.[...] 057958A2526E4BBA8B7FEC6A28A42E5F
    2024-10-21T20:03:10 8230030 4 10 [...].131.254.[...] 0623648031B64E01A9F9723E33C741C3
    2024-10-23T22:33:04 8230126 3 10 [...].86.212.[...] 06288804CDFA401BAC73ABBD3E609C56
    2024-10-27T19:38:16 8230074 3 10 [...].237.199.[...] 063FABD72EEA4BF4B5BC2FE4BC4D6242
    2024-10-13T18:21:59 8220007 6 10 [...].166.35.[...] 0644641A4CC2496396AE197D835295F8
    2024-10-21T19:40:21 8220011 10 10 [...].168.1.[...] 065C7BCD954C4F12B167A9F5134203F1
    2024-10-25T19:35:09 8230102 3 10 [...].130.135.[...] 0663761B77A442A88666B1488442B3DB
    2024-10-11T17:43:02 8220141 1 10 [...].251.255.[...] 06D3107966EE4C43A4067D5FFE1CB720
    2024-10-17T03:16:45 8230068 2 10 [...].75.76.[...] 070D43E417E84B3D9CA4DABECCFB3BA8
    2024-10-21T12:27:51 8230117 2 10 [...].166.186.[...] 071FE0E6A1F04605B5347D825E30FB58
    2024-10-19T21:16:44 8190304 8 10 [...].217.176.[...] 0730B5D320744F5FB5B55095B017F879
    2024-10-30T21:55:30 8230142 4 10 [...].87.25.[...] 0743D15FA59846168FCB59E964B93D07
    2024-11-13T18:01:22 8230059 6 10 [...].251.255.[...] 075D3CA833C74DA5914A25CB996C1467
    2024-10-12T18:12:27 8230044 1 10 [...].107.189.[...] 079A0444CA884FDEAFC41F7B2D675E8B
    2024-10-13T11:52:45 8220105 6 10 [...].1.100.[...] 07A44BC71CA542B58A30AFF603B720E4
    2024-10-14T00:13:11 8230016 1 10 [...].168.1.[...] 07EEFCA5F4DD44D8815CF357CE608EBB
    2024-10-19T14:09:43 8230079 4 10 [...].6.110.[...] 08411C7B5D10404A881890DCB266FEF1
    2024-10-10T19:48:04 8230123 1 10 [...].64.18.[...] 08755A713ACE4CB3AFC4994486ED113F
    2024-10-20T15:06:58 8230038 2 2 [...].71.4.[...] 08B846235AB64F2FACA72523F4433380
    2024-11-05T21:45:27 8220228 5 10 [...].103.101.[...] 08C85BCBBCA942BF95A69603B09AD78F
    2024-10-20T18:06:46 8220053 6 10 [...].217.161.[...] 09BE826A3AE446FFA9564BE35A57010C
    2024-10-24T10:17:04 8220114 4 10 [...].242.187.[...] 09CFF02DFDDB4169B3A2C7BB726CEB72
    2024-11-04T20:13:26 8230033 4 8 [...].49.124.[...] 09E5E5611100443FBCB062F5C8D043ED
    2024-10-17T13:29:45 8230001 2 10 [...].246.142.[...] 0A1AFEC7645D43EF8A4DD04BD0156CEF
    2024-10-20T22:22:02 8230168 2 10 [...].251.52.[...] 0A2FC30416644420AC2EADC6F5BC62E6
    2024-10-28T00:09:50 8230101 3 10 [...].73.37.[...] 0A9998C4DB1B42FAA668617F881360D4
    2024-11-10T12:39:51 8230007 5 10 [...].140.12.[...] 0ACAE798FBF54E45A1F9545EF40467ED
    2024-10-23T23:59:44 8230072 2 6 [...].65.67.[...] 0ADE331B3D0842D086A5191FDF96B77F
    2024-11-02T20:24:12 82000464 4 10 [...].177.77.[...] 0AE334873F364D5B936481FD75E6071A
    2024-10-20T18:31:40 8230143 1 10 [...].66.146.[...] 0AF5CC15BB184A8281D62193C518AD00
    2024-10-19T16:10:30 8230045 2 10 [...].73.124.[...] 0B0415E899F94E3E9345618CA799F521
    2024-11-04T21:31:25 8230043 4 10 [...].4.92.[...] 0B2CEB0B86D547D6ABA542AE9007AB91
    2024-11-13T19:24:32 8230148 6 10 [...].87.72.[...] 0B8306E1B8FB4A0183228DD2D338521D
    2024-11-09T11:37:01 8230132 7 10 [...].217.174.[...] 0B98F76F4A38425BB54EA2907B8C4253
    2024-11-11T17:15:11 8220148 6 10 [...].86.9.[...] 0B9E149073D0469EB77954DA69723ED7
    2024-10-23T15:02:39 8230070 3 10 [...].26.4.[...] 0BBED44A3421489AA74B1EB5CDE61F87
    2024-11-10T17:38:31 8230102 5 10 [...].130.135.[...] 0BCBE6F82A1E4854A9D8652A99E4A603
    2024-10-09T17:47:08 8230028 1 10 [...].203.222.[...] 0BF062CF8F274CC486EEA4B5E3701A22
    2024-10-16T20:41:50 8220141 4 10 [...].75.104.[...] 0BFDDD212CB14D47B5DF4A456C3D6B8F
    2024-10-13T14:43:53 8230017 1 10 [...].72.171.[...] 0C22AA190E044490846E067DE50B3B8C
    2024-11-10T14:44:50 8190381 5 7 [...].237.222.[...] 0C378981F1684F34B1E62D906327C143
    2024-10-29T00:36:40 8230063 4 7 [...].242.187.[...] 0C5E06CA19B5418789FC4223CF13C5DF
    2024-10-19T12:53:17 8230085 2 9 [...].217.161.[...] 0CC0EFAA7EC74F43A7C93BCC9D439F65
    2024-10-11T12:45:54 8230031 1 10 [...].84.23.[...] 0CC1105CB027469792E732BE4175FAF7
    2024-11-13T01:36:42 8230129 6 10 [...].65.88.[...] 0CD28D1E4E7540DDBB55EFA96646F37D
    2024-10-23T00:25:21 8210208 4 8 [...].131.172.[...] 0D180FC2F6BB4AE184D48F801D0BE2AF
    2024-10-22T16:54:08 8230013 4 10 [...].26.9.[...] 0D3164037B7048A489249CD55586ECE0
    2024-10-12T20:11:52 8230043 1 10 [...].251.255.[...] 0D43BF014569483E9121A55131DB8268
    2024-10-29T17:46:41 8230045 4 10 [...].26.63.[...] 0D8C6A1842F941AD93BDEB774D48FCB6
    2024-10-20T23:33:21 8190333 2 10 [...].168.0.[...] 0DB809EB5E7046A2BE0505906565F2CD
    2024-10-13T12:28:30 8220123 2 10 [...].242.185.[...] 0DBFDF728AA141818360DBD4DB62E0AB
    2024-11-07T11:20:36 8230159 6 10 [...].86.65.[...] 0E1FFAFDEEEC4D97A3F8F5AB0D7AFAE8
    2024-11-13T18:59:16 8230044 6 10 [...].107.183.[...] 0E4D46B08828435396EF0E99057477CB
    2024-11-07T12:13:42 8230155 5 10 [...].129.228.[...] 0E5403BB8B174B9F8883D18886E919CE
    2024-11-10T14:58:44 8190091 5 6 [...].217.174.[...] 0ED1761BF4B5492DB9F9E043AF2BD79A
    2024-10-19T14:34:51 8220036 2 10 [...].86.31.[...] 0EFB70351482424490B957DF1F7539E6
    2024-10-10T20:08:41 8230076 1 10 [...].166.11.[...] 0EFDCDBBB0334510B57D237A3C30E8EA
    2024-11-08T15:38:42 8230053 5 10 [...].74.24.[...] 0F1B1C0E3E9B4E308A61F130C4F8F6D6
    2024-10-12T01:28:55 8170068 1 10 [...].174.10.[...] 0F24605515C94DB1A3B4DA5DA3585470
    2024-10-18T17:32:58 8190304 3 10 [...].217.176.[...] 0F3C5774E54944D1BAF702D9A1B95241
    2024-11-12T13:25:19 8230099 6 10 [...].74.126.[...] 0F43773B934E422398670DA7181BDCAB
    2024-10-09T00:46:53 8220149 1 10 [...].168.0.[...] 0F542F8C2A1D46A7A5E70E9089FFD4E0
    2024-10-30T00:09:08 8230068 6 10 [...].75.76.[...] 0FD0899E23A34939B399505E90E9AB11
    2024-10-21T19:59:59 8220039 3 10 [...].49.99.[...] 10098040AC33433CBAD25FD56601F7D1
    2024-11-01T13:55:03 8230122 5 10 [...].131.230.[...] 10E88A55605048318F83F5D8ECF0D55C
    2024-10-13T19:57:36 8230007 1 10 [...].140.28.[...] 10F6C88FD6594109B99B00A416B353E5
    2024-10-17T21:51:50 8230052 2 10 [...].38.25.[...] 114B539BC67949BDAD3BEE3942C05F70
    2024-10-28T20:16:01 8230097 3 10 [...].73.34.[...] 1161A6F0883F433DB6951092BB30C63B
    2024-10-13T21:55:41 8230037 1 10 [...].64.49.[...] 11B06E7A427C4919AE786A1F2435FBA7
    2024-10-26T10:38:06 8190051 3 10 [...].1.238.[...] 11B997FD83AC42F985BB8EE869357116
    2024-11-07T11:03:12 8230050 5 10 [...].6.1.[...] 12E830A24A4445BA951FF41975126601
    2024-10-20T17:57:40 823143 2 10 [...].66.146.[...] 12FD8C385B554E07ADC062659E1A95B9
    2024-10-23T11:26:02 8220228 3 10 [...].103.47.[...] 1338575ACE0F4663AF8F68CA2C475191
    2024-10-16T18:42:50 8230059 2 10 [...].6.3.[...] 134AD8C5EBFB47E4A3225069579935F1
    2024-10-24T12:33:07 8230135 3 10 [...].140.90.[...] 1366106225B3401E9F72201B27094E42
    2024-10-08T00:08:32 8220145 1 10 [...].84.44.[...] 136686FDA90F4D4680760855CCD03477
    2024-10-09T20:26:33 8230131 1 10 [...].103.219.[...] 136B4EDAC8B64EDFB15415BAAB9ECE7B
    2024-10-19T22:29:38 8190304 10 10 [...].217.176.[...] 137B398B45E84D96AC9E61EB9C19DF4D
    2024-11-08T17:56:58 8230116 5 10 [...].58.247.[...] 1380912D316647FF9952C0B5139DCBE3
    2024-10-20T13:37:34 8230220 2 10 [...].71.169.[...] 139F8B668EBB40C190A305C7AF86BF7A
    2024-10-18T01:21:11 8220145 4 10 [...].87.88.[...] 13CF9789B521437BA72779581A7CFC2A
    2024-10-25T21:14:14 8230043 4 10 [...].251.255.[...] 144FB63AFA0641FEA19919D8FF68D30E
    2024-11-12T23:59:43 8230154 12 10 [...].167.82.[...] 146319166E434A20AF02A239D3473CA8
    2024-10-24T13:13:03 8220046 18 10 [...].26.43.[...] 14E081DA81364041AC226B3591786D33
    2024-10-18T19:44:10 8230030 3 10 [...].131.254.[...] 15716B7A75D44C7AB8C6F0AB0856DF18
    2024-11-11T22:39:38 8220014 4 8 [...].103.239.[...] 15CCE7C4B6E94AA18CFC7F21D0C4C905
    2024-11-04T13:43:08 8220108 12 10 [...].26.22.[...] 163F57BC9A124881BA7C842E70A104FE
    2024-10-18T17:58:35 8190376 2 10 [...].26.37.[...] 16BEEB7FF5A248EDB4DC5BA24A36AAF2
    2024-10-21T21:15:38 8230037 3 10 [...].64.49.[...] 16CEA924988C4D0FB9E07F83C46FEBE6
    2024-10-20T19:55:34 8220215 2 8 [...].59.85.[...] 16D96AA6B0304C199BFEB6DE57EFBA3C
    2024-11-10T19:42:03 8230038 5 10 [...].71.4.[...] 16E16424F73C41F999D37878FC7504F5
    2024-10-25T12:44:03 8230156 3 10 [...].49.132.[...] 1733D8A8BE30492D8BDCAEA978F4AF70
    2024-10-10T15:24:43 8220123 1 10 [...].26.53.[...] 174482BBFA544CC1972970225D69F2E2
    2024-11-09T00:11:14 8170017 8 10 [...].87.194.[...] 17902CB93A834123A935101DF2B8AF2E
    2024-10-29T23:46:49 8230160 4 10 [...].251.66.[...] 17BBE64399884B12BE365DAD38DA20B3
    2024-11-06T23:35:18 8200171 4 10 [...].86.179.[...] 1836491739D2422B9AA4D259F387CC4B
    2024-10-15T11:32:46 8190378 2 10 [...].58.136.[...] 1897760468B049F8B37C7C7C3D674EEF
    2024-11-06T09:41:55 8220007 17 10 [...].55.70.[...] 18A3EC5F2F7C46BF810031453BAB3ECE
    2024-10-22T16:35:49 8220131 4 10 [...].73.201.[...] 18F895112F85486A9FD981709D1F18D2
    2024-10-13T22:45:48 8230078 1 6 [...].203.191.[...] 19789444216B42528C1D054C053EAB08
    2024-10-15T20:52:23 8230083 2 10 [...].130.27.[...] 1A1F0C897EBB4222B4EA38F3416090F9
    2024-10-20T21:33:25 8230123 2 10 [...].64.18.[...] 1A610C2B44A946D88C33D54DDD417E9A
    2024-11-02T21:26:50 8230002 4 10 [...].131.130.[...] 1A742D2C644F42F49BF702E995E0679C
    2024-10-30T23:09:15 8230100 4 8 [...].166.61.[...] 1A8FC76DA86040E9A85A4F2A45FEEC04
    2024-10-27T11:09:04 8220142 3 10 [...].107.37.[...] 1AC8C95143B94A44AD35B5F4DF72BA2E
    2024-10-17T21:46:51 8230154 5 10 [...].92.162.[...] 1AE64E5EBFCD4254B4EBF448397A052D
    2024-10-10T18:48:53 8230008 1 10 [...].84.27.[...] 1B0177D68B244021B2ACDE4D7EB530D7
    2024-10-25T12:16:17 8230022 3 10 [...].178.193.[...] 1B1B5670D2A4492B80C9405E102F6DA0
    2024-11-09T20:28:37 8230076 5 10 [...].246.223.[...] 1B53E4C3822247558980A6228380E4F4
    2024-11-08T21:13:03 8220110 5 10 [...].74.160.[...] 1B5BDC02DB1F4508BFC308BE1EE59FE9
    2024-10-27T18:26:02 8200223 3 10 [...].251.52.[...] 1B5BDC22449443F79B97D163B7861BBC
    2024-11-10T17:40:24 8220131 5 10 [...].74.252.[...] 1B60772331394A6ABADB2124962B018B
    2024-10-23T21:32:31 8210163 4 10 [...].168.1.[...] 1B99F9BE38F64AAD9FC568A48822E7A7
    2024-10-21T12:31:33 8230132 4 10 [...].26.33.[...] 1BE020906BD940E8A43E292A3B47E162
    2024-10-11T13:33:43 8220231 1 10 [...].140.32.[...] 1C40FAE305F44B7288B45F0A7AADD8BE
    2024-10-13T12:08:24 8220110 1 10 [...].84.22.[...] 1C441291D7204D42B8B1BDEBDB60FE2F
    2024-10-18T17:16:46 8190304 2 10 [...].217.176.[...] 1CBE76D27010412A86E950CFCAA3DDE6
    2024-10-22T01:13:14 8230107 3 10 [...].65.127.[...] 1CFAD0971EB740C6A190E491BDD02E25
    2024-11-08T22:35:01 8210087 6 10 [...].1.114.[...] 1D231BDF4C17423883C2A91611C80629
    2024-10-19T13:07:02 8220145 5 10 [...].87.88.[...] 1D74F5863BA9408BB76F843142DD7A31
    2024-11-07T11:35:10 8220052 5 10 [...].168.0.[...] 1DA6805B0FEA45BD8FC59BEEB6E22572
    2024-10-15T22:56:10 8220152 2 10 [...].66.136.[...] 1DD7351CBC914BB5B2618BEB4B14369E
    2024-10-29T19:02:56 8230047 5 8 [...].84.197.[...] 1DF73C7C02B34BB09C7C9011AB4D2177
    2024-11-11T22:46:35 8230117 5 10 [...].178.177.[...] 1E725F7CF73C407B99759AA5D070EBD5
    2024-10-13T19:23:26 8230045 1 10 [...].74.48.[...] 1E8644EF3F8F4AE2B9A9C0881CE47EE8
    2024-10-18T19:03:30 8220231 3 10 [...].140.32.[...] 1E9063192AEF4C359E637758B8DE9AE4
    2024-11-04T19:34:21 8170204 1 9 [...].65.116.[...] 1ED6192A3BA64AC4A0151CF19D8CE0FC
    2024-10-23T18:30:06 8210163 3 10 [...].168.1.[...] 1EDB30A4381044FEB7236A809FF4C4CC
    2024-10-09T12:16:41 8230099 1 10 [...].75.111.[...] 1F132A229D9B44AF90FC3BB5684DF74F
    2024-10-29T19:56:32 8170017 6 10 [...].87.194.[...] 1F67394227804071B052C554AAF84605
    2024-10-27T15:26:39 8220016 5 10 [...].64.18.[...] 1FF868C4365C4C9E980053DEE8C28AB1
    2024-10-26T18:19:22 8230094 4 10 [...].217.165.[...] 2027CA03BE1448CA988815E94F1703D7
    2024-10-27T19:02:56 8230168 3 10 [...].225.135.[...] 202EA6C7ED8A473B9CBF43A8FB440917
    2024-10-21T00:41:40 8230029 3 10 [...].203.105.[...] 203A1BDD7A73441EA06C1F8E20D91D09
    2024-10-09T13:18:34 8230013 1 10 [...].26.9.[...] 20920B94262D4885B0702F0203C721D9
    2024-11-05T16:16:06 8220108 17 10 [...].73.237.[...] 20B5BC3B4A024009AAECF9290B5C1C28
    2024-11-05T16:17:53 8210219 5 10 [...].168.1.[...] 20D7FA404C5F483A9173774CEA23216B
    2024-10-23T13:53:50 8220112 5 10 [...].251.255.[...] 20DE5077DB7F432993AD3B486E462924
    2024-10-24T00:41:05 8230153 3 10 [...].74.239.[...] 20EAE8852DFB4C568F7CF994011A7289
    2024-10-24T22:06:53 8220156 15 10 [...].65.125.[...] 20F4D8AE8D5B4751BA5651CF2C26579D
    2024-10-22T17:58:46 8230144 4 10 [...].49.227.[...] 21099987D23D43169A9EEAF926DBB05F
    2024-10-26T21:11:24 8230005 3 10 [...].217.161.[...] 217F5CCB42FE46D78FD670114CC9A1A8
    2024-10-23T02:03:12 8200152 5 8 [...].140.91.[...] 2187436FB966453DB111A156EA02E7D5
    2024-10-29T16:48:31 8230047 4 10 [...].84.197.[...] 21F27ADF91704BDD992762615FA510C3
    2024-10-27T19:40:20 8230120 3 10 [...].74.35.[...] 22040730E9A5482BA0426567D5D8E230
    2024-10-20T21:13:22 8220042 7 10 [...].168.0.[...] 222AA8B234CF474A991270ABA9EB3EF3
    2024-10-19T16:58:46 8230028 3 10 [...].130.230.[...] 2239E1C95F214C8F86A454701308F4F6
    2024-10-21T20:41:20 8220053 7 10 [...].217.161.[...] 226125181F7B4BBD9CBBAFB922BD24D1
    2024-11-10T23:40:15 8230045 5 10 [...].73.124.[...] 2279C331D999464DA862B8C633AA9B22
    2024-11-12T19:35:09 8210163 10 10 [...].168.1.[...] 22906789F70C45E38766D0BCA2FBE140
    2024-10-29T22:39:27 8230067 4 10 [...].166.115.[...] 22D6687226AC4F908507CCC813D32023
    2024-10-13T12:30:44 8210208 1 10 [...].131.172.[...] 2392060163EB435A8BFDAA86F1825380
    2024-11-06T20:27:33 8220169 5 10 [...].75.50.[...] 239FB6C2BC3C4631804F60AE2110C15E
    2024-10-27T22:21:31 8230027 3 10 [...].251.121.[...] 23A16B0360BB449E8824C915A10DAC14
    2024-11-10T19:43:39 8220229 6 10 [...].140.28.[...] 23B0D8946FDB431E89927C89F1387C9A
    2024-10-12T21:20:59 8230029 2 10 [...].203.190.[...] 23B2B68607E74B4A9B6EA061ABB6E031
    2024-10-16T21:18:59 8230050 2 10 [...].73.239.[...] 23DB5DAD481643BE96C73EA2092A8821
    2024-10-14T15:11:43 8230101 1 10 [...].26.5.[...] 23F70165179E4C03A2F1A0C65CDC5E83
    2024-10-10T10:34:40 8220229 4 10 [...].140.29.[...] 2444CAC013F343CF808BAF193C37FF1B
    2024-10-28T12:34:09 8230122 4 10 [...].130.34.[...] 24A5C4632FC248089E227F92997D1088
    2024-11-09T12:28:27 8230101 5 10 [...].217.161.[...] 24B06C1D718B4513A80AAC012C96853C
    2024-10-22T18:44:26 8210219 3 10 [...].168.1.[...] 24C2E96D10534240B00510AA9A4C0EE5
    2024-10-30T15:08:21 2210175 4 10 [...].26.74.[...] 24E0157044904B6E9576F9C967937C97
    2024-10-14T23:31:45 8220053 4 10 [...].217.161.[...] 25004EB7BC2149C4844A486DC59E703B
    2024-10-18T09:26:42 8220230 1 9 [...].6.104.[...] 2518D34E51984182AB8E37193102F15B
    2024-11-05T10:40:50 8200117 6 8 [...].92.100.[...] 2536F3BA31DD42719202EF149F50D614
    2024-11-08T13:06:59 8200117 9 10 [...].92.100.[...] 2587AF8DB35D4AB887C0C38ECEC39988
    2024-11-08T17:49:12 8230113 5 9 [...].75.220.[...] 259630C1AFBD4E5F8985D819C60381F7
    2024-10-13T16:08:29 8230167 1 10 [...].107.105.[...] 25C075B3D5ED4DB48AB8C1A9AB211C79
    2024-11-10T19:24:10 8220086 5 10 [...].168.0.[...] 25EE7B97AF4B4A44B276F98BDC08D027
    2024-11-03T19:55:56 8220085 4 10 [...].107.160.[...] 25F9C2DEC9D74D89A2CCB78AE6DF8E18
    2024-10-16T12:59:14 8200223 1 10 [...].251.52.[...] 263C8CF5A3B441EC93085E4456DC5F2B
    2024-11-12T16:10:15 8190338 6 8 [...].147.19.[...] 2689063C3787498F97FC68F7F6AC2D21
    2024-10-13T16:33:43 8230072 1 10 [...].103.189.[...] 2711637FCDFB46988008FD05F9558CAD
    2024-10-29T17:31:33 8230089 4 10 [...].84.16.[...] 272268195D7F44829C332B5F2ED792C7
    2024-10-27T20:37:13 8230044 3 10 [...].107.189.[...] 273C1948A4274213B425B9099A050ED0
    2024-10-22T17:10:30 8200152 1 7 [...].140.91.[...] 278530409BF341D8861094BF583685B9
    2024-10-17T22:07:53 8220042 5 10 [...].168.0.[...] 27894EA1103542E0A960A4B97DC1BE6E
    2024-10-16T19:38:25 8230069 1 10 [...].86.43.[...] 279493132E984FCEB646CA4EDB715225
    2024-10-28T13:29:38 8230106 4 10 [...].58.195.[...] 27AA1388CADD47E09C9C12E256539B25
    2024-10-31T17:58:14 8230003 6 10 [...].86.249.[...] 27F69F211FFE4C9EB7DC04023005CF66
    2024-10-10T09:46:11 8190051 1 10 [...].246.233.[...] 28145BC798A940729F7517D80213BF40
    2024-10-15T10:56:39 8220046 6 10 [...].26.43.[...] 2868E07AB8E2478481D0EC24EDF8CA40
    2024-10-25T21:24:36 8230220 3 10 [...].71.169.[...] 28E6448D6BC54281A752457EC83326EE
    2024-10-14T22:14:13 8230156 1 10 [...].49.129.[...] 29071D5C80644922B080B75687C2FC64
    2024-10-26T17:56:18 8220143 4 10 [...].177.141.[...] 298D64AF92E340AEAE1BB8BF872FE465
    2024-10-19T13:28:32 8220131 2 10 [...].74.252.[...] 29C33249C3FF4CBBA7339B8DDCC9253D
    2024-11-02T18:20:39 8200168 3 10 [...].177.150.[...] 2A677D79D3A540FC972FEEEA49050F99
    2024-10-13T23:42:42 8190271 1 9 [...].217.172.[...] 2ABA86A07B1B448083825154F4D78194
    2024-10-09T20:44:45 8220071 1 10 [...].168.0.[...] 2ADDD17A2BFE4545882231D45DD280EC
    2024-10-12T15:20:51 8230064 1 10 [...].217.161.[...] 2B12E455D5B14378B2078DF5B071F6F7
    2024-10-14T13:51:21 8220108 7 10 [...].26.22.[...] 2B62B098223B40F998BB96AB79D69E04
    2024-10-20T14:39:09 8190304 14 10 [...].217.176.[...] 2BA9415C0FD649DDB2F43B317D7F4AEE
    2024-11-05T00:29:09 8220149 4 10 [...].217.175.[...] 2BBD3DDE85504B1D9FD7EE32FAA01595
    2024-10-23T12:44:06 8220228 3 10 [...].103.47.[...] 2C05525C7073443A828FEB688509A861
    2024-10-17T18:42:15 8230247 2 10 [...].26.18.[...] 2C6318718F43442C94F44A71C78A5B37
    2024-10-26T20:31:20 8230120 2 10 [...].74.9.[...] 2C6B4658BAFF4AE8BEB8996AD67B41B3
    2024-11-03T20:27:01 8230102 4 10 [...].130.135.[...] 2C91B518F6AE48359B9BB8E081E06185
    2024-10-14T10:44:12 8230019 1 10 [...].86.152.[...] 2CB99403BE504004B814BFA7F613A7AC
    2024-10-25T12:47:07 8230156 4 10 [...].49.132.[...] 2CD04E59476646D6AF2E525344BDA1DA
    2024-10-18T20:04:36 8230063 2 10 [...].242.187.[...] 2D08A8CC0E6C49E0A905164AD4F8EBFE
    2024-10-10T11:51:15 8230077 1 10 [...].74.54.[...] 2D4842E42D4449658909045976E15B60
    2024-10-30T12:41:56 8230057 5 10 [...].59.225.[...] 2D9000DF343D4501A211FBB917319C2D
    2024-11-05T17:47:03 8230103 5 10 [...].66.136.[...] 2DD50D9B33094383A1E511D735DF7BC9
    2024-11-02T15:48:08 8220007 11 10 [...].217.172.[...] 2DD58B4469C24653AA6F93CD426A4715
    2024-10-12T21:56:56 8210163 1 10 [...].168.1.[...] 2DFAD356FCAE42369089FAD099B31F54
    2024-10-26T19:57:55 8220148 3 10 [...].86.9.[...] 2E56FB41430C48F69FC0FCFE15F8C0EB
    2024-10-17T20:05:00 8230114 2 10 [...].73.16.[...] 2EB68DE81257404AAE61AC80CC746BDE
    2024-10-19T22:34:01 8220085 2 10 [...].107.160.[...] 2EEF9D392DCF4710857B3FD05B7C0884
    2024-10-15T22:10:08 8230134 3 10 [...].242.186.[...] 2F78B6D79E084A918EBD78F4735F1241
    2024-10-30T17:38:32 8230097 4 10 [...].26.30.[...] 2FBA441F87674CC1952952F88A88E7DC
    2024-10-24T13:06:01 8230135 4 10 [...].140.90.[...] 2FD3BF8670F74022A1A88E77C07DFE29
    2024-11-09T18:25:14 8200223 5 10 [...].251.52.[...] 30125738E42843968408F53AD526E181
    2024-10-19T22:48:34 8230139 3 10 [...].140.90.[...] 301D1BC19E894B9B9B28C7ECA17FC7B1
    2024-10-25T16:25:18 8230053 3 10 [...].74.27.[...] 30251DD0532E4A32ACD2FF88DF2D3F43
    2024-10-25T15:20:24 8230224 3 10 [...].86.123.[...] 3053ED3CABDF4488B62D0BF68A221F50
    2024-10-30T22:48:53 8230147 4 10 [...].217.161.[...] 30FD5A63FB8443289F154113967E5B46
    2024-10-18T10:10:10 8220230 2 9 [...].6.104.[...] 311E38BF703744EEBCF89B26F7162891
    2024-10-19T02:29:58 8230079 3 10 [...].6.110.[...] 31EBB3EA28ED4BF3B7B8DE453B152E35
    2024-11-09T21:01:53 8170017 10 10 [...].87.194.[...] 320853CDB6984EB48D4B933D1BF123C5
    2024-11-02T02:54:54 8230150 3 10 [...].66.136.[...] 32333F57CE5E4E79810DBC99D407133D
    2024-10-12T23:07:48 8210163 2 10 [...].168.1.[...] 32BD23FD56FA4BE2B82221E8241E83E3
    2024-10-30T13:55:38 8210226 11 7 [...].26.10.[...] 32CA7A6CDD264EADA0588F7D63C211FC
    2024-11-01T17:40:41 8230155 2 9 [...].131.230.[...] 3331BF32CEA84F238AE163ADC745CD16
    2024-10-31T22:25:43 8230007 4 10 [...].75.76.[...] 333D8B9E3E5049B0BB9CB9E0FBEEEE68
    2024-11-06T09:50:34 8230022 5 10 [...].169.211.[...] 3382C6639E5B4645B0D393E239E94BDA
    2024-11-07T23:01:40 8230036 6 10 [...].74.60.[...] 338696F30F4B4238A44EF7A8D5AB17EB
    2024-10-24T23:56:40 8190238 1 10 [...].129.191.[...] 338EDF22562E46EFA646176F96B3EFE6
    2024-11-01T13:14:19 8230005 5 10 [...].69.184.[...] 33CFA8FCA65A4A53ADF9DBE62B04B5FB
    2024-10-16T19:57:14 8220156 6 10 [...].65.113.[...] 33F23B34116E46EDAC78A9DF0C85F3D4
    2024-11-05T15:47:24 8230155 3 10 [...].129.228.[...] 341FDEB154864989A9DD4C870347F9DD
    2024-11-08T18:05:06 8220141 6 10 [...].26.64.[...] 34A13A57213744079067D6699BB9487A
    2024-10-22T22:54:48 8190304 17 10 [...].217.176.[...] 34AA5018D93541ABB07060DE81E4C916
    2024-11-04T21:21:02 8230023 6 10 [...].58.192.[...] 34AD65924B944936A64D737B126189BC
    2024-10-11T14:18:14 8220149 3 10 [...].168.0.[...] 34C0EDF7569C411684F6E4584CCA7BA9
    2024-11-04T18:36:23 8230246 5 10 [...].130.252.[...] 34D1E0332A0C49C89B4C187473BB8B31
    2024-10-15T18:04:19 8230134 2 10 [...].242.186.[...] 34D683795C5B44EAA74218BAE05F8FEE
    2024-10-13T03:01:02 8230058 1 10 [...].210.98.[...] 351F43FAB1E5426892AD7072EEE6331C
    2024-10-28T17:47:28 8200095 3 10 [...].168.0.[...] 35351A33534A46B1B4C010F4347CDC9B
    2024-10-11T14:20:55 8230010 1 10 [...].246.185.[...] 3546F3B668E54608B42ECE47AC4DAFD2
    2024-10-25T16:17:54 8220110 3 10 [...].84.22.[...] 359F5324082C423590FAA4D729DFD643
    2024-10-31T13:52:08 8230114 5 10 [...].87.226.[...] 35CDA18E99E8452FAF73DE56BD0FB755
    2024-10-21T20:53:25 8220086 4 10 [...].168.0.[...] 35DC1C3E9EBF44E49E9421BC92D7528A
    2024-10-27T13:47:19 8230114 4 10 [...].87.226.[...] 35FF72EB24354B8F9BB90AA53ED96471
    2024-10-30T23:16:41 8230027 6 10 [...].251.121.[...] 3654C3E10FBD4B19B49AB5DF5B071D5A
    2024-11-05T11:12:35 8190378 5 10 [...].58.139.[...] 36ACF4D2ED4844E9891AFC177872B1B2
    2024-10-17T19:03:36 8230031 4 10 [...].84.23.[...] 37D62A988621457C9DE0128F462A9A10
    2024-11-02T19:28:16 8230014 4 10 [...].49.236.[...] 37F865645D574AA0AF08CE883BA3FFC1
    2024-11-10T18:21:42 8220131 6 10 [...].74.252.[...] 386600DE62514E9694FAEA37A3CCE1DC
    2024-10-19T19:57:26 8230154 6 10 [...].92.162.[...] 387B1DED12214F66BE72EFDC602BBFCF
    2024-11-10T20:43:22 8220145 6 10 [...].87.88.[...] 388EAADB38974A9C88E6F1A3E9441259
    2024-11-10T13:35:40 8190238 5 10 [...].130.246.[...] 389405115B94440EB9B689EF2A4F8272
    2024-11-04T20:16:49 8220105 12 10 [...].4.66.[...] 38AADE3273284973AA7AE39CE0237C11
    2024-10-23T11:56:30 8230144 3 10 [...].49.227.[...] 38F1A147C2054803906C213CDE4C67B3
    2024-10-12T18:34:07 8230106 1 10 [...].58.195.[...] 38FEF2D83FF64A27A20A63977785D09F
    2024-11-04T15:41:46 8210087 5 8 [...].26.18.[...] 3907D9C9F1914F2E93C0B0DC01A5FB1D
    2024-10-10T22:47:50 8220007 5 10 [...].166.35.[...] 394D3398CCED49519C3AF8418362E3A6
    2024-10-15T12:23:13 8230159 2 10 [...].74.12.[...] 3957A534C841490B9F32AB04BB175CAA
    2024-10-23T12:10:13 8230246 3 10 [...].70.74.[...] 3973127D713542FAAD95DD018BE29EE9
    2024-11-10T21:01:04 8230244 5 10 [...].86.152.[...] 397D9910C4BE420DAB2C02491ECD74A2
    2024-10-21T11:28:57 8220046 16 10 [...].26.43.[...] 39915D1F62CD477BBED08D8E4B7D1D68
    2024-11-04T16:28:01 2210175 5 10 [...].140.30.[...] 39924BC5BFAC4529B2D9B2ADB6767A7B
    2024-11-02T13:26:30 8230025 4 10 [...].73.116.[...] 399C2B95437141A7B51310AEAEB08A71
    2024-10-26T16:36:01 8230064 3 10 [...].72.62.[...] 39E2D711532341B1A32C7252B415842E
    2024-10-22T00:44:29 8220057 3 10 [...].217.161.[...] 39F4C9D3C95B4BF3AA13C7E724669A28
    2024-10-17T11:51:12 8220007 7 10 [...].26.43.[...] 3A2EA488F7E04AA7AFD4E968482B6794
    2024-11-10T19:16:20 82000464 5 8 [...].177.77.[...] 3ADCEB19DF19460080F0259171252A97
    2024-11-11T22:36:58 8230010 6 10 [...].49.160.[...] 3AF984C0E2D64518BA65CDA7F856CCAE
    2024-11-02T12:41:46 8230217 4 8 [...].92.141.[...] 3B34B49D18FC4216A81D1A67FD9F2F7D
    2024-10-14T23:09:20 8230013 2 10 [...].74.59.[...] 3B3EB718FEA54B06ABFA1DF2F1BC662D
    2024-10-22T20:02:15 8210087 3 10 [...].1.114.[...] 3B4DA5603ABA4E02A0C4990ACEA5D277
    2024-11-10T15:36:57 8230245 5 10 [...].103.39.[...] 3B7B7FE9CA2D4A78B5D9D92A7220E651
    2024-10-14T18:48:22 8230006 2 10 [...].140.44.[...] 3B883908A65442FC9C93F79E79A72625
    2024-10-28T17:13:17 8230045 3 10 [...].73.124.[...] 3B8B7034EB9048F1A6F93BF46978DAF9
    2024-10-13T21:42:06 8220071 2 10 [...].74.158.[...] 3B8BE8AF9EA64C5C9A210D79765A3227
    2024-10-22T20:23:37 8220152 5 10 [...].66.136.[...] 3BB87DF6827E49109DC260FB7A50C9C5
    2024-10-27T22:46:25 8230218 3 10 [...].74.9.[...] 3C18DEECAFBD485FB469E4DC1AAD70C5
    2024-10-11T13:37:11 8220156 4 10 [...].131.12.[...] 3C3D0C6AEF124E4E9A7B194C935E431A
    2024-10-12T12:35:47 8220152 1 10 [...].66.136.[...] 3CCA207BD8A64BC3BC9D5B43197ADFA6
    2024-11-08T08:43:43 8220114 6 10 [...].242.184.[...] 3D4806291F9A4B69945B6E8D493E1D4F
    2024-10-24T12:33:35 8220007 8 10 [...].55.70.[...] 3DBAE8137F394A34845E52500F5D18EB
    2024-10-21T19:55:49 8230066 3 10 [...].86.254.[...] 3DBC840027E64553B3F5940B4CF7A940
    2024-10-16T21:20:04 8230079 1 10 [...].6.108.[...] 3DD9D5F9673E47649544871CC7A449EA
    2024-10-28T23:16:23 8220036 4 10 [...].178.164.[...] 3DE3620A5C05444082DD1E1702358E1D
    2024-10-18T20:43:16 8220148 2 10 [...].86.9.[...] 3DF9537181074A9BB926008B14EBD305
    2024-10-15T18:32:55 8230043 2 10 [...].251.255.[...] 3E5C2A3C7FD44F0083985D28A637888A
    2024-10-18T12:02:24 8230122 2 10 [...].203.204.[...] 3E7D6049B17E49A5B4AE69D5DD7B9C61
    2024-11-09T20:13:42 8190238 2 6 [...].130.246.[...] 3ED8F1EF118844549260427F9E862309
    2024-10-07T21:44:14 8220053 1 10 [...].217.161.[...] 3EEB1FEF229F4E3BB49642DB8F826500
    2024-10-26T20:54:15 8230224 4 10 [...].86.123.[...] 3F39847FD9C246A38A7D35D44CFFBD0B
    2024-10-21T20:19:39 8230028 4 10 [...].130.230.[...] 3F4F1001142149529A2B3DDE79B2E471
    2024-10-15T21:47:24 8230157 2 10 [...].217.175.[...] 3FCC933167EF4F16A8F438FEB485EE3B
    2024-10-10T21:50:22 8220007 4 10 [...].166.35.[...] 4073B79828E9428EBC5255FE3AFC777C
    2024-10-13T01:35:01 8220149 15 10 [...].168.0.[...] 40A906A328C749ADAC501E9B3EADB3E9
    2024-10-25T19:27:25 8230129 4 10 [...].65.88.[...] 4103E23DE6DC48A28AD70C8A6CE7BA78
    2024-10-22T23:52:29 8230129 3 10 [...].65.88.[...] 412888CCEBB245EF9EA7C39A0BEE3870
    2024-10-14T14:11:24 8230001 1 8 [...].74.15.[...] 41A51BBE294141E09B6C43C1CD5D5A90
    2024-10-11T19:11:30 8230039 1 10 [...].166.67.[...] 41C8448FE69140DDBAE862C902915FD4
    2024-11-05T20:50:12 8230023 7 10 [...].58.194.[...] 41D5CAFB9D0148579FBB97A9D4CEEA4E
    2024-11-03T11:34:16 8230218 4 10 [...].74.13.[...] 41DDF340D4A442CBAD14E42B97D7C41B
    2024-10-15T18:19:23 8220231 2 10 [...].140.32.[...] 41E3590127F84FD185E36B2BC8FF297D
    2024-10-17T00:31:04 8230148 2 10 [...].202.117.[...] 422E10D4402E4E44AB7621446B2F8915
    2024-10-14T21:56:43 8230021 2 10 [...].246.176.[...] 4275AF776A544BADA72B92FDAADF44AF
    2024-10-14T20:34:33 8190381 1 9 [...].237.203.[...] 43101CC72E4B4F6D87A78419E923225D
    2024-11-04T19:27:14 8170204 1 7 [...].65.116.[...] 43140D05913D4FF88A9F13A54B4D7091
    2024-11-09T00:58:09 8220149 18 10 [...].6.178.[...] 4325C9E99D79428DB4BB3A72D0ABE0B6
    2024-10-27T17:28:38 8230065 4 10 [...].176.151.[...] 43590EDBFD9F40369C2B3B7398125F8A
    2024-10-25T12:32:50 8230142 3 10 [...].87.25.[...] 4422D29C13F747A28AEE275FAC1D25DB
    2024-10-23T15:02:21 8230070 4 10 [...].26.4.[...] 4456A97B0F7C4F9DBB8766C5FC05085B
    2024-11-04T23:37:56 8230037 5 10 [...].64.49.[...] 4476CA5725D84454AC33F8C40688E56F
    2024-10-22T22:41:02 8230057 2 10 [...].210.232.[...] 44859B3EBF4047DFA70A77C40195E0CB
    2024-11-09T23:01:54 8230138 5 10 [...].4.227.[...] 44C2697C76244DCC82EBF67FDB4F7FA7
    2024-10-23T23:34:09 8230116 3 10 [...].49.74.[...] 44C3D969FB864DADA62CDE7D5F8A4807
    2024-10-26T18:51:46 8230010 3 10 [...].49.179.[...] 44D28405CF1C498DB7DEE04E2B86150F
    2024-11-13T18:29:19 8230070 7 10 [...].217.161.[...] 44D38243B82047BAA88F91A89D27CDE5
    2024-11-03T15:25:52 8190381 4 10 [...].237.222.[...] 450E6F53EC8B434AB3960A32434D5ED4
    2024-10-23T14:14:04 8230244 4 10 [...].86.152.[...] 453F422BD6474A9FBB58DFCAFEA0B351
    2024-10-22T14:41:31 8230089 3 10 [...].84.16.[...] 45504D11B32243DA9D997694EE565B0E
    2024-10-24T10:49:43 8230042 3 10 [...].49.79.[...] 45CD029576534E74ACABC1BE085EE72A
    2024-10-22T17:15:57 8230157 3 10 [...].217.175.[...] 45F2061F6C0340EE87D74B908D262A9B
    2024-10-18T16:57:41 8230044 2 10 [...].107.189.[...] 4639066B09734F309B632B9925A1ADA3
    2024-10-14T13:32:14 8220046 5 10 [...].26.43.[...] 464E4651F6BC43098794DB614595AA35
    2024-10-15T20:56:12 8230033 2 9 [...].43.46.[...] 467CC3F9DD0E416886B89093412A41F2
    2024-10-29T19:17:55 8160117 3 10 [...].217.161.[...] 468F934E215F48D2859F783CB6DD50EA
    2024-11-06T23:01:37 8230155 4 8 [...].129.228.[...] 46BAB7E3686D4014AF01B6EE098F2557
    2024-11-01T17:21:18 8230122 6 10 [...].129.234.[...] 46EC92B44DFC4E5096DD364DF4873E50
    2024-10-11T17:39:31 8230063 1 10 [...].242.185.[...] 46F35D8D3FAE4FA18BB1EFDE5E59EE49
    2024-10-23T18:01:19 8230017 2 10 [...].235.108.[...] 47054E09985B4F408AAE6FA43E226589
    2024-11-10T17:12:47 8230167 5 10 [...].86.97.[...] 47D00DF218C44250A8DABD34D6C4B56B
    2024-11-12T21:37:25 8230085 6 9 [...].217.161.[...] 4811DFB770844ABFA9C58ABFD15E5271
    2024-11-10T22:27:33 8220085 5 10 [...].107.160.[...] 4817B350667A4B2A9E82D304028D6E94
    2024-10-09T13:11:51 8220007 2 10 [...].26.43.[...] 487E60A03BCE4165ABE598F65486994F
    2024-10-24T14:37:28 8230057 3 10 [...].26.37.[...] 48E10B45DD954E52BEC9B4D30D0530A7
    2024-10-11T02:58:16 8230006 1 10 [...].140.44.[...] 48E31B069E274EE4870B660E726B70AB
    2024-10-16T16:39:30 8210219 2 10 [...].168.1.[...] 48E5382470034E378F325B602DE829F5
    2024-10-11T14:31:53 823143 1 10 [...].66.146.[...] 496D515EB8B34D33B9C8C0ABBAF5B1E7
    2024-10-11T23:51:41 8230059 1 10 [...].6.2.[...] 49B5CB442CBD469A8E322998C5C3F91F
    2024-10-18T00:56:26 8220145 3 10 [...].87.88.[...] 4A08A4EE05C249108834C8F3BC433CC7
    2024-10-12T15:42:03 8220016 1 10 [...].168.0.[...] 4A27527BE7A94A788CD5FBEF6BCFEB06
    2024-10-18T16:03:01 8230074 2 10 [...].71.4.[...] 4A6E1E804DB140E5A17A44ABE807D59F
    2024-10-14T12:18:40 8220046 4 10 [...].26.43.[...] 4A805E9626E3494EB869CFDC055F84FE
    2024-10-22T01:10:18 8230107 4 10 [...].65.127.[...] 4A8A173EA49845CA8E0F3DB27E7DD745
    2024-10-20T18:42:00 8220071 5 10 [...].74.158.[...] 4AEEFD139A0044B8906B6C86924B4858
    2024-10-23T11:13:42 8230148 3 10 [...].202.117.[...] 4B4DFAC601C54D13911E98847A348C9C
    2024-10-30T13:18:39 8230057 6 10 [...].59.225.[...] 4B65C97904D044BC93380B0CE6D9302B
    2024-10-13T15:10:10 8230050 1 10 [...].168.0.[...] 4B81AE42775944D98CC671AF02236CAE
    2024-10-26T22:00:20 8230165 2 10 [...].74.62.[...] 4B89C233C937429BB171909A32EC1F03
    2024-10-17T12:38:00 8230129 2 10 [...].203.153.[...] 4B8C4CE30F874C6F9119FACBDF128C87
    2024-10-09T21:10:51 8220071 1 10 [...].74.158.[...] 4B8FC81B9F234598A1EE0447B9D48D9C
    2024-10-12T20:17:25 8230029 1 10 [...].203.190.[...] 4B934626EA1347189403AF9AB92DC735
    2024-10-12T00:00:04 8230164 1 10 [...].177.135.[...] 4BA7258F0638442A8CBBB83B9AAACAEC
    2024-10-22T18:44:45 8220136 3 10 [...].74.100.[...] 4BDD4AEC0A2F497D94CADD8BDE793B70
    2024-10-11T14:44:56 8230224 1 10 [...].72.133.[...] 4BE0A82EA8D94150940D407FF0C313AC
    2024-10-21T20:05:53 8230154 7 10 [...].92.162.[...] 4C095542BA8D40D8BA4690B794787196
    2024-10-20T21:04:38 8230165 1 10 [...].251.93.[...] 4C50088085D848BB97D4ED8693A4DF63
    2024-10-27T15:57:11 8220123 4 10 [...].6.160.[...] 4C53E583E31145D8979B49ED4273AD3A
    2024-10-10T14:58:17 8230105 1 10 [...].203.147.[...] 4C7697C39B1247C3AEF637D4FDEAADAB
    2024-10-24T11:59:54 8230247 4 10 [...].246.138.[...] 4CCF82160A304144A44D995C41435E44
    2024-10-09T20:35:16 8230220 1 10 [...].71.169.[...] 4CEA87772185483D872A82F0BE25A57E
    2024-10-28T23:54:20 8220136 4 10 [...].74.100.[...] 4D238C8A3F114B8CB08F1965A4BD156E
    2024-10-27T18:37:32 8230115 3 10 [...].210.232.[...] 4D3EC9B93D2D4F3F830821289662FC0F
    2024-10-13T18:21:13 8230247 1 10 [...].49.86.[...] 4DA1ED4BC8E54D139196457FD796EB0A
    2024-10-22T23:46:02 8230052 3 10 [...].38.25.[...] 4DD3137DC15945BD892298D6E6B4B123
    2024-10-12T14:55:43 8190376 1 10 [...].86.93.[...] 4DF2886976DC447BBBEB94FFA6CD38D3
    2024-10-23T11:09:21 8230006 3 10 [...].242.189.[...] 4E5C9C92ACCD46A0BFA82377A749D26A
    2024-10-12T19:32:36 8230101 1 6 [...].217.161.[...] 4EA680946DF843CEA3BD9A0A40CDCB72
    2024-10-26T14:45:38 8230145 3 10 [...].54.94.[...] 4F12FE02656B426A9CC2F9AD07E1377E
    2024-10-26T12:53:16 8230104 3 10 [...].203.193.[...] 4F1ACA6E7912424984CC013BE7D338C4
    2024-10-23T22:25:20 8210163 5 10 [...].168.1.[...] 4F45EBB44269413396B5B824E4EC0181
    2024-10-12T15:19:24 8230056 1 10 [...].242.226.[...] 4F74578A95974D1A876B3ED396F3A39B
    2024-10-26T18:16:42 8190338 3 10 [...].43.98.[...] 4FBFA872A075493DB56ED742869F8587
    2024-10-11T00:18:49 8230102 1 10 [...].130.135.[...] 4FC04B6391434AB68914C0D11EFC7A0F
    2024-10-29T20:59:35 8200171 3 10 [...].86.177.[...] 4FFA8C4F65554552924D1E8927783C85
    2024-10-12T15:01:09 8220149 7 10 [...].168.0.[...] 506812BED15147D887F8097F8368DB1F
    2024-10-10T18:44:01 8230163 1 10 [...].26.43.[...] 506A3BDA2C67463DA7FB74B59233DBA7
    2024-10-20T15:13:51 8230073 2 10 [...].71.218.[...] 50712E0AA49D4E8B9B6C143FAC31C5C3
    2024-10-21T18:46:38 8220011 9 10 [...].168.1.[...] 50E0618CB544486199C1CCAB50014AC2
    2024-10-28T00:43:37 8190091 2 10 [...].217.174.[...] 51437A863997420094E7420C5DADB834
    2024-10-09T22:51:35 8220053 3 10 [...].217.161.[...] 5177B073E49C4C46B350C8A4FD9137A2
    2024-10-13T23:53:48 8230027 1 8 [...].49.157.[...] 51894565E302429C97FE6F2A0175BF17
    2024-10-09T12:07:32 8230125 1 10 [...].72.95.[...] 518C441E12C64D68A8C0D564E58796CD
    2024-11-02T12:28:39 8230069 4 10 [...].86.43.[...] 51F915E6A6A942EEBE1B06F74FD3B254
    2024-10-14T11:41:13 8220046 3 10 [...].26.43.[...] 52174010E5084891B3FE91906E687BA6
    2024-10-19T19:45:00 8210208 2 10 [...].131.172.[...] 526990D085244905A1ECBD8B789335B3
    2024-10-20T19:46:32 8230111 2 10 [...].237.18.[...] 52FA0763B1AC4E4E9A0C73B4EE2BAF20
    2024-11-08T00:36:22 8230107 5 10 [...].65.127.[...] 531C80B2392E4568B5023669F1D23A66
    2024-10-18T18:10:09 8210220 2 10 [...].217.175.[...] 531D66FC93B84FD1A206D4A15D4D576C
    2024-10-24T11:29:56 8230247 3 10 [...].246.138.[...] 53D174F28BFF4B0691F0B837E4120946
    2024-10-26T13:42:02 8190271 3 10 [...].217.172.[...] 53D195CAF2A34FE9A2F266898D1B7E77
    2024-10-09T22:35:03 8230022 1 10 [...].203.202.[...] 53DE2E2F0560485BB717AB06591AF3F0
    2024-10-18T13:21:08 8230106 2 10 [...].58.195.[...] 54135A772D7942FEAE0BF96235BDBC3B
    2024-10-17T00:08:28 8230027 2 10 [...].49.157.[...] 5459860AB6BC41EBA2C0406C638705E9
    2024-11-01T00:02:18 8170068 4 10 [...].173.84.[...] 5469A6E9CA2747C88775F83856E5A421
    2024-10-16T17:47:05 8190273 1 10 [...].177.233.[...] 547D82B65C95424A8AA47F61724E7B4B
    2024-10-12T18:10:52 8230005 1 10 [...].203.162.[...] 547F0F429F1C426D9B13BDE09F2CDDF2
    2024-10-31T22:19:06 8230154 8 10 [...].167.82.[...] 549D47A97689462F83813BCA243C5183
    2024-10-11T18:39:46 8220114 2 10 [...].242.184.[...] 54CF0DC842A345F4B484B4DC410F3926
    2024-10-16T22:15:00 8230008 2 10 [...].152.158.[...] 54DC6BD866E9401CA52D395FF3D53D6F
    2024-10-15T18:59:11 8220143 1 10 [...].177.17.[...] 54F64DFEFF714A229220DF2F75EE7A68
    2024-11-10T18:23:20 8230152 5 10 [...].203.182.[...] 55783FBECCDA42CE89D35AC33871EC2C
    2024-10-15T22:52:30 8230101 2 10 [...].217.161.[...] 558AC3043B554C9EAA72B166123859C6
    2024-10-25T17:10:49 8220110 4 10 [...].84.22.[...] 55AF2E2E37614B4F8D80238CDF013D63
    2024-11-13T16:28:25 8230227 5 10 [...].65.115.[...] 55E36BB8AA20486090C6154A78A52052
    2024-11-05T20:08:20 8230218 5 10 [...].74.226.[...] 562207CFB5DA405E80F1D0356A0B536F
    2024-10-29T10:29:43 8230005 4 10 [...].26.71.[...] 562250ABFE164486988BDEC32EFEFD35
    2024-10-29T14:45:29 8220156 7 10 [...].65.125.[...] 56A2C7BDC18646FE98E970FF516C989D
    2024-10-24T11:05:37 8230083 4 10 [...].130.27.[...] 56B701BD5933498F874B3B0F2CFFE61B
    2024-10-24T15:01:10 8230143 4 10 [...].26.77.[...] 56D3906D078B4BDBBCDDCA3D86592F24
    2024-10-30T18:26:23 8230064 4 10 [...].217.161.[...] 572E1011BED44F7AA81EDC9CFA662E41
    2024-10-14T18:37:51 8230053 2 5 [...].74.24.[...] 576D0FE09258445F8755500FA357CDA3
    2024-11-12T05:01:01 8210220 6 10 [...].217.175.[...] 5782CD6F7DD6481AB11D22ADEA7AA314
    2024-10-22T20:07:37 8230131 4 10 [...].103.219.[...] 579D532E29FA4DCBAA9FE4AEE6A579FE
    2024-10-15T00:34:22 8230023 2 10 [...].87.147.[...] 57B352C3D43B41A98EC8B5F0AA41B80A
    2024-11-05T09:29:50 8190271 5 10 [...].71.4.[...] 57B71B20F06D4B8AA1E1AD6112E4F63F
    2024-11-02T13:59:52 8230134 4 10 [...].242.187.[...] 57D32DD573054C648858B8EE5AF8C02B
    2024-10-20T20:30:00 8230231 5 10 [...].166.35.[...] 57DBE44E969A423E9230F27673CECBB2
    2024-11-13T14:39:18 8230103 6 10 [...].66.136.[...] 5842872280884B0FBD0363E5692D1743
    2024-10-15T00:25:18 8220014 1 10 [...].103.239.[...] 58E05BF11D8D40098A91BD744BA1EA72
    2024-10-13T22:52:30 8230104 1 10 [...].49.78.[...] 58F7D8EC0F434BB9817B6B6192090AAD
    2024-10-13T14:52:17 8230168 1 8 [...].225.158.[...] 590C7EC3C007418FAFDC05076F02E892
    2024-10-27T11:13:30 8230016 3 10 [...].168.1.[...] 591EAD8616FE47DFA4648CC98FF38F6F
    2024-10-26T14:53:18 8230111 3 10 [...].87.40.[...] 592BCD69B78D43BD96E8779889D64674
    2024-11-01T12:26:53 8230136 4 10 [...].86.16.[...] 592D5814829D41E4A3DFCC066FDAB95E
    2024-10-14T22:56:47 8230098 2 10 [...].49.227.[...] 595E5710295A4327BF38CDB4E40783FC
    2024-10-21T22:23:48 8230013 3 10 [...].251.52.[...] 597157158ED8443FACB928AB8CB76964
    2024-10-15T15:54:44 8150188 2 10 [...].92.185.[...] 59803C5119D64D57B7998DC578A9B9F7
    2024-10-09T23:55:28 8230070 1 10 [...].217.161.[...] 599F461A7C9F48328FC26F4676A2FB8E
    2024-10-15T18:04:26 8230091 2 10 [...].6.161.[...] 5A05D45A2D21490B9205F788F8150F10
    2024-11-12T21:41:26 8220141 8 10 [...].75.104.[...] 5A12C85F85A94670A95C35DAB0E014BC
    2024-10-13T22:49:24 8220011 1 10 [...].168.1.[...] 5A5EC6A16455471C9CC1BBD1E328E0F0
    2024-11-06T20:22:55 8220149 6 10 [...].58.138.[...] 5A72C26A337F4E8EA675A79E05639D91
    2024-10-23T14:30:37 8230148 4 10 [...].202.117.[...] 5AA2CAAC729948D4B7EDF91F74916291
    2024-11-02T14:26:40 8230245 4 10 [...].49.119.[...] 5B08FD4B190146AC8CDF6A6DE31B4ACA
    2024-10-20T20:49:27 8230104 2 10 [...].178.237.[...] 5B7D048AB22949C1A2363222D5B4B5F7
    2024-11-01T21:04:43 8230044 4 10 [...].107.183.[...] 5BA7F7BCEDA74679B3607E017A03B067
    2024-10-15T21:14:54 8230071 2 9 [...].166.103.[...] 5BEC6FB33FB342AA88E1728FD8E2C983
    2024-11-10T16:34:30 8230076 6 10 [...].246.223.[...] 5C185304BBB047D49D1C48F4EBEBAC80
    2024-10-22T21:24:38 8220057 4 10 [...].217.161.[...] 5C1997516AC24B9FAA5B1C4F2B46F671
    2024-10-31T00:41:30 8210163 8 10 [...].168.1.[...] 5C4490CFBAB44E7E89DC9D2BE64FE490
    2024-10-09T13:24:53 8220085 1 10 [...].147.63.[...] 5C9BE1FF05084668B721552EA0469376
    2024-11-07T21:06:51 8200117 7 10 [...].92.100.[...] 5CB356B8BF84441C9393DEE70523339C
    2024-10-17T22:22:05 8230002 2 10 [...].131.130.[...] 5CB834D3CFB642A084BDB2D220497919
    2024-10-18T18:10:17 8190304 5 10 [...].217.176.[...] 5CFCBE60EE3A4FD2B2BAB19BF1F07BE6
    2024-10-24T17:42:31 8230147 3 10 [...].178.194.[...] 5D2B6E4C293B440D80F52470808F83AA
    2024-10-15T12:20:02 8220070 2 10 [...].26.55.[...] 5DE287E0353946F08450D13BD5B616F4
    2024-10-21T20:23:38 8230029 5 10 [...].203.105.[...] 5E0F64FDD9A84F67B7A8A95F7C4CB9B2
    2024-11-13T20:15:12 8230093 6 10 [...].152.183.[...] 5E4183A2C5364471967C4541FBE1E7F3
    2024-10-14T19:27:08 8230061 2 10 [...].138.151.[...] 5E4A2760A6D84B22846D0545F420556C
    2024-10-27T18:45:35 8230122 3 10 [...].130.34.[...] 5E88B444015A49C68E0F5860BEDEE53B
    2024-11-03T19:58:34 8230092 4 10 [...].58.139.[...] 5E89EC0FBF884B968880C68C5F580C4A
    2024-10-27T22:25:59 8230076 3 10 [...].66.136.[...] 5E905405C82240B7B8C44C5D16D8FC6C
    2024-10-28T00:03:31 8230101 3 5 [...].73.37.[...] 5ECA7ED59333476393C2A62756761363
    2024-10-09T20:21:54 8230042 1 10 [...].4.75.[...] 5ED41733855C4E1D95473ED49DC733B2
    2024-11-06T18:49:32 8230136 5 10 [...].86.16.[...] 5EFDBA1090D0465A8B550178E0F44DCF
    2024-11-01T15:05:28 8230154 9 10 [...].167.82.[...] 5F768B99C4E149F2BDCD0843B26F016C
    2024-10-21T11:39:12 8230092 2 10 [...].26.27.[...] 5F995ACA6B02457F9C6D1C0221C135A4
    2024-11-12T19:12:40 8220143 5 10 [...].167.107.[...] 600AD50573C84FFA9E6A916E04F94BBE
    2024-10-19T17:05:38 8230025 2 5 [...].73.116.[...] 6016CC5DED884174BB514969FA301BBF
    2024-10-11T11:06:43 8230031 1 8 [...].84.23.[...] 602271EAF70142C0972C954BD32E6071
    2024-10-18T16:54:49 8230016 2 10 [...].168.1.[...] 6075E8DBD6D6474CAF82067844B01A8C
    2024-10-20T14:47:48 8230008 5 10 [...].84.18.[...] 61284F05FAD241F6BA269A36E06DDB0E
    2024-10-09T22:57:09 8230154 1 10 [...].210.115.[...] 61622F504BBB44559CA06EFA56EDFC23
    2024-10-16T00:03:07 8220145 2 10 [...].87.88.[...] 617B9A42B4D24E299E1FF3C4E8992A15
    2024-11-09T19:04:51 8230069 5 10 [...].86.43.[...] 61A426F7E813436E9236FC964436C57A
    2024-10-11T18:54:38 8230136 1 10 [...].86.16.[...] 61D20F91B61F4BC1B267DEE66F9B7D75
    2024-11-01T23:47:33 8220148 4 10 [...].86.9.[...] 6260D430435D4485BAB6360A0411D280
    2024-11-09T20:06:21 8230074 5 10 [...].237.199.[...] 6260F7D0E64943BCBBC796DD681EE1C2
    2024-11-10T23:57:28 8230002 5 10 [...].131.130.[...] 6268B78EAA29426FA00B9BEEE86D1DD5
    2024-10-29T21:28:12 8230021 5 10 [...].246.176.[...] 628C87D78E7F4147B83CF6B13394F0AD
    2024-10-23T21:53:31 8230038 3 0 [...].65.113.[...] 62DBFD66757E443787CE7606436C8DA3
    2024-10-20T18:23:26 8230143 2 10 [...].66.146.[...] 62DD96E0116C432F8D4D7602C1CF356C
    2024-10-27T15:43:37 8190333 3 10 [...].168.0.[...] 62E0C1024BDA4799B40D776F39045C88
    2024-10-21T23:54:28 8230125 3 10 [...].86.168.[...] 62ED1EEE20C348679F2CC66933463353
    2024-10-11T15:40:30 8220148 1 10 [...].86.9.[...] 62F8B065E1B54FBB966501783D740DF0
    2024-10-23T17:30:31 7220234 1 10 [...].26.60.[...] 631FDBF90AFF4328828A460ACF3FD620
    2024-11-05T23:50:54 8230091 5 10 [...].6.162.[...] 6336C1622F964F10AE52263FC2CF0962
    2024-10-30T23:43:08 8200117 4 10 [...].92.100.[...] 634A2CABEC1B4CAFBDF17FC6024566DA
    2024-10-27T18:51:18 8230217 3 10 [...].92.141.[...] 637B6E8D3BC34B65BBE2E9F9D03855EF
    2024-10-18T18:45:01 8220112 3 10 [...].138.151.[...] 638D7B6D388641B58762F5592A19BCE7
    2024-10-29T17:22:52 8230145 4 10 [...].103.102.[...] 63AE41B248DD446AA047C6ADD2394E9E
    2024-11-10T20:35:46 8220148 5 10 [...].86.9.[...] 63E7246CA82C4F9280A2EE5CDA67F6F5
    2024-10-09T20:37:10 8220105 3 10 [...].1.100.[...] 6410EC0E3FDB4826BAFA7473A4C6B024
    2024-11-12T15:54:44 8230003 15 10 [...].74.225.[...] 64213305586F4ED5B8790ABD7480500C
    2024-10-16T21:31:41 8230116 2 10 [...].49.74.[...] 64F2901016D14CA2AC859B1BF1425FA0
    2024-10-22T21:32:31 8230164 3 10 [...].177.135.[...] 652A356EFFD045B1B51BE740AF78D755
    2024-11-09T21:30:45 8190238 3 0 [...].130.246.[...] 659324D34AE94B839E4E85CBA951F5F7
    2024-10-16T20:15:07 8220141 3 10 [...].75.104.[...] 6627BF1488204048BB4E57E5492E86A6
    2024-11-03T12:32:35 8230154 10 10 [...].167.82.[...] 664D5451754B497297CB448CA179AFBB
    2024-11-08T01:48:32 8230059 5 10 [...].6.161.[...] 667A0D61E71A4495A4B732148AC51F89
    2024-10-27T12:47:58 8220016 4 10 [...].251.255.[...] 669CEFD21DC14C688F58E7648C96AB02
    2024-10-10T18:04:49 8220108 4 10 [...].73.236.[...] 66B6BEA5A20346F4BC02A44318D4DA7A
    2024-10-12T13:18:07 8220136 1 10 [...].74.100.[...] 66DC2E52D31E4C80A7E772E0C19EBD89
    2024-10-27T15:25:11 8230127 4 10 [...].176.109.[...] 677E95BC14344CC7ACADDB9DCE221984
    2024-10-19T13:09:14 8230065 2 10 [...].176.151.[...] 67A4255DA0804CD8AEDCC5563287D4EF
    2024-10-11T12:44:58 8230139 1 10 [...].73.236.[...] 67FBA30FFB32423B8BAF889C2B58A981
    2024-11-06T16:38:42 8230159 5 10 [...].26.47.[...] 680265A87FA944A1B581F9A0EEECB244
    2024-10-15T03:04:12 8230164 2 10 [...].177.135.[...] 686B82135D9A4D43951E3AA770E0336A
    2024-10-16T20:05:06 8220011 2 10 [...].168.1.[...] 68AFDD5034FA49E89250B29298F26927
    2024-10-25T18:55:23 8220112 6 10 [...].138.151.[...] 68C302BB39BC4743A0963CAD1D39678B
    2024-10-22T22:14:16 8230147 1 10 [...].217.161.[...] 68C4ECAFF2D545D887337D64CE7A26AC
    2024-10-28T01:04:39 8190091 3 10 [...].217.174.[...] 68EF64A91A264542BC7BB778B9384AFB
    2024-11-06T23:16:47 8230111 5 10 [...].167.163.[...] 6904839D3CFE44EF937D9A19E3DDF54B
    2024-10-30T12:36:52 8230226 2 6 [...].210.83.[...] 691BD15242834082AE3E1D33CF138107
    2024-10-18T21:59:28 8230244 2 10 [...].86.152.[...] 694E338397914B31AFBA519107E35B12
    2024-11-03T13:26:37 8190381 2 9 [...].237.222.[...] 697D9FB95CEF455295340E4292B2B2E5
    2024-11-09T14:38:46 8230085 5 7 [...].217.161.[...] 69E8676B8A6D4EC99F6C5DB7BAD25A26
    2024-10-14T20:43:19 8230102 2 10 [...].130.135.[...] 6A937D62D2F0472D94CD8F607F1A812D
    2024-11-03T10:54:34 8170017 7 10 [...].87.194.[...] 6AA72EFBBFDF49978B1568679B33C0E6
    2024-10-23T17:56:17 8230139 5 10 [...].26.42.[...] 6AC51D9EC08247ADA4B58A1407D2D3B5
    2024-10-11T17:27:42 8200171 1 10 [...].86.178.[...] 6AEDFFC8AE3B4A0786884A134C2203FF
    2024-11-07T20:04:57 8230145 5 10 [...].103.238.[...] 6B1CDF3CFC2D464088B4540B6BF6E104
    2024-10-27T21:55:47 8230109 3 10 [...].202.96.[...] 6B2E1013C3DA440A959A97F71138416B
    2024-11-09T21:01:12 8230161 6 10 [...].58.226.[...] 6B356293E50F4D4EA672CAED117134F6
    2024-10-31T12:39:17 8190273 3 10 [...].177.233.[...] 6B3ABDAFC1CB4DBF822D2FF53298111A
    2024-11-07T20:51:39 8230094 5 10 [...].86.152.[...] 6B3E1DAAF7C444E1B6E491154D78E391
    2024-10-19T16:44:18 8230031 5 10 [...].84.23.[...] 6BA4846DECB54DF9B47640F6F8F94577
    2024-11-07T23:20:45 8230135 5 10 [...].140.90.[...] 6C0C1E2C4628425AA1846270D2652200
    2024-10-30T19:01:19 8230027 5 10 [...].251.121.[...] 6C1548A1288D46479743C59997A8D142
    2024-10-15T17:20:58 8230154 2 10 [...].210.115.[...] 6C83D801B3134F488A703AF028ECD1C7
    2024-11-05T14:19:08 8220149 5 10 [...].26.78.[...] 6CBF1D88ED37455BB2AE5BF925336DC3
    2024-10-21T22:42:06 8230021 4 10 [...].246.176.[...] 6CE242E34A9349DABB240DB4EC8C7635
    2024-10-22T11:28:39 8220046 17 10 [...].26.43.[...] 6CE367C8E66B43B681E4E4BE236EA8CE
    2024-10-16T13:38:26 8220042 3 10 [...].168.0.[...] 6CF3966AE07D4A92A2E4FCC14C37031E
    2024-10-12T16:30:17 8220105 5 10 [...].1.100.[...] 6CF7245F33EC446884E6F94AEADD977A
    2024-11-02T18:17:16 8200168 2 10 [...].177.150.[...] 6D042450572C406CB373B6A39A513D21
    2024-11-10T19:28:24 8230044 5 10 [...].107.183.[...] 6DE47BAA726B44BEBB6881B9F39F9C2C
    2024-10-20T22:53:42 8230221 2 9 [...].178.183.[...] 6DEF718F1FAB4438A3AEE6B1F3DD941E
    2024-10-27T12:34:12 8230016 4 10 [...].168.1.[...] 6E1B5CAA23D047E3B312FB97828C3F50
    2024-10-11T20:16:20 8230031 2 10 [...].84.23.[...] 6E32CF8F2EEA47D3A431AEC07B76D938
    2024-10-23T18:39:44 8230017 3 10 [...].235.108.[...] 6E605BB36DB24832827114606934E917
    2024-11-06T20:27:29 8230024 5 10 [...].92.147.[...] 6E6427D38B0342E3BEBEF863B2AACE2E
    2024-11-04T23:33:37 8230129 5 10 [...].65.88.[...] 6E72F7C232B945B587D51CBBDCBEF4E2
    2024-11-05T14:16:26 8170204 4 9 [...].65.116.[...] 6E8FFF6FCB34477A95CFCA96B81A93EE
    2024-10-25T15:48:36 8230116 4 10 [...].49.74.[...] 6E9B8C422D7F46DCA01E754E37B4D14C
    2024-10-14T23:41:23 8230035 2 10 [...].177.146.[...] 6EB2470D6A474959BEF3DDE1F2DD0A16
    2024-10-17T21:02:58 8220042 4 10 [...].168.0.[...] 6F3506D900DB477F8DAAE1EAF30889C6
    2024-10-31T20:21:04 8230036 5 10 [...].74.32.[...] 6F438326FCFD4DE0886EC0370D01F5BE
    2024-10-22T19:37:01 8230131 3 10 [...].103.219.[...] 6F560FCE515D43CA97C8E8A9F69A5EBD
    2024-11-09T19:45:07 8230160 5 10 [...].246.165.[...] 6FAC01D0BB3547F2B85F4D385E6D7696
    2024-10-13T13:38:00 8220036 1 10 [...].86.31.[...] 6FE1A17FBBF845AEA7AA03DD9BAA40F0
    2024-10-31T19:20:22 8230106 5 10 [...].58.193.[...] 6FE5D34F5B0B403193FE16EAEB48C785
    2024-10-14T20:42:53 8230099 2 10 [...].75.111.[...] 700CA6EACDC74F08A7C19C111C9D9780
    2024-11-13T15:16:21 8230116 6 10 [...].4.170.[...] 704A74A6BDD440BC85D842D536218D87
    2024-10-08T10:56:33 8220228 1 10 [...].103.47.[...] 70627D218BB64DF89675EC20F71EE3B3
    2024-10-10T18:04:42 8230127 1 10 [...].26.75.[...] 709F7AF5325749888323E1B37596F3F8
    2024-11-10T14:50:08 8190238 7 10 [...].130.246.[...] 70A1E27524FC4E4FA65B85A22770FCA7
    2024-10-16T13:24:57 8230022 2 10 [...].203.231.[...] 70C37CE818FB40CE851C6A2F55B8FE72
    2024-10-13T19:51:28 8230114 1 10 [...].73.16.[...] 70EE1FDC4C78457A896112714E842CA1
    2024-10-10T20:51:51 8230151 1 10 [...].28.98.[...] 712B7B99F05A4D648F2EA6309426D0E9
    2024-10-31T18:46:20 8230002 3 10 [...].131.130.[...] 715AD507B2FF4DEFAEC75F51C6392306
    2024-11-11T16:50:07 8230159 7 10 [...].58.192.[...] 715F17227B7C4AAEB40790A617F31683
    2024-10-19T20:53:07 8220016 3 10 [...].168.0.[...] 7160C7B3C08441079C3CB77E32E88CAD
    2024-10-16T12:39:35 8230113 1 9 [...].75.220.[...] 71997B288EEF4A7DA0E6CBD5C8AB3CF6
    2024-10-16T13:04:07 8230089 2 10 [...].84.28.[...] 71A4A550CC614A2795C9855454D3A56F
    2024-10-23T22:14:24 8220228 4 10 [...].103.47.[...] 71FC9736B6F544A7AE1B8AAC7DB68E4C
    2024-10-23T09:55:18 8230029 6 10 [...].203.247.[...] 72076738EB584C8F9421682A16893678
    2024-10-30T13:49:35 8210226 12 7 [...].26.10.[...] 720AFB6937544BDAA7F96CA073488A60
    2024-11-11T09:16:21 8230109 5 10 [...].26.60.[...] 723E794EBE9C4F8981D49630CC2E900C
    2024-10-23T19:07:14 8230017 4 10 [...].235.108.[...] 72740D5A94C545AEADBCA48B118F7114
    2024-11-07T12:55:53 8170204 3 9 [...].65.116.[...] 7275F89FD4FC4E2B8CABD8F8A4503D2C
    2024-10-11T14:31:12 8230061 1 10 [...].59.92.[...] 72AA3296F4384C3C9DA7773F122CB470
    2024-11-06T09:56:02 8220007 16 10 [...].55.70.[...] 72E100D5C8584BC0826C512DBFFFA4DC
    2024-11-09T20:43:27 8230231 7 10 [...].167.176.[...] 73100FA353C1488999CF4BAE9576EBA9
    2024-10-09T20:00:32 8230157 1 10 [...].217.175.[...] 733007155CDC4AE786C3CE53D8A1F83A
    2024-10-23T20:01:06 8230143 4 0 [...].66.146.[...] 7341EB11CB5A4FC5AF956DCEAC63BDFE
    2024-11-07T17:57:39 8230153 5 10 [...].246.241.[...] 737E1336C82F4120B9BF86042D856DC3
    2024-10-18T17:48:53 8220169 2 10 [...].74.139.[...] 740A69B8B4CB4D93B9FACAB329598B12
    2024-11-13T14:14:20 8230003 16 10 [...].217.174.[...] 74580C7F05244232B92011919D702518
    2024-10-19T17:54:35 8230152 2 10 [...].203.166.[...] 748DED37B7D542819866949B5F33AD19
    2024-10-27T13:34:26 8230123 3 10 [...].71.227.[...] 74CCD44D2896463DA6AF18166B1EFA60
    2024-10-19T22:00:55 8190304 9 10 [...].217.176.[...] 751C60039C6346779F560645F3412026
    2024-10-27T22:30:34 8230165 3 10 [...].44.145.[...] 751DD1B99A25445EA036767A2ABB603D
    2024-10-26T22:19:05 8230138 3 10 [...].4.227.[...] 7542E33E27E24FD79B78E4A07EC50F3E
    2024-10-15T20:11:19 8230071 1 9 [...].166.103.[...] 75610E9F034045AD93A0C8F05F8C0FEF
    2024-10-18T17:54:35 8190304 4 10 [...].217.176.[...] 759FF3F9002645829AC9A35D70A07963
    2024-10-27T12:44:22 8230114 3 10 [...].87.226.[...] 7610258297D34042BEC2156F237092AF
    2024-11-06T20:06:37 8220149 9 10 [...].58.138.[...] 7613C2081CFB4C20BDD59FF091336E78
    2024-10-18T11:22:13 8220011 4 10 [...].168.1.[...] 7615E53E538847B7A05C9E9B31ECBB6B
    2024-10-16T12:44:28 8220123 3 10 [...].26.53.[...] 762064EB5B6147D18A4158E6CCD1C8C0
    2024-10-13T17:17:01 8150188 1 8 [...].92.185.[...] 7622D24F8416413E967B801FFE9AA149
    2024-10-20T17:25:28 823143 2 3 [...].66.146.[...] 76C4EB62E88F4885BAD94A27F9E39B2C
    2024-11-03T13:38:10 8230075 4 10 [...].71.4.[...] 76CC923D46A14CA0890F2BAC4BC62F74
    2024-10-11T21:27:48 2210175 1 10 [...].87.75.[...] 7711A826F3054C5688774F69EEDA1900
    2024-10-21T20:20:08 8230066 4 10 [...].86.254.[...] 7727CA3FB2F64DA29CDDD9F2E46BC44D
    2024-10-27T16:51:55 8230040 3 10 [...].55.80.[...] 772C39703BBB4183B113C575DB5A907F
    2024-10-26T15:17:14 8220057 5 10 [...].152.222.[...] 77912CF764244C2A896F6B9746CE4ACD
    2024-11-06T22:22:49 8230024 6 10 [...].92.147.[...] 7796C5B7F8ED4BD393193D9ED74D6416
    2024-11-02T20:02:14 82000464 2 10 [...].177.77.[...] 77B48ED40CA44F3DB0DC5D47CDCE45E6
    2024-10-19T15:03:00 8220152 3 10 [...].66.136.[...] 77C571F22D2F4546AE026B44A28B8149
    2024-11-12T20:26:04 8230021 6 10 [...].246.176.[...] 789E21579E5444E2B822961C0B41DE54
    2024-10-10T12:26:15 8190378 1 10 [...].58.136.[...] 794FEAB9FD6A422FB9D2A3DF51D466B3
    2024-10-24T19:27:08 8220156 12 10 [...].65.125.[...] 79605BAAB9BC499EB0C89F792D7B6905
    2024-10-19T23:18:32 8190304 11 10 [...].217.176.[...] 796B53B93CCB40C2987324E61619316C
    2024-11-13T11:01:39 8230077 6 10 [...].73.119.[...] 7970A4BB537641B9B6606F79C02DE2EA
    2024-10-27T15:16:25 8230127 4 10 [...].176.109.[...] 79A8A9B867114E0F90A9642CC1DFA8EB
    2024-10-28T21:34:29 8220036 3 10 [...].178.164.[...] 79AFB1BB6745480EA6585D8A168D01E4
    2024-11-07T19:23:04 8230147 5 10 [...].203.255.[...] 79E15F520EB747E9B8FA08A47EE370D7
    2024-11-05T16:52:33 8230124 5 10 [...].86.31.[...] 7A098E4C4BFC4033B6831AC9264CB1BA
    2024-11-11T15:03:35 8230005 6 10 [...].26.71.[...] 7A3A2EF42C22421E893A72B330CE872C
    2024-10-23T12:36:16 8230244 3 10 [...].86.152.[...] 7A4A1CF3CF874D14891A9A3C084F973C
    2024-10-10T18:52:57 8170017 1 10 [...].66.31.[...] 7A8F5C7DE1F042218712EC01179AA1EF
    2024-11-08T13:25:48 8200117 10 10 [...].92.100.[...] 7AAAAA44E9DF4606A0EE9ED72AD68256
    2024-10-10T14:12:04 8220108 3 10 [...].26.22.[...] 7B0D3217510A496B97AB67D58BE31F67
    2024-11-08T14:56:22 8220057 6 10 [...].217.161.[...] 7C5A8F15DD494CEBB344E013932FFF65
    2024-10-25T17:03:28 8230067 3 10 [...].166.115.[...] 7C6DB17DC0D94D5B985AAC24C955FFEA
    2024-10-10T01:28:08 8220042 1 10 [...].168.1.[...] 7C7BC96787A2467CB4D9C43947381C40
    2024-11-09T20:16:57 8170017 9 10 [...].87.194.[...] 7D5D18339E7541C399A36299866F77E9
    2024-10-09T13:34:39 8220156 2 10 [...].26.20.[...] 7D70F213C6F4428DB66B1E85F07ADA9F
    2024-10-15T08:00:31 8230139 2 10 [...].140.90.[...] 7D939637337443E0B3D32F8D31991C0D
    2024-10-13T20:45:50 8230019 1 6 [...].86.152.[...] 7D957DE7CD9E4D868EC0FB2A0CF97C72
    2024-10-12T15:35:56 8220142 1 8 [...].107.37.[...] 7E421200B50541D393E61D3FAA402954
    2024-10-28T03:13:15 8220211 3 10 [...].168.2.[...] 7E69E41BA36B4B8B992C4C96A7BFFF16
    2024-11-07T11:14:12 8230072 5 10 [...].84.133.[...] 7EBCE341BDDD4097B002FAA9D4FF62A3
    2024-10-10T18:24:28 8230011 1 10 [...].26.25.[...] 7F00FE3F77514A73BCED0F3AB623FD6C
    2024-11-05T16:43:54 8220108 16 10 [...].73.237.[...] 7F6C12E25ED34A2882DB7D6E9210808F
    2024-11-12T15:05:57 8230092 5 10 [...].26.27.[...] 7F7CCE418D434843BA6510B9599B92A0
    2024-10-22T20:51:09 8230125 4 10 [...].86.168.[...] 7FA8790A3F7A4E609615CF26B39C5BB8
    2024-10-13T00:22:36 8230094 1 10 [...].178.151.[...] 7FBC5D813C344820B6122583A209683E
    2024-11-02T14:41:48 8230074 4 10 [...].237.199.[...] 7FEB91F9BAF3447C9C4A019C801BBEC0
    2024-10-26T18:51:36 8230163 3 10 [...].1.22.[...] 8088D70B7B844203AD5A41D7E9AC7C95
    2024-11-04T16:15:35 8220039 5 10 [...].49.101.[...] 813E80D5C655474E8F2CD57F42AB00F9
    2024-10-14T17:01:23 8230170 1 10 [...].26.42.[...] 815F52EA23784EA1A9C3D9F911F1B782
    2024-10-21T21:57:48 8230012 3 10 [...].74.15.[...] 818EA4B8706745E680D2F4EB072B7CDE
    2024-10-23T11:40:24 8220228 3 10 [...].103.47.[...] 81AFF37572124F25A40FD260E32F28BA
    2024-10-18T00:10:40 8230007 2 10 [...].140.70.[...] 81ED3B7088C14AA9A2F5E52FA912BB60
    2024-10-14T17:05:27 8230097 1 10 [...].26.30.[...] 824CB7416D314393A3136C26149161DD
    2024-11-02T20:28:55 8230111 4 10 [...].237.18.[...] 825AC507529C493485E246EC420E04A2
    2024-10-27T13:45:25 8220091 3 10 [...].66.136.[...] 82618C24180844BFB9E5142C344FF212
    2024-11-02T00:40:16 8230104 4 10 [...].178.146.[...] 82B9272D58DF497B9E69D1165B55BBC9
    2024-11-10T22:02:52 8230153 6 10 [...].246.241.[...] 8301CBB29287426C8B6729825917FBE7
    2024-10-20T13:55:13 8230064 2 10 [...].217.161.[...] 831A61377C05475CBA033289A45E4C99
    2024-11-03T22:19:11 8230120 4 10 [...].74.10.[...] 83510CCD32CB42F4803B8A230A7A2B22
    2024-11-10T23:57:03 8200095 5 10 [...].71.129.[...] 83634EC705424A408F4863F99D386555
    2024-10-18T12:11:03 8220011 5 10 [...].168.1.[...] 8370A462765942678DEA365CE792BE70
    2024-10-14T22:16:12 8230244 2 10 [...].86.152.[...] 839B88C38101470D9B65047139250E45
    2024-10-28T19:07:15 8220070 4 10 [...].58.226.[...] 839E4A6660964720A387C7B0FB1021E5
    2024-10-22T18:57:27 8230143 3 10 [...].66.146.[...] 83B11D9BDF1D4C209084357FF3EEBE85
    2024-10-21T12:14:12 8220228 2 10 [...].103.47.[...] 83B8DC104C28448DBEB9E7C825C4ED92
    2024-11-05T16:28:49 8230071 5 10 [...].177.156.[...] 83D5AB80828F4C22AFC1AAD1436E3BFD
    2024-11-12T00:00:15 8230098 6 10 [...].43.40.[...] 841C041C23704F298DC3774B11D975B7
    2024-11-05T14:33:37 8230039 5 10 [...].26.74.[...] 842882978D724F54B6CC3978843951F4
    2024-10-20T22:10:25 8230034 1 10 [...].107.124.[...] 8433B5EC3E05411CBFCDE59B27CEA077
    2024-11-02T17:53:26 8220052 4 10 [...].168.0.[...] 847BA56CFD93407C8CBD92516DD56ACF
    2024-10-12T20:01:03 8230231 4 10 [...].166.35.[...] 84FEC8DF367A476DBBDC54F14B3013DA
    2024-10-27T16:58:11 8230245 3 10 [...].49.119.[...] 8528B5567FB147CEA99CF2D5569EA95B
    2024-10-28T17:18:01 8210163 7 10 [...].168.1.[...] 852D7BC23F0E46A2A8111E86433C88A8
    2024-10-10T20:09:57 8230014 1 10 [...].4.176.[...] 8551E8A254D245B09E6088A85EABED8A
    2024-11-05T19:32:39 8230083 5 10 [...].130.27.[...] 85ADC6414D46458AA65948E860C23482
    2024-10-17T16:30:04 8220141 5 10 [...].26.64.[...] 85DB24A7A8F941C6BA06EFBFF92B6403
    2024-10-09T20:12:04 8220156 3 10 [...].131.12.[...] 863B0B1382ED4C94B70D47DD2FCE02EE
    2024-11-05T11:54:52 8190378 6 10 [...].58.139.[...] 868039A7F7F249E4A16711638854288A
    2024-11-10T15:47:49 8210219 6 10 [...].168.1.[...] 8683C3D503674322A88912150A832AC7
    2024-10-16T23:34:36 8230136 2 10 [...].86.16.[...] 86C06F66DAE141B5B867790302B2BCC9
    2024-10-18T10:43:33 8230122 1 8 [...].203.204.[...] 8710813C02AA4F4BAB484A81D4A35721
    2024-10-12T18:28:06 8230152 1 10 [...].203.162.[...] 874AEC12CBA24D948A987B0DA720644A
    2024-10-29T16:53:30 8160117 1 10 [...].217.161.[...] 876236919EB049A3946EBC2F8331B774
    2024-10-25T12:39:10 8230136 3 10 [...].86.16.[...] 878CF81B96284BDCA2DFBD5C2CE465F9
    2024-10-13T01:41:23 8230093 2 10 [...].178.204.[...] 87CEB490205A40179179D9E4F65D25F6
    2024-10-23T11:23:43 8170068 2 10 [...].41.71.[...] 886D228EBBD54F7DAAF6983D73D7DB5F
    2024-10-13T19:26:22 8190091 1 10 [...].217.174.[...] 89151970FA27401AB981C9D7757560C9
    2024-10-30T21:54:18 8230038 4 10 [...].71.145.[...] 89303890C43C4FFEB3C650944DDCAEB6
    2024-10-12T21:17:54 8220025 1 10 [...].255.68.[...] 89C3098CF8424D3C919A0627C4F9AF85
    2024-10-17T17:48:59 8220052 1 10 [...].168.0.[...] 89CA7C68607A4B41964E31AA7203E170
    2024-10-11T11:36:58 8230033 1 10 [...].43.46.[...] 89DD008BE46645188E9AC9AF3A29D785
    2024-10-17T21:54:01 8230037 2 10 [...].64.49.[...] 89E065580EA2409CA5D0086F3DC64A97
    2024-10-16T01:15:31 8220042 2 10 [...].168.0.[...] 8A476553318E4001B7C81E3E2A9E5B11
    2024-10-23T19:19:04 8230069 3 10 [...].86.43.[...] 8A4EEEE24E5C4AEC894DAAE839F587D1
    2024-10-12T20:12:04 8230092 1 10 [...].58.225.[...] 8AC958968704471E958203EC2A7EC5BE
    2024-10-24T19:46:48 8230159 3 10 [...].55.123.[...] 8B29C3B8C45C4E8F811EAD7D73C8BD9F
    2024-11-10T22:25:45 8230073 5 10 [...].84.177.[...] 8B5673B5F9C9498CA455D36E836F9068
    2024-11-05T17:24:46 8230056 5 10 [...].242.224.[...] 8B61CCE13FA84F27B364DFACC1C6BE54
    2024-11-05T18:14:30 8230143 5 10 [...].66.146.[...] 8B801C7F542E4B0B9210F9C237C0E318
    2024-11-09T15:18:08 8230131 5 10 [...].103.219.[...] 8BA21A410C834DE2B67CB4C91DB55B87
    2024-11-01T15:27:25 8230056 4 10 [...].242.224.[...] 8C441B7EEFE542B1A370549D702B63DF
    2024-10-30T22:10:08 8150188 4 10 [...].92.185.[...] 8C72FD08A2194F8589765E8D630F0772
    2024-10-20T16:26:15 8190271 2 9 [...].217.172.[...] 8C7B6CAD292B498CBD36D2DDE4C90798
    2024-10-18T00:57:47 8230024 2 10 [...].103.33.[...] 8CB03695DD784FDD90140B7665149526
    2024-10-22T14:26:15 2210175 3 10 [...].26.74.[...] 8CC2B51DFFB548179E4DA3F305E19618
    2024-11-05T23:40:33 8220149 12 10 [...].58.138.[...] 8D01B974AF9E40958254B8C6CC742DD6
    2024-10-09T01:55:03 8230231 2 10 [...].167.161.[...] 8D08888DF3FA406BB223713FC98EE2A6
    2024-10-13T11:13:37 8170017 3 10 [...].66.31.[...] 8D15DD3A2DA447908E4B1E58AEB50A32
    2024-11-08T02:44:01 8230065 5 10 [...].74.87.[...] 8D1DC8693D304240B7366D96CB2C7FF6
    2024-11-06T20:41:16 8230144 5 10 [...].1.100.[...] 8D89E107A77E417DB434A86096CAD884
    2024-10-21T20:51:55 8230078 3 9 [...].203.215.[...] 8D9BF6E01CA443269B9D035D17B715D9
    2024-11-03T14:03:12 8190381 3 8 [...].237.222.[...] 8E8F7609975F4C90ABE993F527EE6B84
    2024-11-04T21:12:47 8230018 4 2 [...].251.52.[...] 8E96234DA9D346E499A6473E9D71DB9D
    2024-11-09T21:39:47 8230220 5 10 [...].71.169.[...] 8EC064DF80D345D694A069CAABE4D2CF
    2024-11-02T15:50:31 8230138 4 10 [...].4.227.[...] 8EF674036A254948A373ECE7508F727B
    2024-10-09T23:21:04 8230068 1 10 [...].75.76.[...] 8F193C6F209B49A0A8676950612EEBDE
    2024-10-22T22:36:22 8230147 2 10 [...].217.161.[...] 8F53AD2E6FD34AD9877AEC0E473DE61B
    2024-10-19T00:27:41 8190051 2 10 [...].198.190.[...] 8F559A61376A4279A802E90B8A4D65BA
    2024-10-29T22:38:10 8230011 5 10 [...].74.48.[...] 8F6B8109A3DE476D8CAEAF4714C3A9B8
    2024-10-20T15:22:54 8190304 16 10 [...].217.176.[...] 8F6DE74AB43A45618D80ED90624E57C4
    2024-11-02T16:27:57 8230053 4 10 [...].74.24.[...] 8FDB832F974E4308B1975F9B8E7B1EF4
    2024-11-09T19:57:53 8230025 5 6 [...].73.119.[...] 9033F128151F4E7A96DD44ECF7C98D2F
    2024-10-22T16:15:48 8230036 4 10 [...].74.19.[...] 9087910741D948A9A596468D16EAA9AD
    2024-10-15T23:52:07 8230012 2 10 [...].74.218.[...] 9090A493307C4B5D982A3C44A5346456
    2024-11-09T22:58:20 8190238 4 10 [...].130.246.[...] 90CF629C7C8A4E358E5E3568614D4693
    2024-10-24T14:59:54 8230057 4 10 [...].26.37.[...] 90D6971CB8524A76840585883722D69C
    2024-10-20T14:58:56 8190304 15 10 [...].217.176.[...] 914B7C03651B402DA35A4C8EDCE6FC90
    2024-11-10T14:18:48 8190238 2 10 [...].130.246.[...] 915912DD70A4421F945FFC419B25ABC6
    2024-10-17T20:56:53 8230142 2 10 [...].54.164.[...] 918059DF41D34BEFBAE360A46EC012DF
    2024-10-29T20:34:03 8230039 4 10 [...].54.247.[...] 9182F62FB10A4CF6AFA55150EEDDF9BB
    2024-10-18T18:37:39 8220025 2 10 [...].255.68.[...] 920280A5D857487FBC8ABD921F92D922
    2024-10-08T22:44:06 8220156 1 10 [...].131.12.[...] 920F634C25E7412F90B607E146966991
    2024-10-23T16:57:05 8230033 3 10 [...].43.41.[...] 9213942F750D4436A1FD2D9E842EDB10
    2024-10-07T18:23:19 8220229 1 10 [...].166.35.[...] 92486D418E1B49AAB59C253F1E54C2BD
    2024-10-14T22:24:08 8230125 2 10 [...].72.95.[...] 9257777E9C85489CADEC3944A76858F3
    2024-11-03T11:59:13 8230016 6 10 [...].168.1.[...] 9277625855DF4BF1943F36AEED5C8F88
    2024-10-25T14:50:11 8170068 3 10 [...].41.71.[...] 928C6065F7E248408842E6E7ECEBB041
    2024-10-23T18:52:24 8230060 2 10 [...].28.80.[...] 92D055DCBD524488912146DB11FE489C
    2024-10-16T13:03:40 8230144 2 10 [...].49.227.[...] 933DA25C4C494503A0335421E18E18E1
    2024-11-07T21:19:41 8230151 5 10 [...].28.98.[...] 9355FF886B274AE2B7DC8EAC9D5466F2
    2024-10-09T00:15:09 8230124 1 10 [...].86.31.[...] 93805BE13BB447C9B1A362E9510A060F
    2024-11-05T21:47:47 8230089 5 10 [...].84.31.[...] 93E583932A6749F7BCB0F14082108C54
    2024-11-08T14:22:33 8220071 6 10 [...].74.158.[...] 93F044D296014FE2B7E4E09B66FE1905
    2024-10-16T13:13:01 8230131 2 10 [...].103.219.[...] 9404BC50F3354697ABB060436952ECC2
    2024-10-26T14:59:10 8220143 3 10 [...].177.141.[...] 94667A2A4771453682C046784B1B5728
    2024-10-15T13:20:54 8230163 2 10 [...].26.43.[...] 94F34E315A4B4F5283B9CA1CDBD0A78A
    2024-11-08T09:56:07 8230035 5 10 [...].177.146.[...] 951ABA4A335C43C3BE1EAAE19587C5DF
    2024-10-29T12:35:15 8230163 4 10 [...].140.29.[...] 951B35F3BCD041BE82E144CBCE6FC0B9
    2024-10-24T00:01:27 8230113 3 9 [...].75.220.[...] 95E226257B3247F48DE466382753946E
    2024-11-13T15:27:46 8230246 6 10 [...].131.232.[...] 9614EC0695974B189227D2D1E8C92DFC
    2024-10-19T19:48:28 8220044 2 10 [...].64.157.[...] 962F3D6FFE8C4F918D7E730AF2BF7BC3
    2024-10-31T13:04:55 8230042 4 10 [...].49.79.[...] 96752B710B7E4EABA35F3ABA33121F2D
    2024-10-31T20:34:28 8230064 5 10 [...].203.222.[...] 969B5A6182B945489AB6404A09B80331
    2024-10-19T11:42:56 8220231 4 10 [...].140.32.[...] 96D3EA1801DC48BB8D2539E4B10F8ED5
    2024-11-09T20:09:32 8230161 5 7 [...].58.226.[...] 970D75EA611C4DB19C2329A6C5875134
    2024-10-08T23:02:23 8220053 2 10 [...].217.161.[...] 97132BCAA2844FB785473233837B8650
    2024-11-04T13:00:39 8220108 10 10 [...].26.22.[...] 9722663CF65A42B9B01AFEA84BD69156
    2024-10-15T03:22:22 8230010 2 10 [...].246.185.[...] 9724426E68F44DDA94198B529DE3AE5F
    2024-10-09T19:31:01 8220105 2 10 [...].1.100.[...] 97642E8A86E34168B8C2A36FC17ADB84
    2024-10-26T14:14:30 8230019 4 10 [...].86.152.[...] 97721C9FE4DD4287A2DE3F1E26A6FE70
    2024-10-18T15:22:40 8220011 7 10 [...].168.1.[...] 977FF5FE94F1495FA9F6E7E22B8ED1EC
    2024-10-16T18:15:19 8190273 2 10 [...].177.233.[...] 97B7D4B7F8504204A382DC7926C5D68D
    2024-10-20T19:19:45 8230018 2 10 [...].251.52.[...] 97CAB025731C4466AA6F086EB3D9E572
    2024-10-14T11:35:01 8220108 6 10 [...].26.22.[...] 97DC803F8CE64E9A9BDDC828623025E3
    2024-10-10T18:20:03 8210219 1 10 [...].168.1.[...] 980FBA2217BF467D95E93D37D9DD339C
    2024-10-27T19:22:10 8230073 3 10 [...].131.0.[...] 9876561A486144EF8AB1B0F8F0A3E73C
    2024-11-02T16:57:15 8230101 4 10 [...].217.161.[...] 98EE3BCA68B9487890F70C0048CBB75C
    2024-10-11T14:17:54 8230160 1 9 [...].251.66.[...] 99248EA7FF8C40D5B3C63E488B052ED3
    2024-10-11T18:02:36 8230083 1 10 [...].130.27.[...] 993A25A898964A3D95ADBD516B5995BF
    2024-11-01T23:34:07 8220108 11 10 [...].73.236.[...] 994C33015DFC4B3796D1966DB9604BF9
    2024-10-12T02:17:56 8230030 2 10 [...].131.254.[...] 994EA16D1AA946D9AC849CEEAB3748BB
    2024-10-14T23:12:33 8220039 2 10 [...].92.58.[...] 99920A05CE664CC68FC9F012C878F149
    2024-10-22T17:09:32 8230132 5 10 [...].140.29.[...] 99A8E1EFC54243F09872FEBEA0C77AB6
    2024-11-05T16:50:13 8230126 5 10 [...].65.190.[...] 9A44ABEB00B44821ABC1B837ABE1F4D3
    2024-10-25T01:37:00 8230103 3 10 [...].66.136.[...] 9A6DA1EB13334E9AAEAA7A9608200386
    2024-11-02T13:50:09 8230165 4 8 [...].67.209.[...] 9A835A78A3FA4DC79D0FDF7C9F325530
    2024-10-19T20:42:18 8200095 2 10 [...].168.1.[...] 9B2E783714544976BB9F2B64ADC1C548
    2024-10-08T00:29:16 8230098 1 10 [...].49.65.[...] 9B4EDD85DAA34AAA9B98D2D9F0BC8903
    2024-10-27T22:08:37 8230167 3 0 [...].86.96.[...] 9B6A59EB1E38414CB1973C66EFF97FC2
    2024-10-10T23:28:19 8220108 5 10 [...].73.236.[...] 9B9ECACC83064DE6A63FC012F6E6FAC7
    2024-10-21T20:27:24 8230030 5 10 [...].131.254.[...] 9C1C13BB460A474FA5721298EEBBF1AD
    2024-11-06T02:49:26 8220149 13 10 [...].58.138.[...] 9C3C4EA89457405CAAE08898EA60EAA4
    2024-10-21T22:32:08 8230124 3 10 [...].86.31.[...] 9C4235CC0ACB41D99E892BBF02257665
    2024-10-26T20:17:36 8230075 3 10 [...].71.4.[...] 9C4DC0F526EB4E899B89320BB3581E95
    2024-11-02T16:16:09 8230117 4 10 [...].251.96.[...] 9C4E3AEF2C9B49D5A02E807236EA530D
    2024-11-09T15:14:35 8230075 5 10 [...].71.4.[...] 9C81A16950144A92968F3DE66A9E4FAC
    2024-10-27T17:24:03 8210226 1 3 [...].87.105.[...] 9CEC8F4DE8E74AFFBF7D321270E0C41B
    2024-10-28T02:23:31 8220211 2 10 [...].168.2.[...] 9D1658BFDCF84A5E880E48177B5F30BA
    2024-11-10T00:17:24 8190051 5 10 [...].49.109.[...] 9D2E2B18A7304679926F784AB65CF1FA
    2024-10-18T18:40:42 8190304 6 10 [...].217.176.[...] 9D339257A6074E2386B566E43F0ABF00
    2024-10-22T20:53:10 8230071 4 10 [...].166.103.[...] 9D775B2592F34C37A7AB2265A83F1283
    2024-10-19T13:49:45 8230138 2 10 [...].4.227.[...] 9DFCB05C2686473D8EB0F8A56D9451C2
    2024-10-13T17:22:45 8220149 8 10 [...].168.0.[...] 9E15E69C017948E8BD131A9A70871D88
    2024-11-02T10:33:20 8220108 13 10 [...].73.236.[...] 9E68317304EA448C91E44C2F49BD616B
    2024-10-24T20:37:44 8200152 2 9 [...].54.144.[...] 9E77A4243E4844C785A43BE569610EE5
    2024-10-27T17:36:30 8210226 5 5 [...].87.105.[...] 9E87C25F7AA247F9B4F4E90EC3009BA3
    2024-11-10T16:38:58 8230122 9 10 [...].156.60.[...] 9EAA26D367534FCAA855AC230FAA3594
    2024-11-10T19:40:41 8190091 6 10 [...].217.174.[...] 9EB980374DD549A5BB6BD2E6B9ED500D
    2024-10-13T12:31:54 8230066 1 10 [...].74.235.[...] 9EDF087ABF6A4DA39EA608706BD2FE55
    2024-11-02T13:32:03 8230076 4 10 [...].49.90.[...] 9EE82B2560534EB581A7962D4A15A57F
    2024-10-13T12:10:11 8230047 1 10 [...].84.205.[...] 9EF983395C62474BA8B015FC5E09A85B
    2024-11-13T21:07:44 8160117 5 10 [...].217.161.[...] 9F05BCEC09E84315AF65C39CB3ACD55D
    2024-10-22T21:56:23 8190304 18 10 [...].217.176.[...] 9F3404800E5749E2973260C9A33C85DF
    2024-11-02T11:26:53 8230085 4 10 [...].217.161.[...] 9F42385E8CD94B53ABDAA63B36030757
    2024-10-23T10:35:29 8230077 3 10 [...].203.174.[...] 9F9EC35EF0E1413CA24E7261827C0041
    2024-10-28T13:57:13 8230028 5 10 [...].130.230.[...] A0083A426EB54AE39738A0323DE77097
    2024-10-27T15:52:36 8230001 3 10 [...].246.142.[...] A02F1CA8F00949B8A39A396F97C3B759
    2024-10-27T16:53:05 8230065 3 10 [...].176.151.[...] A03932B54ACB486580E369503E39D133
    2024-10-17T18:34:06 8230127 2 10 [...].26.75.[...] A06591F74ABF4F69B82CD1A8D0726F35
    2024-10-10T19:46:35 8230074 1 10 [...].166.11.[...] A08A5E2D0300461A8C80AADA30D04BF0
    2024-10-30T22:21:37 8200117 3 10 [...].92.100.[...] A0BB5A30964D4BA694C7145AB79535F3
    2024-10-20T13:41:21 8220071 3 10 [...].74.158.[...] A11B0D2AD88F42A8BBD80C60469A4241
    2024-11-01T15:25:12 8230103 4 10 [...].66.136.[...] A171FEB5A9C044D6A741DFD38CBF3780
    2024-10-14T18:20:15 8230161 1 10 [...].58.224.[...] A1A40D4C7D5247FF9E5C1A878E5AD619
    2024-10-15T20:34:04 8220110 2 10 [...].84.22.[...] A1B8C0534B5744B1951F346655A76E03
    2024-10-18T19:24:25 8190304 7 10 [...].217.176.[...] A1F8AE7384874A8EB184090AB885C7E6
    2024-10-22T19:07:06 8230091 3 10 [...].6.161.[...] A21A8B77DF884D38826FE25000342A3B
    2024-11-10T13:26:22 8230014 5 10 [...].49.236.[...] A22BB66ABF6942E1B564431EB650B1CC
    2024-11-06T22:11:16 8230078 5 10 [...].178.157.[...] A2839A427D4A47D9A80DA816A661DD61
    2024-10-27T10:51:39 8230072 3 10 [...].167.92.[...] A29405212A2C4B0B8CF7EF1BC0068C43
    2024-10-27T18:29:45 8230034 4 10 [...].70.57.[...] A2FB6CE8EC1A453CBA6003DBA69C6797
    2024-11-01T18:20:50 8150188 5 10 [...].92.185.[...] A3085FD02F334A839F6AB7E1857492F2
    2024-10-19T18:49:38 8230056 2 10 [...].242.226.[...] A313FA2B53F54BD987BBF6021F416860
    2024-11-11T00:01:26 8190332 5 8 [...].6.72.[...] A33CB9DB3A53470994C51861E94B8242
    2024-10-13T11:28:59 8220131 1 10 [...].58.137.[...] A36740E6F3DB4AE0A1FFF38D66B770A0
    2024-10-12T12:48:00 8170017 2 10 [...].66.31.[...] A3BA6DF5FFEE474C92B5412127EB363C
    2024-10-18T22:25:53 8210087 2 10 [...].131.180.[...] A3D59CDB740242F99A4048E0F96B36CB
    2024-10-24T20:29:02 8230043 3 10 [...].251.255.[...] A45151E00A454E919B37D4651718235F
    2024-10-25T14:56:49 8200223 2 10 [...].251.52.[...] A46E985E5B954004BD74F2BA61434392
    2024-10-27T18:13:48 8230034 4 10 [...].70.57.[...] A476615F4346488D89043ACC53437ECD
    2024-10-11T14:17:15 8230053 1 9 [...].74.24.[...] A559E36DBC6148E59DDEEC77236138B2
    2024-10-22T20:29:54 8230139 4 10 [...].242.186.[...] A561ABA5BD3E41969CC654E750703C02
    2024-10-18T13:14:22 8220142 2 10 [...].107.37.[...] A578DF261DC344CDA7A3A1935DA6AC18
    2024-10-15T19:58:54 8230031 3 10 [...].84.23.[...] A5A06DAECB5F47EEBA1F0132A371E06D
    2024-11-12T01:12:34 8230002 6 10 [...].131.130.[...] A604F4C5246948DBBBD468D780D6970A
    2024-10-18T11:35:41 8230245 2 10 [...].49.219.[...] A625E56F06224F8BA82C170B7ED83A51
    2024-11-08T18:58:50 8230156 5 10 [...].43.36.[...] A64D01C1517B4D8BAE52A70362B9AF4C
    2024-10-10T20:35:53 8230116 1 10 [...].49.68.[...] A6947E45856E484B90F961A538BFD9D7
    2024-10-15T11:24:33 8220156 5 10 [...].26.20.[...] A6ABA8EB31994C2DBCB633EF077189CF
    2024-11-03T23:00:36 8190376 4 10 [...].86.72.[...] A6C8DF3AA6654EBC9B9E4A8B5112A36A
    2024-10-20T10:49:08 8170017 5 10 [...].87.194.[...] A6D90D47744C42B388C04B404C04A813
    2024-11-05T18:45:14 8230132 6 10 [...].140.30.[...] A6E6A680A32E45B58E01F499EEB0B219
    2024-10-18T17:50:31 8230167 2 10 [...].130.120.[...] A712277EC7694052A36095B9B9F4F71B
    2024-10-31T18:28:35 8230127 5 10 [...].26.75.[...] A809E99D16F24CCEB58987A5E71A78AE
    2024-10-19T20:25:43 8230160 2 10 [...].251.66.[...] A811DEB776DE4F158BBDF374D7612251
    2024-11-11T01:26:23 8170068 5 10 [...].173.84.[...] A81FF3134CD84271877315283FC38284
    2024-11-10T14:01:10 8190238 6 10 [...].130.246.[...] A8254BFC15074993B2DC5A2F2E711235
    2024-10-21T00:06:27 8230005 2 9 [...].217.161.[...] A82EA9EACC3D4445AEBB0C4D8A450636
    2024-10-24T11:13:40 8230039 3 10 [...].55.220.[...] A833FB4539EE456897E066CCCD1CDB03
    2024-10-28T19:40:38 8230231 6 10 [...].166.35.[...] A85894807F1B4C4184243ABDD435122A
    2024-10-22T19:39:01 8220152 4 10 [...].66.136.[...] A8C9ADEDA7A24D6282F1A616707B3516
    2024-10-07T19:57:40 8220229 2 10 [...].166.35.[...] A8E83B914498417FBAB4572522C645E7
    2024-11-08T15:51:35 8230099 5 10 [...].74.127.[...] A956A4651C62431789058695BE6860F6
    2024-11-10T20:51:14 8190091 7 10 [...].217.174.[...] A98CEB44994647F692697302A36CC014
    2024-10-23T22:15:25 8230024 3 10 [...].103.33.[...] A9C23C97867E468099F6BBDA5825D631
    2024-11-13T17:31:58 8230094 6 10 [...].66.206.[...] AA20B744F7344288A0EAB70F54CBBD14
    2024-10-25T12:27:28 8220230 4 9 [...].6.116.[...] AA6895B0C7E04538A1E5EB0C7AEE0227
    2024-10-28T22:03:13 8230023 5 10 [...].58.194.[...] AA8ED8E9F5AC4515B4677067242AD9A6
    2024-10-11T22:28:21 8230244 1 10 [...].86.152.[...] AAA03AC829324A76A0498F8F9FF9C124
    2024-10-08T23:31:31 8230231 1 10 [...].167.161.[...] AADF6D8806C640CB921E3CDE8BA7D806
    2024-10-12T15:15:45 8230103 1 10 [...].66.136.[...] AADF8F70CF8B4FFCBD2D0597E93EF6BA
    2024-10-26T21:05:51 8230007 3 10 [...].140.12.[...] AB48513B97624AE69BA855C246E6E5A2
    2024-10-19T19:22:04 8220044 2 8 [...].64.157.[...] AB6DC2FECB40498596DA62932A1FE4B8
    2024-10-12T13:07:14 8230021 1 10 [...].246.176.[...] ABB6419852EE47C0A56B3D34D35C0A2A
    2024-10-15T13:50:12 8230115 1 10 [...].26.21.[...] ABEACB98E5EE430FA4AE0520EAF714CF
    2024-10-12T19:55:21 8230153 1 10 [...].74.239.[...] AC34FECD44E1422D90F7DBBBEB1BC224
    2024-10-29T00:49:40 8220036 5 10 [...].178.164.[...] AC633B09637947D687211F2B516D80C3
    2024-11-10T19:16:53 8200117 13 10 [...].92.100.[...] AC88F78D9EF64BED805EC0C58B365D29
    2024-10-31T21:34:44 8190378 4 10 [...].58.138.[...] AC9376BF79C74F8CB7D56DB6832493F7
    2024-10-20T11:21:27 8230218 2 10 [...].74.46.[...] ACB0F9B2E38D43DBB860098EAD886FAB
    2024-10-12T19:51:35 8230029 1 10 [...].71.138.[...] AD93090758734ACAAC6692DC652A7BCB
    2024-10-11T22:12:54 8230142 1 10 [...].69.127.[...] ADCE088DB5FD4DB793B82797268CBF88
    2024-10-20T22:35:13 8230078 2 3 [...].203.129.[...] ADF2918C873A4ECDBB57D4F0CEAD3423
    2024-11-08T19:20:15 8230067 5 10 [...].177.5.[...] AE5E8BAEA4AF46BC9B1DA2CDC5623715
    2024-10-27T11:55:54 8220142 4 8 [...].107.37.[...] AE71B7C294A34AD5A5CBD5F7C6D26E90
    2024-10-18T10:53:49 8220011 3 10 [...].168.1.[...] AF02049171AD49F6913CAD559A9EDE6F
    2024-11-08T13:13:30 8230061 5 10 [...].14.243.[...] AF77F9B2369B4811B1579BFC93FF7DB5
    2024-10-23T23:34:12 8210163 6 10 [...].168.1.[...] B06F1BA072C140588B4314A7DE60EC8B
    2024-10-20T23:26:18 8230078 2 9 [...].203.129.[...] B091535CEE824D52B1CD7A79EF300CD3
    2024-11-01T19:03:13 8230047 6 10 [...].84.197.[...] B0B5EACF21FA4803B9105B968AE17951
    2024-10-29T22:27:10 8210087 4 10 [...].1.114.[...] B0C9D501926546839F8FDD6CCDE53CE0
    2024-10-31T11:31:24 8230052 4 10 [...].38.25.[...] B0E89BD079C84F418EF629A1A0B78A91
    2024-11-03T13:38:26 8230154 16 10 [...].167.82.[...] B11B3DF2F6514A63866788032CE6210E
    2024-10-30T10:28:25 8220105 15 10 [...].1.100.[...] B1968D0A9B7A4D2C89D0A4CC90522216
    2024-10-08T20:51:56 8220039 1 10 [...].92.58.[...] B19B1E1006A94C6A982B74BFE85B8CB6
    2024-10-12T20:50:03 8230138 1 10 [...].4.227.[...] B19BA4C5BA4748FEB3D4D9C5F366EA5B
    2024-11-10T17:30:05 8230125 6 10 [...].70.73.[...] B1E0926EF90F4D04B7805B1B2096BE9A
    2024-10-18T22:08:57 8230161 2 10 [...].58.136.[...] B1F8BE8BA63844A2A588B87C3BEF5690
    2024-10-08T16:34:00 8220105 1 10 [...].1.100.[...] B20B6EDF250245A38F9043816A944BED
    2024-10-15T17:58:24 8230107 2 10 [...].65.114.[...] B23A503C569249F9A1E5725D506B367D
    2024-10-25T13:56:18 8230063 3 10 [...].242.185.[...] B241D4A80D7E446896F4797DC41547B9
    2024-10-31T11:59:35 8230072 4 10 [...].84.133.[...] B266C8D58AD445A2A5CC61B0DB1CA20B
    2024-11-09T18:14:14 8230217 5 10 [...].92.141.[...] B27F878D194C47CEA6FA147D64AE2D01
    2024-10-20T18:00:46 8230079 6 10 [...].190.51.[...] B290A370ED534BD0B866F1B7DB172898
    2024-10-16T22:18:15 8230055 1 10 [...].203.169.[...] B29B5B2994CC408B9E2CBC96860BD574
    2024-11-13T01:04:11 8230061 6 10 [...].138.148.[...] B2D6794C457943C797FF3561E8D70B62
    2024-10-15T10:16:21 8230028 2 10 [...].178.240.[...] B34FCCA09AE94E5EAB7F26CD1C782E0E
    2024-10-15T11:18:15 8230076 2 10 [...].219.191.[...] B3B9858868A6479E87F660D247867865
    2024-11-11T20:55:43 8230156 6 10 [...].49.112.[...] B3D2A09756C741D6A434435FC0284594
    2024-11-13T23:27:29 8230091 6 10 [...].6.2.[...] B3E58C2175F44C40AF25C3B49B43223B
    2024-10-13T15:55:24 8220149 17 10 [...].168.0.[...] B3F1A38776AA4364AE7688AAF00ADCD0
    2024-10-19T16:11:43 8230011 3 10 [...].65.157.[...] B421B6C977B74F68AEC12DC751ED808E
    2024-10-11T22:49:34 8200066 3 10 [...].168.0.[...] B42C2D66F5614C1FA7A6E43C45F8A23D
    2024-10-13T11:56:30 8230025 1 9 [...].73.125.[...] B46B4626B0B74F1298B961F2DE754062
    2024-10-21T14:10:14 8230100 3 10 [...].64.198.[...] B4904A18BAF64C46991BAD87CACC66D7
    2024-10-23T23:13:59 8230037 4 10 [...].64.49.[...] B4A34E34F5FA4B18B6C80AEE3B3DFB91
    2024-11-13T15:05:52 8230056 6 10 [...].242.224.[...] B4D76F73D34C4F4C8E9BCCDD8DC9AFDB
    2024-10-30T18:10:41 8220136 5 10 [...].203.86.[...] B4ECC5AB17C846548C9C319E0C3A4F4E
    2024-10-22T20:07:25 8230224 2 10 [...].86.123.[...] B5F2C9721C4B467B96D82D603AED5407
    2024-10-11T12:56:26 8230132 1 10 [...].140.20.[...] B6323DFCC0CA415CBF691E40B9F5EEEA
    2024-11-04T21:39:10 8230168 4 2 [...].225.135.[...] B63ECC78B1964F6B98A1A3189FF07EF3
    2024-11-13T17:56:42 8230033 6 10 [...].49.128.[...] B6D48612C6BA4CC2A7F5137282613738
    2024-10-19T16:28:13 8230079 5 10 [...].6.110.[...] B6E45915391D46ABA16973E2C8731277
    2024-10-09T02:02:26 8230124 2 10 [...].86.31.[...] B724EC9336024391A19583AEDB8D174B
    2024-10-30T22:12:44 8220039 4 10 [...].49.99.[...] B74E526BA59D4072ADBFA0CFC5791285
    2024-10-30T17:35:49 8230246 4 10 [...].130.252.[...] B784117F988B4F20B4E94B65A05EDDCC
    2024-10-09T10:40:53 8220046 1 10 [...].74.19.[...] B7A05A4CA50D413F9DE32F5ABB785F74
    2024-10-18T14:28:12 8220136 2 10 [...].74.100.[...] B7A9EA4DB5004187BC469CC1950F7DD2
    2024-10-18T23:48:01 8230151 2 10 [...].28.80.[...] B816EAE334F849B1AF414491EAD9C799
    2024-11-02T15:05:28 8200095 4 10 [...].71.129.[...] B8223228D955406B9DC5336389864930
    2024-10-10T20:41:33 8230052 1 10 [...].38.25.[...] B848EFDF57FA447FB9D7689D3AF44556
    2024-10-14T23:36:52 8230036 2 10 [...].74.35.[...] B89778FD48A94664B19EBBCABDA07303
    2024-10-14T11:39:39 8230019 1 10 [...].86.152.[...] B8AF5093026240EF92A75CB32A65987D
    2024-11-08T17:17:33 8230019 5 10 [...].86.152.[...] B8C3E32E2495439C99EB981CC366B9F9
    2024-10-14T19:09:25 8230077 2 10 [...].74.54.[...] B8C9977505D34FADAB39AE5A065DE6AF
    2024-10-27T16:46:25 8230016 5 10 [...].168.1.[...] B8ECAEC0A11E434892B6EBA29958C2EA
    2024-11-10T23:48:11 8190051 6 10 [...].219.76.[...] B948E447998346119B3020438C4A2D43
    2024-10-22T14:06:53 8220025 3 10 [...].26.44.[...] B9998BC4025A4C69A565EBA7B02F50A4
    2024-11-02T23:28:20 8230150 4 8 [...].203.190.[...] BA30CAFAEB564D589BE41901FE2BC0A4
    2024-11-08T13:41:54 8200117 11 10 [...].92.100.[...] BA7BB23544574D89A41BCF2A4E0BB897
    2024-10-13T17:28:46 8220044 1 10 [...].64.157.[...] BA9F9F76C1AE484ABC52221604A9E98F
    2024-11-08T21:23:01 8220123 5 10 [...].87.225.[...] BB1D9B9DCF7B43D693F46169913A5E49
    2024-11-04T12:13:57 8220108 9 10 [...].26.22.[...] BB47168BF69640AB9FB680AE2CEB6A71
    2024-11-05T16:57:27 8230224 5 10 [...].74.222.[...] BB65CD8B060D457FBF67C2DE46E6FE70
    2024-10-30T15:43:03 8230170 3 10 [...].26.42.[...] BBA76D9A55CA483CBAEB52858AA76EC2
    2024-10-30T12:38:55 8230031 6 10 [...].84.23.[...] BBF03C5584E84A429E8FE4A3F1D7CAE8
    2024-10-18T16:11:00 8230145 2 10 [...].74.58.[...] BC31800BC5B54D5B8C8FDC2B9C1363F6
    2024-10-19T10:55:51 8220112 4 10 [...].138.151.[...] BCAA4E99943945E1B0EC379C9AC97D91
    2024-11-02T10:21:25 8220108 14 10 [...].73.236.[...] BCC0A2AA8A0347D2A8BCC0FE41488E2F
    2024-11-02T16:13:16 8220007 13 10 [...].217.172.[...] BCC883CE758D4276B3D42E24417EEBC4
    2024-10-11T14:44:19 8220149 2 10 [...].168.0.[...] BCDF92E8D2E24135BA714E3202AD4CB1
    2024-10-10T19:25:50 8230012 1 10 [...].72.255.[...] BD2AD96D767C4704A8E9288AD0E35420
    2024-11-12T14:48:38 8230052 6 10 [...].26.51.[...] BD4371C63F4F46C9A827FCC6A3C76D21
    2024-11-06T00:08:06 8230123 5 10 [...].71.227.[...] BDDEFC51A7D04555B2DAE5B2F968388F
    2024-10-16T19:28:43 8220086 2 10 [...].168.0.[...] BE2CBB294E8147D98AAC50F343D5700B
    2024-11-12T16:49:31 8230003 7 10 [...].74.225.[...] BE2DE687F7AB4C78848D6CADAD8A9B38
    2024-11-02T16:34:37 8230011 6 10 [...].65.157.[...] BE3E2A37CE87454A85147699D991AA6C
    2024-10-25T22:15:08 8200152 7 5 [...].55.81.[...] BE42264850ED453FAFC6BE89436D7CC9
    2024-10-16T01:35:59 8220057 2 10 [...].217.161.[...] BE994304B2754B07A62F820413A60A81
    2024-10-12T19:45:03 8210220 1 10 [...].217.175.[...] BEB9E6D41451405197A5286C9F3E74B0
    2024-10-12T18:22:05 8230231 3 10 [...].166.35.[...] BF06973A31AC45E3A3A1D19F9D4CA57B
    2024-10-16T23:46:27 8230094 2 10 [...].178.218.[...] BF12F8B099224F958DDF411E97A90B02
    2024-10-17T18:28:54 8220052 2 9 [...].168.0.[...] BF61BDD817364516A2D1E9088B0B6C24
    2024-10-24T20:42:09 8230059 3 10 [...].6.32.[...] BF855902C3C84CE8A3848CF206CB3976
    2024-11-10T22:19:20 8230018 5 10 [...].54.3.[...] BFC88CB361BB493CAC8421DE9BDBB023
    2024-10-22T22:48:03 8210208 3 10 [...].131.172.[...] BFCFBD9E44FB443CA10CF2842707FECB
    2024-10-19T15:34:53 8230153 2 10 [...].74.239.[...] C0613D87C48643C496679EE9CD0211CE
    2024-10-11T17:52:34 8230134 1 10 [...].242.187.[...] C083FF6E79D2435BB399B9E161D0E57D
    2024-10-20T17:06:52 8220091 2 9 [...].66.136.[...] C0D26B338E1B48038EFFA355D1480307
    2024-11-12T18:26:38 8210163 9 10 [...].168.1.[...] C0D2858EEE1840AF9CC49B08502C8830
    2024-10-21T15:25:31 8230227 2 10 [...].26.16.[...] C0DF7BC77097460483A57046CF067B4F
    2024-11-10T16:52:26 8230168 5 10 [...].225.135.[...] C12D208A27044A7A8C68B70328D8AC74
    2024-11-10T17:59:17 8230058 5 10 [...].210.98.[...] C14077D393F3498DBB0D2D3E79D7E873
    2024-10-19T00:12:07 8230079 2 10 [...].6.110.[...] C15D516E5D22497492AC7D11A3951457
    2024-11-10T22:41:21 8220230 5 9 [...].210.100.[...] C15E80A6C5ED4AD39C03BE5D91F8D67E
    2024-10-31T16:44:49 8230003 5 10 [...].86.249.[...] C186F29F212E41668908FA7C86FD2841
    2024-10-12T12:33:15 8230065 1 10 [...].54.149.[...] C1B98131E210430BA163296BEFDB222A
    2024-10-12T20:17:47 8230073 1 10 [...].71.218.[...] C214B361146649AD89028AB396F09D44
    2024-10-27T14:10:13 8220016 6 10 [...].64.18.[...] C2160EF595264CE781A7A258FD11BE05
    2024-11-09T16:52:14 8220141 7 10 [...].75.104.[...] C230617F308D482CA2DD2E9A2284B18B
    2024-10-13T19:35:02 8210111 1 10 [...].6.2.[...] C24FD194997F4E9A871770F313406135
    2024-10-26T22:35:47 8230105 4 10 [...].242.227.[...] C2DE6A8D5D644D2A87913FC94D374811
    2024-10-29T15:44:56 8230047 3 10 [...].84.197.[...] C323CE710BC54D018F20944BEFA3233F
    2024-10-22T11:42:05 8190378 3 10 [...].58.225.[...] C47FC6AEB2C54892ACD3D20B9B295D01
    2024-10-23T20:05:58 8230083 3 10 [...].130.27.[...] C48245D3EEAD465F9B9E1A15612877C5
    2024-10-17T12:51:20 8230053 2 10 [...].74.24.[...] C4905A4DF914492F843960B8A43B8C15
    2024-10-18T16:47:35 8190304 1 10 [...].217.176.[...] C4BA13A23B804B1A88621C75CBC39FD2
    2024-11-10T13:26:20 8230034 5 10 [...].107.129.[...] C4D8FE05C7254B93A5FF4129AC0F69C6
    2024-10-24T23:52:57 8230098 4 10 [...].49.227.[...] C4DA0AE059214D6BB9FFFCD48494D8D2
    2024-10-28T21:00:58 8220016 7 10 [...].64.18.[...] C4FDEB1329CC497EB9FE9458F5BFCAE3
    2024-11-08T14:51:07 8230227 3 10 [...].26.16.[...] C531A85D39E64937ADBAB51EC7F453B0
    2024-10-27T17:41:35 8210226 5 3 [...].87.105.[...] C535F4D5A5CF4CFCBD284292880C3F4E
    2024-10-21T21:21:41 8230021 3 10 [...].246.176.[...] C559086182D74F8C8CF12CFAE5260102
    2024-10-13T23:40:27 8190333 1 10 [...].168.0.[...] C5DB5C45AD1243B49E0B888AD2F39348
    2024-11-07T14:13:00 8230063 5 10 [...].138.157.[...] C5DF5FDF7E7E4BD4BA1A490FA187AF66
    2024-10-30T11:43:09 8230077 4 10 [...].73.127.[...] C61B9990AC63421C98D4063274C6CEB6
    2024-10-26T19:49:04 8230152 3 10 [...].203.166.[...] C63EA81303D843678C3B9A6B76F2C073
    2024-10-15T21:59:46 8230070 2 10 [...].217.161.[...] C6523C15C41F42AE88388876E31BB5F2
    2024-11-03T11:33:32 8230057 7 10 [...].87.145.[...] C65D2F116D074193B51ECFCE51D1B035
    2024-10-31T16:00:06 8190273 4 10 [...].177.233.[...] C66AE640929C4AFEB028885E54BE9C0E
    2024-11-02T22:27:23 8230070 5 10 [...].217.161.[...] C673410E7CF54C8488B7CEBCAB35AB51
    2024-10-21T19:41:48 8230034 2 10 [...].72.180.[...] C68BDFA948394C6496BA26B79141674F
    2024-11-06T15:40:50 8220149 11 10 [...].58.138.[...] C68D3242B0574635A685D43E5FC413F6
    2024-11-12T22:26:40 8230227 4 10 [...].66.136.[...] C699A023074B4EE892AD2391C085C69F
    2024-11-03T17:06:44 8230123 4 10 [...].71.227.[...] C6B9C50F6B35427C9E3C007AB6766454
    2024-10-25T00:53:17 8230160 3 10 [...].251.66.[...] C6EF46FAC0D44E779BC2C99F22AEF198
    2024-10-14T18:58:40 8220215 1 10 [...].74.12.[...] C770224558D54AE1B1C5450F95C23237
    2024-11-06T13:41:49 8220149 14 10 [...].58.138.[...] C7B99387E66844EDA833580566A34B9F
    2024-10-11T12:28:23 8230100 1 10 [...].166.13.[...] C7CB2DC613DB402084EAB2D57E8B5EBF
    2024-10-28T11:48:51 8190271 4 10 [...].217.172.[...] C7CC616A8B6046D69FFEC016C15B22D8
    2024-10-29T20:20:42 8200171 2 10 [...].86.177.[...] C7DBEF23488B4AE68B464A08DF31A5DC
    2024-11-08T01:06:20 8230040 5 10 [...].55.80.[...] C8053FB9D3E84666B2478591E30EB40B
    2024-10-27T19:05:21 8230168 3 10 [...].203.240.[...] C826E8F7AF6F4468BBEC2F54BA5216D7
    2024-11-03T18:33:32 8200223 4 10 [...].251.52.[...] C86CDE6A240A41A08960EF21BD2E6BED
    2024-10-23T17:53:42 8230013 5 10 [...].26.9.[...] C88AA0DCF8824A9DB23276DA72FC02C6
    2024-10-23T12:57:11 8230157 4 10 [...].203.209.[...] C8AAF957941143A88ED2122499BA5A0A
    2024-11-05T16:16:42 8230010 5 10 [...].49.160.[...] C8C64EE39C9C4588A5779E27B477DD64
    2024-11-12T00:49:07 8200171 6 10 [...].86.179.[...] C8C8525725D74EE2917981C9F492BAFC
    2024-10-15T15:00:57 2210175 2 10 [...].140.28.[...] C8F33C61B40A4B8F94A5AD343E1CF056
    2024-10-24T21:40:31 8230113 4 10 [...].75.220.[...] C960492C880E46F5AE2C3BBB7C67AAD2
    2024-10-08T21:53:18 8230030 1 10 [...].131.254.[...] C96C47DABB80499298DD73C687C921D4
    2024-11-03T18:36:40 8230027 7 10 [...].43.125.[...] C9A30CCC055544C8B3431BBC6F5CF433
    2024-11-06T12:40:21 8220007 18 10 [...].55.70.[...] C9B1794EBD6B4F76892A705AA7010F1A
    2024-11-05T09:31:25 8200117 5 10 [...].92.100.[...] C9CA0B09B9374329B076B0C94289D09B
    2024-10-13T16:50:56 8230057 1 10 [...].210.232.[...] C9D6876CFCE84496A92F68E16B8D7623
    2024-10-22T19:13:53 8200066 4 10 [...].168.0.[...] CA8BF85575674C1B8EA4763AD876C558
    2024-10-08T21:18:57 8220169 1 10 [...].75.50.[...] CAAE02C631274E118C3E994143DB5727
    2024-10-21T19:39:41 8230035 4 10 [...].177.146.[...] CAECAD020747499D980ECB9E17167D6A
    2024-10-16T21:08:36 8230135 2 10 [...].140.90.[...] CB0951C4457644778969C8F8F50B968B
    2024-10-10T23:03:40 8230107 1 10 [...].130.70.[...] CB646ADD4F244C13AD9163413BF1D3CD
    2024-10-15T00:42:48 8220053 5 10 [...].217.161.[...] CB7F3C6C4BDE44AD87F225C795A03C27
    2024-10-21T22:25:48 8230061 3 10 [...].138.148.[...] CB911C84826940FBB5210CEF873A46F2
    2024-11-02T15:55:47 8230117 4 8 [...].251.96.[...] CBA7A34CDB3C4441B617D74AF46585EC
    2024-10-27T16:51:13 8230127 4 10 [...].176.109.[...] CBD7F40596674DDE90D77DF32522C0E2
    2024-10-09T13:47:23 8220108 2 10 [...].26.22.[...] CBE2670A3ED544019816A16F80939E36
    2024-10-25T19:05:25 8230050 3 10 [...].242.138.[...] CC03469C986746268CD07E56D4EED615
    2024-10-22T10:06:27 8220046 9 10 [...].26.43.[...] CC099801E0544101988599201824137D
    2024-10-11T16:44:15 8230093 1 10 [...].203.178.[...] CC3592CD27F14008AD259659EC08B9AF
    2024-10-13T14:20:41 8230093 4 10 [...].178.173.[...] CC39D393938940C1A50079DED7B0D59D
    2024-11-13T16:23:33 8230247 15 10 [...].246.138.[...] CC40F15305B242C2A2D1CF5E676D2151
    2024-11-05T00:23:38 8220149 4 2 [...].217.175.[...] CC84BF09B47E4AC1B9292ED32B848557
    2024-10-23T17:15:39 8220114 3 10 [...].242.187.[...] CC905329B9704277A575417DEABC2F2C
    2024-10-11T22:08:09 8230117 1 10 [...].237.20.[...] CCA79BDBE0DC47FB9DF26DA3C3767964
    2024-10-20T00:57:02 8220046 7 10 [...].58.136.[...] CCDDD1BA682A4FF7975F7791FDCA5020
    2024-10-31T18:42:59 8230100 5 10 [...].190.23.[...] CCE0ECA2E6A6463592B45B50A87F09C0
    2024-10-28T21:46:02 8230117 3 10 [...].167.38.[...] CCE149FB1528467A89DCE3ACF8A72297
    2024-10-20T23:45:21 8230097 2 10 [...].73.34.[...] CCE1C0A941E94BB9A3BDBF2BB17351D6
    2024-10-25T17:57:49 8230071 3 10 [...].166.103.[...] CCECA94183AB471BA6D13D35BBCA640B
    2024-10-19T23:50:59 8190304 12 10 [...].217.176.[...] CD1E10D0C68C4DBDB0D94EC250B28919
    2024-10-22T00:38:31 8220131 3 10 [...].58.137.[...] CD30C1EEE5864CC58E18FB8501DBB9A0
    2024-11-04T14:49:52 8220007 10 10 [...].26.43.[...] CD862125D55C42ECB0A1985C49E0B707
    2024-11-10T21:14:58 8230120 5 10 [...].74.60.[...] CDBF3C98872D4325A06730401C3A8AC2
    2024-10-14T15:46:27 8230120 1 10 [...].74.17.[...] CE63E69B2F20412C882D20921EB2167A
    2024-10-24T18:16:37 8230127 3 10 [...].26.75.[...] CE87C5DB6804440A987B3783233135EB
    2024-10-08T18:43:43 8220229 3 10 [...].242.22.[...] CE8E60053A59412A86DF48435C61211D
    2024-10-11T20:34:48 8200066 2 6 [...].168.0.[...] CE92FE1E3EE44F5FB186A07E69F79599
    2024-10-24T12:38:18 8220169 4 10 [...].26.70.[...] CECBF8C8C26347AC912698F118834A80
    2024-11-04T18:47:17 8230148 5 10 [...].87.72.[...] CED8DAFAA7BD4E42B3A8A133B9043DAD
    2024-10-31T12:39:27 8230072 2 10 [...].84.133.[...] CEF84D67FD4A47DCB2511C32ACBFD161
    2024-10-27T16:18:16 8230010 4 10 [...].49.179.[...] CF3649D1CE8F4256B311B1EC906911B9
    2024-11-06T09:22:57 8220044 5 10 [...].64.157.[...] CF3C6AD982FA4302873B271C75143F50
    2024-11-08T17:00:33 8230006 5 10 [...].242.245.[...] CF6BBEC7ECF24A56B682DDA0FA5866C9
    2024-10-12T11:51:32 8210087 1 8 [...].49.107.[...] CFC0B9261E9948A18DB2A890234275B1
    2024-10-11T16:04:19 8230145 1 10 [...].92.173.[...] D028A51B61E344389EE217C8F440271F
    2024-10-21T19:11:52 8230035 3 10 [...].177.146.[...] D04060F3BBED4632BCDD681ABBAA3200
    2024-10-14T23:58:27 8230100 2 10 [...].166.13.[...] D088476BB7544A6E91FAFD4AA076BBA6
    2024-10-21T11:59:14 823002 4 10 [...].26.42.[...] D0BFC8336506483385D5C1298860AAFF
    2024-10-17T22:03:54 8230132 2 10 [...].140.20.[...] D0F8595ED8E441BA9837CF3BF3660791
    2024-11-06T10:19:13 8230157 5 10 [...].217.175.[...] D116542AA6864A849EAF6B379DCE251A
    2024-10-18T18:35:21 8230113 2 8 [...].75.220.[...] D1F26325599849EBAE305EF36618FD04
    2024-11-06T18:47:03 8220231 5 10 [...].140.32.[...] D204A2BA89AA4986A4A0655980587B8E
    2024-10-09T23:05:14 8220070 1 10 [...].166.35.[...] D2B425E9D5D541C9862FC2FA9905D7F3
    2024-11-10T23:56:26 8220036 6 10 [...].203.210.[...] D2D52FA5E4C34B3B846873643B2A210D
    2024-10-11T19:51:07 8200066 1 10 [...].168.0.[...] D2F0C667918B42AA8A2B441E385F2944
    2024-10-15T21:03:36 8230227 1 10 [...].178.141.[...] D35A572FC8E540E1BA60EF3CD6B04D32
    2024-10-23T22:11:00 8220228 4 8 [...].103.47.[...] D36FD7E84EB74D0FB09397A8B2ABDCCE
    2024-11-09T16:02:54 8220114 7 10 [...].242.184.[...] D396CBCAD44140B3BC2FE5326478C5CF
    2024-10-26T18:51:01 8220029 6 8 [...].166.168.[...] D3E101A033284F89B3F6740D257603B0
    2024-10-11T13:45:43 8230035 1 10 [...].251.255.[...] D3EE4A2A99B64C05B66F516DAC109370
    2024-11-13T22:24:21 8220110 6 10 [...].74.160.[...] D432166D462E4BBA93E99A6BA90FFE29
    2024-10-12T19:23:50 8230024 1 10 [...].92.141.[...] D486E16203EA4474AA1F046572AD8B83
    2024-11-13T16:52:43 8230083 6 10 [...].130.27.[...] D49B6A7EC8B545108309351A90A3B959
    2024-10-11T16:26:09 8230040 1 8 [...].55.136.[...] D4DA68BF13224C088B206A13F62833C5
    2024-11-03T22:04:34 8230167 4 8 [...].71.30.[...] D55E78955B20479DBE760E04151AABC2
    2024-11-04T19:15:08 8230154 15 10 [...].167.82.[...] D570D9A447164549A600CD7F5E01ABFB
    2024-10-20T00:20:38 8230040 2 10 [...].55.80.[...] D5BF0C7069874C628F9808287072CA40
    2024-10-17T21:00:07 8230154 4 10 [...].92.162.[...] D5D2B315664345C392415C402F562DFD
    2024-10-25T13:47:29 8230019 3 10 [...].86.152.[...] D5DD5E82715C457BA34E23059A8A22BC
    2024-10-19T00:14:00 8230067 2 10 [...].167.105.[...] D61F7CAFB1714781859FFB5A2F80BEE4
    2024-11-03T22:36:41 8230109 4 10 [...].202.96.[...] D6577E957C1B4DE8922C2EC3A61FA1FB
    2024-10-09T20:38:10 8230091 1 10 [...].6.160.[...] D663D5CFC0724D3687EACC4548ACD926
    2024-10-08T12:48:39 8220007 1 10 [...].26.43.[...] D67443FC9E3E447AA19B1EF505507D03
    2024-11-08T14:13:51 8200117 12 10 [...].92.100.[...] D69565A799D444A2975999D2679B3014
    2024-10-09T11:23:34 8220046 2 10 [...].26.43.[...] D6C3F3780CA448BDB3BE423BAEFC7CBD
    2024-10-23T18:15:26 8200152 6 9 [...].140.89.[...] D6C6492C558A457699274B7043C988DF
    2024-10-28T17:07:22 8220070 3 10 [...].58.226.[...] D720B72BFB4F4CF8A42B0CA744B77929
    2024-10-20T19:07:23 8230058 2 10 [...].210.98.[...] D798061E889C4CABA88CE577AED77567
    2024-10-11T17:38:39 8220114 1 10 [...].242.184.[...] D8387E112B5540CF8BA216D872988078
    2024-10-28T23:55:22 8200117 1 8 [...].92.100.[...] D85938BDB7204E618B5C24EBF734682B
    2024-11-13T18:27:12 8230144 6 10 [...].1.100.[...] D8BC7E62BE924C19954DC29E72E69E8B
    2024-11-03T21:53:01 8190333 4 10 [...].168.0.[...] D8C59BFDA2DA40A98C20AFAB380594F1
    2024-11-09T19:46:07 8230028 6 10 [...].130.230.[...] D8FD1210DA6B45ACBE087A244E4F727A
    2024-11-06T22:52:49 8230052 5 10 [...].38.25.[...] D9850E4CB5DD4852879355289CEA6B46
    2024-10-11T18:42:38 8230021 1 10 [...].246.176.[...] D9B41D288A5B4F0AAA113E56869B74EB
    2024-11-06T00:22:09 8230098 5 10 [...].43.40.[...] D9B541671D5841619B9D93D9822E34E0
    2024-10-23T10:26:48 8220044 4 10 [...].26.4.[...] D9B5B11128F44249A809864D54614B16
    2024-10-13T13:38:34 8230093 3 10 [...].178.173.[...] D9C7E33EF75C43419B03B8A00D9430A8
    2024-10-25T13:13:19 8230058 4 10 [...].210.98.[...] DA0215238248464C91665F0051401011
    2024-10-09T21:06:00 8230036 1 10 [...].74.32.[...] DA1497D9685D4CE39CDC75482C80E3E5
    2024-11-05T20:30:53 8230042 5 10 [...].49.79.[...] DA3FBE349BEC4D10A7EF0A8FDC671719
    2024-10-13T18:50:59 8230126 1 10 [...].86.212.[...] DAA6910DA0C3433F9BCCB7FA57E8EDFC
    2024-10-10T11:34:18 8220229 5 10 [...].140.29.[...] DAC45A4CD4B149BE9391AFEC0E747503
    2024-11-08T16:07:43 8230043 6 10 [...].4.92.[...] DAE01C3C11D44D74883ED42D7AA4239F
    2024-10-26T10:40:01 8230085 3 9 [...].217.161.[...] DAF04A23434F4636B44662E5FDA2F864
    2024-11-07T00:21:02 8200171 5 8 [...].86.179.[...] DAF66B24D627433B8235C39FC983495D
    2024-10-25T13:35:11 8220029 4 10 [...].237.30.[...] DB4760549DE847E8B6FC40BEA39143F8
    2024-10-21T22:00:20 8230036 3 10 [...].74.33.[...] DBE77CA3DDB5432D94313E2B9CCFC72B
    2024-10-16T23:16:49 8230109 2 10 [...].202.96.[...] DC1D8B6B5D7346C6B125C5C3099B2A82
    2024-10-23T23:06:34 8230024 4 10 [...].103.33.[...] DC73D6FA96544C4C90194BBD7C42C168
    2024-10-20T21:36:44 8230092 2 6 [...].58.225.[...] DD0462FDECC04C66A4E86AC723B49694
    2024-10-09T21:30:44 8230023 1 10 [...].58.194.[...] DD086FE626A0440FA4D0B4A36581B6E1
    2024-10-10T18:02:42 8230159 1 10 [...].74.2.[...] DD19A3619100469B992D9E4697EC7F02
    2024-10-25T20:32:08 8230106 3 10 [...].58.195.[...] DD2C63725EF64E819338E9D83CA1D3F9
    2024-11-02T18:24:35 8200168 4 10 [...].177.150.[...] DD37FAEE0A2D4D29B63EC8BF6A4652BB
    2024-11-08T13:39:59 8230008 7 10 [...].203.154.[...] DD3F2049049645E1829F850DDC9CE56A
    2024-10-24T12:03:52 8220169 3 10 [...].26.70.[...] DD9E954BCD514FEAAFA2FD3E72C4E9D3
    2024-10-25T14:01:06 8230022 4 10 [...].178.193.[...] DDE08DDCDF164E82BFD4145383F8A634
    2024-11-07T22:25:25 8230070 6 10 [...].217.161.[...] DDFDDC56C4404C4CAA14FD3C209C030F
    2024-10-22T10:38:58 8220046 10 10 [...].26.43.[...] DE015A4713CD4CBFAE922D8E76AD151D
    2024-10-17T23:22:23 8230008 4 10 [...].203.144.[...] DE2CC16F88794EC78B55A7ADFFA59E25
    2024-10-24T20:30:06 8230068 3 10 [...].75.76.[...] DE36EAAE41CA4DF0A79AF1FE58EFEC12
    2024-10-11T19:01:49 8230075 1 10 [...].70.168.[...] DE5C30CDC69C4957A998495D6E87D130
    2024-10-14T18:56:21 8230221 1 8 [...].178.144.[...] DEC7ACB56D06423DA64EF9D95A20F17F
    2024-10-24T01:46:15 8230161 3 10 [...].58.136.[...] DF18E6CD8BEF41CCBEE048A76B27E13E
    2024-10-26T17:04:51 8230094 3 10 [...].217.165.[...] DF261E7A241242179D6BC586167E8963
    2024-10-15T17:36:28 8220112 2 10 [...].138.151.[...] DF3F9059D4D7451D9E5D93340A5F1145
    2024-10-19T14:20:58 8210111 2 8 [...].242.225.[...] DF587F110FAA4BD787C413A3E4F14C3D
    2024-10-13T17:24:44 8220091 1 10 [...].66.136.[...] DF937DA8680B417289215EC4025C0988
    2024-10-11T22:23:14 8230246 1 10 [...].87.50.[...] E01428B577334607AC22F8386F19B5D4
    2024-10-19T20:14:51 8190338 2 10 [...].202.85.[...] E05A2F831D9F440BB26B5CA3B84CB88B
    2024-11-10T15:04:50 8210208 5 10 [...].131.172.[...] E0731D55C9F444F0BA1ABCCE9DFAC7E6
    2024-10-12T21:37:03 8230002 1 9 [...].131.130.[...] E08987AAE54741B8B3C06C69D49936D3
    2024-11-10T23:56:21 8230097 5 10 [...].73.34.[...] E0A7651D68A64961ABA42EDAAF933B7E
    2024-11-10T18:40:14 8190338 5 4 [...].68.103.[...] E0A77ACF679641F89A2F212307BFEE16
    2024-10-29T23:43:27 8230068 5 10 [...].75.76.[...] E0FD1D138FF74507A79BA8F822BE54EB
    2024-10-12T16:40:41 8220016 2 10 [...].168.0.[...] E13D4EA4662F4352888B4461D8E62827
    2024-10-22T21:47:20 8200152 4 9 [...].140.91.[...] E1437C55FB1D403C803913911B568B99
    2024-11-04T20:19:11 8230125 5 10 [...].86.168.[...] E15CB4F197834576A0C89158A6B35B98
    2024-10-28T12:41:08 8230093 5 10 [...].87.16.[...] E169385D076A4A3C894DF847DE79EAC3
    2024-10-22T22:28:08 8200066 5 10 [...].168.0.[...] E1749299021B4349864DD3DCEB53F7EB
    2024-10-23T18:09:15 8220086 3 10 [...].168.0.[...] E1884B8431624033B076A6FA087A5336
    2024-11-12T15:03:11 8230157 6 10 [...].203.165.[...] E1CEFAEC554F4E07A7B85A4C70FAD0F0
    2024-10-19T10:43:24 8170017 4 10 [...].87.194.[...] E1F65020931F464FB7D3691DEC7CDD76
    2024-10-27T18:39:33 8220052 3 10 [...].168.0.[...] E21092DB34B04E59BA4CA22529C2CE7C
    2024-10-19T13:09:01 8230039 2 10 [...].251.255.[...] E2152C464A1646F4B552EF57A5BE1063
    2024-10-11T18:09:00 8220112 1 10 [...].138.151.[...] E225DE5EF8964E739ECFB3305B1AF61E
    2024-10-19T23:59:43 8220042 6 10 [...].168.0.[...] E262822BE4AA40BBA1F66752C5615F7E
    2024-10-22T22:48:37 8230098 3 10 [...].49.227.[...] E2D8C5BE6A534F96BA24EB2A3DE3CE91
    2024-10-24T01:00:27 8230099 4 10 [...].75.111.[...] E2F695472FEC4449B7C2798DE75206DD
    2024-10-24T22:27:56 8230058 3 10 [...].210.98.[...] E2FF68154AB64B9691AF66A071AB05C8
    2024-10-20T21:39:54 8220014 2 9 [...].103.239.[...] E369B3225E2D493A86619773D783B2E6
    2024-11-08T16:51:03 8190376 5 10 [...].131.255.[...] E39157566B854BE29E1765624630E6A9
    2024-10-31T21:19:52 8230066 5 10 [...].86.254.[...] E392F9936E32432C962E3FF17BC11C7C
    2024-10-18T00:48:18 8230246 2 10 [...].70.74.[...] E3CC412C9D4445C09392CCB148B026FE
    2024-10-21T12:24:17 8220046 15 10 [...].26.43.[...] E3EBF9BC74E54EC68AD655DDE44D46E4
    2024-10-23T16:02:53 8210219 4 10 [...].168.1.[...] E46C680F68D64A71874FA4425B592411
    2024-11-07T16:17:13 8230142 5 10 [...].87.25.[...] E4E56755D52B48269C6587570C17A13F
    2024-10-10T00:03:52 8230109 1 10 [...].202.96.[...] E4F8B1F6257C40E5A140CACDC2C9486D
    2024-10-22T13:42:58 8220105 16 10 [...].1.100.[...] E54AAF134A794EEEA440CF87FC26798F
    2024-10-23T11:34:03 8230151 3 10 [...].225.158.[...] E58AC1FFBCCA4518A61E193B42AA8C09
    2024-10-06T23:53:18 0 1 3 [...].86.92.[...] E5A27E0E12ED48DCB78590942266679C
    2024-10-27T18:28:07 8230034 3 10 [...].70.57.[...] E5B1AF7E821D42A79A1B98C230DEBD20
    2024-10-27T18:01:58 8150188 3 10 [...].203.252.[...] E5D16E82B54E49C5B70AA8B705C0B23A
    2024-10-11T18:26:19 8230148 1 10 [...].202.117.[...] E5D9CB57BD554F35B5AF52C42FD35B6F
    2024-10-20T23:22:20 8190333 2 10 [...].168.0.[...] E61FCA3D19684E3593EF14F16CE75649
    2024-10-18T15:57:44 8230156 2 10 [...].74.58.[...] E6457B3D873140C6971F05DD42D35521
    2024-10-19T14:19:12 8230075 2 10 [...].70.168.[...] E70DABF0EAE94A8896CEE361B6248878
    2024-10-13T23:54:07 8230218 1 10 [...].74.11.[...] E7CD13DAB82D488092A31AB7564FF95F
    2024-11-10T17:42:35 8230163 5 10 [...].58.192.[...] E7D90D8159534EB78A2DC1FDA5FD2D30
    2024-10-13T16:17:33 8230217 1 10 [...].92.141.[...] E803B1F975994CB8B9CD881126BCF4F3
    2024-10-11T15:04:54 8230067 1 10 [...].166.94.[...] E84F0A59FCD448AF92C9957E76C268C0
    2024-10-27T12:11:19 8230105 5 10 [...].242.227.[...] E85DC74DCEA0457CABE466652680AC87
    2024-11-03T20:21:00 8190338 4 2 [...].152.240.[...] E896CEA24CCF40E8B3F491CBBF9D765E
    2024-11-13T22:07:10 8210208 6 10 [...].131.172.[...] E906D6DAB3CE4CD880621D79507DA84C
    2024-10-17T18:28:16 8230003 2 10 [...].26.77.[...] E92BD3B76AC34C7E835A491935F95D18
    2024-11-03T21:29:35 8230066 6 10 [...].74.226.[...] E9CCA74AD003479C9EABECA8D2606957
    2024-10-21T12:27:45 8230029 4 10 [...].26.42.[...] E9DDA49C2A664ADFB595BF7BFA9C1BAC
    2024-10-20T22:58:44 8230066 2 10 [...].86.254.[...] E9EB462825804FADB79EEDD2CF539775
    2024-10-24T22:44:09 8230153 4 10 [...].74.239.[...] EA0F909593EE4EACB8DAA05F455073DC
    2024-10-23T18:18:13 8220156 16 10 [...].65.125.[...] EACCED32587742B580BA59D60C27B4DE
    2024-10-12T19:07:04 8230089 1 10 [...].84.28.[...] EAD2F862EDC641C2A50B6150116CE661
    2024-10-11T00:52:05 8230144 1 10 [...].49.227.[...] EB3D6891CD2E45B086BB7FDC1AE47CCF
    2024-11-06T18:34:03 8230134 5 10 [...].242.187.[...] EB45604D15F5424C95E9A0BBF988258E
    2024-11-07T01:04:41 8220149 16 10 [...].58.138.[...] EB7A17FCDAE84E84933B4010FFF57F58
    2024-11-02T23:38:58 8190051 4 10 [...].1.238.[...] EB81A13884A24BDC851AFBE82A62E922
    2024-10-22T16:04:14 8220025 4 10 [...].26.44.[...] EB88CED9BD60409FAE836CFF20DE6E16
    2024-11-03T19:51:43 8230106 7 10 [...].58.193.[...] EBDDC502AC4B4F209BCE3B76EE8D2FD0
    2024-10-10T10:00:44 8220007 3 10 [...].55.70.[...] EBF34785D6754EBE9AE36732CDB1595C
    2024-11-06T19:59:48 8210220 5 10 [...].217.175.[...] EC1721A1BEED43349EB2FD672380D689
    2024-10-11T20:11:48 8230038 1 10 [...].65.113.[...] EC5575F6687948C6BBD74EB706F1F80E
    2024-10-16T20:51:08 8230042 2 10 [...].49.79.[...] ECB6FC053650415D8CDF4FFA1618D34F
    2024-10-27T12:35:55 8230025 3 10 [...].73.116.[...] ECC7920A4D2746C1B269BAB8D2D17C2C
    2024-10-31T21:21:15 8230106 6 10 [...].58.193.[...] ECF374363AE74BBE917BD2C881677DCC
    2024-10-27T21:24:01 8190376 3 10 [...].86.72.[...] ED27779620784191A5D8D66F065D570B
    2024-10-10T01:10:28 8230035 1 10 [...].251.255.[...] ED2E3D44A0C740CDB61F16F3BEDD97C1
    2024-10-20T13:04:33 8230047 2 10 [...].84.205.[...] ED68086136314F8594893193923924BE
    2024-10-21T12:05:02 8230132 3 10 [...].26.33.[...] ED7C835509F94C6C84F07300BAE79C28
    2024-11-12T12:11:58 8190271 6 9 [...].217.172.[...] EE3A9CEA14C54BE693181DE33E08A4EA
    2024-10-24T21:21:59 8230068 4 10 [...].75.76.[...] EE3F1B88AEC748FE96C5D39DE6AE6D65
    2024-10-25T10:52:23 8220230 3 10 [...].6.116.[...] EE657A92F60A4C91AB52993D19410761
    2024-11-03T19:20:30 8230139 6 10 [...].73.237.[...] EE6D6A96B4C8411385CE5807706D2080
    2024-11-11T22:29:00 8230117 5 8 [...].178.177.[...] EE89370B7A6F4CDFB5C38240A9B9D68C
    2024-11-13T15:07:14 8230104 6 10 [...].178.184.[...] EEBF7C2034B946AB8317B2D9323AAE24
    2024-11-06T11:06:58 8230077 5 10 [...].73.127.[...] EEE63D97A84947C180753D68A40B59F3
    2024-11-03T14:54:16 8230122 7 10 [...].129.234.[...] EF1A8DA1C6EE4C24A48BFB8D93DF5AD6
    2024-11-03T03:05:46 8230164 5 10 [...].167.110.[...] EF37AF13FA1543179109FCF5AB9E8268
    2024-10-29T18:41:01 8160117 2 10 [...].217.161.[...] EF43D0D782EB48B5ACC297911C01F7D6
    2024-11-01T15:50:02 8230155 1 10 [...].131.230.[...] EF6A836763EE4BC8B93DA0948D0B0C30
    2024-11-10T20:54:17 8190238 8 10 [...].130.246.[...] EFADCB86333E4F87A7A3A79EDBF65047
    2024-10-19T14:15:03 8230217 2 10 [...].92.141.[...] F0925F61BF184E83B520CAF7BB54C3E9
    2024-10-26T21:24:11 8230059 4 10 [...].6.32.[...] F1180BE0CC034B06BD42C11C30C76D97
    2024-10-30T17:55:59 8230027 4 10 [...].251.121.[...] F14F67A27EFC47229E3E3B93B29C4DFB
    2024-11-02T18:04:31 8230247 6 10 [...].246.139.[...] F15FC913E0EC40B5B351B9A14CE611FE
    2024-11-12T00:11:31 8220070 5 10 [...].58.225.[...] F187B83D36FB41B1B271BDD1881703AE
    2024-10-23T18:57:42 8230003 4 10 [...].74.162.[...] F1ED70D6D588494A8C4712F6A05CA625
    2024-10-22T09:51:16 8220046 8 10 [...].26.43.[...] F21106957F1B4D0EB697228D137D50AD
    2024-10-23T18:14:26 8230003 3 10 [...].74.162.[...] F25B3A6EEB38464295BD239DBF53BCC9
    2024-10-13T18:59:49 8230018 1 10 [...].251.52.[...] F261F87C6DA14BEFB33B0633228AAC7C
    2024-10-15T16:48:27 8230019 2 10 [...].86.152.[...] F27E865618824620BEF482F5B3FF1AF3
    2024-10-09T15:25:02 8220149 2 6 [...].168.0.[...] F2E604C634F2411FB46643343A2AA1ED
    2024-11-03T13:14:47 8230016 16 10 [...].168.1.[...] F2EF7647D3CC4DD4BEBF4F336A3EBBC8
    2024-11-07T22:01:56 8230127 6 10 [...].176.109.[...] F2F49967888B47D6AD9321F42E17E334
    2024-11-04T22:23:21 8230043 5 10 [...].4.92.[...] F305FECABB0E4E808B019D725DD1D2AF
    2024-11-08T16:19:23 8230012 5 10 [...].74.133.[...] F3094C292194409F841665DF24273A7E
    2024-10-23T12:57:12 8230056 3 10 [...].242.227.[...] F34C3356186142FF94C06004243730AE
    2024-10-18T16:15:56 8230115 2 10 [...].74.118.[...] F34E0D7369D04BC98C79B0F3F5ACB7AD
    2024-10-17T14:43:57 8220108 8 10 [...].26.22.[...] F37C8881EBB84267AFAFEF668D7BB1A4
    2024-10-13T17:56:17 8230245 1 10 [...].177.228.[...] F3EE6C75A4614C7A8B83A74FFA2B8D8C
    2024-10-14T10:32:05 8230226 1 9 [...].26.50.[...] F4328C45DC584FFD9566B966523BE6DB
    2024-11-04T12:13:58 8220007 9 10 [...].26.43.[...] F4375710B3BD4377B38107422B4FE761
    2024-10-22T18:53:19 8230012 4 10 [...].74.15.[...] F44F176A596A4D69BA2E4CDE90108220
    2024-11-03T17:05:48 8210220 4 10 [...].217.175.[...] F4536F30C094438DAA4D79D211721F8D
    2024-10-22T19:58:55 8230091 4 10 [...].6.161.[...] F510AE0AA41741C88CD56A16781B81EA
    2024-11-05T16:52:36 8230105 6 10 [...].203.198.[...] F525410CC80F4ECE9648C71C901BF264
    2024-10-29T21:12:14 8230152 4 10 [...].203.166.[...] F53A52FD770C46EB8993E6D61F1E2225
    2024-10-31T20:53:33 8230006 4 10 [...].242.245.[...] F55048E391F348B69471A1D7F54C5A86
    2024-11-11T17:05:23 8230163 6 10 [...].58.192.[...] F551723F108A4B18858966C9BD5AD460
    2024-10-25T03:13:34 8230159 4 10 [...].55.123.[...] F567F354C3CE4B7D9AEA524EC5CA74ED
    2024-10-25T22:05:57 8230220 4 10 [...].71.169.[...] F576AC08E5714528A9A3E409D0867859
    2024-10-11T12:02:59 8220105 4 10 [...].1.100.[...] F597FED5A6094745905608D50B55FF72
    2024-10-20T14:58:27 8230069 2 10 [...].86.43.[...] F5DD815C953545EAA5EE59A56026FDC4
    2024-10-17T18:54:35 8230011 2 10 [...].26.25.[...] F64CB9D8DB814787909BE102046598BF
    2024-10-23T23:49:27 8230099 3 10 [...].75.111.[...] F65447FF2B734F418258A3F1D3F77A46
    2024-11-02T15:51:39 8230033 4 2 [...].4.165.[...] F68B245D3C6148FD9BB797969FB163FA
    2024-10-17T23:12:25 8230105 2 10 [...].6.161.[...] F68F74CFDD274AF4B8286E2AAF7D9458
    2024-11-10T21:05:00 8230167 6 10 [...].86.97.[...] F74F5F97C2444C309FA66376A533BDF1
    2024-10-22T23:29:46 8220044 3 10 [...].64.157.[...] F7688B2CF1A446F9BDC4CF3291257EB7
    2024-10-23T21:59:00 8230105 3 10 [...].242.227.[...] F7873A4B4E2D4778B0B7B6B66FEED85A
    2024-11-10T15:42:32 8230019 6 10 [...].86.152.[...] F7C0A5EA89464343A0013DB5491D629F
    2024-10-19T18:35:41 8220143 2 10 [...].177.17.[...] F7C0C0B351704ABD8A5E6711D5966020
    2024-11-01T20:11:23 8230078 4 10 [...].178.189.[...] F7DB76574DA9420EB6A0F7EEACAA1371
    2024-11-05T09:45:57 8230013 6 10 [...].26.9.[...] F80B5527BF0D47F98ED966AEAD36C270
    2024-10-16T13:17:10 8230126 2 10 [...].86.212.[...] F86CF1359D744E2C953C8B18AF3663EE
    2024-10-25T20:10:45 8230011 4 10 [...].74.48.[...] F88C78DE84664DCD95E521E587E22F29
    2024-10-15T20:18:59 8230066 2 9 [...].74.235.[...] F8AEE752AB744ECFB809DBB9144B7FE6
    2024-10-28T03:52:06 8220211 4 10 [...].168.2.[...] F8CA022B277F40F0AAF4A643ECDB5177
    2024-10-29T16:10:40 8200117 2 10 [...].92.100.[...] F8CF22B0B0524EF1816F8CB7D8B47502
    2024-11-08T17:20:46 8230001 5 10 [...].4.158.[...] F8D5A37F7FBF4816ABEB0B1B07B98C35
    2024-11-07T13:14:53 8230033 5 10 [...].43.41.[...] FA0FC8D3D3C4421C869B7530BECDDBCE
    2024-10-21T23:10:30 8230124 4 10 [...].86.31.[...] FA1A35C4BFA54545A0B7870DC8EBB1E6
    2024-11-02T19:25:02 82000464 1 10 [...].177.77.[...] FAB05C699F3E49CCBB8E6ED11327502B
    2024-10-28T12:44:23 8230050 4 10 [...].6.2.[...] FAB7AA03D21A4ED09FF0C10E032F1219
    2024-10-11T15:15:01 8230085 1 9 [...].217.161.[...] FAE3A64EFCE24B84A4040DFD04F6EE3D
    2024-10-11T15:21:44 8230003 1 10 [...].131.230.[...] FB43E189DDBE42499E9126D35AD833E6
    2024-10-30T15:31:27 8230170 2 8 [...].26.42.[...] FB73DC3C9E5B4A0D8F8AABCF1538208A
    2024-11-10T23:11:44 8190333 5 10 [...].168.0.[...] FBA4E043790747709F49645C592AD745
    2024-11-02T17:27:27 8230247 5 10 [...].246.139.[...] FBCFB0ED305D432C95FCBEC367DB22BC
    2024-10-11T14:40:42 8190338 1 10 [...].147.19.[...] FBD8816C18E64F75B8B594D451ADE169
    2024-10-27T23:07:30 8230073 4 10 [...].131.0.[...] FC16EABD54D54587A13AEF49FE714B24
    2024-10-26T19:36:52 8230126 4 10 [...].86.212.[...] FC2FC38DEE114A48B9976307CFC0FF85
    2024-10-17T20:10:43 8230008 3 10 [...].84.27.[...] FC51D17AC2184F73A8CCB5A2E36EB44D
    2024-10-12T14:04:56 8230135 1 10 [...].140.90.[...] FC9BB08C73E446799B870B1B89E8ACBE
    2024-10-18T13:45:13 8220011 6 10 [...].168.1.[...] FC9D06A6796441F3A7C4BAAFE9D6AC7A
    2024-10-21T16:05:58 8220046 12 10 [...].26.43.[...] FDC2AECEA8754D60AA96566B83DB1B92
    2024-10-21T23:19:27 8230061 4 10 [...].138.148.[...] FE1B081DAF254F4D9FADFE741E2879E9
    2024-10-11T18:21:08 8220141 2 10 [...].251.255.[...] FE73209EDA3341A1AECC7C764786BC72
    2024-10-21T20:52:37 8230008 6 10 [...].203.175.[...] FEA795F026054AAFB4CBBFFA11F998D6
    2024-10-20T13:33:11 8190304 13 10 [...].217.176.[...] FEA79779DFFB4647AA72D3E46BC0C493
    2024-10-26T21:34:08 8220114 5 10 [...].242.185.[...] FEBE34C48EF043F1889F43CD1469FCD1
    2024-10-19T18:05:20 8230103 2 10 [...].66.136.[...] FED748FCC481415EB4C9142BE6F94A31
    2024-10-08T14:04:04 8220108 1 10 [...].26.22.[...] FF33B6B722DB4F898E3AEC7504C0ABE0
    2024-10-31T12:55:51 8230150 1 8 [...].92.222.[...] FFA2663C3F344EE2946F668F39B09B48
    2024-10-23T17:27:58 8230060 1 10 [...].28.130.[...] FFB863E39DF249FFA5C011539EF098E0
    2024-11-12T20:11:14 8230067 6 10 [...].177.5.[...] FFBCE590190B4DAEB6C1014ADBD7B2F8

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

    Α.Μ. Βαθμοί ατομικής άσκησης Μ.Ο. ατομικών ασκήσεων που έχουν παραδοθεί Μ.Ο. απαιτούμενων ατομικών ασκήσεων (5) Ομαδικές ασκήσεις
    2210175Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    7220234Α1=10 10.02.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8150188Α1=8 Α2=10 Α3=10 Α4=10 Α5=10 9.69.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8160117Α1=10 Α2=10 Α3=10 Α5=10 10.08.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8170017Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8170068Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8170204Α1=9 Α2=8 Α3=9 Α4=9 8.87.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190051Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190091Α1=10 Α2=10 Α3=10 Α5=6 Α6=10 Α7=10 9.310.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190238Α1=10 Α2=10 Α3=0 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 8.810.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190271Α1=9 Α2=9 Α3=10 Α4=10 Α5=10 Α6=9 9.59.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190273Α1=10 Α2=10 Α3=10 Α4=10 10.08.0 Ομ.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 Α11=10 Α12=10 Α13=10 Α14=10 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190332Α5=8 8.01.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190333Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190338Α1=10 Α2=10 Α3=10 Α4=2 Α5=4 Α6=8 7.38.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190376Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190378Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8190381Α1=9 Α2=9 Α3=8 Α4=10 Α5=7 8.68.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    82000464Α1=10 Α2=10 Α4=10 Α5=8 9.57.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200066Α1=10 Α2=6 Α3=10 Α4=10 Α5=10 9.29.2 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200095Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200117Α1=8 Α2=10 Α3=10 Α4=10 Α5=10 Α6=8 Α7=10 Α9=10 Α10=10 Α11=10 Α12=10 Α13=10 9.710.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200152Α1=7 Α2=9 Α4=9 Α5=8 Α6=9 Α7=5 7.88.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200168Α1=8 Α2=10 Α3=10 Α4=10 9.57.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200171Α1=10 Α2=10 Α3=10 Α4=10 Α5=8 Α6=10 9.710.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8200223Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210087Α1=8 Α2=10 Α3=10 Α4=10 Α5=8 Α6=10 9.39.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210111Α1=10 Α2=8 9.03.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210163Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210208Α1=10 Α2=10 Α3=10 Α4=8 Α5=10 Α6=10 9.710.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210219Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210220Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8210226Α1=3 Α5=5 Α11=7 Α12=7 5.54.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220007Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 Α9=10 Α10=10 Α11=10 Α13=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220011Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α9=10 Α10=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220014Α1=10 Α2=9 Α4=8 9.05.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220016Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220025Α1=10 Α2=10 Α3=10 Α4=10 10.08.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220029Α4=10 Α6=8 9.03.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220036Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220039Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220042Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220044Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220046Α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
    8220052Α1=10 Α2=9 Α3=10 Α4=10 Α5=10 9.89.8 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220053Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220057Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220070Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220071Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220085Α1=10 Α2=10 Α4=10 Α5=10 10.08.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220086Α1=8 Α2=10 Α3=10 Α4=10 Α5=10 9.69.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220091Α1=10 Α2=9 Α3=10 9.75.8 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220105Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α12=10 Α15=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220108Α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 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220110Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220112Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220114Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220123Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220131Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220136Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220141Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α8=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220142Α1=8 Α2=10 Α3=10 Α4=8 9.07.2 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220143Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220145Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220148Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220149Α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 Α15=10 Α16=10 Α17=10 Α18=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220152Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220156Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α12=10 Α15=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220169Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220211Α1=10 Α2=10 Α3=10 Α4=10 10.08.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220215Α1=10 Α2=8 9.03.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220228Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220229Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220230Α1=9 Α2=9 Α3=10 Α4=9 Α5=9 9.29.2 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8220231Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230001Α1=8 Α2=10 Α3=10 Α4=10 Α5=10 9.69.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230002Α1=9 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 9.810.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230003Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α15=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230005Α1=10 Α2=9 Α3=10 Α4=10 Α5=10 Α6=10 9.810.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230006Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230007Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230008Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230010Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230011Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230012Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230013Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230014Α1=10 Α2=9 Α4=10 Α5=10 9.87.8 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230016Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α16=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230017Α1=10 Α2=10 Α3=10 Α4=10 10.08.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230018Α1=10 Α2=10 Α4=2 Α5=10 8.06.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230019Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    823002Α4=10 10.02.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230021Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230022Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230023Α1=10 Α2=10 Α3=10 Α4=8 Α5=10 Α6=10 Α7=10 9.710.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230024Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230025Α1=9 Α2=5 Α3=10 Α4=10 Α5=6 8.08.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230027Α1=8 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 9.710.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230028Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230029Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230030Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230031Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230033Α1=10 Α2=9 Α3=10 Α4=8 Α5=10 Α6=10 9.59.8 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230034Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230035Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230036Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230037Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230038Α1=10 Α2=2 Α3=0 Α4=10 Α5=10 6.46.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230039Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230040Α1=8 Α2=10 Α3=10 Α4=10 Α5=10 9.69.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230042Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230043Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230044Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230045Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230047Α1=10 Α2=10 Α3=10 Α4=10 Α5=8 Α6=10 9.710.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230050Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230052Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230053Α1=9 Α2=10 Α3=10 Α4=10 Α5=10 9.89.8 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230055Α1=10 10.02.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230056Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230057Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230058Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230059Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230060Α1=10 Α2=10 10.04.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230061Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230063Α1=10 Α2=10 Α3=10 Α4=7 Α5=10 9.49.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230064Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230065Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230066Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230067Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230068Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230069Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230070Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230071Α1=9 Α2=9 Α3=10 Α4=10 Α5=10 9.69.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230072Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230073Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230074Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230075Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230076Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230077Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230078Α1=6 Α2=9 Α3=9 Α4=10 Α5=10 8.88.8 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230079Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230083Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230085Α1=9 Α2=9 Α3=9 Α4=10 Α5=7 Α6=9 8.89.2 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230089Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230091Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230092Α1=10 Α2=10 Α4=10 Α5=10 10.08.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230093Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230094Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230097Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230098Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230099Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230100Α1=10 Α2=10 Α3=10 Α4=8 Α5=10 9.69.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230101Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230102Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230103Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230104Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230105Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230106Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230107Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230109Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230111Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230113Α1=9 Α2=8 Α3=9 Α4=10 Α5=9 9.09.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230114Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230115Α1=10 Α2=10 Α3=10 10.06.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230116Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230117Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230120Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230122Α1=8 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 Α9=10 9.810.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230123Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230124Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230125Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230126Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230127Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230129Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230131Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230132Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230134Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230135Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230136Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230138Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230139Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230142Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230143Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230144Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230145Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230147Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230148Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230150Α1=8 Α2=10 Α3=10 Α4=8 9.07.2 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230151Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230152Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230153Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230154Α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 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230155Α1=10 Α2=9 Α3=10 Α4=8 Α5=10 9.49.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230156Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230157Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230159Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230160Α1=9 Α2=10 Α3=10 Α4=10 Α5=10 9.89.8 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230161Α1=10 Α2=10 Α3=10 Α4=10 Α5=7 Α6=10 9.510.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230163Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230164Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230165Α1=10 Α2=10 Α3=10 Α4=8 9.57.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230167Α1=10 Α2=10 Α3=0 Α4=8 Α5=10 Α6=10 8.09.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230168Α1=8 Α2=10 Α3=10 Α4=2 Α5=10 8.08.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230170Α1=10 Α2=8 Α3=10 9.35.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230217Α1=10 Α2=10 Α3=10 Α4=8 Α5=10 9.69.6 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230218Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230220Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230221Α1=8 Α2=9 8.53.4 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230224Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230226Α1=9 Α2=6 7.53.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230227Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230231Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α7=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230244Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230245Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230246Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    8230247Α1=10 Α2=10 Α3=10 Α4=10 Α5=10 Α6=10 Α15=10 10.010.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0
    823143Α1=10 Α2=10 10.04.0 Ομ.1=0 Ομ.2=0 Αρχηγός=0

    Φοιτητές που παραδίδουν ασκήσεις: 219
    Μέσος όρος ατομικής άσκησης για φοιτητές που παραδίδουν ασκήσεις: 9.8
    Ατομικές ασκήσεις με προθεσμία παράδοσης: 5
    Μέσος όρος 5 ατομικών ασκήσεων για φοιτητές που παραδίδουν ασκήσεις: 9.3

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

    Χρονοσφραγίδα ΑΜ Άσκηση Βαθμός Διεύθυνση IP Αναγνωριστικό
    2024-11-12T22:44:04 8190332 4 10 [...].6.72.[...] 19DB5467C4DE492BB7CEBEDF29AB05F8
    2024-11-12T21:58:00 8190332 1 10 [...].6.72.[...] 1C7BAED2EA364657A163F36694DD9761
    2024-10-09T21:46:46 8220058 12 10 [...].71.169.[...] 3673C15682FA4310B4B3D19E6779209B
    2024-10-07T20:00:29 8220156 1 10 [...].131.12.[...] 434517AEB91C4A6AACB05288C4AD5702
    2024-10-09T17:24:50 8220071 1 10 [...].74.158.[...] 4C73B84870874D36B01312EEC432816E
    2024-11-12T22:35:30 8190332 2 10 [...].6.72.[...] 549D83DA23AF464C86C95B38A2D8E43C
    2024-10-09T23:19:12 8220058 14 10 [...].71.169.[...] 943EBC2470CF448D80C1B49A37DC2803
    2024-11-12T22:39:37 8190332 3 10 [...].6.72.[...] 9C7A85BA40FC4B26BF3426ED4F0EA46C
    2024-11-12T23:25:19 8190332 6 10 [...].6.72.[...] A3FCCF2EB64745DAA7EED62702B7DDCD
    2024-10-07T19:46:25 8220105 1 10 [...].1.100.[...] B3D04887F18547948F4831353181C625
    2024-11-12T23:04:48 8190332 5 10 [...].6.72.[...] B53D1FB68E394E79851603719CBE8F7D
    2024-10-07T19:29:50 8220156 1 10 [...].131.12.[...] FDFCE69787AD482B9A9D34A4D6EBC3FE

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

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

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

    Τα πιλοτικά θέματα σε μορφή 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; }
    }
    

    Μεταβλητές

    Περιεχόμενα