UNPKG

sl-questionnaire

Version:
196 lines 29.4 kB
import { __decorate } from "tslib"; import { Injectable } from '@angular/core'; import { ResponseType, } from '../interfaces/questionnaire.type'; import * as i0 from "@angular/core"; let SlQuestionnaireService = class SlQuestionnaireService { constructor() { this.validate = (data) => { return (control) => { if (typeof data.validation == 'string') { return null; } if (!data.validation.required) { return null; } if (data.validation.regex) { const forbidden = this.testRegex(data.validation.regex, control.value); return forbidden ? null : { err: 'Invalid character found' }; } if (data.validation.IsNumber) { if (!control.value) { return { err: 'Number not entered' }; } const forbidden = !isNaN(control.value); return forbidden ? null : { err: 'Only numbers allowed' }; } if (data.validation.required) { if (!control.value) { return { err: 'Required field' }; } if (data.responseType == ResponseType.MULTISELECT) { return control.value.some((v) => v != '') ? null : { err: 'Select at least one option' }; } if (data.responseType == ResponseType.SLIDER) { let min = data.validation.min; let max = data.validation.max; return min <= control.value && control.value <= max ? null : { err: 'Selected value not within range' }; } } }; }; } testRegex(regexExpression, value) { const regex = new RegExp(regexExpression); return regex.test(value); } setSubmissionId(submissionId) { this._submissionId = submissionId; } getSubmissionId() { return this._submissionId; } mapSubmissionToAssessment(data) { const assessment = data.assessment; for (const evidence of assessment.evidences) { const validSubmission = assessment.submissions[evidence.externalId]; if (validSubmission) { evidence.notApplicable = validSubmission.notApplicable; if (evidence.notApplicable) { continue; } for (const section of evidence.sections) { for (const question of section.questions) { if (question.responseType === 'pageQuestions') { for (const questions of question.pageQuestions) { questions.value = questions.responseType !== 'matrix' ? validSubmission.answers[questions._id].value : this.constructMatrixValue(validSubmission, questions, evidence.externalId); questions.remarks = validSubmission.answers[questions._id] ? validSubmission.answers[questions._id].remarks : ''; questions.fileName = validSubmission.answers[questions._id] ? validSubmission.answers[questions._id].fileName : []; } } else if (validSubmission.answers && validSubmission.answers[question._id]) { question.value = question.responseType !== 'matrix' ? validSubmission.answers[question._id].value : this.constructMatrixValue(validSubmission, question, evidence.externalId); question.remarks = validSubmission.answers[question._id] ? validSubmission.answers[question._id].remarks : ''; question.fileName = validSubmission.answers[question._id] ? validSubmission.answers[question._id].fileName : []; } } } } } this.setSubmissionId(assessment.submissionId); return data; } constructMatrixValue(validSubmission, matrixQuestion, ecmId) { matrixQuestion.value = []; if (validSubmission.answers && validSubmission.answers[matrixQuestion._id] && validSubmission.answers[matrixQuestion._id].value) { for (const answer of validSubmission.answers[matrixQuestion._id].value) { matrixQuestion.value.push(JSON.parse(JSON.stringify(matrixQuestion.instanceQuestions))); } matrixQuestion.value.forEach((instance, index) => { instance.forEach((question, instanceIndex) => { if (validSubmission.answers[matrixQuestion._id] && validSubmission.answers[matrixQuestion._id].value[index][question._id]) { question.value = validSubmission.answers[matrixQuestion._id].value[index][question._id].value; question.remarks = validSubmission.answers[matrixQuestion._id].value[index][question._id].remarks; question.fileName = validSubmission.answers[matrixQuestion._id].value[index][question._id].fileName; } }); }); return matrixQuestion.value; } else { return []; } } getEvidenceData(evidence, formValues) { let sections = evidence.sections; let answers = this.getSectionData(sections, formValues); let payloadData = { externalId: evidence.externalId, answers: answers, startTime: evidence.startTime, endTime: Date.now(), }; return payloadData; } getSectionData(sections, formValues) { let answers = {}; for (let index = 0; index < sections.length; index++) { answers = Object.assign(Object.assign({}, answers), this.createpayload(sections[index].questions, formValues)); } return answers; } createpayload(questions, formValues) { let answers = {}; for (let index = 0; index < questions.length; index++) { let currentQuestion = questions[index]; if (currentQuestion.responseType == 'pageQuestions') { answers = Object.assign(Object.assign({}, answers), this.createpayload(currentQuestion.pageQuestions, formValues)); continue; } if (currentQuestion.responseType == 'matrix') { for (let index = 0; index < currentQuestion.value.length; index++) { formValues[currentQuestion._id][index] = this.createpayload(currentQuestion.value[index], formValues[currentQuestion._id][index]); } } let perQuestionData = this.formatToPayload(currentQuestion, formValues); answers[currentQuestion._id] = perQuestionData; } return answers; } formatToPayload(currentQuestion, formValues) { let value = currentQuestion.responseType != 'matrix' ? currentQuestion.value : formValues[currentQuestion._id]; return { qid: currentQuestion._id, value: value, remarks: currentQuestion.remarks, fileName: currentQuestion.fileName, gpsLocation: '', payload: { question: currentQuestion.question, labels: formValues[currentQuestion._id], responseType: currentQuestion.responseType, filesNotUploaded: [], }, startTime: currentQuestion.startTime, endTime: currentQuestion.endTime, criteriaId: currentQuestion.payload.criteriaId, responseType: currentQuestion.responseType, evidenceMethod: currentQuestion.evidenceMethod, rubricLevel: '', }; } }; SlQuestionnaireService.ɵprov = i0.ɵɵdefineInjectable({ factory: function SlQuestionnaireService_Factory() { return new SlQuestionnaireService(); }, token: SlQuestionnaireService, providedIn: "root" }); SlQuestionnaireService = __decorate([ Injectable({ providedIn: 'root', }) ], SlQuestionnaireService); export { SlQuestionnaireService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2wtcXVlc3Rpb25uYWlyZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vc2wtcXVlc3Rpb25uYWlyZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9zbC1xdWVzdGlvbm5haXJlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUdMLFlBQVksR0FDYixNQUFNLGtDQUFrQyxDQUFDOztBQUsxQyxJQUFhLHNCQUFzQixHQUFuQyxNQUFhLHNCQUFzQjtJQUVqQztRQUNBLGFBQVEsR0FBRyxDQUFDLElBQWMsRUFBZSxFQUFFO1lBQ3pDLE9BQU8sQ0FBQyxPQUF3QixFQUFpQyxFQUFFO2dCQUNqRSxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxRQUFRLEVBQUU7b0JBQ3RDLE9BQU8sSUFBSSxDQUFDO2lCQUNiO2dCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTtvQkFDN0IsT0FBTyxJQUFJLENBQUM7aUJBQ2I7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRTtvQkFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3ZFLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLHlCQUF5QixFQUFFLENBQUM7aUJBQzlEO2dCQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7b0JBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO3dCQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLENBQUM7cUJBQ3RDO29CQUNELE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBSyxD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Q2pCLENBQUM7SUFFRCxlQUFlLENBQUMsZUFBZSxFQUFFLFVBQVU7UUFDekMsSUFBSSxLQUFLLEdBQ1AsZUFBZSxDQUFDLFlBQVksSUFBSSxRQUFRO1lBQ3RDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSztZQUN2QixDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxPQUFPO1lBQ0wsR0FBRyxFQUFFLGVBQWUsQ0FBQyxHQUFHO1lBQ3hCLEtBQUssRUFBRSxLQUFLO1lBQ1osT0FBTyxFQUFFLGVBQWUsQ0FBQyxPQUFPO1lBQ2hDLFFBQVEsRUFBRSxlQUFlLENBQUMsUUFBUTtZQUNsQyxXQUFXLEVBQUUsRUFBRTtZQUNmLE9BQU8sRUFBRTtnQkFDUCxRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQVE7Z0JBQ2xDLE1BQU0sRUFBRSxVQUFVLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQztnQkFDdkMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxZQUFZO2dCQUMxQyxnQkFBZ0IsRUFBRSxFQUFFO2FBQ3JCO1lBQ0QsU0FBUyxFQUFFLGVBQWUsQ0FBQyxTQUFTO1lBQ3BDLE9BQU8sRUFBRSxlQUFlLENBQUMsT0FBTztZQUNoQyxVQUFVLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxVQUFVO1lBQzlDLFlBQVksRUFBRSxlQUFlLENBQUMsWUFBWTtZQUMxQyxjQUFjLEVBQUUsZUFBZSxDQUFDLGNBQWM7WUFDOUMsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFBOztBQXhPWSxzQkFBc0I7SUFIbEMsVUFBVSxDQUFDO1FBQ1YsVUFBVSxFQUFFLE1BQU07S0FDbkIsQ0FBQztHQUNXLHNCQUFzQixDQXdPbEM7U0F4T1ksc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEV2aWRlbmNlLFxuICBRdWVzdGlvbixcbiAgUmVzcG9uc2VUeXBlLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3F1ZXN0aW9ubmFpcmUudHlwZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTbFF1ZXN0aW9ubmFpcmVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfc3VibWlzc2lvbklkOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgdmFsaWRhdGUgPSAoZGF0YTogUXVlc3Rpb24pOiBWYWxpZGF0b3JGbiA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCA9PiB7XG4gICAgICBpZiAodHlwZW9mIGRhdGEudmFsaWRhdGlvbiA9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghZGF0YS52YWxpZGF0aW9uLnJlcXVpcmVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEudmFsaWRhdGlvbi5yZWdleCkge1xuICAgICAgICBjb25zdCBmb3JiaWRkZW4gPSB0aGlzLnRlc3RSZWdleChkYXRhLnZhbGlkYXRpb24ucmVnZXgsIGNvbnRyb2wudmFsdWUpO1xuICAgICAgICByZXR1cm4gZm9yYmlkZGVuID8gbnVsbCA6IHsgZXJyOiAnSW52YWxpZCBjaGFyYWN0ZXIgZm91bmQnIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnZhbGlkYXRpb24uSXNOdW1iZXIpIHtcbiAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZXJyOiAnTnVtYmVyIG5vdCBlbnRlcmVkJyB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvcmJpZGRlbiA9ICFpc05hTihjb250cm9sLnZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGZvcmJpZGRlbiA/IG51bGwgOiB7IGVycjogJ09ubHkgbnVtYmVycyBhbGxvd2VkJyB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS52YWxpZGF0aW9uLnJlcXVpcmVkKSB7XG4gICAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgIHJldHVybiB7IGVycjogJ1JlcXVpcmVkIGZpZWxkJyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEucmVzcG9uc2VUeXBlID09IFJlc3BvbnNlVHlwZS5NVUxUSVNFTEVDVCkge1xuICAgICAgICAgIHJldHVybiBjb250cm9sLnZhbHVlLnNvbWUoKHYpID0+IHYgIT0gJycpXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDogeyBlcnI6ICdTZWxlY3QgYXQgbGVhc3Qgb25lIG9wdGlvbicgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLnJlc3BvbnNlVHlwZSA9PSBSZXNwb25zZVR5cGUuU0xJREVSKSB7XG4gICAgICAgICAgbGV0IG1pbiA9IGRhdGEudmFsaWRhdGlvbi5taW47XG4gICAgICAgICAgbGV0IG1heCA9IGRhdGEudmFsaWRhdGlvbi5tYXg7XG4gICAgICAgICAgcmV0dXJuIG1pbiA8PSBjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUgPD0gbWF4XG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDogeyBlcnI6ICdTZWxlY3RlZCB2YWx1ZSAgbm90IHdpdGhpbiByYW5nZScgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgcHVibGljIHRlc3RSZWdleChyZWdleEV4cHJlc3Npb246IFJlZ0V4cCwgdmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleEV4cHJlc3Npb24pO1xuICAgIHJldHVybiByZWdleC50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIHNldFN1Ym1pc3Npb25JZChzdWJtaXNzaW9uSWQ6IGFueSkge1xuICAgIHRoaXMuX3N1Ym1pc3Npb25JZCA9IHN1Ym1pc3Npb25JZDtcbiAgfVxuICBnZXRTdWJtaXNzaW9uSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1Ym1pc3Npb25JZDtcbiAgfVxuXG4gIG1hcFN1Ym1pc3Npb25Ub0Fzc2Vzc21lbnQoZGF0YSkge1xuICAgIGNvbnN0IGFzc2Vzc21lbnQgPSBkYXRhLmFzc2Vzc21lbnQ7XG5cbiAgICBmb3IgKGNvbnN0IGV2aWRlbmNlIG9mIGFzc2Vzc21lbnQuZXZpZGVuY2VzKSB7XG4gICAgICBjb25zdCB2YWxpZFN1Ym1pc3Npb24gPSBhc3Nlc3NtZW50LnN1Ym1pc3Npb25zW2V2aWRlbmNlLmV4dGVybmFsSWRdO1xuICAgICAgaWYgKHZhbGlkU3VibWlzc2lvbikge1xuICAgICAgICBldmlkZW5jZS5ub3RBcHBsaWNhYmxlID0gdmFsaWRTdWJtaXNzaW9uLm5vdEFwcGxpY2FibGU7XG4gICAgICAgIGlmIChldmlkZW5jZS5ub3RBcHBsaWNhYmxlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgZXZpZGVuY2Uuc2VjdGlvbnMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHNlY3Rpb24ucXVlc3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAocXVlc3Rpb24ucmVzcG9uc2VUeXBlID09PSAncGFnZVF1ZXN0aW9ucycpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBxdWVzdGlvbnMgb2YgcXVlc3Rpb24ucGFnZVF1ZXN0aW9ucykge1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy52YWx1ZSA9XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbnMucmVzcG9uc2VUeXBlICE9PSAnbWF0cml4J1xuICAgICAgICAgICAgICAgICAgICA/IHZhbGlkU3VibWlzc2lvbi5hbnN3ZXJzW3F1ZXN0aW9ucy5faWRdLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5jb25zdHJ1Y3RNYXRyaXhWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkU3VibWlzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2aWRlbmNlLmV4dGVybmFsSWRcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5yZW1hcmtzID0gdmFsaWRTdWJtaXNzaW9uLmFuc3dlcnNbcXVlc3Rpb25zLl9pZF1cbiAgICAgICAgICAgICAgICAgID8gdmFsaWRTdWJtaXNzaW9uLmFuc3dlcnNbcXVlc3Rpb25zLl9pZF0ucmVtYXJrc1xuICAgICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMuZmlsZU5hbWUgPSB2YWxpZFN1Ym1pc3Npb24uYW5zd2Vyc1txdWVzdGlvbnMuX2lkXVxuICAgICAgICAgICAgICAgICAgPyB2YWxpZFN1Ym1pc3Npb24uYW5zd2Vyc1txdWVzdGlvbnMuX2lkXS5maWxlTmFtZVxuICAgICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgdmFsaWRTdWJtaXNzaW9uLmFuc3dlcnMgJiZcbiAgICAgICAgICAgICAgdmFsaWRTdWJtaXNzaW9uLmFuc3dlcnNbcXVlc3Rpb24uX2lkXVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlID1cbiAgICAgICAgICAgICAgICBxdWVzdGlvbi5yZXNwb25zZVR5cGUgIT09ICdtYXRyaXgnXG4gICAgICAgICAgICAgICAgICA/IHZhbGlkU3VibWlzc2lvbi5hbnN3ZXJzW3F1ZXN0aW9uLl9pZF0udmFsdWVcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5jb25zdHJ1Y3RNYXRyaXhWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICB2YWxpZFN1Ym1pc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgZXZpZGVuY2UuZXh0ZXJuYWxJZFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBxdWVzdGlvbi5yZW1hcmtzID0gdmFsaWRTdWJtaXNzaW9uLmFuc3dlcnNbcXVlc3Rpb24uX2lkXVxuICAgICAgICAgICAgICAgID8gdmFsaWRTdWJtaXNzaW9uLmFuc3dlcnNbcXVlc3Rpb24uX2lkXS5yZW1hcmtzXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgICAgcXVlc3Rpb24uZmlsZU5hbWUgPSB2YWxpZFN1Ym1pc3Npb24uYW5zd2Vyc1txdWVzdGlvbi5faWRdXG4gICAgICAgICAgICAgICAgPyB2YWxpZFN1Ym1pc3Npb24uYW5zd2Vyc1txdWVzdGlvbi5faWRdLmZpbGVOYW1lXG4gICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNldFN1Ym1pc3Npb25JZChhc3Nlc3NtZW50LnN1Ym1pc3Npb25JZCk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBjb25zdHJ1Y3RNYXRyaXhWYWx1ZSh2YWxpZFN1Ym1pc3Npb24sIG1hdHJpeFF1ZXN0aW9uLCBlY21JZCkge1xuICAgIG1hdHJpeFF1ZXN0aW9uLnZhbHVlID0gW107XG4gICAgaWYgKFxuICAgICAgdmFsaWRTdWJtaXNzaW9uLmFuc3dlcnMgJiZcbiAgICAgIHZhbGlkU3VibWlzc2lvbi5hbnN3ZXJzW21hdHJpeFF1ZXN0aW9uLl9pZF0gJiZcbiAgICAgIHZhbGlkU3VibWlzc2lvbi5hbnN3ZXJzW21hdHJpeFF1ZXN0aW9uLl9pZF0udmFsdWVcbiAgICApIHtcbiAgICAgIGZvciAoY29uc3QgYW5zd2VyIG9mIHZhbGlkU3VibWlzc2lvbi5hbnN3ZXJzW21hdHJpeFF1ZXN0aW9uLl9pZF0udmFsdWUpIHtcbiAgICAgICAgbWF0cml4UXVlc3Rpb24udmFsdWUucHVzaChcbiAgICAgICAgICBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1hdHJpeFF1ZXN0aW9uLmluc3RhbmNlUXVlc3Rpb25zKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG1hdHJpeFF1ZXN0aW9uLnZhbHVlLmZvckVhY2goKGluc3RhbmNlLCBpbmRleCkgPT4ge1xuICAgICAgICBpbnN0YW5jZS5mb3JFYWNoKChxdWVzdGlvbiwgaW5zdGFuY2VJbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHZhbGlkU3VibWlzc2lvbi5hbnN3ZXJzW21hdHJpeFF1ZXN0aW9uLl9pZF0gJiZcbiAgICAgICAgICAgIHZhbGlkU3VibWlzc2lvbi5hbnN3ZXJzW21hdHJpeFF1ZXN0aW9uLl9pZF0udmFsdWVbaW5kZXhdW1xuICAgICAgICAgICAgICBxdWVzdGlvbi5faWRcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlID1cbiAgICAgICAgICAgICAgdmFsaWRTdWJtaXNzaW9uLmFuc3dlcnNbbWF0cml4UXVlc3Rpb24uX2lkXS52YWx1ZVtpbmRleF1bXG4gICAgICAgICAgICAgICAgcXVlc3Rpb24uX2lkXG4gICAgICAgICAgICAgIF0udmFsdWU7XG4gICAgICAgICAgICBxdWVzdGlvbi5yZW1hcmtzID1cbiAgICAgICAgICAgICAgdmFsaWRTdWJtaXNzaW9uLmFuc3dlcnNbbWF0cml4UXVlc3Rpb24uX2lkXS52YWx1ZVtpbmRleF1bXG4gICAgICAgICAgICAgICAgcXVlc3Rpb24uX2lkXG4gICAgICAgICAgICAgIF0ucmVtYXJrcztcbiAgICAgICAgICAgIHF1ZXN0aW9uLmZpbGVOYW1lID1cbiAgICAgICAgICAgICAgdmFsaWRTdWJtaXNzaW9uLmFuc3dlcnNbbWF0cml4UXVlc3Rpb24uX2lkXS52YWx1ZVtpbmRleF1bXG4gICAgICAgICAgICAgICAgcXVlc3Rpb24uX2lkXG4gICAgICAgICAgICAgIF0uZmlsZU5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG1hdHJpeFF1ZXN0aW9uLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgZ2V0RXZpZGVuY2VEYXRhKGV2aWRlbmNlOiBFdmlkZW5jZSwgZm9ybVZhbHVlczogb2JqZWN0KSB7XG4gICAgbGV0IHNlY3Rpb25zID0gZXZpZGVuY2Uuc2VjdGlvbnM7XG4gICAgbGV0IGFuc3dlcnMgPSB0aGlzLmdldFNlY3Rpb25EYXRhKHNlY3Rpb25zLCBmb3JtVmFsdWVzKTtcbiAgICBsZXQgcGF5bG9hZERhdGEgPSB7XG4gICAgICBleHRlcm5hbElkOiBldmlkZW5jZS5leHRlcm5hbElkLFxuICAgICAgYW5zd2VyczogYW5zd2VycyxcbiAgICAgIHN0YXJ0VGltZTogZXZpZGVuY2Uuc3RhcnRUaW1lLFxuICAgICAgZW5kVGltZTogRGF0ZS5ub3coKSxcbiAgICB9O1xuICAgIHJldHVybiBwYXlsb2FkRGF0YTtcbiAgfVxuXG4gIGdldFNlY3Rpb25EYXRhKHNlY3Rpb25zLCBmb3JtVmFsdWVzKSB7XG4gICAgbGV0IGFuc3dlcnMgPSB7fTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc2VjdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBhbnN3ZXJzID0ge1xuICAgICAgICAuLi5hbnN3ZXJzLFxuICAgICAgICAuLi50aGlzLmNyZWF0ZXBheWxvYWQoc2VjdGlvbnNbaW5kZXhdLnF1ZXN0aW9ucywgZm9ybVZhbHVlcyksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gYW5zd2VycztcbiAgfVxuXG4gIGNyZWF0ZXBheWxvYWQocXVlc3Rpb25zLCBmb3JtVmFsdWVzKSB7XG4gICAgbGV0IGFuc3dlcnMgPSB7fTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcXVlc3Rpb25zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgbGV0IGN1cnJlbnRRdWVzdGlvbiA9IHF1ZXN0aW9uc1tpbmRleF07XG4gICAgICBpZiAoY3VycmVudFF1ZXN0aW9uLnJlc3BvbnNlVHlwZSA9PSAncGFnZVF1ZXN0aW9ucycpIHtcbiAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAuLi5hbnN3ZXJzLFxuICAgICAgICAgIC4uLnRoaXMuY3JlYXRlcGF5bG9hZChjdXJyZW50UXVlc3Rpb24ucGFnZVF1ZXN0aW9ucywgZm9ybVZhbHVlcyksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRRdWVzdGlvbi5yZXNwb25zZVR5cGUgPT0gJ21hdHJpeCcpIHtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGN1cnJlbnRRdWVzdGlvbi52YWx1ZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBmb3JtVmFsdWVzW2N1cnJlbnRRdWVzdGlvbi5faWRdW2luZGV4XSA9IHRoaXMuY3JlYXRlcGF5bG9hZChcbiAgICAgICAgICAgIGN1cnJlbnRRdWVzdGlvbi52YWx1ZVtpbmRleF0sXG4gICAgICAgICAgICBmb3JtVmFsdWVzW2N1cnJlbnRRdWVzdGlvbi5faWRdW2luZGV4XVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IHBlclF1ZXN0aW9uRGF0YSA9IHRoaXMuZm9ybWF0VG9QYXlsb2FkKGN1cnJlbnRRdWVzdGlvbiwgZm9ybVZhbHVlcyk7XG4gICAgICBhbnN3ZXJzW2N1cnJlbnRRdWVzdGlvbi5faWRdID0gcGVyUXVlc3Rpb25EYXRhO1xuICAgIH1cblxuICAgIHJldHVybiBhbnN3ZXJzO1xuICB9XG5cbiAgZm9ybWF0VG9QYXlsb2FkKGN1cnJlbnRRdWVzdGlvbiwgZm9ybVZhbHVlcykge1xuICAgIGxldCB2YWx1ZSA9XG4gICAgICBjdXJyZW50UXVlc3Rpb24ucmVzcG9uc2VUeXBlICE9ICdtYXRyaXgnXG4gICAgICAgID8gY3VycmVudFF1ZXN0aW9uLnZhbHVlXG4gICAgICAgIDogZm9ybVZhbHVlc1tjdXJyZW50UXVlc3Rpb24uX2lkXTtcbiAgICByZXR1cm4ge1xuICAgICAgcWlkOiBjdXJyZW50UXVlc3Rpb24uX2lkLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgcmVtYXJrczogY3VycmVudFF1ZXN0aW9uLnJlbWFya3MsXG4gICAgICBmaWxlTmFtZTogY3VycmVudFF1ZXN0aW9uLmZpbGVOYW1lLCAvL3RvZG8sXG4gICAgICBncHNMb2NhdGlvbjogJycsXG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIHF1ZXN0aW9uOiBjdXJyZW50UXVlc3Rpb24ucXVlc3Rpb24sXG4gICAgICAgIGxhYmVsczogZm9ybVZhbHVlc1tjdXJyZW50UXVlc3Rpb24uX2lkXSxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiBjdXJyZW50UXVlc3Rpb24ucmVzcG9uc2VUeXBlLFxuICAgICAgICBmaWxlc05vdFVwbG9hZGVkOiBbXSwgLy90b2RvXG4gICAgICB9LFxuICAgICAgc3RhcnRUaW1lOiBjdXJyZW50UXVlc3Rpb24uc3RhcnRUaW1lLFxuICAgICAgZW5kVGltZTogY3VycmVudFF1ZXN0aW9uLmVuZFRpbWUsXG4gICAgICBjcml0ZXJpYUlkOiBjdXJyZW50UXVlc3Rpb24ucGF5bG9hZC5jcml0ZXJpYUlkLFxuICAgICAgcmVzcG9uc2VUeXBlOiBjdXJyZW50UXVlc3Rpb24ucmVzcG9uc2VUeXBlLFxuICAgICAgZXZpZGVuY2VNZXRob2Q6IGN1cnJlbnRRdWVzdGlvbi5ldmlkZW5jZU1ldGhvZCxcbiAgICAgIHJ1YnJpY0xldmVsOiAnJyxcbiAgICB9O1xuICB9XG59XG4iXX0=