'''
Created on 02-Mar-2021

@author: bthakur
'''

import numpy as np
import random
import inspect
import traceback

from sympy import (simplify, sympify, log, latex, Symbol, symbols, 
                   UnevaluatedExpr as ueval)

from xv.km.util import latex_fraction
from xv.km.kelements import KPrintElement
        
from ..helper import BaseHelper
from xv.km.managers import BaseManager
from xv.km.kelements import KProblemTemplate

# _amc8_manager
# Amc8Manager
        
class Amc8Manager(BaseManager):
    '''
    Example:
        ke = Amc8Manager()
        ke.getRandomProblem()
        ke.getRandomProblem(problem_type = 0)
        ke.getRandomProblem(problem_type = 1)
        ...
        ke.printProblem()
        ke.printAnswer()
        ke.printSolution()

        ke.printProblemTypes()
    '''    
    def __new__(cls, *args, **kwargs):
        instance = super(Amc8Manager, cls).__new__(cls, *args, **kwargs)
        for base_class in Amc8Manager.__bases__:
            base_class.__init__(instance, *args, **kwargs)
        return instance
    
    def __init__(self, *args, **kwargs):
        self.base_helper = BaseHelper(**kwargs)
        pass

    def _TEMPLATE_CUSTOM_QUESTIONS(self, keywords, **kwargs):
        
        from ..storeddata import Amc8StoredQuestions
        
        stored_questions = Amc8StoredQuestions(verbose = self.verbose)
        result = stored_questions.get_random_question(keywords)

        problemTemplate = KProblemTemplate()
        problemTemplate.problem_type = kwargs.get('problem_type')
        
        if result is None:
            prob_s = f"""
            Failed to get questions
            keywords = {keywords}
            """
            problemTemplate.add_problem(prob_s.strip(), 'text/html')
            return problemTemplate
            
        
        prob_s = f"""
        {result['prob_s']}
        """
        problemTemplate.add_problem(prob_s.strip(), 'text/html')

        soln_s = f"""
        {result['soln_s']}
        """
        problemTemplate.add_solution(soln_s.strip(), 'text/html')

        answer_s = f"""
        {result['answer_s']}
        """
        problemTemplate.add_answer(answer_s.strip(), 'text/html')
        
        return problemTemplate
        pass


    def _init_problem_types(self, *args, **kwargs):
        self._append_problem_types([
            '_problem_custom_questions_2022_1',
            '_problem_custom_questions_2022_2',
            '_problem_custom_questions_2022_3',
            '_problem_custom_questions_2022_4',
            '_problem_custom_questions_2022_5',
            '_problem_custom_questions_2022_6',
            '_problem_custom_questions_2022_7',
            '_problem_custom_questions_2022_8',
            '_problem_custom_questions_2022_9',
            '_problem_custom_questions_2022_10',
            '_problem_custom_questions_2022_11',
            '_problem_custom_questions_2022_12',
            '_problem_custom_questions_2022_13',
            '_problem_custom_questions_2022_14',
            '_problem_custom_questions_2022_15',
            '_problem_custom_questions_2022_16',
            '_problem_custom_questions_2022_17',
            '_problem_custom_questions_2022_18',
            '_problem_custom_questions_2022_19',
            '_problem_custom_questions_2022_20',
            '_problem_custom_questions_2022_21',
            '_problem_custom_questions_2022_22',
            '_problem_custom_questions_2022_23',
            '_problem_custom_questions_2022_24',
            '_problem_custom_questions_2022_25',
            '_problem_custom_questions_2020_1',
            '_problem_custom_questions_2020_2',
            '_problem_custom_questions_2020_3',
            '_problem_custom_questions_2020_4',
            '_problem_custom_questions_2020_5',
            '_problem_custom_questions_2020_6',
            '_problem_custom_questions_2020_7',
            '_problem_custom_questions_2020_8',
            '_problem_custom_questions_2020_9',
            '_problem_custom_questions_2020_10',
            '_problem_custom_questions_2020_11',
            '_problem_custom_questions_2020_12',
            '_problem_custom_questions_2020_13',
            '_problem_custom_questions_2020_14',
            '_problem_custom_questions_2020_15',
            '_problem_custom_questions_2020_16',
            '_problem_custom_questions_2020_17',
            '_problem_custom_questions_2020_18',
            '_problem_custom_questions_2020_19',
            '_problem_custom_questions_2020_20',
            '_problem_custom_questions_2020_21',
            '_problem_custom_questions_2020_22',
            '_problem_custom_questions_2020_23',
            '_problem_custom_questions_2020_24',
            '_problem_custom_questions_2020_25',
            '_problem_custom_questions_2018_1',
            '_problem_custom_questions_2018_2',
            '_problem_custom_questions_2018_3',
            '_problem_custom_questions_2018_4',
            '_problem_custom_questions_2018_5',
            '_problem_custom_questions_2018_6',
            '_problem_custom_questions_2018_7',
            '_problem_custom_questions_2018_8',
            '_problem_custom_questions_2018_9',
            '_problem_custom_questions_2018_10',
            '_problem_custom_questions_2018_11',
            '_problem_custom_questions_2018_12',
            '_problem_custom_questions_2018_13',
            '_problem_custom_questions_2018_14',
            '_problem_custom_questions_2018_15',
            '_problem_custom_questions_2018_16',
            '_problem_custom_questions_2018_17',
            '_problem_custom_questions_2018_18',
            '_problem_custom_questions_2018_19',
            '_problem_custom_questions_2018_20',
            '_problem_custom_questions_2018_21',
            '_problem_custom_questions_2018_22',
            '_problem_custom_questions_2018_23',
            '_problem_custom_questions_2018_24',
            '_problem_custom_questions_2018_25',
            '_problem_custom_questions_2016_1',
            '_problem_custom_questions_2016_2',
            '_problem_custom_questions_2016_3',
            '_problem_custom_questions_2016_4',
            '_problem_custom_questions_2016_5',
            '_problem_custom_questions_2016_6',
            '_problem_custom_questions_2016_7',
            '_problem_custom_questions_2016_8',
            '_problem_custom_questions_2016_9',
            '_problem_custom_questions_2016_10',
            '_problem_custom_questions_2016_11',
            '_problem_custom_questions_2016_12',
            '_problem_custom_questions_2016_13',
            '_problem_custom_questions_2016_14',
            '_problem_custom_questions_2016_15',
            '_problem_custom_questions_2016_16',
            '_problem_custom_questions_2016_17',
            '_problem_custom_questions_2016_18',
            '_problem_custom_questions_2016_19',
            '_problem_custom_questions_2016_20',
            '_problem_custom_questions_2016_21',
            '_problem_custom_questions_2016_22',
            '_problem_custom_questions_2016_23',
            '_problem_custom_questions_2016_24',
            '_problem_custom_questions_2016_25',
            '_problem_custom_questions_2014_1',
            '_problem_custom_questions_2014_2',
            '_problem_custom_questions_2014_3',
            '_problem_custom_questions_2014_4',
            '_problem_custom_questions_2014_5',
            '_problem_custom_questions_2014_6',
            '_problem_custom_questions_2014_7',
            '_problem_custom_questions_2014_8',
            '_problem_custom_questions_2014_9',
            '_problem_custom_questions_2014_10',
            '_problem_custom_questions_2014_11',
            '_problem_custom_questions_2014_12',
            '_problem_custom_questions_2014_13',
            '_problem_custom_questions_2014_14',
            '_problem_custom_questions_2014_15',
            '_problem_custom_questions_2014_16',
            '_problem_custom_questions_2014_17',
            '_problem_custom_questions_2014_18',
            '_problem_custom_questions_2014_19',
            '_problem_custom_questions_2014_20',
            '_problem_custom_questions_2014_21',
            '_problem_custom_questions_2014_22',
            '_problem_custom_questions_2014_23',
            '_problem_custom_questions_2014_24',
            '_problem_custom_questions_2014_25',
            
           
         ])
        pass

    def _problem_custom_questions_2022_1(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_1')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)
    
    def _problem_custom_questions_2022_2(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_2')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)
    
    def _problem_custom_questions_2022_3(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_3')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)
    
    def _problem_custom_questions_2022_4(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_4')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_5(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_5')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_6(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_6')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_7(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_7')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_8(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_8')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_9(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_9')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_10(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_10')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_11(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_11')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_12(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_12')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_13(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_13')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_14(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_14')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_15(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_15')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_16(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_16')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_17(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_17')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_18(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_18')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_19(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_19')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_20(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_20')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_21(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_21')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_22(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_22')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_23(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_23')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_24(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_24')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2022_25(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2022_25')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_1(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_1')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)
    
    def _problem_custom_questions_2020_2(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_2')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)
    
    def _problem_custom_questions_2020_3(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_3')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)
    
    def _problem_custom_questions_2020_4(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_4')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_5(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_5')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_6(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_6')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_7(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_7')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_8(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_8')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_9(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_9')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_10(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_10')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_11(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_11')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_12(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_12')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_13(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_13')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_14(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_14')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_15(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_15')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_16(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_16')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_17(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_17')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_18(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_18')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_19(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_19')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_20(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_20')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_21(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_21')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_22(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_22')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_23(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_23')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_24(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_24')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2020_25(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2020_25')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_1(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_1')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)
    
    def _problem_custom_questions_2018_2(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_2')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)
    
    def _problem_custom_questions_2018_3(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_3')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)
    
    def _problem_custom_questions_2018_4(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_4')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_5(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_5')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_6(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_6')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_7(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_7')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_8(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_8')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_9(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_9')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_10(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_10')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_11(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_11')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_12(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_12')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_13(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_13')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_14(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_14')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_15(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_15')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_16(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_16')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_17(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_17')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_18(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_18')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_19(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_19')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_20(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_20')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_21(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_21')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_22(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_22')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_23(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_23')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_24(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_24')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2018_25(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2018_25')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_1(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_1')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)
    
    def _problem_custom_questions_2016_2(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_2')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)
    
    def _problem_custom_questions_2016_3(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_3')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)
    
    def _problem_custom_questions_2016_4(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_4')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_5(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_5')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_6(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_6')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_7(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_7')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_8(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_8')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_9(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_9')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_10(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_10')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_11(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_11')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_12(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_12')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_13(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_13')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_14(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_14')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_15(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_15')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_16(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_16')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_17(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_17')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_18(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_18')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_19(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_19')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_20(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_20')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_21(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_21')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_22(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_22')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_23(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_23')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_24(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_24')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2016_25(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2016_25')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_1(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_1')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)
    
    def _problem_custom_questions_2014_2(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_2')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)
    
    def _problem_custom_questions_2014_3(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_3')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)
    
    def _problem_custom_questions_2014_4(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_4')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_5(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_5')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_6(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_6')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_7(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_7')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_8(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_8')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_9(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_9')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_10(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_10')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_11(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_11')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_12(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_12')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_13(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_13')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_14(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_14')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_15(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_15')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_16(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_16')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_17(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_17')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_18(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_18')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_19(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_19')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_20(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_20')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_21(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_21')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_22(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_22')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_23(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_23')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_24(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_24')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    def _problem_custom_questions_2014_25(self, *args, **kwargs):
        keywords = kwargs.get('keywords', '2014_25')
        return self._TEMPLATE_CUSTOM_QUESTIONS(keywords, **kwargs)

    
     
    
