Problem Display
PID: 16492 (8/6p1/6P1/5q2/2pR2R1/2P1kpQ1/2p2N2/2N3K1 w - - 0 1)

Andrade, Barry Jack da Costa

Chess, 1941

8/6p1/6P1/5q2/2pR2R1/2P1kpQ1/2p2N2/2N3K1

#2

8 + 6


SOLUTION


  • SOUND
  • Sets
    • 1...Qd3
      • 2.Qf4#
    • 1...Qe4
      • 2.Rgxe4#
    • 1...Qxg4
      • 2.Sxg4#
    • 1...Qe6
      • 2.Qf4#
    • 1...Qxg6
      • 2.Qf4#
    • 1...Qd7
      • 2.Rge4#
      • 2.Qf4#
      • 2.Qe5#
    • 1...Qc8
      • 2.Rge4#
      • 2.Qf4#
      • 2.Qe5#
    • 1...Qf4
      • 2.Qxf4#
    • 1...Qa5
      • 2.Rge4#
      • 2.Qf4#
    • 1...Qb5
      • 2.Rge4#
      • 2.Qf4#
    • 1...Qc5
      • 2.Rge4#
      • 2.Qf4#
    • 1...Qd5
      • 2.Qf4#
    • 1...Qe5
      • 2.Qxe5#
    • 1...Qg5
      • 2.Rge4#
    • 1...Qh5
      • 2.Rge4#
      • 2.Qf4#
    • 1...Qf6
      • 2.Rge4#
    • 1...Qf7
      • 2.Rge4#
      • 2.Qe5#
    • 1...Qf8
      • 2.Rge4#
      • 2.Qe5#
  • Tries
    • 1.Kf1?
      • 1...Qxg4
        • 2.Sxg4#
      • 1...Qxg6
        • 2.Qf4#
      • 1...Qe4
        • 2.Rgxe4#
      • 1...Qe6
        • 2.Qf4#
      • 1...Qd7
        • 2.Rge4#
        • 2.Qf4#
        • 2.Qe5#
      • 1...Qc8
        • 2.Rge4#
        • 2.Qf4#
        • 2.Qe5#
      • 1...Qf4
        • 2.Qxf4#
      • 1...Qa5
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qb5
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qc5
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qd5
        • 2.Qf4#
      • 1...Qe5
        • 2.Qxe5#
      • 1...Qg5
        • 2.Rge4#
      • 1...Qh5
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qf6
        • 2.Rge4#
      • 1...Qf7
        • 2.Rge4#
        • 2.Qe5#
      • 1...Qf8
        • 2.Rge4#
        • 2.Qe5#
      • 1...Qd3+!
    • 1.Sh1?
      • threat
        • 2.Qe1#
        • 2.Qf2#
      • 1...Qd3
        • 2.Qf2#
        • 2.Qf4#
      • 1...Qxg4!
    • 1.Sfd3?
      • threat
        • 2.Qe1#
        • 2.Qf2#
      • 1...Kd2
        • 2.Qe1#
      • 1...Qxd3
        • 2.Qf2#
        • 2.Qf4#
      • 1...Qxg4!
    • 1.Sh3?
      • threat
        • 2.Qe1#
        • 2.Qf2#
      • 1...Qd3
        • 2.Qf2#
        • 2.Qf4#
      • 1...Qxg4!
    • 1.Rd2?
      • threat
        • 2.Re2#
      • 1...Qd3
        • 2.Qf4#
      • 1...Kxd2!
    • 1.Rd3+?
      • 1...Qxd3
        • 2.Qf4#
      • 1...cxd3!
    • 1.Rd5?
      • 1...Qxg6
        • 2.Qf4#
      • 1...Qxd5
        • 2.Qf4#
      • 1...Qd3
        • 2.Qf4#
      • 1...Qe4
        • 2.Rxe4#
      • 1...Qe6
        • 2.Qf4#
      • 1...Qd7
        • 2.Re4#
        • 2.Qf4#
        • 2.Qe5#
      • 1...Qc8
        • 2.Re4#
        • 2.Qf4#
        • 2.Qe5#
      • 1...Qf4
        • 2.Qxf4#
      • 1...Qe5
        • 2.Qxe5#
      • 1...Qg5
        • 2.Re4#
      • 1...Qh5
        • 2.Re4#
        • 2.Qf4#
      • 1...Qf6
        • 2.Re4#
      • 1...Qf7
        • 2.Re4#
        • 2.Qe5#
      • 1...Qf8
        • 2.Re4#
        • 2.Qe5#
      • 1...Qxg4!
    • 1.Rd6?
      • 1...Qxg6
        • 2.Qf4#
      • 1...Qd3
        • 2.Qf4#
      • 1...Qd5
        • 2.Qf4#
      • 1...Qe4
        • 2.Rxe4#
      • 1...Qe6
        • 2.Qf4#
      • 1...Qd7
        • 2.Re4#
        • 2.Qf4#
        • 2.Qe5#
      • 1...Qc8
        • 2.Re4#
        • 2.Qf4#
        • 2.Qe5#
      • 1...Qf4
        • 2.Qxf4#
      • 1...Qa5
        • 2.Re4#
        • 2.Qf4#
      • 1...Qb5
        • 2.Re4#
        • 2.Qf4#
      • 1...Qc5
        • 2.Re4#
        • 2.Qf4#
      • 1...Qe5
        • 2.Qxe5#
      • 1...Qg5
        • 2.Re4#
      • 1...Qh5
        • 2.Re4#
        • 2.Qf4#
      • 1...Qf6
        • 2.Re4#
      • 1...Qf7
        • 2.Re4#
        • 2.Qe5#
      • 1...Qf8
        • 2.Re4#
        • 2.Qe5#
      • 1...Qxg4!
    • 1.Rd7?
      • 1...Qxg6
        • 2.Qf4#
      • 1...Qxd7
        • 2.Qf4#
      • 1...Qd3
        • 2.Qf4#
      • 1...Qd5
        • 2.Qf4#
      • 1...Qe4
        • 2.Rxe4#
      • 1...Qe6
        • 2.Qf4#
      • 1...Qf4
        • 2.Qxf4#
      • 1...Qa5
        • 2.Re4#
        • 2.Qf4#
      • 1...Qb5
        • 2.Re4#
        • 2.Qf4#
      • 1...Qc5
        • 2.Re4#
        • 2.Qf4#
      • 1...Qe5
        • 2.Qxe5#
      • 1...Qg5
        • 2.Re4#
      • 1...Qh5
        • 2.Re4#
        • 2.Qf4#
      • 1...Qf6
        • 2.Re4#
      • 1...Qf7
        • 2.Re4#
        • 2.Qe5#
      • 1...Qf8
        • 2.Re4#
        • 2.Qe5#
      • 1...Qxg4!
    • 1.Rd8?
      • 1...Qxg6
        • 2.Qf4#
      • 1...Qd3
        • 2.Qf4#
      • 1...Qd7
        • 2.Qf4#
      • 1...Qd5
        • 2.Qf4#
      • 1...Qe4
        • 2.Rxe4#
      • 1...Qe6
        • 2.Qf4#
      • 1...Qc8
        • 2.Re4#
        • 2.Qf4#
        • 2.Qe5#
      • 1...Qf4
        • 2.Qxf4#
      • 1...Qa5
        • 2.Re4#
        • 2.Qf4#
      • 1...Qb5
        • 2.Re4#
        • 2.Qf4#
      • 1...Qc5
        • 2.Re4#
        • 2.Qf4#
      • 1...Qe5
        • 2.Qxe5#
      • 1...Qg5
        • 2.Re4#
      • 1...Qh5
        • 2.Re4#
        • 2.Qf4#
      • 1...Qf6
        • 2.Re4#
      • 1...Qf7
        • 2.Re4#
        • 2.Qe5#
      • 1...Qf8
        • 2.Re4#
        • 2.Qe5#
      • 1...Qxg4!
    • 1.Rgf4?
      • threat
        • 2.Qxf3#
      • 1...Qxg6
        • 2.Rxf3#
      • 1...Qxf4
        • 2.Qxf4#
      • 1...Qh3
        • 2.Rxf3#
        • 2.Rfe4#
      • 1...Qe4
        • 2.Sg4#
        • 2.Rfxe4#
      • 1...Qg4
        • 2.Sxg4#
      • 1...Qd5
        • 2.Sg4#
      • 1...Qg5
        • 2.Rxf3#
        • 2.Rfe4#
      • 1...Qh5
        • 2.Rfe4#
      • 1...Qd3!
    • 1.Rh4?
      • 1...Qd3
        • 2.Qf4#
        • 2.Qg5#
      • 1...Qh3
        • 2.Rhe4#
        • 2.Qf4#
        • 2.Qe5#
        • 2.Qg5#
      • 1...Qe4
        • 2.Rhxe4#
      • 1...Qg4
        • 2.Sxg4#
      • 1...Qe6
        • 2.Qf4#
        • 2.Qg5#
      • 1...Qd7
        • 2.Rhe4#
        • 2.Qf4#
        • 2.Qe5#
        • 2.Qg5#
      • 1...Qc8
        • 2.Rhe4#
        • 2.Qf4#
        • 2.Qe5#
        • 2.Qg5#
      • 1...Qf4
        • 2.Qxf4#
      • 1...Qa5
        • 2.Sg4#
        • 2.Rhe4#
        • 2.Qf4#
      • 1...Qb5
        • 2.Sg4#
        • 2.Rhe4#
        • 2.Qf4#
      • 1...Qc5
        • 2.Sg4#
        • 2.Rhe4#
        • 2.Qf4#
      • 1...Qd5
        • 2.Sg4#
        • 2.Qf4#
      • 1...Qe5
        • 2.Sg4#
        • 2.Qxe5#
      • 1...Qg5
        • 2.Rhe4#
        • 2.Qxg5#
      • 1...Qh5
        • 2.Rhe4#
        • 2.Qf4#
      • 1...Qf6
        • 2.Sg4#
        • 2.Rhe4#
      • 1...Qf7
        • 2.Sg4#
        • 2.Rhe4#
        • 2.Qe5#
      • 1...Qf8
        • 2.Sg4#
        • 2.Rhe4#
        • 2.Qe5#
      • 1...Qxg6!
    • 1.Rg5?
      • 1...Qxg6
        • 2.Sg4#
        • 2.Qf4#
      • 1...Qxg5
        • 2.Qxg5#
      • 1...Qd3
        • 2.Qf4#
      • 1...Qh3
        • 2.Re5#
        • 2.Qf4#
        • 2.Qe5#
      • 1...Qg4
        • 2.Sxg4#
      • 1...Qe6
        • 2.Qf4#
      • 1...Qd7
        • 2.Re5#
        • 2.Qf4#
        • 2.Qe5#
      • 1...Qc8
        • 2.Re5#
        • 2.Qf4#
        • 2.Qe5#
      • 1...Qf4
        • 2.Qxf4#
      • 1...Qa5
        • 2.Sg4#
        • 2.Qf4#
      • 1...Qb5
        • 2.Sg4#
        • 2.Qf4#
      • 1...Qc5
        • 2.Sg4#
        • 2.Qf4#
      • 1...Qd5
        • 2.Sg4#
        • 2.Qf4#
      • 1...Qe5
        • 2.Sg4#
        • 2.Rxe5#
        • 2.Qxe5#
      • 1...Qf6
        • 2.Sg4#
      • 1...Qf7
        • 2.Sg4#
        • 2.Re5#
        • 2.Qe5#
      • 1...Qf8
        • 2.Sg4#
        • 2.Re5#
        • 2.Qe5#
      • 1...Qe4!
    • 1.Qh2?
      • 1...Qxg4+
        • 2.Sxg4#
      • 1...Qxg6
        • 2.Qf4#
      • 1...Qd3
        • 2.Qf4#
      • 1...Qe4
        • 2.Rgxe4#
      • 1...Qe6
        • 2.Qf4#
      • 1...Qd7
        • 2.Rge4#
        • 2.Qf4#
        • 2.Qe5#
      • 1...Qc8
        • 2.Rge4#
        • 2.Qf4#
        • 2.Qe5#
      • 1...Qf4
        • 2.Qxf4#
      • 1...Qa5
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qb5
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qc5
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qd5
        • 2.Qf4#
      • 1...Qe5
        • 2.Qxe5#
      • 1...Qh5
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qf6
        • 2.Rge4#
      • 1...Qf7
        • 2.Rge4#
        • 2.Qe5#
      • 1...Qf8
        • 2.Rge4#
        • 2.Qe5#
      • 1...Qg5!
    • 1.Qe5+?
      • 1...Qe4
        • 2.Rgxe4#
        • 2.Qxe4#
      • 1...Qxe5!
    • 1.Qc7?
      • 1...Qxg4+
        • 2.Sxg4#
      • 1...Qxg6
        • 2.Qf4#
      • 1...Qd3
        • 2.Qf4#
      • 1...Qe4
        • 2.Rgxe4#
      • 1...Qe6
        • 2.Qf4#
      • 1...Qd7
        • 2.Rge4#
        • 2.Qf4#
        • 2.Qe5#
      • 1...Qc8
        • 2.Rge4#
        • 2.Qf4#
        • 2.Qe5#
      • 1...Qf4
        • 2.Qxf4#
      • 1...Qa5
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qb5
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qc5
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qd5
        • 2.Qf4#
      • 1...Qe5
        • 2.Qxe5#
      • 1...Qh5
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qf6
        • 2.Rge4#
      • 1...Qf7
        • 2.Rge4#
        • 2.Qe5#
      • 1...Qf8
        • 2.Rge4#
        • 2.Qe5#
      • 1...Qg5!
    • 1.Qb8?
      • 1...Qxg4+
        • 2.Sxg4#
      • 1...Qxg6
        • 2.Qf4#
      • 1...Qd3
        • 2.Qf4#
      • 1...Qe4
        • 2.Rgxe4#
      • 1...Qe6
        • 2.Qf4#
      • 1...Qd7
        • 2.Rge4#
        • 2.Qf4#
        • 2.Qe5#
      • 1...Qc8
        • 2.Rge4#
        • 2.Qf4#
        • 2.Qe5#
      • 1...Qf4
        • 2.Qxf4#
      • 1...Qa5
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qb5
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qc5
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qd5
        • 2.Qf4#
      • 1...Qe5
        • 2.Qxe5#
      • 1...Qh5
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qf6
        • 2.Rge4#
      • 1...Qf7
        • 2.Rge4#
        • 2.Qe5#
      • 1...Qf8
        • 2.Rge4#
        • 2.Qe5#
      • 1...Qg5!
  • Keys
    • 1.Qd6!
      • 1...Qxg4+
        • 2.Sxg4#
      • 1...Qxg6
        • 2.Qf4#
      • 1...Qd3
        • 2.Qf4#
      • 1...Qe4
        • 2.Rdxe4#
        • 2.Rgxe4#
      • 1...Qe6
        • 2.Qf4#
        • 2.Qxe6#
      • 1...Qd7
        • 2.Rde4#
        • 2.Rge4#
        • 2.Qf4#
        • 2.Qe5#
      • 1...Qc8
        • 2.Rde4#
        • 2.Rge4#
        • 2.Qf4#
        • 2.Qe5#
      • 1...Qf4
        • 2.Qxf4#
      • 1...Qa5
        • 2.Rde4#
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qb5
        • 2.Rde4#
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qc5
        • 2.Rde4#
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qd5
        • 2.Qf4#
      • 1...Qe5
        • 2.Qxe5#
      • 1...Qg5
        • 2.Re4#
      • 1...Qh5
        • 2.Rde4#
        • 2.Rge4#
        • 2.Qf4#
      • 1...Qf6
        • 2.Rde4#
        • 2.Rge4#
      • 1...Qf7
        • 2.Rde4#
        • 2.Rge4#
        • 2.Qe5#
      • 1...Qf8
        • 2.Rde4#
        • 2.Rge4#
        • 2.Qe5#
        • 2.Qe6#

FEATURES


  • Static
    • TYPE = MUTATE
    • CHANGED MATES = 1
    • ADDED MATES = 0
    • REMOVED MATES = 3
  • Sets
    • Q(e);N_GUARD::QAB1(E)
    • Q(e);N_GUARD::R1(G),XQ(e)
    • Q(e);P_PINQ(E),XR(G)::S(C),XQ(e)
    • Q(e);N_GUARD,XP(H)::QAB1(E)
    • Q(e);N_GUARD::QAB1(E),XQ(e)
    • Q(e);N_GUARD::QAR2(E),XQ(e)
    • Q(e);N_GUARD::R1(G)
  • Tries
    • Try
      • K(B);P-FLIGHT
      • Vars
        • Q(e);XR(G)::S(C),XQ(e)
        • Q(e);N_GUARD,XP(H)::QAB1(E)
        • Q(e);N_GUARD::R1(G),XQ(e)
        • Q(e);N_GUARD::QAB1(E)
        • Q(e);N_GUARD::QAB1(E),XQ(e)
        • Q(e);N_GUARD::QAR2(E),XQ(e)
        • Q(e);N_GUARD::R1(G)
      • Refutation
        • Q(e);CHECK
    • Try
      • S(C);
      • Threat
        • DUALS(2)
      • Refutation
        • Q(e);P_PINQ(E),XR(G)
    • Try
      • S(C);
      • Threat
        • DUALS(2)
      • Vars
        • K(b);N_SPINP(c),S_FLIGHT::QAB1(E)
      • Refutation
        • Q(e);P_PINQ(E),XR(G)
    • Try
      • S(C);
      • Threat
        • DUALS(2)
      • Refutation
        • Q(e);P_PINQ(E),XR(G)
    • Try
      • R(F);
      • Threat
        • R1(F)
      • Vars
        • Q(e);N_GUARD::QAB1(E)
      • Refutation
        • K(b);N_SPINP(c),S_FLIGHT,XR(F)
    • Try
      • R(F);CHECK
      • Vars
        • Q(e);XR(F)::QAB1(E)
      • Refutation
        • P(d);XR(F)
    • Try
      • R(F);
      • Vars
        • Q(e);N_GUARD,XP(H)::QAB1(E)
        • Q(e);N_GUARD,XR(F)::QAB1(E)
        • Q(e);N_GUARD::QAB1(E)
        • Q(e);N_GUARD::R1(G),XQ(e)
        • Q(e);N_GUARD::QAB1(E),XQ(e)
        • Q(e);N_GUARD::QAR2(E),XQ(e)
        • Q(e);N_GUARD::R1(G)
      • Refutation
        • Q(e);P_PINQ(E),XR(G)
    • Try
      • R(F);
      • Vars
        • Q(e);N_GUARD,XP(H)::QAB1(E)
        • Q(e);N_GUARD::QAB1(E)
        • Q(e);N_GUARD::R1(G),XQ(e)
        • Q(e);N_GUARD::QAB1(E),XQ(e)
        • Q(e);N_GUARD::QAR2(E),XQ(e)
        • Q(e);N_GUARD::R1(G)
      • Refutation
        • Q(e);P_PINQ(E),XR(G)
    • Try
      • R(F);
      • Vars
        • Q(e);N_GUARD,XP(H)::QAB1(E)
        • Q(e);N_GUARD,XR(F)::QAB1(E)
        • Q(e);N_GUARD::QAB1(E)
        • Q(e);N_GUARD::R1(G),XQ(e)
        • Q(e);N_GUARD::QAB1(E),XQ(e)
        • Q(e);N_GUARD::QAR2(E),XQ(e)
        • Q(e);N_GUARD::R1(G)
      • Refutation
        • Q(e);P_PINQ(E),XR(G)
    • Try
      • R(F);
      • Vars
        • Q(e);N_GUARD,XP(H)::QAB1(E)
        • Q(e);N_GUARD::QAB1(E)
        • Q(e);N_GUARD::R1(G),XQ(e)
        • Q(e);N_GUARD::QAB1(E),XQ(e)
        • Q(e);N_GUARD::QAR2(E),XQ(e)
        • Q(e);N_GUARD::R1(G)
      • Refutation
        • Q(e);P_PINQ(E),XR(G)
    • Try
      • R(G);
      • Threat
        • QAR1(E),XP(c)
      • Vars
        • Q(e);N_GUARD,P_PINQ(E),XP(H)::R1(G),XP(c)
        • Q(e);OGATE,XR(G)::QAB1(E),XQ(e)
        • Q(e);N_GUARD,P_PINQ(E)::S(C),XQ(e)
        • Q(e);N_GUARD::S(C)
        • Q(e);N_GUARD::R1(G)
      • Refutation
        • Q(e);
    • Try
      • R(G);
      • Vars
        • Q(e);N_GUARD::R1(G),XQ(e)
        • Q(e);N_GUARD,P_PINQ(E)::S(C),XQ(e)
        • Q(e);N_GUARD::QAB1(E),XQ(e)
      • Refutation
        • Q(e);P_PINQ(E),XP(H)
    • Try
      • R(G);
      • Vars
        • Q(e);OGATE,P_PINQ(E),XR(G)::QAB(E),XQ(e)
        • Q(e);N_GUARD::QAB1(E)
        • Q(e);N_GUARD,P_PINQ(E)::S(C),XQ(e)
        • Q(e);N_GUARD::QAB1(E),XQ(e)
        • Q(e);N_GUARD::S(C)
      • Refutation
        • Q(e);
    • Try
      • Q(E);N_PINP(c)
      • Vars
        • Q(e);CHECK,XR(G)::S(C),XQ(e)
        • Q(e);N_GUARD,P_PINR(G),XP(H)::QAB1(E)
        • Q(e);N_GUARD::QAB1(E)
        • Q(e);N_GUARD::R1(G),XQ(e)
        • Q(e);N_GUARD::QAB1(E),XQ(e)
        • Q(e);N_GUARD::QAR2(E),XQ(e)
        • Q(e);N_GUARD::R1(G)
      • Refutation
        • Q(e);P_PINR(G)
    • Try
      • Q(E);CHECK,N_PINP(c)
      • Refutation
        • Q(e);XQ(E)
    • Try
      • Q(E);N_PINP(c)
      • Vars
        • Q(e);CHECK,XR(G)::S(C),XQ(e)
        • Q(e);N_GUARD,P_PINR(G),XP(H)::QAB1(E)
        • Q(e);N_GUARD::QAB1(E)
        • Q(e);N_GUARD::R1(G),XQ(e)
        • Q(e);N_GUARD::QAB1(E),XQ(e)
        • Q(e);N_GUARD::QAR2(E),XQ(e)
        • Q(e);N_GUARD::R1(G)
      • Refutation
        • Q(e);P_PINR(G)
    • Try
      • Q(E);N_PINP(c)
      • Vars
        • Q(e);CHECK,XR(G)::S(C),XQ(e)
        • Q(e);N_GUARD,P_PINR(G),XP(H)::QAB1(E)
        • Q(e);N_GUARD::QAB1(E)
        • Q(e);N_GUARD::R1(G),XQ(e)
        • Q(e);N_GUARD::QAB1(E),XQ(e)
        • Q(e);N_GUARD::QAR2(E),XQ(e)
        • Q(e);N_GUARD::R1(G)
      • Refutation
        • Q(e);P_PINR(G)
  • Actual
    • Q(E);N_PINP(c)
    • Vars
      • Q(e);CHECK,XR(G)::S(C),XQ(e)
      • Q(e);N_GUARD,P_PINR(G),XP(H)::QAB1(E)
      • Q(e);N_GUARD::QAB1(E)
      • Q(e);N_GUARD::QAB1(E),XQ(e)
      • Q(e);N_GUARD::QAR2(E),XQ(e)
      • Q(e);N_GUARD,P_PINR(G)::R1(F)


Developed and maintained by Brian Stephenson.
Implemented with HTML5, MySQL, Perl (with, inter alia, CGI::Simple, HTML::Template & XML::LibXML) & CSS/Javascript (jQuery, Bootstrap & DataTables).