public boolean makePass(SkiPass sp) {
        if (sp.isBlocked()) {
            return false;
        }

        if (isExpired(sp)) {
            sp.block();
            return false;
        }

        if (!isActivated(sp)) {
            return false;
        }

        if (!system.validate(sp)) {
            sp.block();
            return false;
        }

        if (sp.pass()) {
            return true;
        } else {
            sp.block(); // card is already empty
            return false;
        }
    }