PK FV0X course/PK FV0X sections/section_201/PK FV0X activities/scorm_203/PK FV0Xw? 1 files/ac/ac1c260262e8011a1766eda642dfbf4804303112
PK FV0X4 4 1 files/f3/f39a044d42adf99919cfd8682a79659120ef87ec(()=>{"use strict";var t={177:(t,e,i)=>{i.r(e)}},e={};function i(s){var n=e[s];if(void 0!==n)return n.exports;var o=e[s]={exports:{}};return t[s](o,o.exports,i),o.exports}i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t=function(){function t(t,e){var i=t.active_lessons,n=t.externalLinkLinks,o=t.externalLinkTexts,r=t.lang,c=t.longDesc,a=t.nav_link,u=t.requirements,l=t.shortDesc,m=t.toc,h=t.title,d=t.willLearn;this.x={},Object.assign(this,{active_lessons:i,externalLinkLinks:n,externalLinkTexts:o,lang:r,longDesc:c,nav_link:a,requirements:u,shortDesc:l,toc:m,title:h,willLearn:d}),this.buildPath=e;for(var v=0,p=0;pt.activityNumber?{lectureNumber:t.lectureNumber,activityNumber:t.activityNumber+1}:{lectureNumber:t.lectureNumber+1,activityNumber:0}},t.prototype.isPreviousLecturePossible=function(t){return 0!=t.lectureNumber||0!=t.activityNumber},t.prototype.previousLecture=function(t){return 0!=t.activityNumber?{lectureNumber:t.lectureNumber,activityNumber:t.activityNumber-1}:{lectureNumber:t.lectureNumber-1,activityNumber:this.active_lessons[t.lectureNumber-1].active_activities.length-1}},t}(),e=function(){function t(t){this.title=t,localStorage.getItem(t)||localStorage.setItem(t,JSON.stringify(new Array))}return t.prototype.checkProgress=function(t,e){var i;try{i=localStorage.getItem(this.title)}catch(t){return!1}return!!i&&-1!=JSON.parse(i).indexOf(s(t,e))},t.prototype.recordProgress=function(t,e,i){var n;try{n=localStorage.getItem(this.title)}catch(t){return}if(n){var o=JSON.parse(n);-1==o.indexOf(s(t,e))&&(o.push(s(t,e)),localStorage.setItem(this.title,JSON.stringify(o)))}},t}();function s(t,e){return t.toString()+"-"+e.toString()}var n="completed",o="passed",r=function(){function t(t,e){for(var i in this.sw=t,this.course=e,this.course.x){var s=t.ScormProcessGetValue("cmi.objectives."+this.course.x[i]+".status");void 0!==s&&""!=s&&"not attempted"!=s||(this.sw.ScormProcessSetValue("cmi.objectives."+this.course.x[i]+".status","incomplete"),this.sw.commit())}}return t.prototype.checkIfComplete=function(){var t=!0,e=0;for(var i in this.course.x){var s=this.sw.ScormProcessGetValue("cmi.objectives."+this.course.x[i]+".status");s!==n&&s!==o?t=!1:e+=1}t?this.course.getLessonsCount()>1?this.sw.setFinishCourse():this.sw.finishSingleActivityCourse():this.sw.updateCourseProgress(e/this.course.getActivityCount()*100),this.sw.commit()},t.prototype.checkProgress=function(t,e){var i=this.course.x[s(t,e)],r=this.sw.ScormProcessGetValue("cmi.objectives."+i+".status");return r===n||r===o},t.prototype.recordProgress=function(t,e,i){var r=this.course.x[s(t,e)];if("quiz"==i.lectureType){var c=(i.score/i.maxScore*100).toFixed(2);this.sw.ScormProcessSetValue("cmi.objectives."+r+".status",o),this.sw.ScormProcessSetValue("cmi.objectives."+r+".score.max","100"),this.sw.ScormProcessSetValue("cmi.objectives."+r+".score.min","0"),this.sw.ScormProcessSetValue("cmi.objectives."+r+".score.raw",c)}else this.sw.ScormProcessSetValue("cmi.objectives."+r+".status",n),this.sw.ScormProcessSetValue("cmi.objectives."+r+".score.max","100"),this.sw.ScormProcessSetValue("cmi.objectives."+r+".score.min","0"),this.sw.ScormProcessSetValue("cmi.objectives."+r+".score.raw","100");this.sw.commit(),this.checkIfComplete()},t}(),c=function(){function t(){}return t.prototype.checkProgress=function(t,e){return this.progressRecord[s(t,e)]},t.prototype.recordProgress=function(t,e,i){var n=s(t,e);this.progressRecord[n]=!0},t}(),a=function(){function t(t,e){if(this.course=t,this.progressManager=e,this.contentSettings={contentTheme:"light",contentZoomFactor:0},this.currentActivity={lectureNumber:0,activityNumber:0},this.iFrame=document.getElementById("main-iframe"),this.main=document.getElementById("main"),this.courseContent=document.getElementById("course-content"),this.toc=document.getElementById("toc"),this.tocToggle=document.getElementById("toc-toggle"),this.fontOption=document.getElementById("font-size"),this.fontOptionModal=document.getElementById("font-size-modal"),this.lectureTitleHeader=document.getElementById("lecture-title-header"),this.playerHeader=document.getElementById("player-header"),this.courseTitle=document.getElementById("course-title"),this.contentNav=document.getElementById("content-nav"),this.enlargeFont=document.getElementById("larger-text"),this.reduceFont=document.getElementById("smaller-text"),this.nextActivityButton=document.getElementById("next-activity"),this.previousActivityButton=document.getElementById("previous-activity"),this.courseTitle.innerHTML=t.title,this.course.inSingleLectureMode())this.contentNav.classList.add("content-nav-off"),this.courseContent.classList.add("course-content-fs"),this.tocToggle.style.display="none",this.playerHeader.classList.add("space-around");else{this.lectureHTMLElements=new Array;for(var i=0;ie)i=i.substring(0,e);else for(var n=s;n7)return null;e++,t=window.parent}return t.API}var m="false",h=function(){function t(t){this.API=t,this.startTimeStamp=new Date,this.finishCalled=!1,this.initialized=!1,this.processedUnload=!1,this.reachedEnd=!1,this.ScormProcessInitialize(),this.startTimeStamp=new Date}return t.prototype.commit=function(){this.API.LMSCommit("")},t.prototype.ScormProcessInitialize=function(){if(this.API.LMSInitialize("")==m){var t=this.API.LMSGetLastError(),e="Number: "+t+"\nDescription: "+this.API.LMSGetErrorString(t)+"\nDiagnostic: "+this.API.LMSGetDiagnostic(t);console.log("Error - Could not initialize communication with the LMS.\n\nYour results may not be recorded.\n\n"+e),this.initialized=!1}this.initialized=!0},t.prototype.ScormProcessFinish=function(){var t;if(0!=this.initialized&&1!=this.finishCalled)if(t=this.API.LMSFinish(""),this.finishCalled=!0,t!=m);else{var e=this.API.LMSGetLastError(),i="Number: "+e+"\nDescription: "+this.API.LMSGetErrorString(e)+"\nDiagnostic: "+this.API.LMSGetDiagnostic(e);console.log("Error - Could not terminate communication with the LMS.\n\nYour results may not be recorded.\n\n"+i)}},t.prototype.ScormProcessGetValue=function(t){var e;if(0!=this.initialized&&1!=this.finishCalled){if(""==(e=this.API.LMSGetValue(t))){var i=this.API.LMSGetLastError();if("0"!=i){var s="Number: "+i+"\nDescription: "+this.API.LMSGetErrorString(i)+"\nDiagnostic: "+this.API.LMSGetDiagnostic(i);return console.log("Error - Could not retrieve a value from the LMS.\n\n"+s),""}}return e}},t.prototype.ScormProcessSetValue=function(t,e){if(0!=this.initialized&&1!=this.finishCalled&&this.API.LMSSetValue(t,e)==m){var i=this.API.LMSGetLastError(),s="Number: "+i+"\nDescription: "+this.API.LMSGetErrorString(i)+"\nDiagnostic: "+this.API.LMSGetDiagnostic(i);console.log("Error - Could not store a value in the LMS.\n\nYour results may not be recorded.\n\n"+s)}},t.prototype.finishSingleActivityCourse=function(){this.reachedEnd=!0;var t=this.ScormProcessGetValue("cmi.objectives.0.status"),e=this.ScormProcessGetValue("cmi.objectives.0.score.max"),i=this.ScormProcessGetValue("cmi.objectives.0.score.min"),s=this.ScormProcessGetValue("cmi.objectives.0.score.raw");this.ScormProcessSetValue("cmi.core.score.max",e),this.ScormProcessSetValue("cmi.core.score.min",i),this.ScormProcessSetValue("cmi.core.score.raw",s),this.ScormProcessSetValue("cmi.core.lesson_status",t)},t.prototype.setFinishCourse=function(){this.reachedEnd=!0,this.ScormProcessSetValue("cmi.core.score.max","100"),this.ScormProcessSetValue("cmi.core.score.min","0"),this.ScormProcessSetValue("cmi.core.score.raw","100"),this.ScormProcessSetValue("cmi.core.lesson_status","completed")},t.prototype.updateCourseProgress=function(t){this.ScormProcessSetValue("cmi.core.score.max","100"),this.ScormProcessSetValue("cmi.core.score.min","0"),this.ScormProcessSetValue("cmi.core.score.raw",t.toFixed(2)),this.ScormProcessSetValue("cmi.core.lesson_status","completed")},t.prototype.doUnload=function(t){if(void 0===t&&(t=!0),1!=this.processedUnload){this.processedUnload=!0;var e,i,s,n,o,r,c,a,l=(null!=(i=!1)&&null!=i||(i=!0),1e4==(s=((e=(new Date).getTime()-this.startTimeStamp.getTime())-(r=e%1e3)-1e3*(o=(e-r)/1e3%60)-6e4*(n=(e-r-1e3*o)/6e4%60))/36e5)&&(100==(n=(e-36e5*(s=9999))/6e4)&&(n=99),100==(o=(e-36e5*s-6e4*(n=Math.floor(n)))/1e3)&&(o=99),r=e-36e5*s-6e4*n-1e3*(o=Math.floor(o))),c=Math.floor(r/10),a=u(s,4)+":"+u(n,2)+":"+u(o,2),i&&(a+="."+c),s>9999&&(a="9999:99:99",i&&(a+=".99")),a);this.ScormProcessSetValue("cmi.core.session_time",l),0==t&&0==this.reachedEnd&&this.ScormProcessSetValue("cmi.core.exit","suspend"),this.commit(),this.ScormProcessFinish()}},t}();i(177),window.addEventListener("load",(function(){var i=this.document.getElementById("main-iframe").getAttribute("data-content-url");fetch("course.json").then((function(t){return t.json()})).then((function(s){var n,o,u=new t(s,i),m=(null==(o=l(window))&&null!=window.opener&&void 0!==window.opener&&(o=l(window.opener)),o);if(null!=m){var d=new h(m);n=new r(d,u),window.addEventListener("onbeforeunload",(function(){d.doUnload(!1)})),window.addEventListener("onunload",(function(){d.doUnload()}))}else n=function(){try{return localStorage.setItem("",""),""===localStorage.getItem("")&&(localStorage.removeItem(""),!0)}catch(t){return!1}}()?new e(u.title):new c;new a(u,n)}))}))})()})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RixHQUFTLE9BQUFBLEVBQUt5RixNQUFMLElBQ2ZELE1BQUssU0FBQ3BLLEdBQ0gsSUFBSXNLLEVEeUZSQyxFQ3hGUUMsRUFBYSxJQUFJQyxFQUFXekssRUFBK0JpSyxHQUUzRFMsR0R3RkcsT0FGWEgsRUFBU25ELEVBQVEzRCxVQUdDLE1BQWpCQSxPQUFPa0gsYUFDbUIsSUFBbEJsSCxPQUFhLFNBRXRCOEcsRUFBU25ELEVBQVEzRCxPQUFPa0gsU0FFckJKLEdDN0ZDLEdBQUksTUFBT0csRUFBOEMsQ0FDckQsSUFBSSxFQUFlLElBQUlFLEVBQWFGLEdBQ3BDSixFQUFVLElBQUlPLEVBQWEsRUFBY0wsR0FDekMvRyxPQUFPSixpQkFBaUIsa0JBQWlCLFdBQVEsRUFBYThGLFVBQVMsRUFBTyxJQUM5RTFGLE9BQU9KLGlCQUFpQixZQUFZLFdBQU8sRUFBYThGLFVBQVcsRyxNQUtuRW1CLEVIa0hULFdBQ0wsSUFFRSxPQURBMUwsYUFBYUUsUUFBUSxHQUFJLElBQ1EsS0FBN0JGLGFBQWFDLFFBQVEsTUFDdkJELGFBQWFrTSxXQUFXLEtBQ2pCLEUsQ0FJVCxNQUFPMUwsR0FDUCxPQUFRLEMsQ0FFWixDR2pJcUIyTCxHQUNLLElBQUlDLEVBQW9CUixFQUFXek4sT0FFbkMsSUFBSWtPLEVBQ0gsSUFBSTFILEVBQWFpSCxFQUFZRixFQUNoRCxHQUNSLEciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wZXRsamFwbGF5ZXIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGV0bGphcGxheWVyL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vcGV0bGphcGxheWVyLy4vc3JjL3V0aWwvVXRpbHMudHMiLCJ3ZWJwYWNrOi8vcGV0bGphcGxheWVyLy4vc3JjL21vZGVsL1BldGxqYVBsYXllci50cyIsIndlYnBhY2s6Ly9wZXRsamFwbGF5ZXIvLi9zcmMvdXRpbC9TY29ybVV0aWwudHMiLCJ3ZWJwYWNrOi8vcGV0bGphcGxheWVyLy4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJpbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSBcImV4cHJlc3Mtc2VydmUtc3RhdGljLWNvcmVcIjtcclxuaW1wb3J0IHsgU2Nvcm1XcmFwcGVyIH0gZnJvbSBcIi4vU2Nvcm1VdGlsXCI7XHJcbmltcG9ydCB7IEFjdGl2aXR5UHJvZ3Jlc3MsIGxlY3R1cmVBY3Rpdml0eVBhaXIgfSBmcm9tIFwiLi9UeXBlc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb3Vyc2VKU09OSW50ZXJmYWNlIHtcclxuICBhY3RpdmVfbGVzc29uczogQXJyYXk8eyB0aXRsZTogc3RyaW5nLCBmb2xkZXJfdXJsOiBzdHJpbmcsIGFjdGl2ZV9hY3Rpdml0aWVzOiBBcnJheTx7IHRvY191cmw6IHN0cmluZywgdHlwZTogc3RyaW5nLCB0aXRsZTogc3RyaW5nIH0+IH0+O1xyXG4gIGV4dGVybmFsTGlua0xpbmtzOiBBcnJheTxzdHJpbmc+O1xyXG4gIGV4dGVybmFsTGlua1RleHRzOiBBcnJheTxzdHJpbmc+O1xyXG4gIGxhbmc6IHN0cmluZztcclxuICBsb25nRGVzYzogc3RyaW5nO1xyXG4gIG5hdl9saW5rOiBzdHJpbmc7XHJcbiAgcmVxdWlyZW1lbnRzOiBBcnJheTxzdHJpbmc+O1xyXG4gIHNob3J0RGVzYzogc3RyaW5nO1xyXG4gIHRvYzogQXJyYXk8c3RyaW5nPjtcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIHdpbGxMZWFybjogQXJyYXk8c3RyaW5nPjtcclxuICBidWlsZFBhdGg6IHN0cmluZztcclxufTtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3Vyc2VKU09OIHtcclxuICBhY3RpdmVfbGVzc29uczogQXJyYXk8eyB0aXRsZTogc3RyaW5nLCBmb2xkZXJfdXJsOiBzdHJpbmcsIGFjdGl2ZV9hY3Rpdml0aWVzOiBBcnJheTx7IHRvY191cmw6IHN0cmluZywgdHlwZTogc3RyaW5nLCB0aXRsZTogc3RyaW5nIH0+IH0+O1xyXG4gIGV4dGVybmFsTGlua0xpbmtzOiBBcnJheTxzdHJpbmc+O1xyXG4gIGV4dGVybmFsTGlua1RleHRzOiBBcnJheTxzdHJpbmc+O1xyXG4gIGxhbmc6IHN0cmluZztcclxuICBsb25nRGVzYzogc3RyaW5nO1xyXG4gIG5hdl9saW5rOiBzdHJpbmc7XHJcbiAgcmVxdWlyZW1lbnRzOiBBcnJheTxzdHJpbmc+O1xyXG4gIHNob3J0RGVzYzogc3RyaW5nO1xyXG4gIHRvYzogQXJyYXk8c3RyaW5nPjtcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIHdpbGxMZWFybjogQXJyYXk8c3RyaW5nPjtcclxuICBidWlsZFBhdGg6IHN0cmluZztcclxuICB4IDogUmVjb3JkPHN0cmluZyxudW1iZXI+ID0gIHt9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcih7IGFjdGl2ZV9sZXNzb25zLCBleHRlcm5hbExpbmtMaW5rcywgZXh0ZXJuYWxMaW5rVGV4dHMsIGxhbmcsIGxvbmdEZXNjLCBuYXZfbGluaywgcmVxdWlyZW1lbnRzLCBzaG9ydERlc2MsIHRvYywgdGl0bGUsIHdpbGxMZWFybiB9OiBDb3Vyc2VKU09OSW50ZXJmYWNlLCBidWlsZFBhdGg6IHN0cmluZykge1xyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCB7IGFjdGl2ZV9sZXNzb25zLCBleHRlcm5hbExpbmtMaW5rcywgZXh0ZXJuYWxMaW5rVGV4dHMsIGxhbmcsIGxvbmdEZXNjLCBuYXZfbGluaywgcmVxdWlyZW1lbnRzLCBzaG9ydERlc2MsIHRvYywgdGl0bGUsIHdpbGxMZWFybiB9KTtcclxuICAgIHRoaXMuYnVpbGRQYXRoID0gYnVpbGRQYXRoO1xyXG4gICAgbGV0IG9yZGVyID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpPCBhY3RpdmVfbGVzc29ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgajwgYWN0aXZlX2xlc3NvbnNbaV0uYWN0aXZlX2FjdGl2aXRpZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICB0aGlzLnhbY29uY2F0TGVjdHVyZUFjdGl2aXR5KGksaildID0gb3JkZXI7XHJcbiAgICAgICAgb3JkZXIrKztcclxuICAgICAgfSAgIFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TGVzc29uc0NvdW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlX2xlc3NvbnMubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWN0aXZpdHlPcmRlck51bWJlcihjdXJyZW50TGVjdHVyZTogbGVjdHVyZUFjdGl2aXR5UGFpcikgOiBudW1iZXJ7XHJcbiAgICAgIHJldHVybiB0aGlzLnhbY29uY2F0TGVjdHVyZUFjdGl2aXR5KGN1cnJlbnRMZWN0dXJlLmxlY3R1cmVOdW1iZXIsIGN1cnJlbnRMZWN0dXJlLmFjdGl2aXR5TnVtYmVyKV07XHJcbiAgfVxyXG5cclxuICBnZXRBY3Rpdml0eUNvdW50KCkge1xyXG4gICAgY29uc3QgYWN0aXZpdHlDb3VudCA9IDBcclxuICAgIHJldHVybiB0aGlzLmFjdGl2ZV9sZXNzb25zLnJlZHVjZSgoYWN0aXZpdHlDb3VudCwgbGVzc29uKSA9PiBhY3Rpdml0eUNvdW50ICsgbGVzc29uLmFjdGl2ZV9hY3Rpdml0aWVzLmxlbmd0aCwgYWN0aXZpdHlDb3VudCk7XHJcbiAgfVxyXG5cclxuICBnZXRBY3Rpdml0eVVSTChsZXNzb25OdW1iZXI6IG51bWJlciwgYWN0aXZpdHlOdW1iZXI6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuYnVpbGRQYXRoICsgXCIvXCIgKyB0aGlzLmFjdGl2ZV9sZXNzb25zW2xlc3Nvbk51bWJlcl0uZm9sZGVyX3VybCArIFwiL1wiICsgdGhpcy5hY3RpdmVfbGVzc29uc1tsZXNzb25OdW1iZXJdLmFjdGl2ZV9hY3Rpdml0aWVzW2FjdGl2aXR5TnVtYmVyXS50b2NfdXJsICsgXCIuaHRtbFwiXHJcbiAgfVxyXG5cclxuICBpblNpbmdsZUxlY3R1cmVNb2RlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0QWN0aXZpdHlDb3VudCgpID09IDE7XHJcbiAgfVxyXG5cclxuICBpc05leHRMZWN0dXJlUG9zc2libGUoY3VycmVudExlY3R1cmU6IGxlY3R1cmVBY3Rpdml0eVBhaXIpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmFjdGl2ZV9sZXNzb25zW2N1cnJlbnRMZWN0dXJlLmxlY3R1cmVOdW1iZXJdLmFjdGl2ZV9hY3Rpdml0aWVzLmxlbmd0aCAtIDEgPT0gY3VycmVudExlY3R1cmUuYWN0aXZpdHlOdW1iZXIgJiZcclxuICAgICAgdGhpcy5hY3RpdmVfbGVzc29ucy5sZW5ndGggLSAxID09IGN1cnJlbnRMZWN0dXJlLmxlY3R1cmVOdW1iZXIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBuZXh0TGVjdHVyZShjdXJyZW50TGVjdHVyZTogbGVjdHVyZUFjdGl2aXR5UGFpcik6IGxlY3R1cmVBY3Rpdml0eVBhaXIge1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlX2xlc3NvbnNbY3VycmVudExlY3R1cmUubGVjdHVyZU51bWJlcl0uYWN0aXZlX2FjdGl2aXRpZXMubGVuZ3RoIC0gMSA+IGN1cnJlbnRMZWN0dXJlLmFjdGl2aXR5TnVtYmVyKSB7XHJcbiAgICAgIHJldHVybiB7IGxlY3R1cmVOdW1iZXI6IGN1cnJlbnRMZWN0dXJlLmxlY3R1cmVOdW1iZXIsIGFjdGl2aXR5TnVtYmVyOiBjdXJyZW50TGVjdHVyZS5hY3Rpdml0eU51bWJlciArIDEgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbGVjdHVyZU51bWJlcjogY3VycmVudExlY3R1cmUubGVjdHVyZU51bWJlciArIDEsIGFjdGl2aXR5TnVtYmVyOiAwIH1cclxuICB9XHJcblxyXG4gIGlzUHJldmlvdXNMZWN0dXJlUG9zc2libGUoY3VycmVudExlY3R1cmU6IGxlY3R1cmVBY3Rpdml0eVBhaXIpOiBib29sZWFuIHtcclxuICAgIGlmIChjdXJyZW50TGVjdHVyZS5sZWN0dXJlTnVtYmVyID09IDAgJiYgY3VycmVudExlY3R1cmUuYWN0aXZpdHlOdW1iZXIgPT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByZXZpb3VzTGVjdHVyZShjdXJyZW50TGVjdHVyZTogbGVjdHVyZUFjdGl2aXR5UGFpcik6IGxlY3R1cmVBY3Rpdml0eVBhaXIge1xyXG4gICAgaWYgKGN1cnJlbnRMZWN0dXJlLmFjdGl2aXR5TnVtYmVyICE9IDApIHtcclxuICAgICAgcmV0dXJuIHsgbGVjdHVyZU51bWJlcjogY3VycmVudExlY3R1cmUubGVjdHVyZU51bWJlciwgYWN0aXZpdHlOdW1iZXI6IGN1cnJlbnRMZWN0dXJlLmFjdGl2aXR5TnVtYmVyIC0gMX1cclxuICAgIH1cclxuICAgIHJldHVybiB7IGxlY3R1cmVOdW1iZXI6IGN1cnJlbnRMZWN0dXJlLmxlY3R1cmVOdW1iZXIgLSAxLCBhY3Rpdml0eU51bWJlcjogdGhpcy5hY3RpdmVfbGVzc29uc1tjdXJyZW50TGVjdHVyZS5sZWN0dXJlTnVtYmVyIC0gMV0uYWN0aXZlX2FjdGl2aXRpZXMubGVuZ3RoIC0gMSB9XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGNsYXNzIExvY2FsU3RvcmFnZU1hbmFnZXIgaW1wbGVtZW50cyBDb3Vyc2VTdG9yYWdle1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGl0bGU6IHN0cmluZykge1xyXG4gICAgaWYgKCFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aXRsZSkpXHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRpdGxlLCBKU09OLnN0cmluZ2lmeShuZXcgQXJyYXk8c3RyaW5nPigpKSk7XHJcbiAgfVxyXG5cclxuICBjaGVja1Byb2dyZXNzKGxlY3R1cmVOdW1iZXI6IG51bWJlciwgYWN0aXZpdHlOdW1iZXI6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHByb2dyZXNzU3RyaW5nOiBzdHJpbmdcclxuICAgIHRyeSB7XHJcbiAgICAgIHByb2dyZXNzU3RyaW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy50aXRsZSkhO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByb2dyZXNzU3RyaW5nKSB7XHJcbiAgICAgIGxldCBwcm9ncmVzczogQXJyYXk8c3RyaW5nPiA9IEpTT04ucGFyc2UocHJvZ3Jlc3NTdHJpbmcpO1xyXG4gICAgICByZXR1cm4gcHJvZ3Jlc3MuaW5kZXhPZihjb25jYXRMZWN0dXJlQWN0aXZpdHkobGVjdHVyZU51bWJlciwgYWN0aXZpdHlOdW1iZXIpKSAhPSAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHJlY29yZFByb2dyZXNzKGxlY3R1cmVOdW1iZXI6IG51bWJlciwgYWN0aXZpdHlOdW1iZXI6IG51bWJlciwgcHJvZ3Jlc3MgOiBBY3Rpdml0eVByb2dyZXNzKTogdm9pZCB7XHJcbiAgICBsZXQgcHJvZ3Jlc3NTdHJpbmc6IHN0cmluZ1xyXG4gICAgdHJ5IHtcclxuICAgICAgcHJvZ3Jlc3NTdHJpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnRpdGxlKSE7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAocHJvZ3Jlc3NTdHJpbmcpIHtcclxuICAgICAgbGV0IHByb2dyZXNzOiBBcnJheTxzdHJpbmc+ID0gSlNPTi5wYXJzZShwcm9ncmVzc1N0cmluZyk7XHJcbiAgICAgIGlmIChwcm9ncmVzcy5pbmRleE9mKGNvbmNhdExlY3R1cmVBY3Rpdml0eShsZWN0dXJlTnVtYmVyLCBhY3Rpdml0eU51bWJlcikpID09IC0xKSB7XHJcbiAgICAgICAgcHJvZ3Jlc3MucHVzaChjb25jYXRMZWN0dXJlQWN0aXZpdHkobGVjdHVyZU51bWJlciwgYWN0aXZpdHlOdW1iZXIpKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnRpdGxlLCBKU09OLnN0cmluZ2lmeShwcm9ncmVzcykpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjb25jYXRMZWN0dXJlQWN0aXZpdHkobGVjdHVyZTogbnVtYmVyLCBhY3Rpdml0eTogbnVtYmVyKSA6IHN0cmluZ3tcclxuICByZXR1cm4gbGVjdHVyZS50b1N0cmluZygpICsgJy0nICsgYWN0aXZpdHkudG9TdHJpbmcoKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNMb2NhbFN0b3JhZ2VJc0F2YWlsYWJsZSgpIDogYm9vbGVhbntcclxuICB0cnkge1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJycsICcnKTtcclxuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnJykgPT09ICcnKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCcnKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgcmV0dXJuICBmYWxzZTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvdXJzZVN0b3JhZ2V7XHJcbiAgcmVjb3JkUHJvZ3Jlc3MobGVjdHVyZU51bWJlcjogbnVtYmVyLCBhY3Rpdml0eU51bWJlcjogbnVtYmVyLCBwcm9ncmVzcyA6IEFjdGl2aXR5UHJvZ3Jlc3MpIDogdm9pZDtcclxuICBjaGVja1Byb2dyZXNzKGxlY3R1cmVOdW1iZXI6IG51bWJlciwgYWN0aXZpdHlOdW1iZXI6IG51bWJlcikgOiBib29sZWFuO1xyXG59XHJcblxyXG5jb25zdCAgU0NPUk1fQ09NUExFVEVEID0gXCJjb21wbGV0ZWRcIlxyXG5jb25zdCBTQ1JPTV9QQVNTRUQgPSBcInBhc3NlZFwiXHJcblxyXG5leHBvcnQgY2xhc3MgU2Nvcm1TdG9yYWdlIGltcGxlbWVudHMgQ291cnNlU3RvcmFnZXtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN3IDogU2Nvcm1XcmFwcGVyLCBwcml2YXRlIGNvdXJzZSA6IENvdXJzZUpTT04pe1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb3Vyc2UueCkge1xyXG4gICAgICBsZXQgY29tcGxldGlvblN0YXR1c0FjdGl2aXR5ID0gc3cuU2Nvcm1Qcm9jZXNzR2V0VmFsdWUoJ2NtaS5vYmplY3RpdmVzLicrdGhpcy5jb3Vyc2UueFtrZXldKycuc3RhdHVzJyk7XHJcbiAgICAgIGlmIChjb21wbGV0aW9uU3RhdHVzQWN0aXZpdHkgID09PSB1bmRlZmluZWQgfHwgY29tcGxldGlvblN0YXR1c0FjdGl2aXR5ID09ICcnIHx8IGNvbXBsZXRpb25TdGF0dXNBY3Rpdml0eSA9PSBcIm5vdCBhdHRlbXB0ZWRcIil7XHJcbiAgICAgICAgdGhpcy5zdy5TY29ybVByb2Nlc3NTZXRWYWx1ZSgnY21pLm9iamVjdGl2ZXMuJyt0aGlzLmNvdXJzZS54W2tleV0rJy5zdGF0dXMnLCBcImluY29tcGxldGVcIilcclxuICAgICAgICB0aGlzLnN3LmNvbW1pdCgpO1xyXG4gICAgICB9ICBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tJZkNvbXBsZXRlKCl7XHJcbiAgICBsZXQgcGFzc2VkID0gdHJ1ZTtcclxuICAgIGxldCBudW1iZXJPZlBhc3NlZEFjdGl2aXRpZXMgPSAwO1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb3Vyc2UueCkge1xyXG4gICAgICBsZXQgY29tcGxldGlvblN0YXR1c0FjdGl2aXR5ID0gdGhpcy5zdy5TY29ybVByb2Nlc3NHZXRWYWx1ZSgnY21pLm9iamVjdGl2ZXMuJyt0aGlzLmNvdXJzZS54W2tleV0rJy5zdGF0dXMnKTtcclxuICAgICAgaWYgKGNvbXBsZXRpb25TdGF0dXNBY3Rpdml0eSAgIT09IFNDT1JNX0NPTVBMRVRFRCAmJiBjb21wbGV0aW9uU3RhdHVzQWN0aXZpdHkgICE9PSBTQ1JPTV9QQVNTRUQpe1xyXG4gICAgICAgIHBhc3NlZCA9IGZhbHNlO1xyXG4gICAgICB9ICBcclxuICAgICAgZWxzZXtcclxuICAgICAgICBudW1iZXJPZlBhc3NlZEFjdGl2aXRpZXMgKz0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYocGFzc2VkKVxyXG4gICAgICBpZih0aGlzLmNvdXJzZS5nZXRMZXNzb25zQ291bnQoKSA+IDEpXHJcbiAgICAgICAgdGhpcy5zdy5zZXRGaW5pc2hDb3Vyc2UoKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuc3cuZmluaXNoU2luZ2xlQWN0aXZpdHlDb3Vyc2UoKTtcclxuICAgICAgXHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLnN3LnVwZGF0ZUNvdXJzZVByb2dyZXNzKChudW1iZXJPZlBhc3NlZEFjdGl2aXRpZXMvdGhpcy5jb3Vyc2UuZ2V0QWN0aXZpdHlDb3VudCgpKjEwMCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdy5jb21taXQoKTtcclxuICB9XHJcblxyXG4gIGNoZWNrUHJvZ3Jlc3MobGVjdHVyZU51bWJlcjogbnVtYmVyLCBhY3Rpdml0eU51bWJlcjogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcGFnZUNvdW50ID0gdGhpcy5jb3Vyc2UueFtjb25jYXRMZWN0dXJlQWN0aXZpdHkobGVjdHVyZU51bWJlciwgYWN0aXZpdHlOdW1iZXIpXVxyXG4gICAgbGV0IHByb2dyZXNzID0gdGhpcy5zdy5TY29ybVByb2Nlc3NHZXRWYWx1ZSgnY21pLm9iamVjdGl2ZXMuJysgcGFnZUNvdW50ICsnLnN0YXR1cycpO1xyXG4gICAgaWYgKHByb2dyZXNzICA9PT0gU0NPUk1fQ09NUExFVEVEIHx8IHByb2dyZXNzID09PVNDUk9NX1BBU1NFRCApXHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIHJlY29yZFByb2dyZXNzKGxlY3R1cmVOdW1iZXI6IG51bWJlciwgYWN0aXZpdHlOdW1iZXI6IG51bWJlciwgcHJvZ3Jlc3MgOiBBY3Rpdml0eVByb2dyZXNzKTogdm9pZCB7XHJcbiAgICBsZXQgcGFnZUNvdW50ID0gdGhpcy5jb3Vyc2UueFtjb25jYXRMZWN0dXJlQWN0aXZpdHkobGVjdHVyZU51bWJlciwgYWN0aXZpdHlOdW1iZXIpXVxyXG4gICAgaWYgKHByb2dyZXNzLmxlY3R1cmVUeXBlID09ICdxdWl6Jyl7XHJcbiAgICAgIGxldCBwcm9ncmVzc1BlcmNlbnQgPSAocHJvZ3Jlc3Muc2NvcmUvcHJvZ3Jlc3MubWF4U2NvcmUgKiAxMDApLnRvRml4ZWQoMilcclxuICAgICAgdGhpcy5zdy5TY29ybVByb2Nlc3NTZXRWYWx1ZSgnY21pLm9iamVjdGl2ZXMuJytwYWdlQ291bnQrJy5zdGF0dXMnLCBTQ1JPTV9QQVNTRUQpXHJcbiAgICAgIHRoaXMuc3cuU2Nvcm1Qcm9jZXNzU2V0VmFsdWUoJ2NtaS5vYmplY3RpdmVzLicrcGFnZUNvdW50Kycuc2NvcmUubWF4JyxcIjEwMFwiKVxyXG4gICAgICB0aGlzLnN3LlNjb3JtUHJvY2Vzc1NldFZhbHVlKCdjbWkub2JqZWN0aXZlcy4nK3BhZ2VDb3VudCsnLnNjb3JlLm1pbicsIFwiMFwiKVxyXG4gICAgICB0aGlzLnN3LlNjb3JtUHJvY2Vzc1NldFZhbHVlKCdjbWkub2JqZWN0aXZlcy4nK3BhZ2VDb3VudCsnLnNjb3JlLnJhdycsIHByb2dyZXNzUGVyY2VudClcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMuc3cuU2Nvcm1Qcm9jZXNzU2V0VmFsdWUoJ2NtaS5vYmplY3RpdmVzLicrcGFnZUNvdW50Kycuc3RhdHVzJywgU0NPUk1fQ09NUExFVEVEKVxyXG4gICAgICB0aGlzLnN3LlNjb3JtUHJvY2Vzc1NldFZhbHVlKCdjbWkub2JqZWN0aXZlcy4nK3BhZ2VDb3VudCsnLnNjb3JlLm1heCcsXCIxMDBcIilcclxuICAgICAgdGhpcy5zdy5TY29ybVByb2Nlc3NTZXRWYWx1ZSgnY21pLm9iamVjdGl2ZXMuJytwYWdlQ291bnQrJy5zY29yZS5taW4nLCBcIjBcIilcclxuICAgICAgdGhpcy5zdy5TY29ybVByb2Nlc3NTZXRWYWx1ZSgnY21pLm9iamVjdGl2ZXMuJytwYWdlQ291bnQrJy5zY29yZS5yYXcnLCBcIjEwMFwiKVxyXG4gICAgfVxyXG4gICAgdGhpcy5zdy5jb21taXQoKTtcclxuICAgIHRoaXMuY2hlY2tJZkNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTW9jU3RvcmFnZSBpbXBsZW1lbnRzIENvdXJzZVN0b3JhZ2V7XHJcbiAgcHJvZ3Jlc3NSZWNvcmQgOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcclxuICBjaGVja1Byb2dyZXNzKGxlY3R1cmVOdW1iZXI6IG51bWJlciwgYWN0aXZpdHlOdW1iZXI6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NSZWNvcmRbY29uY2F0TGVjdHVyZUFjdGl2aXR5KGxlY3R1cmVOdW1iZXIsIGFjdGl2aXR5TnVtYmVyKV07XHJcbiAgfVxyXG5cclxuICByZWNvcmRQcm9ncmVzcyhsZWN0dXJlTnVtYmVyOiBudW1iZXIsIGFjdGl2aXR5TnVtYmVyOiBudW1iZXIsIHByb2dyZXNzIDogQWN0aXZpdHlQcm9ncmVzcyk6IHZvaWQge1xyXG4gICAgbGV0IHBhZ2VDb3VudCA9ICBjb25jYXRMZWN0dXJlQWN0aXZpdHkobGVjdHVyZU51bWJlciwgYWN0aXZpdHlOdW1iZXIpXHJcbiAgICB0aGlzLnByb2dyZXNzUmVjb3JkW3BhZ2VDb3VudF0gPSB0cnVlO1xyXG4gIH1cclxufSIsImltcG9ydCB7IENvdXJzZUpTT04sIENvdXJzZVN0b3JhZ2UsIExvY2FsU3RvcmFnZU1hbmFnZXIgfSBmcm9tIFwiLi4vdXRpbC9VdGlsc1wiXHJcbmltcG9ydCB7IENvbnRlbnRQbGF5ZXJNZXNzYWdlLCBzZWN0aW9uSFRNTEVsZW1lbnRzLCBQbGF5ZXJDb250ZW50TWVzc2FnZSwgc3Vic2VjdGlvbkhUTUxFbGVtZW50cywgbGVjdHVyZUFjdGl2aXR5UGFpciwgQWN0aXZpdHlQcm9ncmVzcyB9IGZyb20gXCIuLi91dGlsL1R5cGVzXCJcclxuXHJcbmV4cG9ydCBjbGFzcyBQZXRsamFQbGF5ZXIge1xyXG4gICAgc3RhdGljIE1FRElBX1FVRVJZX1dJRFRIID0gMTE1MDtcclxuICAgIHN0YXRpYyB6b29tRmFjdG9yID0gMTtcclxuXHJcbiAgICBwcml2YXRlIGlGcmFtZTogSFRNTElGcmFtZUVsZW1lbnQ7XHJcbiAgICBwcml2YXRlIG1haW46IEhUTUxFbGVtZW50O1xyXG4gICAgcHJpdmF0ZSBjb3Vyc2VDb250ZW50OiBIVE1MRWxlbWVudDtcclxuICAgIHByaXZhdGUgdG9jOiBIVE1MRWxlbWVudDtcclxuICAgIHByaXZhdGUgbGVjdHVyZVRpdGxlSGVhZGVyOiBIVE1MRWxlbWVudDtcclxuICAgIHByaXZhdGUgdG9jVG9nZ2xlOiBIVE1MRWxlbWVudDtcclxuICAgIHByaXZhdGUgZm9udE9wdGlvbjogSFRNTEVsZW1lbnQ7XHJcbiAgICBwcml2YXRlIGZvbnRPcHRpb25Nb2RhbDogSFRNTEVsZW1lbnQ7XHJcbiAgICBwcml2YXRlIGNvdXJzZVRpdGxlOiBIVE1MRWxlbWVudFxyXG4gICAgcHJpdmF0ZSBjdXJyZW50U3Vic2VjdGlvbjogSFRNTEVsZW1lbnQ7XHJcbiAgICBwcml2YXRlIHBsYXllckhlYWRlcjogSFRNTEVsZW1lbnQ7XHJcbiAgICBwcml2YXRlIGNvbnRlbnROYXY6IEhUTUxFbGVtZW50O1xyXG4gICAgcHJpdmF0ZSBlbmxhcmdlRm9udDogSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICBwcml2YXRlIHJlZHVjZUZvbnQ6IEhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgcHJpdmF0ZSBuZXh0QWN0aXZpdHlCdXR0b246IEhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgcHJpdmF0ZSBwcmV2aW91c0FjdGl2aXR5QnV0dG9uOiBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgIHByaXZhdGUgcHJldmlvdXNTY3JlZW5TaXplOiBcInNtYWxsXCIgfCBcImxhcmdlXCI7XHJcbiAgICBwcml2YXRlIG5hdlN0YXR1czogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgY29udGVudFNldHRpbmdzOiB7IGNvbnRlbnRUaGVtZTogXCJsaWdodFwiIHwgXCJkYXJrXCIsIGNvbnRlbnRab29tRmFjdG9yOiBudW1iZXIgfSA9IHsgY29udGVudFRoZW1lOiBcImxpZ2h0XCIsIGNvbnRlbnRab29tRmFjdG9yOiAwIH07XHJcbiAgICBwcml2YXRlIGxlY3R1cmVIVE1MRWxlbWVudHM6IEFycmF5PHNlY3Rpb25IVE1MRWxlbWVudHM+O1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50QWN0aXZpdHk6IGxlY3R1cmVBY3Rpdml0eVBhaXIgPSB7IGxlY3R1cmVOdW1iZXI6IDAsIGFjdGl2aXR5TnVtYmVyOiAwIH07XHJcbiAgICBwcml2YXRlIHNjcm9sbFBvc2l0aW9uQmVmb3JlTW9kYWwgOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIHNob3dpbmdNb2RhbCA6IGJvb2xlYW47XHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY291cnNlOiBDb3Vyc2VKU09OLCBwcml2YXRlIHByb2dyZXNzTWFuYWdlcjogQ291cnNlU3RvcmFnZSkge1xyXG4gICAgICAgIHRoaXMuaUZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYWluLWlmcmFtZVwiKSBhcyBIVE1MSUZyYW1lRWxlbWVudDtcclxuICAgICAgICB0aGlzLm1haW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1haW5cIikgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5jb3Vyc2VDb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb3Vyc2UtY29udGVudFwiKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICB0aGlzLnRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidG9jXCIpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIHRoaXMudG9jVG9nZ2xlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0b2MtdG9nZ2xlXCIpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuZm9udE9wdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZm9udC1zaXplXCIpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuZm9udE9wdGlvbk1vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJmb250LXNpemUtbW9kYWxcIikgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5sZWN0dXJlVGl0bGVIZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxlY3R1cmUtdGl0bGUtaGVhZGVyXCIpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIHRoaXMucGxheWVySGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwbGF5ZXItaGVhZGVyXCIpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuY291cnNlVGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvdXJzZS10aXRsZVwiKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICB0aGlzLmNvbnRlbnROYXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvbnRlbnQtbmF2XCIpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuZW5sYXJnZUZvbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxhcmdlci10ZXh0XCIpIGFzIEhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgICAgIHRoaXMucmVkdWNlRm9udCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic21hbGxlci10ZXh0XCIpIGFzIEhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgICAgIHRoaXMubmV4dEFjdGl2aXR5QnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuZXh0LWFjdGl2aXR5XCIpIGFzIEhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNBY3Rpdml0eUJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicHJldmlvdXMtYWN0aXZpdHlcIikgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHRoaXMuY291cnNlVGl0bGUuaW5uZXJIVE1MID0gY291cnNlLnRpdGxlO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY291cnNlLmluU2luZ2xlTGVjdHVyZU1vZGUoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmxlY3R1cmVIVE1MRWxlbWVudHMgPSBuZXcgQXJyYXk8c2VjdGlvbkhUTUxFbGVtZW50cz4oKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3Vyc2UuYWN0aXZlX2xlc3NvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlU2VjdGlvbihpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNTbWFsbFNjcmVlbigpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnROYXYuY2xhc3NMaXN0LmFkZChcImNvbnRlbnQtbmF2LW9mZlwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291cnNlQ29udGVudC5jbGFzc0xpc3QuYWRkKFwiY291cnNlLWNvbnRlbnQtZnNcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzU2NyZWVuU2l6ZSA9IFwic21hbGxcIjtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnROYXYuY2xhc3NMaXN0LmFkZChcImNvbnRlbnQtbmF2LW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vyc2VDb250ZW50LmNsYXNzTGlzdC5hZGQoXCJjb3Vyc2UtY29udGVudC10b2NcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzU2NyZWVuU2l6ZSA9IFwibGFyZ2VcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdWJzZWN0aW9uID0gdGhpcy5sZWN0dXJlSFRNTEVsZW1lbnRzW3RoaXMuY3VycmVudEFjdGl2aXR5LmxlY3R1cmVOdW1iZXJdLnN1YnNlY3Rpb25zW3RoaXMuY3VycmVudEFjdGl2aXR5LmFjdGl2aXR5TnVtYmVyXS5zdWJzZWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50TmF2LmNsYXNzTGlzdC5hZGQoXCJjb250ZW50LW5hdi1vZmZcIik7XHJcbiAgICAgICAgICAgIHRoaXMuY291cnNlQ29udGVudC5jbGFzc0xpc3QuYWRkKFwiY291cnNlLWNvbnRlbnQtZnNcIik7XHJcbiAgICAgICAgICAgIHRoaXMudG9jVG9nZ2xlLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICAgICAgdGhpcy5wbGF5ZXJIZWFkZXIuY2xhc3NMaXN0LmFkZChcInNwYWNlLWFyb3VuZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vcGVuQ29udGVudEFjdGl2aXR5KHRoaXMuY3VycmVudEFjdGl2aXR5LmxlY3R1cmVOdW1iZXIsIHRoaXMuY3VycmVudEFjdGl2aXR5LmFjdGl2aXR5TnVtYmVyKTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoKTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRFdmVudExpc3RlbmVyKCkge1xyXG4gICAgICAgIHRoaXMuZW5sYXJnZUZvbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy56b29tV2l0aEZhY3RvcihQZXRsamFQbGF5ZXIuem9vbUZhY3Rvcik7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGVudFNldHRpbmdzLmNvbnRlbnRab29tRmFjdG9yICs9IFBldGxqYVBsYXllci56b29tRmFjdG9yXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5yZWR1Y2VGb250LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuem9vbVdpdGhGYWN0b3IoLVBldGxqYVBsYXllci56b29tRmFjdG9yKTtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50U2V0dGluZ3MuY29udGVudFpvb21GYWN0b3IgLT0gUGV0bGphUGxheWVyLnpvb21GYWN0b3JcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmlGcmFtZS5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKT0+e1xyXG4gICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwwKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoZSkgPT4geyB0aGlzLnJlY2VpdmVNZXNzYWdlKGUpOyB9KTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvbnRPcHRpb24uY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9udE9wdGlvbk1vZGFsLmNsYXNzTGlzdC50b2dnbGUoXCJoaWRlLWVsZW1lbnRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuZm9udE9wdGlvbk1vZGFsLmNsYXNzTGlzdC5jb250YWlucyhcImhpZGUtZWxlbWVudFwiKSAmJiAhdGhpcy5mb250T3B0aW9uTW9kYWwuY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9udE9wdGlvbk1vZGFsLmNsYXNzTGlzdC5hZGQoXCJoaWRlLWVsZW1lbnRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvbnRPcHRpb25Nb2RhbC5jbGFzc0xpc3QuYWRkKFwiaGlkZS1lbGVtZW50XCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghdGhpcy5jb3Vyc2UuaW5TaW5nbGVMZWN0dXJlTW9kZSgpKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU21hbGxTY3JlZW4oKSAmJiB0aGlzLnByZXZpb3VzU2NyZWVuU2l6ZSA9PSBcImxhcmdlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdlN0YXR1cyA9IHRoaXMuaXNOYXZWaXNpYmxlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNOYXZWaXNpYmxlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50TmF2LmNsYXNzTGlzdC5yZXBsYWNlKFwiY29udGVudC1uYXYtb25cIiwgXCJjb250ZW50LW5hdi1vZmZcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY291cnNlQ29udGVudC5jbGFzc0xpc3QucmVwbGFjZShcImNvdXJzZS1jb250ZW50LXRvY1wiLCBcImNvdXJzZS1jb250ZW50LWZzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzU2NyZWVuU2l6ZSA9IFwic21hbGxcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuaXNTbWFsbFNjcmVlbigpICYmIHRoaXMucHJldmlvdXNTY3JlZW5TaXplID09IFwic21hbGxcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hdlN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvdXJzZUNvbnRlbnQuY2xhc3NMaXN0LnJlcGxhY2UoXCJjb3Vyc2UtY29udGVudC1mc1wiLCBcImNvdXJzZS1jb250ZW50LXRvY1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnROYXYuY2xhc3NMaXN0LnJlcGxhY2UoXCJjb250ZW50LW5hdi1vZmZcIiwgXCJjb250ZW50LW5hdi1vblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN1YnNlY3Rpb24uc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjAwKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50TmF2LmNsYXNzTGlzdC5yZXBsYWNlKFwiY29udGVudC1uYXYtb25cIiwgXCJjb250ZW50LW5hdi1vZmZcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY291cnNlQ29udGVudC5jbGFzc0xpc3QucmVwbGFjZShcImNvdXJzZS1jb250ZW50LXRvY1wiLCBcImNvdXJzZS1jb250ZW50LWZzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzU2NyZWVuU2l6ZSA9IFwibGFyZ2VcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMudG9jVG9nZ2xlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1NtYWxsU2NyZWVuKCkgJiYgdGhpcy5pc05hdlZpc2libGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlQ2xhc3Nlc09uRWxlbWVudCh0aGlzLmNvbnRlbnROYXYsIFwiY29udGVudC1uYXYtb25cIiwgXCJjb250ZW50LW5hdi1vZmZcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlQ2xhc3Nlc09uRWxlbWVudCh0aGlzLmNvdXJzZUNvbnRlbnQsIFwiY291cnNlLWNvbnRlbnQtdG9jXCIsIFwiY291cnNlLWNvbnRlbnQtZnNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNTbWFsbFNjcmVlbigpICYmICF0aGlzLmlzTmF2VmlzaWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZTdGF0dXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlQ2xhc3Nlc09uRWxlbWVudCh0aGlzLmNvdXJzZUNvbnRlbnQsIFwiY291cnNlLWNvbnRlbnQtdG9jXCIsIFwiY291cnNlLWNvbnRlbnQtZnNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlQ2xhc3Nlc09uRWxlbWVudCh0aGlzLmNvbnRlbnROYXYsIFwiY29udGVudC1uYXYtb25cIiwgXCJjb250ZW50LW5hdi1vZmZcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN1YnNlY3Rpb24uc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuaXNTbWFsbFNjcmVlbigpICYmIHRoaXMuaXNOYXZWaXNpYmxlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUNsYXNzZXNPbkVsZW1lbnQodGhpcy5jb250ZW50TmF2LCBcImNvbnRlbnQtbmF2LW9uXCIsIFwiY29udGVudC1uYXYtb2ZmXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUNsYXNzZXNPbkVsZW1lbnQodGhpcy5jb3Vyc2VDb250ZW50LCBcImNvdXJzZS1jb250ZW50LXRvY1wiLCBcImNvdXJzZS1jb250ZW50LWZzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5pc1NtYWxsU2NyZWVuKCkgJiYgIXRoaXMuaXNOYXZWaXNpYmxlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUNsYXNzZXNPbkVsZW1lbnQodGhpcy5jb3Vyc2VDb250ZW50LCBcImNvdXJzZS1jb250ZW50LXRvY1wiLCBcImNvdXJzZS1jb250ZW50LWZzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUNsYXNzZXNPbkVsZW1lbnQodGhpcy5jb250ZW50TmF2LCBcImNvbnRlbnQtbmF2LW9uXCIsIFwiY29udGVudC1uYXYtb2ZmXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdWJzZWN0aW9uLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMubmV4dEFjdGl2aXR5QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB0aGlzLm5leHRBY3Rpdml0eSgpKTtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0FjdGl2aXR5QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB0aGlzLnByZXZpb3VzQWN0aXZpdHkoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHByaXZhdGUgcHJldmlvdXNBY3Rpdml0eSgpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdWJzZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoXCJzZWxlY3RlZC1zdWJzZWN0aW9uXCIpO1xyXG4gICAgICAgIGxldCBwcmV2aW91c0xlY3R1cmUgPSB0aGlzLmNvdXJzZS5wcmV2aW91c0xlY3R1cmUodGhpcy5jdXJyZW50QWN0aXZpdHkpXHJcbiAgICAgICAgdGhpcy5vcGVuQ29udGVudEFjdGl2aXR5KHByZXZpb3VzTGVjdHVyZS5sZWN0dXJlTnVtYmVyLCBwcmV2aW91c0xlY3R1cmUuYWN0aXZpdHlOdW1iZXIpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU21hbGxTY3JlZW4oKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUNsYXNzZXNPbkVsZW1lbnQodGhpcy5jb250ZW50TmF2LCBcImNvbnRlbnQtbmF2LW9uXCIsIFwiY29udGVudC1uYXYtb2ZmXCIpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlQ2xhc3Nlc09uRWxlbWVudCh0aGlzLmNvdXJzZUNvbnRlbnQsIFwiY291cnNlLWNvbnRlbnQtdG9jXCIsIFwiY291cnNlLWNvbnRlbnQtZnNcIik7XHJcbiAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbmV4dEFjdGl2aXR5KCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN1YnNlY3Rpb24uY2xhc3NMaXN0LnJlbW92ZShcInNlbGVjdGVkLXN1YnNlY3Rpb25cIik7XHJcbiAgICAgICAgbGV0IG5leHRMZWN0dXJlID0gdGhpcy5jb3Vyc2UubmV4dExlY3R1cmUodGhpcy5jdXJyZW50QWN0aXZpdHkpO1xyXG4gICAgICAgIHRoaXMub3BlbkNvbnRlbnRBY3Rpdml0eShuZXh0TGVjdHVyZS5sZWN0dXJlTnVtYmVyLCBuZXh0TGVjdHVyZS5hY3Rpdml0eU51bWJlcik7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTbWFsbFNjcmVlbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlQ2xhc3Nlc09uRWxlbWVudCh0aGlzLmNvbnRlbnROYXYsIFwiY29udGVudC1uYXYtb25cIiwgXCJjb250ZW50LW5hdi1vZmZcIik7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVDbGFzc2VzT25FbGVtZW50KHRoaXMuY291cnNlQ29udGVudCwgXCJjb3Vyc2UtY29udGVudC10b2NcIiwgXCJjb3Vyc2UtY29udGVudC1mc1wiKTtcclxuICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzZW5kTWVzc2FnZShtZXNzYWdlOiBQbGF5ZXJDb250ZW50TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuaUZyYW1lLmNvbnRlbnRXaW5kb3chLnBvc3RNZXNzYWdlKG1lc3NhZ2UsIFwiKlwiKTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSByZWNlaXZlTWVzc2FnZShlOiBNZXNzYWdlRXZlbnQ8Q29udGVudFBsYXllck1lc3NhZ2U+KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGUuZGF0YS50eXBlID09IFwicmVnaXN0ZXJDb250ZW50XCIpIHtcclxuICAgICAgICAgICAgdGhpcy5zZW5kTWVzc2FnZSh7IHR5cGU6IFwiY29udGVudFNldHRpbmdzXCIsIGRhdGE6IHRoaXMuY29udGVudFNldHRpbmdzIH0pO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wcm9ncmVzc01hbmFnZXIuY2hlY2tQcm9ncmVzcyh0aGlzLmN1cnJlbnRBY3Rpdml0eS5sZWN0dXJlTnVtYmVyLCB0aGlzLmN1cnJlbnRBY3Rpdml0eS5hY3Rpdml0eU51bWJlcikpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoeyB0eXBlOiBcImFjdGl2aXR5U3RhdHVzXCIsIGRhdGE6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGUuZGF0YS50eXBlID09IFwicmVnaXN0ZXJDb250ZW50SGVpZ2h0XCIpe1xyXG4gICAgICAgICAgICB0aGlzLmlGcmFtZS5zdHlsZS5oZWlnaHQgPSBlLmRhdGEuZGF0YS5oZWlnaHQgKyAncHgnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZS5kYXRhLnR5cGUgPT0gXCJyZWdpc3RlckFjdGl2aXR5UHJvZ3Jlc3NcIikge1xyXG4gICAgICAgICAgICBsZXQgcHJvZ3Jlc3MgPSBlLmRhdGEuZGF0YSBhcyBBY3Rpdml0eVByb2dyZXNzO1xyXG4gICAgICAgICAgICBpZighdGhpcy5jb3Vyc2UuaW5TaW5nbGVMZWN0dXJlTW9kZSgpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrQXNEb25lKHRoaXMuY3VycmVudEFjdGl2aXR5LmxlY3R1cmVOdW1iZXIsIHRoaXMuY3VycmVudEFjdGl2aXR5LmFjdGl2aXR5TnVtYmVyKTtcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc01hbmFnZXIucmVjb3JkUHJvZ3Jlc3ModGhpcy5jdXJyZW50QWN0aXZpdHkubGVjdHVyZU51bWJlciwgdGhpcy5jdXJyZW50QWN0aXZpdHkuYWN0aXZpdHlOdW1iZXIsIHByb2dyZXNzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGUuZGF0YS50eXBlID09IFwiaGlkZUNvbnRlbnRNb2RhbFwiKXtcclxuICAgICAgICAgICAgaWYodGhpcy5zaG93aW5nTW9kYWwpe1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgID0gdGhpcy5zY3JvbGxQb3NpdGlvbkJlZm9yZU1vZGFsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93aW5nTW9kYWwgPSBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlLmRhdGEudHlwZSA9PSBcInNob3dDb250ZW50TW9kYWxcIil7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd2luZ01vZGFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxQb3NpdGlvbkJlZm9yZU1vZGFsID0gZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCAgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHRvZ2dsZUNsYXNzZXNPbkVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQsIC4uLmNzc0NsYXNzZXM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICAgICAgY3NzQ2xhc3Nlcy5mb3JFYWNoKGNzc0NsYXNzID0+IGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjc3NDbGFzcykpO1xyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIHpvb21XaXRoRmFjdG9yKHpvb21GYWN0b3I6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoeyB0eXBlOiBcInpvb21CeUZhY3RvclwiLCBkYXRhOiB6b29tRmFjdG9yIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIHNldEN1cnJlbnRUaXRsZSh0aXRsZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5sZWN0dXJlVGl0bGVIZWFkZXIuaW5uZXJIVE1MID0gdGl0bGU7XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgZnJhbWVBY3Rpdml0eShsZWN0dXJlTnVtYmVyOiBudW1iZXIsIGFjdGl2aXR5TnVtYmVyOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmlGcmFtZS5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgdGhpcy5jb3Vyc2UuZ2V0QWN0aXZpdHlVUkwobGVjdHVyZU51bWJlciwgYWN0aXZpdHlOdW1iZXIpKTtcclxuICAgICAgICB0aGlzLnNldEN1cnJlbnRUaXRsZSh0aGlzLmNvdXJzZS5hY3RpdmVfbGVzc29uc1tsZWN0dXJlTnVtYmVyXS5hY3RpdmVfYWN0aXZpdGllc1thY3Rpdml0eU51bWJlcl0udGl0bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNOYXZWaXNpYmxlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnROYXYuY2xhc3NMaXN0LmNvbnRhaW5zKFwiY29udGVudC1uYXYtb25cIik7XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgaXNTbWFsbFNjcmVlbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYWluLmNsaWVudFdpZHRoIDw9IFBldGxqYVBsYXllci5NRURJQV9RVUVSWV9XSURUSDtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVTZWN0aW9uKGxlY3R1cmVOdW1iZXI6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IGNvdXJzZUxlY3R1cmUgPSB0aGlzLmNvdXJzZS5hY3RpdmVfbGVzc29uc1tsZWN0dXJlTnVtYmVyXTtcclxuXHJcbiAgICAgICAgY29uc3QgY291cnNlU2VjdGlvbldyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgICAgIGNvdXJzZVNlY3Rpb25XcmFwcGVyLmNsYXNzTGlzdC5hZGQoXCJzZWN0aW9uLXdyYXBwZXJcIik7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvdXJzZVNlY3Rpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgICAgIGNvdXJzZVNlY3Rpb24uY2xhc3NMaXN0LmFkZChcImNvdXJzZS1zZWN0aW9uXCIpO1xyXG5cclxuICAgICAgICBjb25zdCBjb3Vyc2VTdWJTZWN0aW9uV3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgY291cnNlU3ViU2VjdGlvbldyYXBwZXIuY2xhc3NMaXN0LmFkZChcInRvZ2dsZS1vZmZcIiwgXCJzdWItc2VjdGlvbi13cmFwcGVyXCIpO1xyXG5cclxuICAgICAgICBjb25zdCBsZWN0dXJlVG9nZ2xlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgICBsZWN0dXJlVG9nZ2xlLmNsYXNzTGlzdC5hZGQoXCJsZWN0dXJlLXRvZ2dsZVwiKTtcclxuXHJcbiAgICAgICAgY29uc3QgbGVjdHVyZVRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XHJcbiAgICAgICAgbGVjdHVyZVRpdGxlLmNsYXNzTGlzdC5hZGQoXCJsZWN0dXJlLXRpdGxlXCIsIFwibm8tc2VsZWN0XCIpO1xyXG4gICAgICAgIGxlY3R1cmVUaXRsZS5pbm5lckhUTUwgPSBjb3Vyc2VMZWN0dXJlLnRpdGxlO1xyXG5cclxuICAgICAgICBjb25zdCB0b2dnbGVDYXJldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgdG9nZ2xlQ2FyZXQuY2xhc3NMaXN0LmFkZChcInRvZ2dsZS1jYXJldFwiKTtcclxuXHJcbiAgICAgICAgY29uc3QgY2FyZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaVwiKTtcclxuICAgICAgICBjYXJldC5jbGFzc0xpc3QuYWRkKFwiYmlcIiwgXCJiaS1jYXJldC1yaWdodFwiKTtcclxuICAgICAgICB0b2dnbGVDYXJldC5hcHBlbmQoY2FyZXQpO1xyXG5cclxuICAgICAgICBjb3Vyc2VTZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvdXJzZVN1YlNlY3Rpb25XcmFwcGVyLmNsYXNzTGlzdC50b2dnbGUoXCJ0b2dnbGUtb2ZmXCIpO1xyXG4gICAgICAgICAgICBjYXJldC5jbGFzc0xpc3QudG9nZ2xlKFwiYmktY2FyZXQtcmlnaHRcIilcclxuICAgICAgICAgICAgY2FyZXQuY2xhc3NMaXN0LnRvZ2dsZShcImJpLWNhcmV0LWRvd25cIik7XHJcbiAgICAgICAgfSlcclxuICAgICAgICBsZWN0dXJlVG9nZ2xlLmFwcGVuZChsZWN0dXJlVGl0bGUpO1xyXG4gICAgICAgIGNvdXJzZVNlY3Rpb24uYXBwZW5kKGxlY3R1cmVUb2dnbGUpO1xyXG4gICAgICAgIGNvdXJzZVNlY3Rpb24uYXBwZW5kKHRvZ2dsZUNhcmV0KTtcclxuICAgICAgICBjb3Vyc2VTZWN0aW9uV3JhcHBlci5hcHBlbmQoY291cnNlU2VjdGlvbik7XHJcblxyXG4gICAgICAgIGxldCBzdWJzZWN0aW9uczogQXJyYXk8c3Vic2VjdGlvbkhUTUxFbGVtZW50cz4gPSBuZXcgQXJyYXk8c3Vic2VjdGlvbkhUTUxFbGVtZW50cz4oKTtcclxuICAgICAgICBmb3IgKGxldCBhY3Rpdml0eU51bWJlciA9IDA7IGFjdGl2aXR5TnVtYmVyIDwgY291cnNlTGVjdHVyZS5hY3RpdmVfYWN0aXZpdGllcy5sZW5ndGg7IGFjdGl2aXR5TnVtYmVyKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgc3Vic2VjdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcclxuICAgICAgICAgICAgY29uc3Qgc3Vic2VjdGlvblN0YXR1cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpXCIpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2dyZXNzTWFuYWdlci5jaGVja1Byb2dyZXNzKGxlY3R1cmVOdW1iZXIsIGFjdGl2aXR5TnVtYmVyKSkge1xyXG4gICAgICAgICAgICAgICAgc3Vic2VjdGlvblN0YXR1cy5jbGFzc0xpc3QuYWRkKFwiYmlcIiwgXCJiaS1jaGVjay1sZ1wiLCBcImFjdGl2aXR5LXN0YXR1cy1kb25lXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QWN0aXZpdHkubGVjdHVyZU51bWJlciA9IGxlY3R1cmVOdW1iZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3Rpdml0eS5hY3Rpdml0eU51bWJlciA9IGFjdGl2aXR5TnVtYmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3Vic2VjdGlvblN0YXR1cy5jbGFzc0xpc3QuYWRkKFwiYmlcIiwgXCJiaS1kb3RcIiwgXCJhY3Rpdml0eS1zdGF0dXMtbm90LWRvbmVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc3Vic2VjdGlvblRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxyXG4gICAgICAgICAgICBzdWJzZWN0aW9uVGl0bGUuaW5uZXJIVE1MID0gY291cnNlTGVjdHVyZS5hY3RpdmVfYWN0aXZpdGllc1thY3Rpdml0eU51bWJlcl0udGl0bGU7XHJcbiAgICAgICAgICAgIHN1YnNlY3Rpb24uY2xhc3NMaXN0LmFkZChcInN1YnNlY3Rpb25cIiwgXCJuby1zZWxlY3RcIilcclxuICAgICAgICAgICAgc3Vic2VjdGlvbi5hcHBlbmQoc3Vic2VjdGlvblN0YXR1cylcclxuICAgICAgICAgICAgc3Vic2VjdGlvbi5hcHBlbmQoc3Vic2VjdGlvblRpdGxlKVxyXG5cclxuICAgICAgICAgICAgc3Vic2VjdGlvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTbWFsbFNjcmVlbigpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVDbGFzc2VzT25FbGVtZW50KHRoaXMuY29udGVudE5hdiwgXCJjb250ZW50LW5hdi1vblwiLCBcImNvbnRlbnQtbmF2LW9mZlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVDbGFzc2VzT25FbGVtZW50KHRoaXMuY291cnNlQ29udGVudCwgXCJjb3Vyc2UtY29udGVudC10b2NcIiwgXCJjb3Vyc2UtY29udGVudC1mc1wiKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEFjdGl2aXR5LmxlY3R1cmVOdW1iZXIgIT09IGxlY3R1cmVOdW1iZXIgfHwgdGhpcy5jdXJyZW50QWN0aXZpdHkuYWN0aXZpdHlOdW1iZXIgIT09IGFjdGl2aXR5TnVtYmVyKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkNvbnRlbnRBY3Rpdml0eShsZWN0dXJlTnVtYmVyLCBhY3Rpdml0eU51bWJlcik7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgY291cnNlU3ViU2VjdGlvbldyYXBwZXIuYXBwZW5kKHN1YnNlY3Rpb24pXHJcbiAgICAgICAgICAgIHN1YnNlY3Rpb25zLnB1c2goeyBzdWJzZWN0aW9uOiBzdWJzZWN0aW9uLCBzZWN0aW9uU3RhdHVzOiBzdWJzZWN0aW9uU3RhdHVzIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubGVjdHVyZUhUTUxFbGVtZW50cy5wdXNoKHsgc2VjdGlvbkhUTUw6IGNvdXJzZVN1YlNlY3Rpb25XcmFwcGVyLCBjYXJldEhUTUw6IGNhcmV0LCBzdWJzZWN0aW9uczogc3Vic2VjdGlvbnMgfSlcclxuICAgICAgICBjb3Vyc2VTZWN0aW9uV3JhcHBlci5hcHBlbmQoY291cnNlU3ViU2VjdGlvbldyYXBwZXIpO1xyXG4gICAgICAgIHRoaXMudG9jLmFwcGVuZChjb3Vyc2VTZWN0aW9uV3JhcHBlcik7XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgb3BlbkNvbnRlbnRBY3Rpdml0eShsZWN0dXJlTnVtYmVyOiBudW1iZXIsIGFjdGl2aXR5TnVtYmVyOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmZyYW1lQWN0aXZpdHkobGVjdHVyZU51bWJlciwgYWN0aXZpdHlOdW1iZXIpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEFjdGl2aXR5LmxlY3R1cmVOdW1iZXIgPSBsZWN0dXJlTnVtYmVyO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEFjdGl2aXR5LmFjdGl2aXR5TnVtYmVyID0gYWN0aXZpdHlOdW1iZXI7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvdXJzZS5pblNpbmdsZUxlY3R1cmVNb2RlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3Vic2VjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKFwic2VsZWN0ZWQtc3Vic2VjdGlvblwiKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3Vic2VjdGlvbiA9IHRoaXMubGVjdHVyZUhUTUxFbGVtZW50c1tsZWN0dXJlTnVtYmVyXS5zdWJzZWN0aW9uc1thY3Rpdml0eU51bWJlcl0uc3Vic2VjdGlvbjtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3Vic2VjdGlvbi5jbGFzc0xpc3QuYWRkKFwic2VsZWN0ZWQtc3Vic2VjdGlvblwiKTtcclxuICAgICAgICAgICAgdGhpcy5sZWN0dXJlSFRNTEVsZW1lbnRzW2xlY3R1cmVOdW1iZXJdLnNlY3Rpb25IVE1MLmNsYXNzTGlzdC5yZW1vdmUoXCJ0b2dnbGUtb2ZmXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmxlY3R1cmVIVE1MRWxlbWVudHNbbGVjdHVyZU51bWJlcl0uY2FyZXRIVE1MLmNsYXNzTGlzdC5yZXBsYWNlKFwiYmktY2FyZXQtcmlnaHRcIiwgXCJiaS1jYXJldC1kb3duXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvblN0YXR1cyhsZWN0dXJlTnVtYmVyLCBhY3Rpdml0eU51bWJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWFya0FzRG9uZShsZWN0dXJlTnVtYmVyOiBudW1iZXIsIGFjdGl2aXR5TnVtYmVyOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmxlY3R1cmVIVE1MRWxlbWVudHNbbGVjdHVyZU51bWJlcl0uc3Vic2VjdGlvbnNbYWN0aXZpdHlOdW1iZXJdLnNlY3Rpb25TdGF0dXMuY2xhc3NMaXN0LnJlcGxhY2UoXCJhY3Rpdml0eS1zdGF0dXMtbm90LWRvbmVcIiwgXCJhY3Rpdml0eS1zdGF0dXMtZG9uZVwiKTtcclxuICAgICAgICB0aGlzLmxlY3R1cmVIVE1MRWxlbWVudHNbbGVjdHVyZU51bWJlcl0uc3Vic2VjdGlvbnNbYWN0aXZpdHlOdW1iZXJdLnNlY3Rpb25TdGF0dXMuY2xhc3NMaXN0LnJlcGxhY2UoXCJiaS1kb3RcIiwgXCJiaS1jaGVjay1sZ1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUJ1dHRvblN0YXR1cyhsZWN0dXJlTnVtYmVyOiBudW1iZXIsIGFjdGl2aXR5TnVtYmVyOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY291cnNlLmlzTmV4dExlY3R1cmVQb3NzaWJsZSh7IGxlY3R1cmVOdW1iZXI6IGxlY3R1cmVOdW1iZXIsIGFjdGl2aXR5TnVtYmVyOiBhY3Rpdml0eU51bWJlciB9KSkge1xyXG4gICAgICAgICAgICB0aGlzLm5leHRBY3Rpdml0eUJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm5leHRBY3Rpdml0eUJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuY291cnNlLmlzUHJldmlvdXNMZWN0dXJlUG9zc2libGUoeyBsZWN0dXJlTnVtYmVyOiBsZWN0dXJlTnVtYmVyLCBhY3Rpdml0eU51bWJlcjogYWN0aXZpdHlOdW1iZXIgfSkpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0FjdGl2aXR5QnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNBY3Rpdml0eUJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgZnVuY3Rpb24gQ29udmVydE1pbGxpU2Vjb25kc1RvU0NPUk1UaW1lKGludFRvdGFsTWlsbGlzZWNvbmRzOiBudW1iZXIsIGJsbkluY2x1ZGVGcmFjdGlvbjogYm9vbGVhbikge1xyXG4gICAgbGV0IGludEhvdXJzOiBudW1iZXI7XHJcbiAgICBsZXQgaW50TWludXRlczogbnVtYmVyO1xyXG4gICAgbGV0IGludFNlY29uZHM6IG51bWJlcjtcclxuICAgIGxldCBpbnRNaWxsaXNlY29uZHM6IG51bWJlcjtcclxuICAgIGxldCBpbnRIdW5kcmVkdGhzOiBudW1iZXI7XHJcbiAgICBsZXQgc3RyQ01JVGltZVNwYW46IHN0cmluZztcclxuXHJcbiAgICBpZiAoYmxuSW5jbHVkZUZyYWN0aW9uID09IG51bGwgfHwgYmxuSW5jbHVkZUZyYWN0aW9uID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGJsbkluY2x1ZGVGcmFjdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy9leHRyYWN0IHRpbWUgcGFydHNcclxuICAgIGludE1pbGxpc2Vjb25kcyA9IGludFRvdGFsTWlsbGlzZWNvbmRzICUgMTAwMDtcclxuXHJcbiAgICBpbnRTZWNvbmRzID0gKChpbnRUb3RhbE1pbGxpc2Vjb25kcyAtIGludE1pbGxpc2Vjb25kcykgLyAxMDAwKSAlIDYwO1xyXG5cclxuICAgIGludE1pbnV0ZXMgPSAoKGludFRvdGFsTWlsbGlzZWNvbmRzIC0gaW50TWlsbGlzZWNvbmRzIC0gKGludFNlY29uZHMgKiAxMDAwKSkgLyA2MDAwMCkgJSA2MDtcclxuXHJcbiAgICBpbnRIb3VycyA9IChpbnRUb3RhbE1pbGxpc2Vjb25kcyAtIGludE1pbGxpc2Vjb25kcyAtIChpbnRTZWNvbmRzICogMTAwMCkgLSAoaW50TWludXRlcyAqIDYwMDAwKSkgLyAzNjAwMDAwO1xyXG5cclxuXHJcbiAgICBpZiAoaW50SG91cnMgPT0gMTAwMDApIHtcclxuICAgICAgICBpbnRIb3VycyA9IDk5OTk7XHJcblxyXG4gICAgICAgIGludE1pbnV0ZXMgPSAoaW50VG90YWxNaWxsaXNlY29uZHMgLSAoaW50SG91cnMgKiAzNjAwMDAwKSkgLyA2MDAwMDtcclxuICAgICAgICBpZiAoaW50TWludXRlcyA9PSAxMDApIHtcclxuICAgICAgICAgICAgaW50TWludXRlcyA9IDk5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbnRNaW51dGVzID0gTWF0aC5mbG9vcihpbnRNaW51dGVzKTtcclxuXHJcbiAgICAgICAgaW50U2Vjb25kcyA9IChpbnRUb3RhbE1pbGxpc2Vjb25kcyAtIChpbnRIb3VycyAqIDM2MDAwMDApIC0gKGludE1pbnV0ZXMgKiA2MDAwMCkpIC8gMTAwMDtcclxuICAgICAgICBpZiAoaW50U2Vjb25kcyA9PSAxMDApIHtcclxuICAgICAgICAgICAgaW50U2Vjb25kcyA9IDk5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbnRTZWNvbmRzID0gTWF0aC5mbG9vcihpbnRTZWNvbmRzKTtcclxuXHJcbiAgICAgICAgaW50TWlsbGlzZWNvbmRzID0gKGludFRvdGFsTWlsbGlzZWNvbmRzIC0gKGludEhvdXJzICogMzYwMDAwMCkgLSAoaW50TWludXRlcyAqIDYwMDAwKSAtIChpbnRTZWNvbmRzICogMTAwMCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vZHJvcCB0aGUgZXh0cmEgcHJlY2lzaW9uIGZyb20gdGhlIG1pbGxpc2Vjb25kc1xyXG4gICAgaW50SHVuZHJlZHRocyA9IE1hdGguZmxvb3IoaW50TWlsbGlzZWNvbmRzIC8gMTApO1xyXG5cclxuICAgIC8vcHV0IGluIHBhZGRpbmcgMCdzIGFuZCBjb25jYXRpbmF0ZSB0byBnZXQgdGhlIHByb3BlciBmb3JtYXRcclxuICAgIHN0ckNNSVRpbWVTcGFuID0gWmVyb1BhZChpbnRIb3VycywgNCkgKyBcIjpcIiArIFplcm9QYWQoaW50TWludXRlcywgMikgKyBcIjpcIiArIFplcm9QYWQoaW50U2Vjb25kcywgMik7XHJcblxyXG4gICAgaWYgKGJsbkluY2x1ZGVGcmFjdGlvbikge1xyXG4gICAgICAgIHN0ckNNSVRpbWVTcGFuICs9IFwiLlwiICsgaW50SHVuZHJlZHRocztcclxuICAgIH1cclxuXHJcbiAgICAvL2NoZWNrIGZvciBjYXNlIHdoZXJlIHRvdGFsIG1pbGxpc2Vjb25kcyBpcyBncmVhdGVyIHRoYW4gbWF4IHN1cHBvcnRlZCBieSBzdHJDTUlUaW1lU3BhblxyXG4gICAgaWYgKGludEhvdXJzID4gOTk5OSkge1xyXG4gICAgICAgIHN0ckNNSVRpbWVTcGFuID0gXCI5OTk5Ojk5Ojk5XCI7XHJcblxyXG4gICAgICAgIGlmIChibG5JbmNsdWRlRnJhY3Rpb24pIHtcclxuICAgICAgICAgICAgc3RyQ01JVGltZVNwYW4gKz0gXCIuOTlcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN0ckNNSVRpbWVTcGFuO1xyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gWmVyb1BhZChpbnROdW06IG51bWJlciwgaW50TnVtRGlnaXRzOiBudW1iZXIpIHtcclxuICAgIHZhciBzdHJUZW1wOiBzdHJpbmc7XHJcbiAgICB2YXIgaW50TGVuOiBudW1iZXI7XHJcblxyXG4gICAgc3RyVGVtcCA9IGludE51bS50b1N0cmluZygpO1xyXG4gICAgaW50TGVuID0gc3RyVGVtcC5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGludExlbiA+IGludE51bURpZ2l0cykge1xyXG4gICAgICAgIHN0clRlbXAgPSBzdHJUZW1wLnN1YnN0cmluZygwLCBpbnROdW1EaWdpdHMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IGludExlbjsgaSA8IGludE51bURpZ2l0czsgaSsrKSB7XHJcbiAgICAgICAgICAgIHN0clRlbXAgPSBcIjBcIiArIHN0clRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHJUZW1wO1xyXG59XHJcblxyXG5jb25zdCBGSU5EX0FQSV9UUklFU19MSU1JVCA9IDdcclxuXHJcbmZ1bmN0aW9uIGZpbmRBUEkod2luIDogYW55KSB7XHJcbiAgICBsZXQgdHJpZXMgPSAwXHJcbiAgICB3aGlsZSAoKHdpbi5BUEkgPT0gbnVsbCkgJiZcclxuICAgICAgICAod2luLnBhcmVudCAhPSBudWxsKSAmJlxyXG4gICAgICAgICh3aW4ucGFyZW50ICE9IHdpbikgJiYgXHJcbiAgICAgICAgKHRyaWVzIDwgRklORF9BUElfVFJJRVNfTElNSVQpKSB7XHJcblxyXG4gICAgICAgIGlmICh0cmllcyA+IEZJTkRfQVBJX1RSSUVTX0xJTUlUKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJpZXMrKztcclxuICAgICAgICB3aW4gPSB3aW5kb3cucGFyZW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHdpbi5BUEk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRTY29ybUFQSSgpIHtcclxuICAgIGxldCB0aGVBUEkgPSBmaW5kQVBJKHdpbmRvdyk7XHJcblxyXG4gICAgaWYgKCh0aGVBUEkgPT0gbnVsbCkgJiZcclxuICAgICAgICAod2luZG93Lm9wZW5lciAhPSBudWxsKSAmJlxyXG4gICAgICAgICh0eXBlb2YgKHdpbmRvdy5vcGVuZXIpICE9IFwidW5kZWZpbmVkXCIpKSB7XHJcblxyXG4gICAgICAgIHRoZUFQSSA9IGZpbmRBUEkod2luZG93Lm9wZW5lcik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhlQVBJO1xyXG59XHJcblxyXG5jb25zdCBTQ09STV9UUlVFID0gXCJ0cnVlXCI7XHJcbmNvbnN0IFNDT1JNX0ZBTFNFID0gXCJmYWxzZVwiO1xyXG5jb25zdCBTQ09STV9OT19FUlJPUiA9IFwiMFwiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBTY29ybVdyYXBwZXJ7XHJcbiAgICBzdGFydFRpbWVTdGFtcCA6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgZmluaXNoQ2FsbGVkID0gZmFsc2U7XHJcbiAgICBpbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgcHJvY2Vzc2VkVW5sb2FkID0gZmFsc2U7XHJcbiAgICByZWFjaGVkRW5kID0gZmFsc2U7XHJcblxyXG5cclxuY29uc3RydWN0b3IocHJpdmF0ZSBBUEkgOiBhbnkpe1xyXG4gICAgdGhpcy5TY29ybVByb2Nlc3NJbml0aWFsaXplKCk7XHJcbiAgICB0aGlzLnN0YXJ0VGltZVN0YW1wID0gbmV3IERhdGUoKTtcclxufVxyXG5cclxuXHJcbmNvbW1pdCgpIHtcclxuICAgIHRoaXMuQVBJLkxNU0NvbW1pdChcIlwiKTtcclxufVxyXG5cclxuXHJcblxyXG5TY29ybVByb2Nlc3NJbml0aWFsaXplKCl7XHJcbiAgICBsZXQgcmVzdWx0O1xyXG4gICAgXHJcbiAgICByZXN1bHQgPSB0aGlzLkFQSS5MTVNJbml0aWFsaXplKFwiXCIpO1xyXG4gICAgXHJcbiAgICBpZiAocmVzdWx0ID09IFNDT1JNX0ZBTFNFKXtcclxuICAgICAgICB2YXIgZXJyb3JOdW1iZXIgPSB0aGlzLkFQSS5MTVNHZXRMYXN0RXJyb3IoKTtcclxuICAgICAgICB2YXIgZXJyb3JTdHJpbmcgPSB0aGlzLkFQSS5MTVNHZXRFcnJvclN0cmluZyhlcnJvck51bWJlcik7XHJcbiAgICAgICAgdmFyIGRpYWdub3N0aWMgPSB0aGlzLkFQSS5MTVNHZXREaWFnbm9zdGljKGVycm9yTnVtYmVyKTtcclxuICAgICAgICBcclxuICAgICAgICB2YXIgZXJyb3JEZXNjcmlwdGlvbiA9IFwiTnVtYmVyOiBcIiArIGVycm9yTnVtYmVyICsgXCJcXG5EZXNjcmlwdGlvbjogXCIgKyBlcnJvclN0cmluZyArIFwiXFxuRGlhZ25vc3RpYzogXCIgKyBkaWFnbm9zdGljO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgLSBDb3VsZCBub3QgaW5pdGlhbGl6ZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIExNUy5cXG5cXG5Zb3VyIHJlc3VsdHMgbWF5IG5vdCBiZSByZWNvcmRlZC5cXG5cXG5cIiArIGVycm9yRGVzY3JpcHRpb24pO1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5pbml0aWFsaXplZCAgPSB0cnVlO1xyXG59XHJcblxyXG5TY29ybVByb2Nlc3NGaW5pc2goKXtcclxuICAgIFxyXG4gICAgdmFyIHJlc3VsdDtcclxuICAgIFxyXG4gICAgLy9Eb24ndCB0ZXJtaW5hdGUgaWYgd2UgaGF2ZW4ndCBpbml0aWFsaXplZCBvciBpZiB3ZSd2ZSBhbHJlYWR5IHRlcm1pbmF0ZWRcclxuICAgIGlmICh0aGlzLmluaXRpYWxpemVkID09IGZhbHNlIHx8IHRoaXMuZmluaXNoQ2FsbGVkID09IHRydWUpe3JldHVybjt9XHJcbiAgICBcclxuICAgIHJlc3VsdCA9IHRoaXMuQVBJLkxNU0ZpbmlzaChcIlwiKTtcclxuICAgIFxyXG4gICAgdGhpcy5maW5pc2hDYWxsZWQgPSB0cnVlO1xyXG4gICAgXHJcbiAgICBpZiAocmVzdWx0ID09IFNDT1JNX0ZBTFNFKXtcclxuICAgICAgICB2YXIgZXJyb3JOdW1iZXIgPSB0aGlzLkFQSS5MTVNHZXRMYXN0RXJyb3IoKTtcclxuICAgICAgICB2YXIgZXJyb3JTdHJpbmcgPSB0aGlzLkFQSS5MTVNHZXRFcnJvclN0cmluZyhlcnJvck51bWJlcik7XHJcbiAgICAgICAgdmFyIGRpYWdub3N0aWMgPSB0aGlzLkFQSS5MTVNHZXREaWFnbm9zdGljKGVycm9yTnVtYmVyKTtcclxuICAgICAgICBcclxuICAgICAgICB2YXIgZXJyb3JEZXNjcmlwdGlvbiA9IFwiTnVtYmVyOiBcIiArIGVycm9yTnVtYmVyICsgXCJcXG5EZXNjcmlwdGlvbjogXCIgKyBlcnJvclN0cmluZyArIFwiXFxuRGlhZ25vc3RpYzogXCIgKyBkaWFnbm9zdGljO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgLSBDb3VsZCBub3QgdGVybWluYXRlIGNvbW11bmljYXRpb24gd2l0aCB0aGUgTE1TLlxcblxcbllvdXIgcmVzdWx0cyBtYXkgbm90IGJlIHJlY29yZGVkLlxcblxcblwiICsgZXJyb3JEZXNjcmlwdGlvbik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuU2Nvcm1Qcm9jZXNzR2V0VmFsdWUoZWxlbWVudCA6IHN0cmluZyl7XHJcbiAgICBcclxuICAgIHZhciByZXN1bHQ7XHJcbiAgICBcclxuICAgIGlmICh0aGlzLmluaXRpYWxpemVkID09IGZhbHNlIHx8IHRoaXMuZmluaXNoQ2FsbGVkID09IHRydWUpe3JldHVybjt9XHJcbiAgICBcclxuICAgIHJlc3VsdCA9IHRoaXMuQVBJLkxNU0dldFZhbHVlKGVsZW1lbnQpO1xyXG4gICAgXHJcbiAgICBpZiAocmVzdWx0ID09IFwiXCIpe1xyXG4gICAgXHJcbiAgICAgICAgdmFyIGVycm9yTnVtYmVyID0gdGhpcy5BUEkuTE1TR2V0TGFzdEVycm9yKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGVycm9yTnVtYmVyICE9IFNDT1JNX05PX0VSUk9SKXtcclxuICAgICAgICAgICAgdmFyIGVycm9yU3RyaW5nID0gdGhpcy5BUEkuTE1TR2V0RXJyb3JTdHJpbmcoZXJyb3JOdW1iZXIpO1xyXG4gICAgICAgICAgICB2YXIgZGlhZ25vc3RpYyA9IHRoaXMuQVBJLkxNU0dldERpYWdub3N0aWMoZXJyb3JOdW1iZXIpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIGVycm9yRGVzY3JpcHRpb24gPSBcIk51bWJlcjogXCIgKyBlcnJvck51bWJlciArIFwiXFxuRGVzY3JpcHRpb246IFwiICsgZXJyb3JTdHJpbmcgKyBcIlxcbkRpYWdub3N0aWM6IFwiICsgZGlhZ25vc3RpYztcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgLSBDb3VsZCBub3QgcmV0cmlldmUgYSB2YWx1ZSBmcm9tIHRoZSBMTVMuXFxuXFxuXCIgKyBlcnJvckRlc2NyaXB0aW9uKTtcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5TY29ybVByb2Nlc3NTZXRWYWx1ZShlbGVtZW50IDogc3RyaW5nLCB2YWx1ZSA6IHN0cmluZyl7XHJcbiAgIFxyXG4gICAgdmFyIHJlc3VsdDtcclxuICAgIFxyXG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQgPT0gZmFsc2UgfHwgdGhpcy5maW5pc2hDYWxsZWQgPT0gdHJ1ZSl7cmV0dXJuO31cclxuICAgIFxyXG4gICAgcmVzdWx0ID0gdGhpcy5BUEkuTE1TU2V0VmFsdWUoZWxlbWVudCwgdmFsdWUpO1xyXG4gICAgXHJcbiAgICBpZiAocmVzdWx0ID09IFNDT1JNX0ZBTFNFKXtcclxuICAgICAgICB2YXIgZXJyb3JOdW1iZXIgPSB0aGlzLkFQSS5MTVNHZXRMYXN0RXJyb3IoKTtcclxuICAgICAgICB2YXIgZXJyb3JTdHJpbmcgPSB0aGlzLkFQSS5MTVNHZXRFcnJvclN0cmluZyhlcnJvck51bWJlcik7XHJcbiAgICAgICAgdmFyIGRpYWdub3N0aWMgPSB0aGlzLkFQSS5MTVNHZXREaWFnbm9zdGljKGVycm9yTnVtYmVyKTtcclxuICAgICAgICBcclxuICAgICAgICB2YXIgZXJyb3JEZXNjcmlwdGlvbiA9IFwiTnVtYmVyOiBcIiArIGVycm9yTnVtYmVyICsgXCJcXG5EZXNjcmlwdGlvbjogXCIgKyBlcnJvclN0cmluZyArIFwiXFxuRGlhZ25vc3RpYzogXCIgKyBkaWFnbm9zdGljO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgLSBDb3VsZCBub3Qgc3RvcmUgYSB2YWx1ZSBpbiB0aGUgTE1TLlxcblxcbllvdXIgcmVzdWx0cyBtYXkgbm90IGJlIHJlY29yZGVkLlxcblxcblwiICsgZXJyb3JEZXNjcmlwdGlvbik7XHJcbiAgICB9XHJcbiAgICBcclxufVxyXG5cclxuZmluaXNoU2luZ2xlQWN0aXZpdHlDb3Vyc2UoKXtcclxuICAgIHRoaXMucmVhY2hlZEVuZCA9IHRydWU7XHJcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLlNjb3JtUHJvY2Vzc0dldFZhbHVlKCdjbWkub2JqZWN0aXZlcy4wLnN0YXR1cycpXHJcbiAgICBjb25zdCBtYXhTY29yZSA9IHRoaXMuU2Nvcm1Qcm9jZXNzR2V0VmFsdWUoJ2NtaS5vYmplY3RpdmVzLjAuc2NvcmUubWF4JylcclxuICAgIGNvbnN0IG1pblNjb3JlID0gdGhpcy5TY29ybVByb2Nlc3NHZXRWYWx1ZSgnY21pLm9iamVjdGl2ZXMuMC5zY29yZS5taW4nKVxyXG4gICAgY29uc3QgcmF3U2NvcmUgPSB0aGlzLlNjb3JtUHJvY2Vzc0dldFZhbHVlKCdjbWkub2JqZWN0aXZlcy4wLnNjb3JlLnJhdycpXHJcbiAgICB0aGlzLlNjb3JtUHJvY2Vzc1NldFZhbHVlKFwiY21pLmNvcmUuc2NvcmUubWF4XCIsIG1heFNjb3JlKTtcclxuICAgIHRoaXMuU2Nvcm1Qcm9jZXNzU2V0VmFsdWUoXCJjbWkuY29yZS5zY29yZS5taW5cIiwgbWluU2NvcmUpO1xyXG4gICAgdGhpcy5TY29ybVByb2Nlc3NTZXRWYWx1ZShcImNtaS5jb3JlLnNjb3JlLnJhd1wiLCByYXdTY29yZSk7XHJcbiAgICB0aGlzLlNjb3JtUHJvY2Vzc1NldFZhbHVlKFwiY21pLmNvcmUubGVzc29uX3N0YXR1c1wiLCBzdGF0dXMpO1xyXG59XHJcblxyXG5zZXRGaW5pc2hDb3Vyc2UoKSB7XHJcbiAgICB0aGlzLnJlYWNoZWRFbmQgPSB0cnVlO1xyXG4gICAgdGhpcy5TY29ybVByb2Nlc3NTZXRWYWx1ZShcImNtaS5jb3JlLnNjb3JlLm1heFwiLCBcIjEwMFwiKTtcclxuICAgIHRoaXMuU2Nvcm1Qcm9jZXNzU2V0VmFsdWUoXCJjbWkuY29yZS5zY29yZS5taW5cIiwgXCIwXCIpO1xyXG4gICAgdGhpcy5TY29ybVByb2Nlc3NTZXRWYWx1ZShcImNtaS5jb3JlLnNjb3JlLnJhd1wiLCBcIjEwMFwiKTtcclxuICAgIHRoaXMuU2Nvcm1Qcm9jZXNzU2V0VmFsdWUoXCJjbWkuY29yZS5sZXNzb25fc3RhdHVzXCIsIFwiY29tcGxldGVkXCIpO1xyXG4gIH1cclxuXHJcblxyXG4gIHVwZGF0ZUNvdXJzZVByb2dyZXNzKHBlcmNlbnQgOiBudW1iZXIpIHtcclxuICAgIHRoaXMuU2Nvcm1Qcm9jZXNzU2V0VmFsdWUoXCJjbWkuY29yZS5zY29yZS5tYXhcIiwgXCIxMDBcIik7XHJcbiAgICB0aGlzLlNjb3JtUHJvY2Vzc1NldFZhbHVlKFwiY21pLmNvcmUuc2NvcmUubWluXCIsIFwiMFwiKTtcclxuICAgIHRoaXMuU2Nvcm1Qcm9jZXNzU2V0VmFsdWUoXCJjbWkuY29yZS5zY29yZS5yYXdcIiwgcGVyY2VudC50b0ZpeGVkKDIpKTtcclxuICAgIHRoaXMuU2Nvcm1Qcm9jZXNzU2V0VmFsdWUoXCJjbWkuY29yZS5sZXNzb25fc3RhdHVzXCIsIFwiY29tcGxldGVkXCIpO1xyXG4gIH1cclxuZG9VbmxvYWQocHJlc3NlZEV4aXQgOiBib29sZWFuID0gdHJ1ZSl7XHJcbiAgICBcclxuICAgIC8vZG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHR3aWNlXHJcbiAgICBpZiAodGhpcy5wcm9jZXNzZWRVbmxvYWQgPT0gdHJ1ZSl7cmV0dXJuO31cclxuICAgIFxyXG4gICAgdGhpcy5wcm9jZXNzZWRVbmxvYWQgPSB0cnVlO1xyXG4gICAgXHJcbiAgICAvL3JlY29yZCB0aGUgc2Vzc2lvbiB0aW1lXHJcbiAgICB2YXIgZW5kVGltZVN0YW1wID0gbmV3IERhdGUoKTtcclxuICAgIHZhciB0b3RhbE1pbGxpc2Vjb25kcyA9IChlbmRUaW1lU3RhbXAuZ2V0VGltZSgpIC0gdGhpcy5zdGFydFRpbWVTdGFtcC5nZXRUaW1lKCkpO1xyXG4gICAgdmFyIHNjb3JtVGltZSA9IENvbnZlcnRNaWxsaVNlY29uZHNUb1NDT1JNVGltZSh0b3RhbE1pbGxpc2Vjb25kcywgZmFsc2UpO1xyXG4gICAgXHJcbiAgICB0aGlzLlNjb3JtUHJvY2Vzc1NldFZhbHVlKFwiY21pLmNvcmUuc2Vzc2lvbl90aW1lXCIsIHNjb3JtVGltZSk7XHJcbiAgICBcclxuICAgIC8vaWYgdGhlIHVzZXIganVzdCBjbG9zZXMgdGhlIGJyb3dzZXIsIHdlIHdpbGwgZGVmYXVsdCB0byBzYXZpbmcgXHJcbiAgICAvL3RoZWlyIHByb2dyZXNzIGRhdGEuIElmIHRoZSB1c2VyIHByZXNzZXMgZXhpdCwgaGUgaXMgcHJvbXB0ZWQuXHJcbiAgICAvL0lmIHRoZSB1c2VyIHJlYWNoZWQgdGhlIGVuZCwgdGhlIGV4aXQgbm9ybWFsbCB0byBzdWJtaXQgcmVzdWx0cy5cclxuICAgIGlmIChwcmVzc2VkRXhpdCA9PSBmYWxzZSAmJiB0aGlzLnJlYWNoZWRFbmQgPT0gZmFsc2Upe1xyXG4gICAgICAgIHRoaXMuU2Nvcm1Qcm9jZXNzU2V0VmFsdWUoXCJjbWkuY29yZS5leGl0XCIsIFwic3VzcGVuZFwiKTtcclxuICAgIH1cclxuICAgIHRoaXMuY29tbWl0KCk7XHJcbiAgICB0aGlzLlNjb3JtUHJvY2Vzc0ZpbmlzaCgpO1xyXG59XHJcbn0iLCJpbXBvcnQgeyBDb3Vyc2VKU09OSW50ZXJmYWNlLCBDb3Vyc2VKU09OLCBMb2NhbFN0b3JhZ2VNYW5hZ2VyLCBTY29ybVN0b3JhZ2UsIE1vY1N0b3JhZ2UsIENvdXJzZVN0b3JhZ2UsIGlzTG9jYWxTdG9yYWdlSXNBdmFpbGFibGUgfSBmcm9tIFwiLi91dGlsL1V0aWxzXCJcclxuaW1wb3J0IHsgUGV0bGphUGxheWVyIH0gZnJvbSBcIi4vbW9kZWwvUGV0bGphUGxheWVyXCI7XHJcbmltcG9ydCB7IGdldFNjb3JtQVBJLCBTY29ybVdyYXBwZXIgfSBmcm9tIFwiLi91dGlsL1Njb3JtVXRpbFwiO1xyXG5yZXF1aXJlKFwiLi9jc3Mvc3R5bGUuY3NzXCIpXHJcblxyXG52YXIgcGV0bGphUGxheWVyO1xyXG5jb25zdCBDT1VSU0VfVE9DX0pTT05fUEFUSCA9IFwiY291cnNlLmpzb25cIlxyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBjb250ZW50VVJMID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1haW4taWZyYW1lXCIpLmdldEF0dHJpYnV0ZShcImRhdGEtY29udGVudC11cmxcIik7XHJcbiAgICBmZXRjaChDT1VSU0VfVE9DX0pTT05fUEFUSClcclxuICAgICAgICAudGhlbigoZGF0YSkgPT4gZGF0YS5qc29uKCkpXHJcbiAgICAgICAgLnRoZW4oKGNvdXJzZSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgc3RvcmFnZSA6IENvdXJzZVN0b3JhZ2U7XHJcbiAgICAgICAgICAgIGxldCBjb3Vyc2VKU09OID0gbmV3IENvdXJzZUpTT04oY291cnNlIGFzIENvdXJzZUpTT05JbnRlcmZhY2UsIGNvbnRlbnRVUkwpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHNjcm9tQVBJICA9IGdldFNjb3JtQVBJKCk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2Nyb21BUEkgIT09ICd1bmRlZmluZWQnICYmIHNjcm9tQVBJICE9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgIGxldCBzY29ybVdyYXBwZXIgPSBuZXcgU2Nvcm1XcmFwcGVyKHNjcm9tQVBJKVxyXG4gICAgICAgICAgICAgICAgc3RvcmFnZSA9IG5ldyBTY29ybVN0b3JhZ2Uoc2Nvcm1XcmFwcGVyLCBjb3Vyc2VKU09OKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib25iZWZvcmV1bmxvYWRcIiwoKSA9PiAge3Njb3JtV3JhcHBlci5kb1VubG9hZChmYWxzZSk7fSk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9udW5sb2FkXCIsICgpID0+IHtzY29ybVdyYXBwZXIuZG9VbmxvYWQoKTt9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc0xvY2FsU3RvcmFnZUlzQXZhaWxhYmxlKCkpXHJcbiAgICAgICAgICAgICAgICBzdG9yYWdlID0gbmV3IExvY2FsU3RvcmFnZU1hbmFnZXIoY291cnNlSlNPTi50aXRsZSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBuZXcgTW9jU3RvcmFnZSgpO1xyXG4gICAgICAgICAgICBwZXRsamFQbGF5ZXIgPSBuZXcgUGV0bGphUGxheWVyKGNvdXJzZUpTT04sIHN0b3JhZ2UpO1xyXG4gICAgICAgIH0pXHJcbn0pO1xyXG5cclxuXHJcbiJdLCJuYW1lcyI6WyJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJ1bmRlZmluZWQiLCJleHBvcnRzIiwibW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJidWlsZFBhdGgiLCJhY3RpdmVfbGVzc29ucyIsImV4dGVybmFsTGlua0xpbmtzIiwiZXh0ZXJuYWxMaW5rVGV4dHMiLCJsYW5nIiwibG9uZ0Rlc2MiLCJuYXZfbGluayIsInJlcXVpcmVtZW50cyIsInNob3J0RGVzYyIsInRvYyIsInRpdGxlIiwid2lsbExlYXJuIiwieCIsImFzc2lnbiIsInRoaXMiLCJvcmRlciIsImkiLCJsZW5ndGgiLCJqIiwiYWN0aXZlX2FjdGl2aXRpZXMiLCJjb25jYXRMZWN0dXJlQWN0aXZpdHkiLCJnZXRMZXNzb25zQ291bnQiLCJnZXRBY3Rpdml0eU9yZGVyTnVtYmVyIiwiY3VycmVudExlY3R1cmUiLCJsZWN0dXJlTnVtYmVyIiwiYWN0aXZpdHlOdW1iZXIiLCJnZXRBY3Rpdml0eUNvdW50IiwicmVkdWNlIiwiYWN0aXZpdHlDb3VudCIsImxlc3NvbiIsImdldEFjdGl2aXR5VVJMIiwibGVzc29uTnVtYmVyIiwiZm9sZGVyX3VybCIsInRvY191cmwiLCJpblNpbmdsZUxlY3R1cmVNb2RlIiwiaXNOZXh0TGVjdHVyZVBvc3NpYmxlIiwibmV4dExlY3R1cmUiLCJpc1ByZXZpb3VzTGVjdHVyZVBvc3NpYmxlIiwicHJldmlvdXNMZWN0dXJlIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsInNldEl0ZW0iLCJKU09OIiwic3RyaW5naWZ5IiwiQXJyYXkiLCJjaGVja1Byb2dyZXNzIiwicHJvZ3Jlc3NTdHJpbmciLCJlIiwicGFyc2UiLCJpbmRleE9mIiwicmVjb3JkUHJvZ3Jlc3MiLCJwcm9ncmVzcyIsInB1c2giLCJsZWN0dXJlIiwiYWN0aXZpdHkiLCJ0b1N0cmluZyIsIlNDT1JNX0NPTVBMRVRFRCIsIlNDUk9NX1BBU1NFRCIsInN3IiwiY291cnNlIiwia2V5IiwiY29tcGxldGlvblN0YXR1c0FjdGl2aXR5IiwiU2Nvcm1Qcm9jZXNzR2V0VmFsdWUiLCJTY29ybVByb2Nlc3NTZXRWYWx1ZSIsImNvbW1pdCIsImNoZWNrSWZDb21wbGV0ZSIsInBhc3NlZCIsIm51bWJlck9mUGFzc2VkQWN0aXZpdGllcyIsInNldEZpbmlzaENvdXJzZSIsImZpbmlzaFNpbmdsZUFjdGl2aXR5Q291cnNlIiwidXBkYXRlQ291cnNlUHJvZ3Jlc3MiLCJwYWdlQ291bnQiLCJsZWN0dXJlVHlwZSIsInByb2dyZXNzUGVyY2VudCIsInNjb3JlIiwibWF4U2NvcmUiLCJ0b0ZpeGVkIiwicHJvZ3Jlc3NSZWNvcmQiLCJwcm9ncmVzc01hbmFnZXIiLCJjb250ZW50U2V0dGluZ3MiLCJjb250ZW50VGhlbWUiLCJjb250ZW50Wm9vbUZhY3RvciIsImN1cnJlbnRBY3Rpdml0eSIsImlGcmFtZSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJtYWluIiwiY291cnNlQ29udGVudCIsInRvY1RvZ2dsZSIsImZvbnRPcHRpb24iLCJmb250T3B0aW9uTW9kYWwiLCJsZWN0dXJlVGl0bGVIZWFkZXIiLCJwbGF5ZXJIZWFkZXIiLCJjb3Vyc2VUaXRsZSIsImNvbnRlbnROYXYiLCJlbmxhcmdlRm9udCIsInJlZHVjZUZvbnQiLCJuZXh0QWN0aXZpdHlCdXR0b24iLCJwcmV2aW91c0FjdGl2aXR5QnV0dG9uIiwiaW5uZXJIVE1MIiwiY2xhc3NMaXN0IiwiYWRkIiwic3R5bGUiLCJkaXNwbGF5IiwibGVjdHVyZUhUTUxFbGVtZW50cyIsImNyZWF0ZVNlY3Rpb24iLCJpc1NtYWxsU2NyZWVuIiwicHJldmlvdXNTY3JlZW5TaXplIiwiY3VycmVudFN1YnNlY3Rpb24iLCJzdWJzZWN0aW9ucyIsInN1YnNlY3Rpb24iLCJvcGVuQ29udGVudEFjdGl2aXR5IiwiYWRkRXZlbnRMaXN0ZW5lciIsInpvb21XaXRoRmFjdG9yIiwiUGV0bGphUGxheWVyIiwiem9vbUZhY3RvciIsIndpbmRvdyIsInNjcm9sbFRvIiwicmVjZWl2ZU1lc3NhZ2UiLCJjb250YWlucyIsInRhcmdldCIsInRvZ2dsZSIsIm5hdlN0YXR1cyIsImlzTmF2VmlzaWJsZSIsInJlcGxhY2UiLCJzZXRUaW1lb3V0Iiwic2Nyb2xsSW50b1ZpZXciLCJ0b2dnbGVDbGFzc2VzT25FbGVtZW50IiwibmV4dEFjdGl2aXR5IiwicHJldmlvdXNBY3Rpdml0eSIsInJlbW92ZSIsInNlbmRNZXNzYWdlIiwibWVzc2FnZSIsImNvbnRlbnRXaW5kb3ciLCJwb3N0TWVzc2FnZSIsImRhdGEiLCJ0eXBlIiwiaGVpZ2h0IiwibWFya0FzRG9uZSIsInNob3dpbmdNb2RhbCIsImJvZHkiLCJzY3JvbGxUb3AiLCJzY3JvbGxQb3NpdGlvbkJlZm9yZU1vZGFsIiwiZWxlbWVudCIsImNzc0NsYXNzZXMiLCJmb3JFYWNoIiwiY3NzQ2xhc3MiLCJzZXRDdXJyZW50VGl0bGUiLCJmcmFtZUFjdGl2aXR5Iiwic2V0QXR0cmlidXRlIiwiY2xpZW50V2lkdGgiLCJNRURJQV9RVUVSWV9XSURUSCIsImNvdXJzZUxlY3R1cmUiLCJjb3Vyc2VTZWN0aW9uV3JhcHBlciIsImNyZWF0ZUVsZW1lbnQiLCJjb3Vyc2VTZWN0aW9uIiwiY291cnNlU3ViU2VjdGlvbldyYXBwZXIiLCJsZWN0dXJlVG9nZ2xlIiwibGVjdHVyZVRpdGxlIiwidG9nZ2xlQ2FyZXQiLCJjYXJldCIsImFwcGVuZCIsInN1YnNlY3Rpb25TdGF0dXMiLCJzdWJzZWN0aW9uVGl0bGUiLCJzZWN0aW9uU3RhdHVzIiwic2VjdGlvbkhUTUwiLCJjYXJldEhUTUwiLCJ1cGRhdGVCdXR0b25TdGF0dXMiLCJkaXNhYmxlZCIsIlplcm9QYWQiLCJpbnROdW0iLCJpbnROdW1EaWdpdHMiLCJzdHJUZW1wIiwiaW50TGVuIiwic3Vic3RyaW5nIiwiZmluZEFQSSIsIndpbiIsInRyaWVzIiwiQVBJIiwicGFyZW50IiwiU0NPUk1fRkFMU0UiLCJzdGFydFRpbWVTdGFtcCIsIkRhdGUiLCJmaW5pc2hDYWxsZWQiLCJpbml0aWFsaXplZCIsInByb2Nlc3NlZFVubG9hZCIsInJlYWNoZWRFbmQiLCJTY29ybVByb2Nlc3NJbml0aWFsaXplIiwiTE1TQ29tbWl0IiwiTE1TSW5pdGlhbGl6ZSIsImVycm9yTnVtYmVyIiwiTE1TR2V0TGFzdEVycm9yIiwiZXJyb3JEZXNjcmlwdGlvbiIsIkxNU0dldEVycm9yU3RyaW5nIiwiTE1TR2V0RGlhZ25vc3RpYyIsImNvbnNvbGUiLCJsb2ciLCJTY29ybVByb2Nlc3NGaW5pc2giLCJyZXN1bHQiLCJMTVNGaW5pc2giLCJMTVNHZXRWYWx1ZSIsIkxNU1NldFZhbHVlIiwic3RhdHVzIiwibWluU2NvcmUiLCJyYXdTY29yZSIsInBlcmNlbnQiLCJkb1VubG9hZCIsInByZXNzZWRFeGl0IiwiaW50VG90YWxNaWxsaXNlY29uZHMiLCJibG5JbmNsdWRlRnJhY3Rpb24iLCJpbnRIb3VycyIsImludE1pbnV0ZXMiLCJpbnRTZWNvbmRzIiwiaW50TWlsbGlzZWNvbmRzIiwiaW50SHVuZHJlZHRocyIsInN0ckNNSVRpbWVTcGFuIiwic2Nvcm1UaW1lIiwiZ2V0VGltZSIsIk1hdGgiLCJmbG9vciIsImNvbnRlbnRVUkwiLCJnZXRBdHRyaWJ1dGUiLCJmZXRjaCIsInRoZW4iLCJqc29uIiwic3RvcmFnZSIsInRoZUFQSSIsImNvdXJzZUpTT04iLCJDb3Vyc2VKU09OIiwic2Nyb21BUEkiLCJvcGVuZXIiLCJTY29ybVdyYXBwZXIiLCJTY29ybVN0b3JhZ2UiLCJyZW1vdmVJdGVtIiwiaXNMb2NhbFN0b3JhZ2VJc0F2YWlsYWJsZSIsIkxvY2FsU3RvcmFnZU1hbmFnZXIiLCJNb2NTdG9yYWdlIl0sInNvdXJjZVJvb3QiOiIifQ==PK FV0X%zn$ n$ 1 files/de/de664e5a793bcaacaa7308aba9f14c2dd39148c3{"courseId": "kurs-treci-ikt", "active_lessons": [{"title": "\u0420\u0430\u0447\u0443\u043d\u0430\u0440\u0441\u043a\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430", "normalized_title": "\u0420\u0430\u0447\u0443\u043d\u0430\u0440\u0441\u043a\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430", "folder_url": "1_rg", "active_activities": [{"toc_url": "rac_graf", "type": "reading", "title": "\u0420\u0430\u0447\u0443\u043d\u0430\u0440\u0441\u043a\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430"}]}], "longDesc": "\u041e\u0432\u0430\u0458 \u043a\u0443\u0440\u0441 \u0458\u0435 \u043d\u0430\u043c\u0435\u045a\u0435\u043d \u0443\u0447\u0435\u043d\u0438\u0446\u0438\u043c\u0430 3. \u0440\u0430\u0437\u0440\u0435\u0434\u0430 \u043f\u0440\u0438\u0440\u043e\u0434\u043d\u043e\u0433 \u0441\u043c\u0435\u0440\u0430 \u0433\u0438\u043c\u043d\u0430\u0437\u0438\u0458\u0435 \u0437\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0420\u0430\u0447\u0443\u043d\u0430\u0440\u0441\u0442\u0432\u043e \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a\u0430. \n\u0423 \u043e\u043a\u0432\u0438\u0440\u0443 \u043e\u0432\u043e\u0433 \u043a\u0443\u0440\u0441\u0430 \u0434\u0435\u0442\u0430\u0459\u043d\u043e \u0458\u0435 \u043e\u0431\u0440\u0430\u0452\u0435\u043da \u043d\u0430\u0441\u0442\u0430\u0432\u043da \u0442\u0435\u043ca \u0420\u0430\u0447\u0443\u043d\u0430\u0440\u0441\u043a\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430. \n\u041a\u0443\u0440\u0441 \u0443 \u043f\u043e\u0442\u043f\u0443\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0430\u0442\u0438 \u043f\u043b\u0430\u043d \u043d\u0430\u0441\u0442\u0430\u0432\u0435 \u0438 \u0443\u0447\u0435\u045a\u0430 \u0437\u0430 \u043e\u0432\u0430\u0458 \u043f\u0440\u0435\u0434\u043c\u0435\u0442. \u041a\u0443\u0440\u0441 \u0458\u0435 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d \u043f\u043e \u0447\u0430\u0441\u043e\u0432\u0438\u043c\u0430. \n\u0422\u043e\u043a\u043e\u043c \u043a\u0443\u0440\u0441\u0430 \u0434\u0435\u0442\u0430\u0459\u043d\u043e \u0441\u0435 \u0438\u0437\u0443\u0447\u0430\u0432\u0430\u0458\u0443 \u043a\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0435 \u0440\u0430\u0447\u0443\u043d\u0430\u0440\u0441\u043a\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0435, \u043a\u0430\u043e \u0438 \u0440\u0430\u0434 \u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0443 \u0437\u0430 \u0440\u0430\u0441\u0442\u0435\u0440\u0441\u043a\u0443 \u0433\u0440\u0430\u0444\u0438\u043a\u0443.\n\u041c\u0430\u0442\u0435\u0440\u0438\u0458\u0430\u043b \u043d\u0430\u043c\u0435\u045a\u0435\u043d \u0437\u0430 \u0458\u0435\u0434\u0430\u043d \u0447\u0430\u0441 \u0441\u0435 \u0441\u0430\u0441\u0442\u043e\u0458\u0438 \u043e\u0434 \u043b\u0435\u043a\u0446\u0438\u0458\u0435 \u0438 \u0434\u0435\u043b\u0430 \u0441\u0430 \u043f\u0438\u0442\u0430\u043b\u0438\u0446\u0430\u043c\u0430, \u043a\u043e\u0458\u0438\u043c\u0430 \u0441\u0435 \u0443\u0447\u0435\u043d\u0438\u0446\u0438\u043c\u0430 \u0441\u043a\u0440\u0435\u045b\u0435 \u043f\u0430\u0436\u045a\u0430 \u043d\u0430 \u043d\u0430\u0458\u0431\u0438\u0442\u043d\u0438\u0458\u0435 \n\u0434\u0435\u043b\u043e\u0432\u0435 \u0438\u0437 \u0441\u0430\u0434\u0440\u0436\u0430\u0458\u0430 \u043b\u0435\u043a\u0446\u0438\u0458\u0435 \u0438 \u043a\u0432\u0438\u0437\u043e\u0432\u0430, \u0430 \u043a\u043e\u0458\u0438 \u0438\u043c\u0430 \u0437\u0430 \u0446\u0438\u0459 \u043f\u0440\u043e\u0432\u0435\u0440\u0443 \u0443\u0441\u0432\u043e\u0458\u0435\u043d\u043e\u0433 \u0433\u0440\u0430\u0434\u0438\u0432\u0430.\n\n\u041f\u043e\u0440\u0435\u0434 \u0440\u0430\u0434\u0430 \u0443 \u0448\u043a\u043e\u043b\u0438, \u043a\u0443\u0440\u0441 \u0441\u0435 \u043c\u043e\u0436\u0435 \u043f\u0440\u043e\u043b\u0430\u0437\u0438\u0442\u0438 \u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u0430\u043b\u043d\u043e.\n\n
\n\n\n \u041e\u0432\u0430\u0458 \u043a\u0443\u0440\u0441 \u0424\u043e\u043d\u0434\u0430\u0446\u0438\u0458\u0430 \u041f\u0435\u0442\u0459\u0430 \u043e\u0431\u0458\u0430\u0432\u0438\u043b\u0430 je \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0446\u043e\u043c Creative Commons Autorstvo 4.0 Me\u0111unarodna Licenca (CC BY 4.0).\n
\n", "shortDesc": "\u0420\u0430\u0447\u0443\u043d\u0430\u0440\u0441\u043a\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430", "willLearn": ["\u0434\u0430 \u0440\u0430\u0437\u043b\u0438\u043a\u0443\u0458\u0435\u0448 \u0432\u0435\u043a\u0442\u043e\u0440\u0441\u043a\u0438 \u0438 \u0440\u0430\u0441\u0442\u0435\u0440\u0441\u043a\u0438 \u043d\u0430\u0447\u0438\u043d \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0459\u0430\u045a\u0430 \u0441\u043b\u0438\u043a\u0435;", "\u0434\u0430 \u043e\u0431\u0458\u0430\u0441\u043d\u0438\u0448 \u043f\u0440\u0435\u0434\u043d\u043e\u0441\u0442\u0438 \u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0435 \u0458\u0435\u0434\u043d\u043e\u0433 \u0438 \u0434\u0440\u0443\u0433\u043e\u0433 \u043d\u0430\u0447\u0438\u043d\u0430 \u0438 \u043e\u0434\u0430\u0431\u0435\u0440\u0435\u0448 \u043d\u0430\u0447\u0438\u043d \u043a\u043e\u0458\u0438 \u0458\u0435 \u043f\u043e\u0433\u043e\u0434\u043d\u0438\u0458\u0438 \u0437\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443 \u043f\u0440\u0438\u043c\u0435\u043d\u0443;", "\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0438\u043c \u0442\u0438\u043f\u043e\u0432\u0438\u043c\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0441\u043b\u0438\u043a\u0430 \u0438 \u043a\u0430\u043a\u043e \u0434\u0430 \u0443\u043a\u0430\u0436\u0435\u0448 \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u043a\u0435 \u043c\u0435\u0452\u0443 \u045a\u0438\u043c\u0430;", "\u0434\u0430 \u043a\u043e\u0440\u0438\u0441\u0442\u0438\u0448 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0435 \u0437\u0430 \u043e\u0431\u0440\u0430\u0434\u0443 \u0438 \u043a\u0440\u0435\u0438\u0440\u0430\u045a\u0435 \u0440\u0430\u0441\u0442\u0435\u0440\u0441\u043a\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0435;", "\u0434\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0443\u0458\u0435\u0448 \u043a\u0440\u0435\u0438\u0440\u0430\u043d\u0443 \u0441\u043b\u0438\u043a\u0443 \u0437\u0430 \u043f\u0440\u0438\u043a\u0430\u0437 \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0442\u0438\u043c \u043c\u0435\u0434\u0438\u0458\u0438\u043c\u0430;", "\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u045a\u0443\u0458\u0435\u0448 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0433\u043e\u0442\u043e\u0432\u0438\u0445 \u0446\u0440\u0442\u0435\u0436\u0430 \u0438 \u0441\u043b\u0438\u043a\u0430;", "\u0434\u0430 \u043c\u0435\u045a\u0430\u0448 \u0438 \u043f\u0440\u0438\u043b\u0430\u0433\u043e\u0452\u0430\u0432\u0430\u0448 \u0441\u043b\u0438\u043a\u0443;", "\u0434\u0430 \u0441\u0430\u0447\u0443\u0432\u0430\u0448 \u0441\u043b\u0438\u043a\u0443 \u0443 \u0434\u0440\u0443\u0433\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0443, \u043a\u043e\u043c\u0431\u0438\u043d\u0443\u0458\u0435\u0448 \u0432\u0438\u0448\u0435 \u0441\u043b\u0438\u043a\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0442\u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430;"], "requirements": ["\u0418\u043c\u0430\u0448 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d \u043f\u0440\u043e\u0433\u0440\u0430\u043c \u0437\u0430 \u043e\u0431\u0440\u0430\u0434\u0443 \u0440\u0430\u0441\u0442\u0435\u0440\u0441\u043a\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 Gimp 2"], "toc": ["\u0427\u0430\u0441 1. \u0423\u0432\u043e\u0434 \u0443 \u0440\u0430\u0447\u0443\u043d\u0430\u0440\u0441\u043a\u0443 \u0433\u0440\u0430\u0444\u0438\u043a\u0443", "\u0427\u0430\u0441 2. \u0420\u0430\u0434\u043d\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u045a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0430 \u0437\u0430 \u043e\u0431\u0440\u0430\u0434\u0443 \u0440\u0430\u0441\u0442\u0435\u0440\u0441\u043a\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0435", "\u0427\u0430\u0441 3. \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0458\u0430 \u0441\u043b\u0438\u043a\u0435 \u0437\u0430 \u0448\u0442\u0430\u043c\u043f\u0430\u045a\u0435 \u0438 \u0440\u0430\u0434\u0438 \u043e\u0431\u0458\u0430\u0432\u0459\u0438\u0432\u0430\u045a\u0430 \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0443", "\u0427\u0430\u0441 4. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u0430 \u0432\u0435\u0436\u0431\u0430", "\u0427\u0430\u0441 5. \u041e\u0431\u0440\u0430\u0434\u0430 \u0440\u0430\u0441\u0442\u0435\u0440\u0441\u043a\u0435 \u0441\u043b\u0438\u043a\u0435", "\u0427\u0430\u0441 6. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u0430 \u0432\u0435\u0436\u0431\u0430 1", "\u0427\u0430\u0441 7. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u0430 \u0432\u0435\u0436\u0431\u0430 2"], "title": "\u0420\u0430\u0447\u0443\u043d\u0430\u0440\u0441\u043a\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0437\u0430 \u0442\u0440\u0435\u045b\u0438 \u0440\u0430\u0437\u0440\u0435\u0434 \u0433\u0438\u043c\u043d\u0430\u0437\u0438\u0458\u0435", "lang": "sr-Cyrl", "externalLinkTexts": [], "externalLinkLinks": []}PK FV0XI( ( 1 files/1c/1cee13d4e9fc9ec0e7c53d944522f166e38d313d 22 ( ( 2 d P>,P>,P>, P>, P>, P>, P>, P>, P>, Q>+ P>, P>, P>, P>, P>, P>, P>, P>, P>, P>, P?- P>,P>, P>, P>, P>, P>, P>, P>, P>, P>,P>, P>,P>,%P>, P>, P>, P>,P>, P>, P>,P>, P>, P>, P>, P>,P>, P>, P>, P>- P>, [ 휼
V ̜/ V Ꜽ
V ʜ/ V Ꜽ V1 ʜ. V 뜼
V ʜ. V Ꜽ V䜼 ʜ. V Ꜽ
V P ʜ. H Ꜽ V . Ꜽ
X ޜ. !Ꜽ ޜ. Ꜽ [ ޜ. !Ꜽ ޜ. !Ꜽ
} ޜ. Ꜽ 4N Ꜽ
%机 N Z Ꜽ &朻 M VG !Ꜽ
&朼 M V 뜼 %朼 N V e Ꜽ
&朼 M V Ꜽ (朼 MX Μ朼 MV ! ʜ朼 MV ʜ朼 NV ʜ朼 NV ! ʜ朼 MV ʜ朼 R\ ? w ? ? P 0 Bx $ ? @ @ ? | 8 ' O? ? PK FV0X9 9 1 files/62/62c8d443dbbc175b8f40e5f49142c13002ee6fe1
DRAFT XSD for IMS Content Packaging version 1.1 DRAFT Copyright (c) 2001 IMS GLC, Inc. 2000-04-21, Adjustments by T.D. Wason from CP 1.0.2001-02-22, T.D.Wason: Modify for 2000-10-24 XML-Schema version. Modified to support extension.2001-03-12, T.D.Wason: Change filename, target and meta-data namespaces and meta-data fielname. Add meta-data to itemType, fileType and organizationType.Do not define namespaces for xml in XML instances generated from this xsd.Imports IMS meta-data xsd, lower case element names. This XSD provides a reference to the IMS meta-data root element as imsmd:recordIf the IMS meta-data is to be used in the XML instance then the instance must define an IMS meta-data prefix with a namespace. The meta-data targetNamespace should be used. 2001-03-20, Thor Anderson: Remove manifestref, change resourceref back to identifierref, change manifest back to contained by manifest. --Tom Wason: manifest may contain _none_ or more manifests.2001-04-13 Tom Wason: corrected attirbute name structure. Was misnamed type. 2001-05-14 Schawn Thropp: Made all complexType extensible with the group.anyAdded the anyAttribute to all complexTypes. Changed the href attribute on the fileType and resourceType to xsd:stringChanged the maxLength of the href, identifierref, parameters, structure attributes to match the Information model.2001-07-25 Schawn Thropp: Changed the namespace for the Schema of Schemas to the 5/2/2001 W3C XML SchemaRecommendation. attributeGroup attr.imsmd deleted, was not used anywhere. Any attribute declarations that haveuse = "default" changed to use="optional" - attr.structure.req.Any attribute declarations that have value="somevalue" changed to default="somevalue",attr.structure.req (hierarchical). Removed references to IMS MD Version 1.1.Modified attribute group "attr.resourcetype.req" to change use from optionalto required to match the information model. As a result the default value also needed to be removedName change for XSD. Changed to match version of CP Spec Inclusions and ImportsAttribute Declarationselement groupsAny namespaced element from any namespace may be included within an "any" element. The namespace for the imported element must be defined in the instance, and the schema must be imported.
PK FV0X9 1 files/ee/eeab1a606120e6fbf7f122f3bcbe4212e88f4824ADL SCORM1.2Petlja kursRačunarska grafika za treći razred gimnazijeSadržajPK FV0X٭ K K 1 files/a6/a69ae8175c01601b445856a503a1dcb5d7aa16fc
2001-04-26 T.D.Wason. IMS meta-data 1.2 XML-Schema. 2001-06-07 S.E.Thropp. Changed the multiplicity on all elements to match the Final 1.2 Binding Specification. Changed all elements that use the langstringType to a multiplicy of 1 or more Changed centity in the contribute element to have a multiplicity of 0 or more. Changed the requirement element to have a multiplicity of 0 or more. 2001-07-25 Schawn Thropp. Updates to bring the XSD up to speed with the W3C XML Schema Recommendation. The following changes were made: Change the namespace to reference the 5/2/2001 W3C XML Schema Recommendation,the base type for the durtimeType, simpleType, was changed from timeDuration to duration. Any attribute declarations that have use="default" had to change to use="optional" - attr.type. Any attribute declarations that have value ="somevalue" had to change to default = "somevalue" - attr.type (URI) 2001-09-04 Schawn Thropp Changed the targetNamespace and namespace of schema to reflect version change
PK FV0X+Z 1 files/0c/0c1a931d8c9717729e0ed1bd4d717f5750983204
In namespace-aware XML processors, the "xml" prefix is bound to the namespace name http://www.w3.org/XML/1998/namespace.Do not reference this file in XML instancesSchawn Thropp: Changed the uriReference type to string typeRefers to universal XML 1.0 lang attributeRefers to XML Base: http://www.w3.org/TR/xmlbase
PK FV0X/ 1 files/f3/f31e3f632ffa98c5bff5af4d9751252588646bf8