@exercode/problem-utils 1.9.7 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/helpers/findModelAnswerDirs.cjs +2 -0
- package/dist/helpers/findModelAnswerDirs.cjs.map +1 -0
- package/dist/helpers/findModelAnswerDirs.d.ts +5 -0
- package/dist/helpers/findModelAnswerDirs.js +2 -0
- package/dist/helpers/findModelAnswerDirs.js.map +1 -0
- package/dist/helpers/parseArgs.cjs +1 -1
- package/dist/helpers/parseArgs.cjs.map +1 -1
- package/dist/helpers/parseArgs.d.ts +4 -1
- package/dist/helpers/parseArgs.js +1 -1
- package/dist/helpers/parseArgs.js.map +1 -1
- package/dist/helpers/printDebugBanner.cjs +2 -0
- package/dist/helpers/printDebugBanner.cjs.map +1 -0
- package/dist/helpers/printDebugBanner.d.ts +7 -0
- package/dist/helpers/printDebugBanner.js +2 -0
- package/dist/helpers/printDebugBanner.js.map +1 -0
- package/dist/helpers/resolveCwds.cjs +2 -0
- package/dist/helpers/resolveCwds.cjs.map +1 -0
- package/dist/helpers/resolveCwds.d.ts +19 -0
- package/dist/helpers/resolveCwds.js +2 -0
- package/dist/helpers/resolveCwds.js.map +1 -0
- package/dist/presets/command.cjs +1 -1
- package/dist/presets/command.cjs.map +1 -1
- package/dist/presets/command.d.ts +6 -0
- package/dist/presets/command.js +1 -1
- package/dist/presets/command.js.map +1 -1
- package/dist/presets/guiCommand.cjs +1 -1
- package/dist/presets/guiCommand.cjs.map +1 -1
- package/dist/presets/guiCommand.js +1 -1
- package/dist/presets/guiCommand.js.map +1 -1
- package/dist/presets/llm.cjs +1 -1
- package/dist/presets/llm.cjs.map +1 -1
- package/dist/presets/llm.js +1 -1
- package/dist/presets/llm.js.map +1 -1
- package/dist/presets/stdio.cjs +1 -1
- package/dist/presets/stdio.cjs.map +1 -1
- package/dist/presets/stdio.js +1 -1
- package/dist/presets/stdio.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),n=require("node:child_process"),r=require("node:fs/promises"),t=require("node:os"),i=require("node:path"),s=require("node:timers/promises"),a=require("zod"),o=require("../helpers/cleanWorkingDirectory.cjs"),c=require("../helpers/copyTestCaseFileInput.cjs"),u=require("../helpers/findEntryPointFile.cjs"),d=require("../helpers/findLanguageDefinitionByPath.cjs"),l=require("../helpers/judgeByStaticAnalysis.cjs"),p=require("../helpers/parseArgs.cjs"),f=require("../helpers/printTestCaseResult.cjs"),m=require("../helpers/readOutputFiles.cjs"),h=require("../helpers/readProblemMarkdownFrontMatter.cjs"),g=require("../helpers/readTestCases.cjs"),v=require("../helpers/spawnSyncWithTimeout.cjs"),w=require("../types/decisionCode.cjs"),C=require("../types/language.cjs"),b=["darwin"===t.platform()?"gtime":"/usr/bin/time","--format","%e %M"],y=a.z.object({language:a.z.union([a.z.string(),a.z.array(a.z.string())]).optional()});function k(){return(k=e.asyncToGenerator(e.regenerator().m(function n(r,t){var i,s,a,g,v,C,b,k,R,F,P,_,L,j,x,q,B,N,A,G,W,z,X,Y,H,Q,V,K,J,$,Z,ee,ne,re,te,ie,se,ae,oe,ce,ue,de,le,pe,fe,me,he,ge,ve,we,Ce,be,ye,ke,Ie,Re,Ee,Se,Te,De,Fe,Me,Pe,_e,Le,Oe,je,xe,qe,Be,Ne,Ae;return e.regenerator().w(function(n){for(;;)switch(n.p=n.n){case 0:return b=p.parseArgs(process.argv),k=y.parse(b.params),n.n=1,h.readProblemMarkdownFrontMatter(r);case 1:return R=n.v,n.n=2,(null!=(i=t.readTestCases)?i:D)(r);case 2:return F=n.v,P=F.length>0?F:[{id:"default"}],_=null!=(s=null==(a=P[0])?void 0:a.id)?s:"prebuild",n.n=3,l.judgeByStaticAnalysis(b.cwd,R);case 3:if(!(L=n.v)){n.n=4;break}return f.printTestCaseResult(e.objectSpread2({testCaseId:_},L)),n.a(2);case 4:if(null==(g=t.mainFilePath)){n.n=5;break}Fe=g,n.n=7;break;case 5:return n.n=6,u.findEntryPointFile(b.cwd,k.language);case 6:Fe=n.v;case 7:if(j=Fe){n.n=8;break}return f.printTestCaseResult({testCaseId:_,decisionCode:w.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:t.mainFilePath?"required main file not found: ".concat(t.mainFilePath):"main file not found".concat(k.language?": language: ".concat(k.language):"")}),n.a(2);case 8:if(x=d.findLanguageDefinitionByPath(j)){n.n=9;break}return f.printTestCaseResult({testCaseId:_,decisionCode:w.DecisionCode.WRONG_ANSWER,stderr:"unsupported language"}),n.a(2);case 9:return q=e.objectSpread2(e.objectSpread2({},process.env),{},{CI:"",FORCE_COLOR:"0"}),n.n=10,I({cwd:b.cwd,language:k.language,configuredMainFilePath:t.mainFilePath});case 10:if(B=n.v,!x.prebuild){n.n=15;break}return n.p=11,n.n=12,x.prebuild(b.cwd);case 12:return n.n=13,I({cwd:b.cwd,language:null!=(N=k.language)?N:E(j),configuredMainFilePath:t.mainFilePath,allowConfiguredPathFallback:!0});case 13:(A=n.v)&&(B=A),n.n=15;break;case 14:return n.p=14,Me=n.v,f.printTestCaseResult({testCaseId:_,decisionCode:w.DecisionCode.BUILD_ERROR,stderr:U(Me)}),n.a(2);case 15:if(B){n.n=16;break}return f.printTestCaseResult({testCaseId:_,decisionCode:w.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:t.mainFilePath?"required main file not found: ".concat(t.mainFilePath):"main file not found".concat(k.language?": language: ".concat(k.language):"")}),n.a(2);case 16:return n.n=17,null==(C=t.prepare)?void 0:C.call(t,{cwd:b.cwd,env:q,mainFilePath:B,problemMarkdownFrontMatter:R});case 17:if(null==(v=n.v)){n.n=18;break}Pe=v,n.n=19;break;case 18:Pe=S({cwd:b.cwd,env:q,mainFilePath:B,languageDefinition:x});case 19:if(!(G=Pe)){n.n=20;break}return f.printTestCaseResult({testCaseId:_,decisionCode:null!=(W=G.decisionCode)?W:w.DecisionCode.BUILD_ERROR,feedbackMarkdown:G.feedbackMarkdown,stderr:G.stderr,stdout:G.stdout,outputFiles:G.outputFiles}),n.a(2);case 20:return n.n=21,o.snapshotWorkingDirectory(b.cwd);case 21:if(z=n.v,Y=_,n.p=22,!t.runCommand){n.n=23;break}_e=void 0,n.n=25;break;case 23:return n.n=24,O();case 24:_e=n.v;case 25:X=_e,V=null==(Q=F.shared)?void 0:Q.fileInputPath,K=e.createForOfIteratorHelper(P),n.p=26,K.s();case 27:if((J=K.n()).done){n.n=53;break}if(ue=J.value,Y=ue.id,!V){n.n=28;break}return n.n=28,c.copyTestCaseFileInput(V,b.cwd);case 28:if(!ue.fileInputPath){n.n=29;break}return n.n=29,c.copyTestCaseFileInput(ue.fileInputPath,b.cwd);case 29:return de="number"==typeof R.timeLimitMs?R.timeLimitMs/1e3:null!=($=t.runTimeoutSeconds)?$:5,le=X?e.objectSpread2(e.objectSpread2({},q),{},{DISPLAY:X.display}):q,n.n=30,null==(ne=t.resolveInput)?void 0:ne.call(t,{testCase:ue,cwd:b.cwd,env:le});case 30:if(null==(ee=n.v)){n.n=31;break}Le=ee,n.n=32;break;case 31:Le=ue.input;case 32:if(null==(Z=Le)){n.n=33;break}Oe=Z,n.n=34;break;case 33:Oe="";case 34:return H=pe=Oe,n.n=35,null==(te=t.command)?void 0:te.call(t,{testCase:ue,cwd:b.cwd,env:le,mainFilePath:B});case 35:if(null==(re=n.v)){n.n=36;break}je=re,n.n=37;break;case 36:je=x.command(B);case 37:if(fe=je,me=void 0,n.p=38,!t.runCommand){n.n=40;break}return n.n=39,t.runCommand({testCase:ue,command:fe,stdin:pe,cwd:b.cwd,env:le,timeLimitSeconds:de,screenshotWaitSeconds:null!=(he=t.screenshotWaitSeconds)?he:.3,stopDetectionThreshold:null!=(ge=t.stopDetectionThreshold)?ge:5});case 39:xe=n.v,n.n=42;break;case 40:return n.n=41,M({command:fe,stdin:pe,cwd:b.cwd,env:le,timeLimitSeconds:de,screenshotWaitSeconds:null!=(ve=t.screenshotWaitSeconds)?ve:.3,stopDetectionThreshold:null!=(we=t.stopDetectionThreshold)?we:5});case 41:xe=n.v;case 42:me=xe,n.n=45;break;case 43:return n.p=43,qe=n.v,f.printTestCaseResult({testCaseId:ue.id,decisionCode:w.DecisionCode.RUNTIME_ERROR,stdin:pe,stderr:U(qe)}),n.n=44,o.cleanWorkingDirectory(b.cwd,z);case 44:return n.a(2);case 45:return n.n=46,m.readOutputFiles(b.cwd,null!=(ie=R.requiredOutputFilePaths)?ie:[]);case 46:if(Ce=n.v,be={timeLimitSeconds:de,problemMarkdownFrontMatter:{memoryLimitByte:R.memoryLimitByte,requiredOutputFilePaths:R.requiredOutputFilePaths}},ye=T({runResult:me,outputFiles:Ce,context:be}),ke=ye,ye.decisionCode!==w.DecisionCode.ACCEPTED){n.n=50;break}return n.p=47,n.n=48,t.test({testCase:ue,runResult:me,outputFiles:Ce,context:be});case 48:Re=n.v,ke={decisionCode:null!=(Ie=Re.decisionCode)?Ie:ye.decisionCode,feedbackMarkdown:Re.feedbackMarkdown,stderr:Re.stderr,stdout:Re.stdout,outputFiles:Re.outputFiles},n.n=50;break;case 49:n.p=49,Be=n.v,ke={decisionCode:w.DecisionCode.RUNTIME_ERROR,stderr:U(Be)};case 50:return Ee=null!=(se=ke.decisionCode)?se:w.DecisionCode.ACCEPTED,Se=null!=(ae=ke.stdout)?ae:me.stdout,Te=null!=(oe=ke.stderr)?oe:me.stderr,f.printTestCaseResult({testCaseId:ue.id,decisionCode:Ee,exitStatus:me.status,stdin:me.stdin||void 0,stdout:Se||void 0,stderr:Te||void 0,timeSeconds:me.timeSeconds,memoryBytes:me.memoryBytes,feedbackMarkdown:ke.feedbackMarkdown,outputFiles:null!=(ce=ke.outputFiles)?ce:Ce.length>0?Ce:void 0}),n.n=51,o.cleanWorkingDirectory(b.cwd,z);case 51:if(Ee===w.DecisionCode.ACCEPTED){n.n=52;break}return n.a(3,53);case 52:n.n=27;break;case 53:n.n=55;break;case 54:n.p=54,Ne=n.v,K.e(Ne);case 55:return n.p=55,K.f(),n.f(55);case 56:n.n=58;break;case 57:return n.p=57,Ae=n.v,f.printTestCaseResult({testCaseId:Y,decisionCode:w.DecisionCode.RUNTIME_ERROR,stdin:H,stderr:U(Ae)}),n.n=58,o.cleanWorkingDirectory(b.cwd,z);case 58:return n.p=58,n.n=59,null==(De=X)?void 0:De.dispose();case 59:return n.f(58);case 60:return n.a(2)}},n,null,[[47,49],[38,43],[26,54,55,56],[22,57,58,60],[11,14]])}))).apply(this,arguments)}function I(e){return R.apply(this,arguments)}function R(){return(R=e.asyncToGenerator(e.regenerator().m(function n(r){var t;return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:if(!r.configuredMainFilePath){e.n=3;break}return t=i.join(r.cwd,r.configuredMainFilePath),e.n=1,A(t);case 1:if(!e.v){e.n=2;break}return e.a(2,r.configuredMainFilePath);case 2:if(r.allowConfiguredPathFallback){e.n=3;break}return e.a(2,void 0);case 3:return e.n=4,u.findEntryPointFile(r.cwd,r.language);case 4:return e.a(2,e.v)}},n)}))).apply(this,arguments)}function E(n){var r=Object.entries(C.languageIdToDefinition).filter(function(r){return e.slicedToArray(r,2)[1].fileExtensions.some(function(e){return n.endsWith(e)})}).map(function(n){return e.slicedToArray(n,1)[0]});return r.length>0?r:void 0}function S(e){var n,r,t=null==(n=(r=e.languageDefinition).buildCommand)?void 0:n.call(r,e.mainFilePath);if(t){var i=v.spawnSyncWithTimeout(t[0],t.slice(1),{cwd:e.cwd,encoding:"utf8",env:e.env},10);return i.timeSeconds>10?{decisionCode:w.DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,stderr:i.stderr||void 0}:0!==i.status?{decisionCode:w.DecisionCode.BUILD_ERROR,stderr:i.stderr||i.stdout||void 0}:void 0}}function T(e){var n,r,t;if("timeout"===e.runResult.stopReason)return{decisionCode:w.DecisionCode.TIME_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(0!==e.runResult.status)return{decisionCode:w.DecisionCode.RUNTIME_ERROR,stderr:e.runResult.stderr};if(e.runResult.memoryBytes>(null!=(n=e.context.problemMarkdownFrontMatter.memoryLimitByte)?n:Number.POSITIVE_INFINITY))return{decisionCode:w.DecisionCode.MEMORY_LIMIT_EXCEEDED,stderr:e.runResult.stderr};var i=null!=(r=null==(t=e.context.problemMarkdownFrontMatter.requiredOutputFilePaths)?void 0:t.length)?r:0;return e.outputFiles.length<i?{decisionCode:w.DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR}:{decisionCode:w.DecisionCode.ACCEPTED}}function D(e){return F.apply(this,arguments)}function F(){return(F=e.asyncToGenerator(e.regenerator().m(function n(r){return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,g.readTestCases(i.join(r,"test_cases"));case 1:return e.a(2,e.v)}},n)}))).apply(this,arguments)}function M(e){return P.apply(this,arguments)}function P(){return(P=e.asyncToGenerator(e.regenerator().m(function r(t){var i,a,o,c,u,d,l,p,f,m,h,g,v,w,C,y;return e.regenerator().w(function(r){for(;;)switch(r.n){case 0:i=["timeout",t.timeLimitSeconds.toFixed(3)].concat(b,e.toConsumableArray(t.command)),(a=n.spawn(i[0],i.slice(1),{cwd:t.cwd,env:t.env,detached:"win32"!==process.platform,stdio:["pipe","pipe","pipe"]})).stdout.setEncoding("utf8"),a.stderr.setEncoding("utf8"),o="",c="",l="process_exit",p=[],f=[],m=Date.now()/1e3,h=0,a.stdout.on("data",function(e){o+=e}),a.stderr.on("data",function(e){c+=e}),a.on("error",function(e){d=e,u=1}),a.on("close",function(e,n){return 124===e?(l="timeout",void(u=0)):n?(u=1,void(c=c?"".concat(c,"\nprocess terminated by signal: ").concat(n):"process terminated by signal: ".concat(n))):void(u=null!=e?e:1)}),t.stdin&&a.stdin.write(t.stdin),a.stdin.end(),g=e.regenerator().m(function n(){var r,i;return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,s.setTimeout(1e3*t.screenshotWaitSeconds);case 1:if(h=Math.max(h,B(a.pid)),r=_(t.env.DISPLAY),!((f=r.toSorted(function(e,n){return e.data.length-n.data.length})).length>0)){e.n=2;break}if(i=f.map(function(e){return e.data}).toSorted(),p.unshift(i),p.length=Math.min(p.length,t.stopDetectionThreshold),p.length!==t.stopDetectionThreshold||!p.every(function(e){return e.length===i.length&&e.every(function(e,n){return e===i[n]})})){e.n=2;break}return l="stable_screenshot",u=0,e.a(2,0);case 2:if(!(Date.now()/1e3-m>t.timeLimitSeconds)){e.n=3;break}return l="timeout",u=0,e.a(2,0);case 3:return e.a(2)}},n)});case 1:if(void 0!==u){r.n=4;break}return r.d(e.regeneratorValues(g()),2);case 2:if(0!==r.v){r.n=3;break}return r.a(3,4);case 3:r.n=1;break;case 4:return"process_exit"!==l&&null===a.exitCode&&(a.removeAllListeners("close"),a.removeAllListeners("error")),r.n=5,x(a);case 5:if(!d){r.n=6;break}throw d;case 6:return v=L(c,m,h),w=v.memoryBytes,C=v.stderr,y=v.timeSeconds,r.a(2,{stdin:t.stdin,stdout:o.trimEnd(),stderr:C,status:u,timeSeconds:y,memoryBytes:w,screenshots:f,stopReason:l})}},r)}))).apply(this,arguments)}function _(r){var t=r?e.objectSpread2(e.objectSpread2({},process.env),{},{DISPLAY:r}):process.env,i=n.spawnSync("xwininfo",["-root","-tree"],{encoding:"utf8",env:t});if(i.error)throw i.error;if(0!==i.status||!i.stdout)return[];for(var s=[],a=0,o=function(n){var r,t=[],i=n.split("\n"),s=e.createForOfIteratorHelper(i);try{for(s.s();!(r=s.n()).done;){var a=r.value;if(!(a.includes("Root window id:")||a.includes("Parent window id:")||a.includes("()"))){var o=/^\s{5}(0x[\da-f]+) /.exec(a);null!=o&&o[1]&&t.push(Number.parseInt(o[1],16).toString())}}}catch(e){s.e(e)}finally{s.f()}return t}(i.stdout);a<o.length;a++){var c=o[a],u=n.spawnSync("maim",["-i",c],{env:t});if(u.error)throw u.error;if(0===u.status&&0!==u.stdout.length){var d=n.spawnSync("xdotool",["getwindowname",c],{encoding:"utf8",env:t});if(d.error)throw d.error;var l=d.stdout.trim().replaceAll(/[\s/]/g,"_");s.push({path:"".concat(l||"window","_").concat(c,".png"),data:u.stdout.toString("base64"),encoding:"base64"})}}return s}function L(e,n,r){var t=/(?:^|\n)(\d+\.\d+) (\d+)\s*$/.exec(e),i=t?e.slice(0,t.index).trimEnd():e.trimEnd(),s=1024*Number(null==t?void 0:t[2])||0;return{stderr:i,timeSeconds:Number(null==t?void 0:t[1])||Date.now()/1e3-n,memoryBytes:Math.max(s,r)}}function O(){return j.apply(this,arguments)}function j(){return j=e.asyncToGenerator(e.regenerator().m(function r(){var t,i,a;return e.regenerator().w(function(r){for(;;)switch(r.n){case 0:if("linux"===process.platform){r.n=1;break}throw new Error("GUI screenshot capture is supported only on Linux.");case 1:t=e.regenerator().m(function r(){var t,i,o;return e.regenerator().w(function(r){for(;;)switch(r.n){case 0:return t=":".concat(a),(o=n.spawn("Xvfb",[t,"-screen","0","1280x1024x24","-ac"],{stdio:"ignore"})).on("error",function(e){i=e}),r.n=1,s.setTimeout(300);case 1:if(!i){r.n=2;break}throw i;case 2:if(null===o.exitCode){r.n=3;break}return r.a(2,0);case 3:return r.a(2,{v:{display:t,dispose:function(){var n=e.asyncToGenerator(e.regenerator().m(function n(){return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:if(o.killed){e.n=2;break}return o.kill("SIGTERM"),e.n=1,s.setTimeout(100);case 1:null===o.exitCode&&o.kill("SIGKILL");case 2:return e.a(2)}},n)}));return function(){return n.apply(this,arguments)}}()}})}},r)}),a=90;case 2:if(!(a<100)){r.n=6;break}return r.d(e.regeneratorValues(t()),3);case 3:if(0!==(i=r.v)){r.n=4;break}return r.a(3,5);case 4:if(!i){r.n=5;break}return r.a(2,i.v);case 5:a++,r.n=2;break;case 6:throw new Error("Xvfb could not be started.");case 7:return r.a(2)}},r)})),j.apply(this,arguments)}function x(e){return q.apply(this,arguments)}function q(){return(q=e.asyncToGenerator(e.regenerator().m(function n(r){return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:if(r.pid){e.n=1;break}return e.a(2);case 1:return N(r.pid,"SIGTERM"),e.n=2,s.setTimeout(200);case 2:null===r.exitCode&&N(r.pid,"SIGKILL");case 3:return e.a(2)}},n)}))).apply(this,arguments)}function B(e){if(!e||"linux"!==process.platform)return 0;var r=n.spawnSync("ps",["-o","rss=","--no-headers","--pgroup",String(e)],{encoding:"utf8"});return r.error||0!==r.status||!r.stdout?0:r.stdout.split("\n").map(function(e){return Number(e.trim())}).filter(function(e){return Number.isFinite(e)&&e>0}).reduce(function(e,n){return e+1024*n},0)}function N(e,n){try{if("win32"!==process.platform)return void process.kill(-e,n)}catch(e){}try{process.kill(e,n)}catch(e){}}function A(e){return G.apply(this,arguments)}function G(){return(G=e.asyncToGenerator(e.regenerator().m(function n(t){return e.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,r.access(t);case 1:return e.a(2,!0);case 2:return e.p=2,e.v,e.a(2,!1)}},n,null,[[0,2]])}))).apply(this,arguments)}function U(e){return e instanceof Error?e.message:String(e)}exports.guiCommandJudgePreset=function(e,n){return k.apply(this,arguments)};
|
|
1
|
+
"use strict";var e=require("../_virtual/_rollupPluginBabelHelpers.cjs"),n=require("node:child_process"),r=require("node:fs/promises"),t=require("node:os"),i=require("node:path"),s=require("node:timers/promises"),a=require("zod"),o=require("../helpers/cleanWorkingDirectory.cjs"),c=require("../helpers/copyTestCaseFileInput.cjs"),u=require("../helpers/findEntryPointFile.cjs"),d=require("../helpers/findLanguageDefinitionByPath.cjs"),l=require("../helpers/judgeByStaticAnalysis.cjs"),p=require("../helpers/parseArgs.cjs"),f=require("../helpers/printTestCaseResult.cjs"),m=require("../helpers/readOutputFiles.cjs"),h=require("../helpers/readProblemMarkdownFrontMatter.cjs"),g=require("../helpers/readTestCases.cjs"),v=require("../helpers/spawnSyncWithTimeout.cjs"),w=require("../types/decisionCode.cjs"),b=require("../types/language.cjs"),C=["darwin"===t.platform()?"gtime":"/usr/bin/time","--format","%e %M"],y=a.z.object({language:a.z.union([a.z.string(),a.z.array(a.z.string())]).optional()});function k(){return(k=e.asyncToGenerator(e.regenerator().m(function n(r,t){var i,s,a,g,v,b,C,k,R,F,P,_,L,j,q,x,B,N,A,G,W,z,X,Y,H,Q,V,K,J,$,Z,ee,ne,re,te,ie,se,ae,oe,ce,ue,de,le,pe,fe,me,he,ge,ve,we,be,Ce,ye,ke,Ie,Re,Ee,Se,Te,De,Fe,Me,Pe,_e,Le,Oe,je,qe,xe,Be,Ne,Ae;return e.regenerator().w(function(n){for(;;)switch(n.p=n.n){case 0:if((C=p.parseArgs(process.argv)).cwd){n.n=1;break}throw new Error("cwd argument required");case 1:return k=y.parse(C.params),n.n=2,h.readProblemMarkdownFrontMatter(r);case 2:return R=n.v,n.n=3,(null!=(i=t.readTestCases)?i:D)(r);case 3:return F=n.v,P=F.length>0?F:[{id:"default"}],_=null!=(s=null==(a=P[0])?void 0:a.id)?s:"prebuild",n.n=4,l.judgeByStaticAnalysis(C.cwd,R);case 4:if(!(L=n.v)){n.n=5;break}return f.printTestCaseResult(e.objectSpread2({testCaseId:_},L)),n.a(2);case 5:if(null==(g=t.mainFilePath)){n.n=6;break}Fe=g,n.n=8;break;case 6:return n.n=7,u.findEntryPointFile(C.cwd,k.language);case 7:Fe=n.v;case 8:if(j=Fe){n.n=9;break}return f.printTestCaseResult({testCaseId:_,decisionCode:w.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:t.mainFilePath?"required main file not found: ".concat(t.mainFilePath):"main file not found".concat(k.language?": language: ".concat(k.language):"")}),n.a(2);case 9:if(q=d.findLanguageDefinitionByPath(j)){n.n=10;break}return f.printTestCaseResult({testCaseId:_,decisionCode:w.DecisionCode.WRONG_ANSWER,stderr:"unsupported language"}),n.a(2);case 10:return x=e.objectSpread2(e.objectSpread2({},process.env),{},{CI:"",FORCE_COLOR:"0"}),n.n=11,I({cwd:C.cwd,language:k.language,configuredMainFilePath:t.mainFilePath});case 11:if(B=n.v,!q.prebuild){n.n=16;break}return n.p=12,n.n=13,q.prebuild(C.cwd);case 13:return n.n=14,I({cwd:C.cwd,language:null!=(N=k.language)?N:E(j),configuredMainFilePath:t.mainFilePath,allowConfiguredPathFallback:!0});case 14:(A=n.v)&&(B=A),n.n=16;break;case 15:return n.p=15,Me=n.v,f.printTestCaseResult({testCaseId:_,decisionCode:w.DecisionCode.BUILD_ERROR,stderr:U(Me)}),n.a(2);case 16:if(B){n.n=17;break}return f.printTestCaseResult({testCaseId:_,decisionCode:w.DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:t.mainFilePath?"required main file not found: ".concat(t.mainFilePath):"main file not found".concat(k.language?": language: ".concat(k.language):"")}),n.a(2);case 17:return n.n=18,null==(b=t.prepare)?void 0:b.call(t,{cwd:C.cwd,env:x,mainFilePath:B,problemMarkdownFrontMatter:R});case 18:if(null==(v=n.v)){n.n=19;break}Pe=v,n.n=20;break;case 19:Pe=S({cwd:C.cwd,env:x,mainFilePath:B,languageDefinition:q});case 20:if(!(G=Pe)){n.n=21;break}return f.printTestCaseResult({testCaseId:_,decisionCode:null!=(W=G.decisionCode)?W:w.DecisionCode.BUILD_ERROR,feedbackMarkdown:G.feedbackMarkdown,stderr:G.stderr,stdout:G.stdout,outputFiles:G.outputFiles}),n.a(2);case 21:return n.n=22,o.snapshotWorkingDirectory(C.cwd);case 22:if(z=n.v,Y=_,n.p=23,!t.runCommand){n.n=24;break}_e=void 0,n.n=26;break;case 24:return n.n=25,O();case 25:_e=n.v;case 26:X=_e,V=null==(Q=F.shared)?void 0:Q.fileInputPath,K=e.createForOfIteratorHelper(P),n.p=27,K.s();case 28:if((J=K.n()).done){n.n=54;break}if(ue=J.value,Y=ue.id,!V){n.n=29;break}return n.n=29,c.copyTestCaseFileInput(V,C.cwd);case 29:if(!ue.fileInputPath){n.n=30;break}return n.n=30,c.copyTestCaseFileInput(ue.fileInputPath,C.cwd);case 30:return de="number"==typeof R.timeLimitMs?R.timeLimitMs/1e3:null!=($=t.runTimeoutSeconds)?$:5,le=X?e.objectSpread2(e.objectSpread2({},x),{},{DISPLAY:X.display}):x,n.n=31,null==(ne=t.resolveInput)?void 0:ne.call(t,{testCase:ue,cwd:C.cwd,env:le});case 31:if(null==(ee=n.v)){n.n=32;break}Le=ee,n.n=33;break;case 32:Le=ue.input;case 33:if(null==(Z=Le)){n.n=34;break}Oe=Z,n.n=35;break;case 34:Oe="";case 35:return H=pe=Oe,n.n=36,null==(te=t.command)?void 0:te.call(t,{testCase:ue,cwd:C.cwd,env:le,mainFilePath:B});case 36:if(null==(re=n.v)){n.n=37;break}je=re,n.n=38;break;case 37:je=q.command(B);case 38:if(fe=je,me=void 0,n.p=39,!t.runCommand){n.n=41;break}return n.n=40,t.runCommand({testCase:ue,command:fe,stdin:pe,cwd:C.cwd,env:le,timeLimitSeconds:de,screenshotWaitSeconds:null!=(he=t.screenshotWaitSeconds)?he:.3,stopDetectionThreshold:null!=(ge=t.stopDetectionThreshold)?ge:5});case 40:qe=n.v,n.n=43;break;case 41:return n.n=42,M({command:fe,stdin:pe,cwd:C.cwd,env:le,timeLimitSeconds:de,screenshotWaitSeconds:null!=(ve=t.screenshotWaitSeconds)?ve:.3,stopDetectionThreshold:null!=(we=t.stopDetectionThreshold)?we:5});case 42:qe=n.v;case 43:me=qe,n.n=46;break;case 44:return n.p=44,xe=n.v,f.printTestCaseResult({testCaseId:ue.id,decisionCode:w.DecisionCode.RUNTIME_ERROR,stdin:pe,stderr:U(xe)}),n.n=45,o.cleanWorkingDirectory(C.cwd,z);case 45:return n.a(2);case 46:return n.n=47,m.readOutputFiles(C.cwd,null!=(ie=R.requiredOutputFilePaths)?ie:[]);case 47:if(be=n.v,Ce={timeLimitSeconds:de,problemMarkdownFrontMatter:{memoryLimitByte:R.memoryLimitByte,requiredOutputFilePaths:R.requiredOutputFilePaths}},ye=T({runResult:me,outputFiles:be,context:Ce}),ke=ye,ye.decisionCode!==w.DecisionCode.ACCEPTED){n.n=51;break}return n.p=48,n.n=49,t.test({testCase:ue,runResult:me,outputFiles:be,context:Ce});case 49:Re=n.v,ke={decisionCode:null!=(Ie=Re.decisionCode)?Ie:ye.decisionCode,feedbackMarkdown:Re.feedbackMarkdown,stderr:Re.stderr,stdout:Re.stdout,outputFiles:Re.outputFiles},n.n=51;break;case 50:n.p=50,Be=n.v,ke={decisionCode:w.DecisionCode.RUNTIME_ERROR,stderr:U(Be)};case 51:return Ee=null!=(se=ke.decisionCode)?se:w.DecisionCode.ACCEPTED,Se=null!=(ae=ke.stdout)?ae:me.stdout,Te=null!=(oe=ke.stderr)?oe:me.stderr,f.printTestCaseResult({testCaseId:ue.id,decisionCode:Ee,exitStatus:me.status,stdin:me.stdin||void 0,stdout:Se||void 0,stderr:Te||void 0,timeSeconds:me.timeSeconds,memoryBytes:me.memoryBytes,feedbackMarkdown:ke.feedbackMarkdown,outputFiles:null!=(ce=ke.outputFiles)?ce:be.length>0?be:void 0}),n.n=52,o.cleanWorkingDirectory(C.cwd,z);case 52:if(Ee===w.DecisionCode.ACCEPTED){n.n=53;break}return n.a(3,54);case 53:n.n=28;break;case 54:n.n=56;break;case 55:n.p=55,Ne=n.v,K.e(Ne);case 56:return n.p=56,K.f(),n.f(56);case 57:n.n=59;break;case 58:return n.p=58,Ae=n.v,f.printTestCaseResult({testCaseId:Y,decisionCode:w.DecisionCode.RUNTIME_ERROR,stdin:H,stderr:U(Ae)}),n.n=59,o.cleanWorkingDirectory(C.cwd,z);case 59:return n.p=59,n.n=60,null==(De=X)?void 0:De.dispose();case 60:return n.f(59);case 61:return n.a(2)}},n,null,[[48,50],[39,44],[27,55,56,57],[23,58,59,61],[12,15]])}))).apply(this,arguments)}function I(e){return R.apply(this,arguments)}function R(){return(R=e.asyncToGenerator(e.regenerator().m(function n(r){var t;return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:if(!r.configuredMainFilePath){e.n=3;break}return t=i.join(r.cwd,r.configuredMainFilePath),e.n=1,A(t);case 1:if(!e.v){e.n=2;break}return e.a(2,r.configuredMainFilePath);case 2:if(r.allowConfiguredPathFallback){e.n=3;break}return e.a(2,void 0);case 3:return e.n=4,u.findEntryPointFile(r.cwd,r.language);case 4:return e.a(2,e.v)}},n)}))).apply(this,arguments)}function E(n){var r=Object.entries(b.languageIdToDefinition).filter(function(r){return e.slicedToArray(r,2)[1].fileExtensions.some(function(e){return n.endsWith(e)})}).map(function(n){return e.slicedToArray(n,1)[0]});return r.length>0?r:void 0}function S(e){var n,r,t=null==(n=(r=e.languageDefinition).buildCommand)?void 0:n.call(r,e.mainFilePath);if(t){var i=v.spawnSyncWithTimeout(t[0],t.slice(1),{cwd:e.cwd,encoding:"utf8",env:e.env},10);return i.timeSeconds>10?{decisionCode:w.DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,stderr:i.stderr||void 0}:0!==i.status?{decisionCode:w.DecisionCode.BUILD_ERROR,stderr:i.stderr||i.stdout||void 0}:void 0}}function T(e){var n,r,t;if("timeout"===e.runResult.stopReason)return{decisionCode:w.DecisionCode.TIME_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(0!==e.runResult.status)return{decisionCode:w.DecisionCode.RUNTIME_ERROR,stderr:e.runResult.stderr};if(e.runResult.memoryBytes>(null!=(n=e.context.problemMarkdownFrontMatter.memoryLimitByte)?n:Number.POSITIVE_INFINITY))return{decisionCode:w.DecisionCode.MEMORY_LIMIT_EXCEEDED,stderr:e.runResult.stderr};var i=null!=(r=null==(t=e.context.problemMarkdownFrontMatter.requiredOutputFilePaths)?void 0:t.length)?r:0;return e.outputFiles.length<i?{decisionCode:w.DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR}:{decisionCode:w.DecisionCode.ACCEPTED}}function D(e){return F.apply(this,arguments)}function F(){return(F=e.asyncToGenerator(e.regenerator().m(function n(r){return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,g.readTestCases(i.join(r,"test_cases"));case 1:return e.a(2,e.v)}},n)}))).apply(this,arguments)}function M(e){return P.apply(this,arguments)}function P(){return(P=e.asyncToGenerator(e.regenerator().m(function r(t){var i,a,o,c,u,d,l,p,f,m,h,g,v,w,b,y;return e.regenerator().w(function(r){for(;;)switch(r.n){case 0:i=["timeout",t.timeLimitSeconds.toFixed(3)].concat(C,e.toConsumableArray(t.command)),(a=n.spawn(i[0],i.slice(1),{cwd:t.cwd,env:t.env,detached:"win32"!==process.platform,stdio:["pipe","pipe","pipe"]})).stdout.setEncoding("utf8"),a.stderr.setEncoding("utf8"),o="",c="",l="process_exit",p=[],f=[],m=Date.now()/1e3,h=0,a.stdout.on("data",function(e){o+=e}),a.stderr.on("data",function(e){c+=e}),a.on("error",function(e){d=e,u=1}),a.on("close",function(e,n){return 124===e?(l="timeout",void(u=0)):n?(u=1,void(c=c?"".concat(c,"\nprocess terminated by signal: ").concat(n):"process terminated by signal: ".concat(n))):void(u=null!=e?e:1)}),t.stdin&&a.stdin.write(t.stdin),a.stdin.end(),g=e.regenerator().m(function n(){var r,i;return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,s.setTimeout(1e3*t.screenshotWaitSeconds);case 1:if(h=Math.max(h,B(a.pid)),r=_(t.env.DISPLAY),!((f=r.toSorted(function(e,n){return e.data.length-n.data.length})).length>0)){e.n=2;break}if(i=f.map(function(e){return e.data}).toSorted(),p.unshift(i),p.length=Math.min(p.length,t.stopDetectionThreshold),p.length!==t.stopDetectionThreshold||!p.every(function(e){return e.length===i.length&&e.every(function(e,n){return e===i[n]})})){e.n=2;break}return l="stable_screenshot",u=0,e.a(2,0);case 2:if(!(Date.now()/1e3-m>t.timeLimitSeconds)){e.n=3;break}return l="timeout",u=0,e.a(2,0);case 3:return e.a(2)}},n)});case 1:if(void 0!==u){r.n=4;break}return r.d(e.regeneratorValues(g()),2);case 2:if(0!==r.v){r.n=3;break}return r.a(3,4);case 3:r.n=1;break;case 4:return"process_exit"!==l&&null===a.exitCode&&(a.removeAllListeners("close"),a.removeAllListeners("error")),r.n=5,q(a);case 5:if(!d){r.n=6;break}throw d;case 6:return v=L(c,m,h),w=v.memoryBytes,b=v.stderr,y=v.timeSeconds,r.a(2,{stdin:t.stdin,stdout:o.trimEnd(),stderr:b,status:u,timeSeconds:y,memoryBytes:w,screenshots:f,stopReason:l})}},r)}))).apply(this,arguments)}function _(r){var t=r?e.objectSpread2(e.objectSpread2({},process.env),{},{DISPLAY:r}):process.env,i=n.spawnSync("xwininfo",["-root","-tree"],{encoding:"utf8",env:t});if(i.error)throw i.error;if(0!==i.status||!i.stdout)return[];for(var s=[],a=0,o=function(n){var r,t=[],i=n.split("\n"),s=e.createForOfIteratorHelper(i);try{for(s.s();!(r=s.n()).done;){var a=r.value;if(!(a.includes("Root window id:")||a.includes("Parent window id:")||a.includes("()"))){var o=/^\s{5}(0x[\da-f]+) /.exec(a);null!=o&&o[1]&&t.push(Number.parseInt(o[1],16).toString())}}}catch(e){s.e(e)}finally{s.f()}return t}(i.stdout);a<o.length;a++){var c=o[a],u=n.spawnSync("maim",["-i",c],{env:t});if(u.error)throw u.error;if(0===u.status&&0!==u.stdout.length){var d=n.spawnSync("xdotool",["getwindowname",c],{encoding:"utf8",env:t});if(d.error)throw d.error;var l=d.stdout.trim().replaceAll(/[\s/]/g,"_");s.push({path:"".concat(l||"window","_").concat(c,".png"),data:u.stdout.toString("base64"),encoding:"base64"})}}return s}function L(e,n,r){var t=/(?:^|\n)(\d+\.\d+) (\d+)\s*$/.exec(e),i=t?e.slice(0,t.index).trimEnd():e.trimEnd(),s=1024*Number(null==t?void 0:t[2])||0;return{stderr:i,timeSeconds:Number(null==t?void 0:t[1])||Date.now()/1e3-n,memoryBytes:Math.max(s,r)}}function O(){return j.apply(this,arguments)}function j(){return j=e.asyncToGenerator(e.regenerator().m(function r(){var t,i,a;return e.regenerator().w(function(r){for(;;)switch(r.n){case 0:if("linux"===process.platform){r.n=1;break}throw new Error("GUI screenshot capture is supported only on Linux.");case 1:t=e.regenerator().m(function r(){var t,i,o;return e.regenerator().w(function(r){for(;;)switch(r.n){case 0:return t=":".concat(a),(o=n.spawn("Xvfb",[t,"-screen","0","1280x1024x24","-ac"],{stdio:"ignore"})).on("error",function(e){i=e}),r.n=1,s.setTimeout(300);case 1:if(!i){r.n=2;break}throw i;case 2:if(null===o.exitCode){r.n=3;break}return r.a(2,0);case 3:return r.a(2,{v:{display:t,dispose:function(){var n=e.asyncToGenerator(e.regenerator().m(function n(){return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:if(o.killed){e.n=2;break}return o.kill("SIGTERM"),e.n=1,s.setTimeout(100);case 1:null===o.exitCode&&o.kill("SIGKILL");case 2:return e.a(2)}},n)}));return function(){return n.apply(this,arguments)}}()}})}},r)}),a=90;case 2:if(!(a<100)){r.n=6;break}return r.d(e.regeneratorValues(t()),3);case 3:if(0!==(i=r.v)){r.n=4;break}return r.a(3,5);case 4:if(!i){r.n=5;break}return r.a(2,i.v);case 5:a++,r.n=2;break;case 6:throw new Error("Xvfb could not be started.");case 7:return r.a(2)}},r)})),j.apply(this,arguments)}function q(e){return x.apply(this,arguments)}function x(){return(x=e.asyncToGenerator(e.regenerator().m(function n(r){return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:if(r.pid){e.n=1;break}return e.a(2);case 1:return N(r.pid,"SIGTERM"),e.n=2,s.setTimeout(200);case 2:null===r.exitCode&&N(r.pid,"SIGKILL");case 3:return e.a(2)}},n)}))).apply(this,arguments)}function B(e){if(!e||"linux"!==process.platform)return 0;var r=n.spawnSync("ps",["-o","rss=","--no-headers","--pgroup",String(e)],{encoding:"utf8"});return r.error||0!==r.status||!r.stdout?0:r.stdout.split("\n").map(function(e){return Number(e.trim())}).filter(function(e){return Number.isFinite(e)&&e>0}).reduce(function(e,n){return e+1024*n},0)}function N(e,n){try{if("win32"!==process.platform)return void process.kill(-e,n)}catch(e){}try{process.kill(e,n)}catch(e){}}function A(e){return G.apply(this,arguments)}function G(){return(G=e.asyncToGenerator(e.regenerator().m(function n(t){return e.regenerator().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,r.access(t);case 1:return e.a(2,!0);case 2:return e.p=2,e.v,e.a(2,!1)}},n,null,[[0,2]])}))).apply(this,arguments)}function U(e){return e instanceof Error?e.message:String(e)}exports.guiCommandJudgePreset=function(e,n){return k.apply(this,arguments)};
|
|
2
2
|
//# sourceMappingURL=guiCommand.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guiCommand.cjs","sources":["../../src/presets/guiCommand.ts"],"sourcesContent":["import childProcess from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { setTimeout as wait } from 'node:timers/promises';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases as readFileTestCases } from '../helpers/readTestCases.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\nimport { languageIdToDefinition } from '../types/language.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 5;\nconst SCREENSHOT_WAIT_SECONDS = 0.3;\nconst XVFB_STARTUP_WAIT_SECONDS = 0.3;\nconst XVFB_SHUTDOWN_WAIT_SECONDS = 0.1;\nconst PROCESS_SHUTDOWN_WAIT_SECONDS = 0.2;\nconst STOP_DETECTION_THRESHOLD = 5;\nconst TIME_COMMAND = [os.platform() === 'darwin' ? 'gtime' : '/usr/bin/time', '--format', '%e %M'] as const;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\ninterface BaseGuiTestCase {\n id: string;\n input?: string;\n fileInputPath?: string;\n}\n\nexport interface GuiScreenshotFile {\n path: string;\n data: string;\n encoding: 'base64';\n}\n\nexport interface GuiCommandRunResult {\n stdin: string;\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n screenshots: GuiScreenshotFile[];\n stopReason: 'process_exit' | 'stable_screenshot' | 'timeout';\n}\n\ninterface GuiJudgeContext {\n timeLimitSeconds: number;\n problemMarkdownFrontMatter: Pick<ProblemMarkdownFrontMatter, 'memoryLimitByte' | 'requiredOutputFilePaths'>;\n}\n\ntype GuiJudgeCaseResult = Pick<\n TestCaseResult,\n 'decisionCode' | 'feedbackMarkdown' | 'stderr' | 'stdout' | 'outputFiles'\n>;\n\nexport interface GuiCommandJudgePresetOptions<TTestCase extends BaseGuiTestCase = BaseGuiTestCase> {\n mainFilePath?: string;\n runTimeoutSeconds?: number;\n screenshotWaitSeconds?: number;\n stopDetectionThreshold?: number;\n readTestCases?: (problemDir: string) => Promise<readonly TTestCase[]>;\n prepare?: (context: {\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainFilePath: string;\n problemMarkdownFrontMatter: ProblemMarkdownFrontMatter;\n }) => Promise<Partial<GuiJudgeCaseResult> | undefined> | Partial<GuiJudgeCaseResult> | undefined;\n resolveInput?: (context: { testCase: TTestCase; cwd: string; env: NodeJS.ProcessEnv }) => Promise<string> | string;\n command?: (context: {\n testCase: TTestCase;\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainFilePath: string;\n }) => Promise<readonly [string, ...string[]]> | readonly [string, ...string[]];\n runCommand?: (context: {\n testCase: TTestCase;\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n screenshotWaitSeconds: number;\n stopDetectionThreshold: number;\n }) => Promise<GuiCommandRunResult> | GuiCommandRunResult;\n test: (context: {\n testCase: TTestCase;\n runResult: GuiCommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: GuiJudgeContext;\n }) => Promise<Partial<GuiJudgeCaseResult>> | Partial<GuiJudgeCaseResult>;\n}\n\n/**\n * A preset function for judging GUI programs by collecting screenshots while the program runs.\n *\n * Keep problem-specific logic in `prepare`, `command`, and `test`.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { DecisionCode } from '@exercode/problem-utils';\n * import { guiCommandJudgePreset } from '@exercode/problem-utils/presets/guiCommand';\n *\n * await guiCommandJudgePreset(import.meta.dirname, {\n * mainFilePath: 'Main.java',\n * readTestCases: async () => [{ id: 'default' }],\n * test: ({ runResult }) => {\n * return runResult.screenshots.length > 0\n * ? { decisionCode: DecisionCode.ACCEPTED }\n * : { decisionCode: DecisionCode.WRONG_ANSWER };\n * },\n * });\n * ```\n */\nexport async function guiCommandJudgePreset<TTestCase extends BaseGuiTestCase = BaseGuiTestCase>(\n problemDir: string,\n options: GuiCommandJudgePresetOptions<TTestCase>\n): Promise<void> {\n const args = parseArgs(process.argv);\n const params = judgeParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const configuredTestCases = await (options.readTestCases ?? readGuiTestCases<TTestCase>)(problemDir);\n const testCases =\n configuredTestCases.length > 0 ? configuredTestCases : ([{ id: 'default' }] as unknown as readonly TTestCase[]);\n const prebuildTestCaseId = testCases[0]?.id ?? 'prebuild';\n\n const staticAnalysisResult = await judgeByStaticAnalysis(args.cwd, problemMarkdownFrontMatter);\n if (staticAnalysisResult) {\n printTestCaseResult({ testCaseId: prebuildTestCaseId, ...staticAnalysisResult });\n return;\n }\n\n const initialMainFilePath = options.mainFilePath ?? (await findEntryPointFile(args.cwd, params.language));\n if (!initialMainFilePath) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: options.mainFilePath\n ? `required main file not found: ${options.mainFilePath}`\n : `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const languageDefinition = findLanguageDefinitionByPath(initialMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return;\n }\n\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let resolvedMainFilePath = await resolveMainFilePath({\n cwd: args.cwd,\n language: params.language,\n configuredMainFilePath: options.mainFilePath,\n });\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n const prebuiltMainFilePath = await resolveMainFilePath({\n cwd: args.cwd,\n language: params.language ?? inferLanguageIdsByPath(initialMainFilePath),\n configuredMainFilePath: options.mainFilePath,\n allowConfiguredPathFallback: true,\n });\n if (prebuiltMainFilePath) resolvedMainFilePath = prebuiltMainFilePath;\n } catch (error) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: errorToMessage(error),\n });\n return;\n }\n }\n if (!resolvedMainFilePath) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: options.mainFilePath\n ? `required main file not found: ${options.mainFilePath}`\n : `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const prepareResult =\n (await options.prepare?.({\n cwd: args.cwd,\n env,\n mainFilePath: resolvedMainFilePath,\n problemMarkdownFrontMatter,\n })) ??\n runDefaultPrepare({\n cwd: args.cwd,\n env,\n mainFilePath: resolvedMainFilePath,\n languageDefinition,\n });\n if (prepareResult) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: prepareResult.decisionCode ?? DecisionCode.BUILD_ERROR,\n feedbackMarkdown: prepareResult.feedbackMarkdown,\n stderr: prepareResult.stderr,\n stdout: prepareResult.stdout,\n outputFiles: prepareResult.outputFiles,\n });\n return;\n }\n\n const cwdSnapshot = await snapshotWorkingDirectory(args.cwd);\n let displayServer: Awaited<ReturnType<typeof ensureDisplayServer>> | undefined;\n let currentTestCaseId = prebuildTestCaseId;\n let currentStdin: string | undefined;\n try {\n displayServer = options.runCommand ? undefined : await ensureDisplayServer();\n const sharedFileInputPath = (configuredTestCases as { shared?: { fileInputPath?: string } }).shared?.fileInputPath;\n for (const testCase of testCases) {\n currentTestCaseId = testCase.id;\n if (sharedFileInputPath) await copyTestCaseFileInput(sharedFileInputPath, args.cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, args.cwd);\n\n const timeLimitSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : (options.runTimeoutSeconds ?? JUDGE_DEFAULT_TIMEOUT_SECONDS);\n\n const runEnv = displayServer ? { ...env, DISPLAY: displayServer.display } : env;\n const stdin = (await options.resolveInput?.({ testCase, cwd: args.cwd, env: runEnv })) ?? testCase.input ?? '';\n currentStdin = stdin;\n const command =\n (await options.command?.({ testCase, cwd: args.cwd, env: runEnv, mainFilePath: resolvedMainFilePath })) ??\n languageDefinition.command(resolvedMainFilePath);\n\n let runResult: GuiCommandRunResult;\n try {\n runResult = options.runCommand\n ? await options.runCommand({\n testCase,\n command,\n stdin,\n cwd: args.cwd,\n env: runEnv,\n timeLimitSeconds,\n screenshotWaitSeconds: options.screenshotWaitSeconds ?? SCREENSHOT_WAIT_SECONDS,\n stopDetectionThreshold: options.stopDetectionThreshold ?? STOP_DETECTION_THRESHOLD,\n })\n : await spawnGuiProgram({\n command,\n stdin,\n cwd: args.cwd,\n env: runEnv,\n timeLimitSeconds,\n screenshotWaitSeconds: options.screenshotWaitSeconds ?? SCREENSHOT_WAIT_SECONDS,\n stopDetectionThreshold: options.stopDetectionThreshold ?? STOP_DETECTION_THRESHOLD,\n });\n } catch (error) {\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin,\n stderr: errorToMessage(error),\n });\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n return;\n }\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n const judgeContext: GuiJudgeContext = {\n timeLimitSeconds,\n problemMarkdownFrontMatter: {\n memoryLimitByte: problemMarkdownFrontMatter.memoryLimitByte,\n requiredOutputFilePaths: problemMarkdownFrontMatter.requiredOutputFilePaths,\n },\n };\n const baseJudgeResult = evaluateGuiRunResult({ runResult, outputFiles, context: judgeContext });\n let judgeResult = baseJudgeResult;\n if (baseJudgeResult.decisionCode === DecisionCode.ACCEPTED) {\n try {\n const extendedJudgeResult = await options.test({\n testCase,\n runResult,\n outputFiles,\n context: judgeContext,\n });\n judgeResult = {\n decisionCode: extendedJudgeResult.decisionCode ?? baseJudgeResult.decisionCode,\n feedbackMarkdown: extendedJudgeResult.feedbackMarkdown,\n stderr: extendedJudgeResult.stderr,\n stdout: extendedJudgeResult.stdout,\n outputFiles: extendedJudgeResult.outputFiles,\n };\n } catch (error) {\n judgeResult = {\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stderr: errorToMessage(error),\n };\n }\n }\n\n const decisionCode = judgeResult.decisionCode ?? DecisionCode.ACCEPTED;\n const stdout = judgeResult.stdout ?? runResult.stdout;\n const stderr = judgeResult.stderr ?? runResult.stderr;\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode,\n exitStatus: runResult.status,\n stdin: runResult.stdin || undefined,\n stdout: stdout || undefined,\n stderr: stderr || undefined,\n timeSeconds: runResult.timeSeconds,\n memoryBytes: runResult.memoryBytes,\n feedbackMarkdown: judgeResult.feedbackMarkdown,\n outputFiles: judgeResult.outputFiles ?? (outputFiles.length > 0 ? outputFiles : undefined),\n });\n\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n if (decisionCode !== DecisionCode.ACCEPTED) break;\n }\n } catch (error) {\n printTestCaseResult({\n testCaseId: currentTestCaseId,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin: currentStdin,\n stderr: errorToMessage(error),\n });\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n } finally {\n await displayServer?.dispose();\n }\n}\n\nasync function resolveMainFilePath(context: {\n cwd: string;\n language?: string | string[];\n configuredMainFilePath?: string;\n allowConfiguredPathFallback?: boolean;\n}): Promise<string | undefined> {\n if (context.configuredMainFilePath) {\n const resolvedPath = path.join(context.cwd, context.configuredMainFilePath);\n if (await pathExists(resolvedPath)) return context.configuredMainFilePath;\n if (!context.allowConfiguredPathFallback) return undefined;\n }\n\n return await findEntryPointFile(context.cwd, context.language);\n}\n\nfunction inferLanguageIdsByPath(filePath: string): string[] | undefined {\n const languageIds = Object.entries(languageIdToDefinition)\n .filter(([, definition]) => definition.fileExtensions.some((ext) => filePath.endsWith(ext)))\n .map(([languageId]) => languageId);\n return languageIds.length > 0 ? languageIds : undefined;\n}\n\nfunction runDefaultPrepare(context: {\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainFilePath: string;\n languageDefinition: NonNullable<ReturnType<typeof findLanguageDefinitionByPath>>;\n}): Partial<GuiJudgeCaseResult> | undefined {\n const buildCommand = context.languageDefinition.buildCommand?.(context.mainFilePath);\n if (!buildCommand) return undefined;\n\n const buildResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: context.cwd, encoding: 'utf8', env: context.env },\n BUILD_TIMEOUT_SECONDS\n );\n\n if (buildResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n return {\n decisionCode: DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,\n stderr: buildResult.stderr || undefined,\n };\n }\n\n if (buildResult.status !== 0) {\n return {\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: buildResult.stderr || buildResult.stdout || undefined,\n };\n }\n\n return undefined;\n}\n\nfunction evaluateGuiRunResult(context: {\n runResult: GuiCommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: GuiJudgeContext;\n}): Partial<GuiJudgeCaseResult> {\n if (context.runResult.stopReason === 'timeout') {\n return {\n decisionCode: DecisionCode.TIME_LIMIT_EXCEEDED,\n stderr: context.runResult.stderr,\n };\n }\n\n if (context.runResult.status !== 0) {\n return {\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stderr: context.runResult.stderr,\n };\n }\n\n if (\n context.runResult.memoryBytes >\n (context.context.problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)\n ) {\n return {\n decisionCode: DecisionCode.MEMORY_LIMIT_EXCEEDED,\n stderr: context.runResult.stderr,\n };\n }\n\n const requiredOutputFilesCount = context.context.problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0;\n if (context.outputFiles.length < requiredOutputFilesCount) {\n return {\n decisionCode: DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR,\n };\n }\n\n return { decisionCode: DecisionCode.ACCEPTED };\n}\n\nasync function readGuiTestCases<TTestCase extends BaseGuiTestCase>(problemDir: string): Promise<readonly TTestCase[]> {\n return (await readFileTestCases(path.join(problemDir, 'test_cases'))) as unknown as readonly TTestCase[];\n}\n\nasync function spawnGuiProgram(context: {\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n screenshotWaitSeconds: number;\n stopDetectionThreshold: number;\n}): Promise<GuiCommandRunResult> {\n const wrappedCommand = ['timeout', context.timeLimitSeconds.toFixed(3), ...TIME_COMMAND, ...context.command] as const;\n const child = childProcess.spawn(wrappedCommand[0], wrappedCommand.slice(1), {\n cwd: context.cwd,\n env: context.env,\n detached: process.platform !== 'win32',\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n child.stdout.setEncoding('utf8');\n child.stderr.setEncoding('utf8');\n\n let stdout = '';\n let stderr = '';\n let exitCode: number | undefined;\n let spawnError: Error | undefined;\n let stopReason: GuiCommandRunResult['stopReason'] = 'process_exit';\n const screenshotSignaturesHistory: string[][] = [];\n let screenshots: GuiScreenshotFile[] = [];\n const startTimeSeconds = Date.now() / 1000;\n let sampledMemoryBytes = 0;\n\n child.stdout.on('data', (chunk: string) => {\n stdout += chunk;\n });\n child.stderr.on('data', (chunk: string) => {\n stderr += chunk;\n });\n child.on('error', (error) => {\n spawnError = error;\n exitCode = 1;\n });\n child.on('close', (code, signal) => {\n if (code === 124) {\n stopReason = 'timeout';\n exitCode = 0;\n return;\n }\n if (signal) {\n exitCode = 1;\n stderr = stderr\n ? `${stderr}\\nprocess terminated by signal: ${signal}`\n : `process terminated by signal: ${signal}`;\n return;\n }\n exitCode = code ?? 1;\n });\n\n if (context.stdin) child.stdin.write(context.stdin);\n child.stdin.end();\n\n while (exitCode === undefined) {\n await wait(context.screenshotWaitSeconds * 1000);\n sampledMemoryBytes = Math.max(sampledMemoryBytes, readProcessGroupMemoryBytes(child.pid));\n const currentScreenshots = takeScreenshots(context.env.DISPLAY);\n screenshots = currentScreenshots.toSorted((a, b) => a.data.length - b.data.length);\n\n if (screenshots.length > 0) {\n const screenshotSignatures = screenshots.map((file) => file.data).toSorted();\n screenshotSignaturesHistory.unshift(screenshotSignatures);\n screenshotSignaturesHistory.length = Math.min(screenshotSignaturesHistory.length, context.stopDetectionThreshold);\n if (\n screenshotSignaturesHistory.length === context.stopDetectionThreshold &&\n screenshotSignaturesHistory.every(\n (files) =>\n files.length === screenshotSignatures.length &&\n files.every((file, index) => file === screenshotSignatures[index])\n )\n ) {\n stopReason = 'stable_screenshot';\n exitCode = 0;\n break;\n }\n }\n\n if (Date.now() / 1000 - startTimeSeconds > context.timeLimitSeconds) {\n stopReason = 'timeout';\n exitCode = 0;\n break;\n }\n }\n\n if (stopReason !== 'process_exit' && child.exitCode === null) {\n child.removeAllListeners('close');\n child.removeAllListeners('error');\n }\n await stopProcess(child);\n if (spawnError) throw spawnError;\n const {\n memoryBytes,\n stderr: normalizedStderr,\n timeSeconds,\n } = parseTimedStderr(stderr, startTimeSeconds, sampledMemoryBytes);\n\n return {\n stdin: context.stdin,\n stdout: stdout.trimEnd(),\n stderr: normalizedStderr,\n status: exitCode,\n timeSeconds,\n memoryBytes,\n screenshots,\n stopReason,\n };\n}\n\nfunction takeScreenshots(display: string | undefined): GuiScreenshotFile[] {\n const env = display ? { ...process.env, DISPLAY: display } : process.env;\n const xwininfo = childProcess.spawnSync('xwininfo', ['-root', '-tree'], { encoding: 'utf8', env });\n if (xwininfo.error) throw xwininfo.error;\n if (xwininfo.status !== 0 || !xwininfo.stdout) return [];\n\n const screenshots: GuiScreenshotFile[] = [];\n for (const windowId of extractTopLevelWindowIds(xwininfo.stdout)) {\n const screenshot = childProcess.spawnSync('maim', ['-i', windowId], { env });\n if (screenshot.error) throw screenshot.error;\n if (screenshot.status !== 0 || screenshot.stdout.length === 0) continue;\n\n const windowNameResult = childProcess.spawnSync('xdotool', ['getwindowname', windowId], { encoding: 'utf8', env });\n if (windowNameResult.error) throw windowNameResult.error;\n const windowName = windowNameResult.stdout.trim().replaceAll(/[\\s/]/g, '_');\n\n screenshots.push({\n path: `${windowName || 'window'}_${windowId}.png`,\n data: screenshot.stdout.toString('base64'),\n encoding: 'base64',\n });\n }\n\n return screenshots;\n}\n\nfunction extractTopLevelWindowIds(stdout: string): string[] {\n const windowIds: string[] = [];\n const lines = stdout.split('\\n');\n for (const line of lines) {\n if (line.includes('Root window id:') || line.includes('Parent window id:') || line.includes('()')) continue;\n\n const match = /^\\s{5}(0x[\\da-f]+) /.exec(line);\n if (!match?.[1]) continue;\n windowIds.push(Number.parseInt(match[1], 16).toString());\n }\n return windowIds;\n}\n\nfunction parseTimedStderr(\n stderr: string,\n startTimeSeconds: number,\n sampledMemoryBytes: number\n): Pick<GuiCommandRunResult, 'stderr' | 'timeSeconds' | 'memoryBytes'> {\n const match = /(?:^|\\n)(\\d+\\.\\d+) (\\d+)\\s*$/.exec(stderr);\n const normalizedStderr = match ? stderr.slice(0, match.index).trimEnd() : stderr.trimEnd();\n const parsedMemoryBytes = Number(match?.[2]) * 1024 || 0;\n return {\n stderr: normalizedStderr,\n timeSeconds: Number(match?.[1]) || Date.now() / 1000 - startTimeSeconds,\n memoryBytes: Math.max(parsedMemoryBytes, sampledMemoryBytes),\n };\n}\n\nasync function ensureDisplayServer(): Promise<{ display: string; dispose: () => Promise<void> }> {\n if (process.platform !== 'linux') {\n throw new Error('GUI screenshot capture is supported only on Linux.');\n }\n\n for (let displayNumber = 90; displayNumber < 100; displayNumber++) {\n const display = `:${displayNumber}`;\n let spawnError: Error | undefined;\n const xvfb = childProcess.spawn('Xvfb', [display, '-screen', '0', '1280x1024x24', '-ac'], {\n stdio: 'ignore',\n });\n xvfb.on('error', (error) => {\n spawnError = error;\n });\n\n await wait(XVFB_STARTUP_WAIT_SECONDS * 1000);\n if (spawnError) throw spawnError;\n if (xvfb.exitCode !== null) continue;\n\n return {\n display,\n dispose: async () => {\n if (!xvfb.killed) {\n xvfb.kill('SIGTERM');\n await wait(XVFB_SHUTDOWN_WAIT_SECONDS * 1000);\n if (xvfb.exitCode === null) xvfb.kill('SIGKILL');\n }\n },\n };\n }\n\n throw new Error('Xvfb could not be started.');\n}\n\nasync function stopProcess(child: childProcess.ChildProcess): Promise<void> {\n if (!child.pid) return;\n killProcessGroup(child.pid, 'SIGTERM');\n await wait(PROCESS_SHUTDOWN_WAIT_SECONDS * 1000);\n if (child.exitCode === null) killProcessGroup(child.pid, 'SIGKILL');\n}\n\nfunction readProcessGroupMemoryBytes(processGroupId: number | undefined): number {\n if (!processGroupId || process.platform !== 'linux') return 0;\n\n const result = childProcess.spawnSync('ps', ['-o', 'rss=', '--no-headers', '--pgroup', String(processGroupId)], {\n encoding: 'utf8',\n });\n if (result.error || result.status !== 0 || !result.stdout) return 0;\n\n return result.stdout\n .split('\\n')\n .map((line) => Number(line.trim()))\n .filter((value) => Number.isFinite(value) && value > 0)\n .reduce((sum, value) => sum + value * 1024, 0);\n}\n\nfunction killProcessGroup(processGroupId: number, signal: NodeJS.Signals): void {\n try {\n if (process.platform !== 'win32') {\n process.kill(-processGroupId, signal);\n return;\n }\n } catch {\n // The process group may already be gone. Fall back to the direct PID below.\n }\n\n try {\n process.kill(processGroupId, signal);\n } catch {\n // The direct child may also already be gone.\n }\n}\n\nasync function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction errorToMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"],"names":["TIME_COMMAND","os","platform","judgeParamsSchema","z","object","language","union","string","array","optional","_guiCommandJudgePreset","_asyncToGenerator","_regenerator","m","_callee","problemDir","options","_options$readTestCase","_testCases$0$id","_testCases$","_options$mainFilePath","_yield$options$prepar","_options$prepare","args","params","problemMarkdownFrontMatter","configuredTestCases","testCases","prebuildTestCaseId","staticAnalysisResult","initialMainFilePath","languageDefinition","env","resolvedMainFilePath","_params$language","prebuiltMainFilePath","prepareResult","_prepareResult$decisi","cwdSnapshot","displayServer","currentTestCaseId","currentStdin","_shared","sharedFileInputPath","_iterator2","_step2","_options$runTimeoutSe","_ref5","_yield$options$resolv","_options$resolveInput","_yield$options$comman","_options$command","_problemMarkdownFront","_judgeResult$decision","_judgeResult$stdout","_judgeResult$stderr","_judgeResult$outputFi","testCase","timeLimitSeconds","runEnv","stdin","command","runResult","_options$screenshotWa","_options$stopDetectio","_options$screenshotWa2","_options$stopDetectio2","outputFiles","judgeContext","baseJudgeResult","judgeResult","_extendedJudgeResult$","extendedJudgeResult","decisionCode","stdout","stderr","_displayServer","_t","_t2","_t4","_t5","_t7","_t9","_t1","_t10","_t11","_t12","_t13","_t14","w","_context","p","n","parseArgs","process","argv","parse","readProblemMarkdownFrontMatter","v","readTestCases","readGuiTestCases","length","id","judgeByStaticAnalysis","cwd","printTestCaseResult","_objectSpread","testCaseId","a","mainFilePath","findEntryPointFile","DecisionCode","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","concat","findLanguageDefinitionByPath","WRONG_ANSWER","CI","FORCE_COLOR","resolveMainFilePath","configuredMainFilePath","prebuild","inferLanguageIdsByPath","allowConfiguredPathFallback","BUILD_ERROR","errorToMessage","prepare","call","runDefaultPrepare","feedbackMarkdown","snapshotWorkingDirectory","runCommand","undefined","ensureDisplayServer","shared","fileInputPath","_createForOfIteratorHelper","s","done","value","copyTestCaseFileInput","timeLimitMs","runTimeoutSeconds","DISPLAY","display","resolveInput","input","screenshotWaitSeconds","stopDetectionThreshold","spawnGuiProgram","RUNTIME_ERROR","cleanWorkingDirectory","readOutputFiles","requiredOutputFilePaths","memoryLimitByte","evaluateGuiRunResult","context","ACCEPTED","test","exitStatus","status","timeSeconds","memoryBytes","e","f","dispose","apply","this","arguments","_x3","_resolveMainFilePath","_callee2","resolvedPath","_context2","path","join","pathExists","filePath","languageIds","Object","entries","languageIdToDefinition","filter","_ref","_slicedToArray","fileExtensions","some","ext","endsWith","map","_ref3","_context$languageDefi","_context$languageDefi2","buildCommand","buildResult","spawnSyncWithTimeout","slice","encoding","BUILD_TIME_LIMIT_EXCEEDED","_context$context$prob","_context$context$prob2","_context$context$prob3","stopReason","TIME_LIMIT_EXCEEDED","Number","POSITIVE_INFINITY","MEMORY_LIMIT_EXCEEDED","requiredOutputFilesCount","MISSING_REQUIRED_OUTPUT_FILE_ERROR","_x4","_readGuiTestCases","_callee3","_context3","readFileTestCases","_x5","_spawnGuiProgram","_callee4","wrappedCommand","child","exitCode","spawnError","screenshotSignaturesHistory","screenshots","startTimeSeconds","sampledMemoryBytes","_loop","_parseTimedStderr","normalizedStderr","_context5","toFixed","_toConsumableArray","childProcess","spawn","detached","stdio","setEncoding","Date","now","on","chunk","error","code","signal","write","end","currentScreenshots","screenshotSignatures","_context4","wait","Math","max","readProcessGroupMemoryBytes","pid","takeScreenshots","toSorted","b","data","file","unshift","min","every","files","index","d","_regeneratorValues","removeAllListeners","stopProcess","parseTimedStderr","trimEnd","xwininfo","spawnSync","_i","_extractTopLevelWindo","_step","windowIds","lines","split","_iterator","line","includes","match","exec","push","parseInt","toString","err","extractTopLevelWindowIds","windowId","screenshot","windowNameResult","windowName","trim","replaceAll","parsedMemoryBytes","_ensureDisplayServer","_callee6","_loop2","_ret2","displayNumber","_context8","Error","xvfb","_context7","XVFB_STARTUP_WAIT_SECONDS","_dispose","_callee5","_context6","killed","kill","XVFB_SHUTDOWN_WAIT_SECONDS","_x6","_stopProcess","_callee7","_context9","killProcessGroup","PROCESS_SHUTDOWN_WAIT_SECONDS","processGroupId","result","String","isFinite","reduce","sum","_unused","_unused2","_x7","_pathExists","_callee8","_context0","fs","access","message","_x","_x2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"guiCommand.cjs","sources":["../../src/presets/guiCommand.ts"],"sourcesContent":["import childProcess from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { setTimeout as wait } from 'node:timers/promises';\n\nimport { z } from 'zod';\n\nimport { cleanWorkingDirectory, snapshotWorkingDirectory } from '../helpers/cleanWorkingDirectory.js';\nimport { copyTestCaseFileInput } from '../helpers/copyTestCaseFileInput.js';\nimport { findEntryPointFile } from '../helpers/findEntryPointFile.js';\nimport { findLanguageDefinitionByPath } from '../helpers/findLanguageDefinitionByPath.js';\nimport { judgeByStaticAnalysis } from '../helpers/judgeByStaticAnalysis.js';\nimport { parseArgs } from '../helpers/parseArgs.js';\nimport { printTestCaseResult } from '../helpers/printTestCaseResult.js';\nimport { readOutputFiles } from '../helpers/readOutputFiles.js';\nimport { readProblemMarkdownFrontMatter } from '../helpers/readProblemMarkdownFrontMatter.js';\nimport { readTestCases as readFileTestCases } from '../helpers/readTestCases.js';\nimport { spawnSyncWithTimeout } from '../helpers/spawnSyncWithTimeout.js';\nimport { DecisionCode } from '../types/decisionCode.js';\nimport { languageIdToDefinition } from '../types/language.js';\nimport type { ProblemMarkdownFrontMatter } from '../types/problem.js';\nimport type { TestCaseResult } from '../types/testCaseResult.js';\n\nconst BUILD_TIMEOUT_SECONDS = 10;\nconst JUDGE_DEFAULT_TIMEOUT_SECONDS = 5;\nconst SCREENSHOT_WAIT_SECONDS = 0.3;\nconst XVFB_STARTUP_WAIT_SECONDS = 0.3;\nconst XVFB_SHUTDOWN_WAIT_SECONDS = 0.1;\nconst PROCESS_SHUTDOWN_WAIT_SECONDS = 0.2;\nconst STOP_DETECTION_THRESHOLD = 5;\nconst TIME_COMMAND = [os.platform() === 'darwin' ? 'gtime' : '/usr/bin/time', '--format', '%e %M'] as const;\n\nconst judgeParamsSchema = z.object({\n language: z.union([z.string(), z.array(z.string())]).optional(),\n});\n\ninterface BaseGuiTestCase {\n id: string;\n input?: string;\n fileInputPath?: string;\n}\n\nexport interface GuiScreenshotFile {\n path: string;\n data: string;\n encoding: 'base64';\n}\n\nexport interface GuiCommandRunResult {\n stdin: string;\n stdout: string;\n stderr: string;\n status: number | undefined;\n timeSeconds: number;\n memoryBytes: number;\n screenshots: GuiScreenshotFile[];\n stopReason: 'process_exit' | 'stable_screenshot' | 'timeout';\n}\n\ninterface GuiJudgeContext {\n timeLimitSeconds: number;\n problemMarkdownFrontMatter: Pick<ProblemMarkdownFrontMatter, 'memoryLimitByte' | 'requiredOutputFilePaths'>;\n}\n\ntype GuiJudgeCaseResult = Pick<\n TestCaseResult,\n 'decisionCode' | 'feedbackMarkdown' | 'stderr' | 'stdout' | 'outputFiles'\n>;\n\nexport interface GuiCommandJudgePresetOptions<TTestCase extends BaseGuiTestCase = BaseGuiTestCase> {\n mainFilePath?: string;\n runTimeoutSeconds?: number;\n screenshotWaitSeconds?: number;\n stopDetectionThreshold?: number;\n readTestCases?: (problemDir: string) => Promise<readonly TTestCase[]>;\n prepare?: (context: {\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainFilePath: string;\n problemMarkdownFrontMatter: ProblemMarkdownFrontMatter;\n }) => Promise<Partial<GuiJudgeCaseResult> | undefined> | Partial<GuiJudgeCaseResult> | undefined;\n resolveInput?: (context: { testCase: TTestCase; cwd: string; env: NodeJS.ProcessEnv }) => Promise<string> | string;\n command?: (context: {\n testCase: TTestCase;\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainFilePath: string;\n }) => Promise<readonly [string, ...string[]]> | readonly [string, ...string[]];\n runCommand?: (context: {\n testCase: TTestCase;\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n screenshotWaitSeconds: number;\n stopDetectionThreshold: number;\n }) => Promise<GuiCommandRunResult> | GuiCommandRunResult;\n test: (context: {\n testCase: TTestCase;\n runResult: GuiCommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: GuiJudgeContext;\n }) => Promise<Partial<GuiJudgeCaseResult>> | Partial<GuiJudgeCaseResult>;\n}\n\n/**\n * A preset function for judging GUI programs by collecting screenshots while the program runs.\n *\n * Keep problem-specific logic in `prepare`, `command`, and `test`.\n *\n * @example\n * Create `judge.ts`:\n * ```ts\n * import { DecisionCode } from '@exercode/problem-utils';\n * import { guiCommandJudgePreset } from '@exercode/problem-utils/presets/guiCommand';\n *\n * await guiCommandJudgePreset(import.meta.dirname, {\n * mainFilePath: 'Main.java',\n * readTestCases: async () => [{ id: 'default' }],\n * test: ({ runResult }) => {\n * return runResult.screenshots.length > 0\n * ? { decisionCode: DecisionCode.ACCEPTED }\n * : { decisionCode: DecisionCode.WRONG_ANSWER };\n * },\n * });\n * ```\n */\nexport async function guiCommandJudgePreset<TTestCase extends BaseGuiTestCase = BaseGuiTestCase>(\n problemDir: string,\n options: GuiCommandJudgePresetOptions<TTestCase>\n): Promise<void> {\n const args = parseArgs(process.argv);\n if (!args.cwd) throw new Error('cwd argument required');\n const params = judgeParamsSchema.parse(args.params);\n\n const problemMarkdownFrontMatter = await readProblemMarkdownFrontMatter(problemDir);\n const configuredTestCases = await (options.readTestCases ?? readGuiTestCases<TTestCase>)(problemDir);\n const testCases =\n configuredTestCases.length > 0 ? configuredTestCases : ([{ id: 'default' }] as unknown as readonly TTestCase[]);\n const prebuildTestCaseId = testCases[0]?.id ?? 'prebuild';\n\n const staticAnalysisResult = await judgeByStaticAnalysis(args.cwd, problemMarkdownFrontMatter);\n if (staticAnalysisResult) {\n printTestCaseResult({ testCaseId: prebuildTestCaseId, ...staticAnalysisResult });\n return;\n }\n\n const initialMainFilePath = options.mainFilePath ?? (await findEntryPointFile(args.cwd, params.language));\n if (!initialMainFilePath) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: options.mainFilePath\n ? `required main file not found: ${options.mainFilePath}`\n : `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const languageDefinition = findLanguageDefinitionByPath(initialMainFilePath);\n if (!languageDefinition) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.WRONG_ANSWER,\n stderr: 'unsupported language',\n });\n return;\n }\n\n const env = { ...process.env, CI: '', FORCE_COLOR: '0' };\n\n let resolvedMainFilePath = await resolveMainFilePath({\n cwd: args.cwd,\n language: params.language,\n configuredMainFilePath: options.mainFilePath,\n });\n if (languageDefinition.prebuild) {\n try {\n await languageDefinition.prebuild(args.cwd);\n const prebuiltMainFilePath = await resolveMainFilePath({\n cwd: args.cwd,\n language: params.language ?? inferLanguageIdsByPath(initialMainFilePath),\n configuredMainFilePath: options.mainFilePath,\n allowConfiguredPathFallback: true,\n });\n if (prebuiltMainFilePath) resolvedMainFilePath = prebuiltMainFilePath;\n } catch (error) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: errorToMessage(error),\n });\n return;\n }\n }\n if (!resolvedMainFilePath) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: DecisionCode.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,\n stderr: options.mainFilePath\n ? `required main file not found: ${options.mainFilePath}`\n : `main file not found${params.language ? `: language: ${params.language}` : ''}`,\n });\n return;\n }\n\n const prepareResult =\n (await options.prepare?.({\n cwd: args.cwd,\n env,\n mainFilePath: resolvedMainFilePath,\n problemMarkdownFrontMatter,\n })) ??\n runDefaultPrepare({\n cwd: args.cwd,\n env,\n mainFilePath: resolvedMainFilePath,\n languageDefinition,\n });\n if (prepareResult) {\n printTestCaseResult({\n testCaseId: prebuildTestCaseId,\n decisionCode: prepareResult.decisionCode ?? DecisionCode.BUILD_ERROR,\n feedbackMarkdown: prepareResult.feedbackMarkdown,\n stderr: prepareResult.stderr,\n stdout: prepareResult.stdout,\n outputFiles: prepareResult.outputFiles,\n });\n return;\n }\n\n const cwdSnapshot = await snapshotWorkingDirectory(args.cwd);\n let displayServer: Awaited<ReturnType<typeof ensureDisplayServer>> | undefined;\n let currentTestCaseId = prebuildTestCaseId;\n let currentStdin: string | undefined;\n try {\n displayServer = options.runCommand ? undefined : await ensureDisplayServer();\n const sharedFileInputPath = (configuredTestCases as { shared?: { fileInputPath?: string } }).shared?.fileInputPath;\n for (const testCase of testCases) {\n currentTestCaseId = testCase.id;\n if (sharedFileInputPath) await copyTestCaseFileInput(sharedFileInputPath, args.cwd);\n if (testCase.fileInputPath) await copyTestCaseFileInput(testCase.fileInputPath, args.cwd);\n\n const timeLimitSeconds =\n typeof problemMarkdownFrontMatter.timeLimitMs === 'number'\n ? problemMarkdownFrontMatter.timeLimitMs / 1000\n : (options.runTimeoutSeconds ?? JUDGE_DEFAULT_TIMEOUT_SECONDS);\n\n const runEnv = displayServer ? { ...env, DISPLAY: displayServer.display } : env;\n const stdin = (await options.resolveInput?.({ testCase, cwd: args.cwd, env: runEnv })) ?? testCase.input ?? '';\n currentStdin = stdin;\n const command =\n (await options.command?.({ testCase, cwd: args.cwd, env: runEnv, mainFilePath: resolvedMainFilePath })) ??\n languageDefinition.command(resolvedMainFilePath);\n\n let runResult: GuiCommandRunResult;\n try {\n runResult = options.runCommand\n ? await options.runCommand({\n testCase,\n command,\n stdin,\n cwd: args.cwd,\n env: runEnv,\n timeLimitSeconds,\n screenshotWaitSeconds: options.screenshotWaitSeconds ?? SCREENSHOT_WAIT_SECONDS,\n stopDetectionThreshold: options.stopDetectionThreshold ?? STOP_DETECTION_THRESHOLD,\n })\n : await spawnGuiProgram({\n command,\n stdin,\n cwd: args.cwd,\n env: runEnv,\n timeLimitSeconds,\n screenshotWaitSeconds: options.screenshotWaitSeconds ?? SCREENSHOT_WAIT_SECONDS,\n stopDetectionThreshold: options.stopDetectionThreshold ?? STOP_DETECTION_THRESHOLD,\n });\n } catch (error) {\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin,\n stderr: errorToMessage(error),\n });\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n return;\n }\n\n const outputFiles = await readOutputFiles(args.cwd, problemMarkdownFrontMatter.requiredOutputFilePaths ?? []);\n const judgeContext: GuiJudgeContext = {\n timeLimitSeconds,\n problemMarkdownFrontMatter: {\n memoryLimitByte: problemMarkdownFrontMatter.memoryLimitByte,\n requiredOutputFilePaths: problemMarkdownFrontMatter.requiredOutputFilePaths,\n },\n };\n const baseJudgeResult = evaluateGuiRunResult({ runResult, outputFiles, context: judgeContext });\n let judgeResult = baseJudgeResult;\n if (baseJudgeResult.decisionCode === DecisionCode.ACCEPTED) {\n try {\n const extendedJudgeResult = await options.test({\n testCase,\n runResult,\n outputFiles,\n context: judgeContext,\n });\n judgeResult = {\n decisionCode: extendedJudgeResult.decisionCode ?? baseJudgeResult.decisionCode,\n feedbackMarkdown: extendedJudgeResult.feedbackMarkdown,\n stderr: extendedJudgeResult.stderr,\n stdout: extendedJudgeResult.stdout,\n outputFiles: extendedJudgeResult.outputFiles,\n };\n } catch (error) {\n judgeResult = {\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stderr: errorToMessage(error),\n };\n }\n }\n\n const decisionCode = judgeResult.decisionCode ?? DecisionCode.ACCEPTED;\n const stdout = judgeResult.stdout ?? runResult.stdout;\n const stderr = judgeResult.stderr ?? runResult.stderr;\n printTestCaseResult({\n testCaseId: testCase.id,\n decisionCode,\n exitStatus: runResult.status,\n stdin: runResult.stdin || undefined,\n stdout: stdout || undefined,\n stderr: stderr || undefined,\n timeSeconds: runResult.timeSeconds,\n memoryBytes: runResult.memoryBytes,\n feedbackMarkdown: judgeResult.feedbackMarkdown,\n outputFiles: judgeResult.outputFiles ?? (outputFiles.length > 0 ? outputFiles : undefined),\n });\n\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n if (decisionCode !== DecisionCode.ACCEPTED) break;\n }\n } catch (error) {\n printTestCaseResult({\n testCaseId: currentTestCaseId,\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stdin: currentStdin,\n stderr: errorToMessage(error),\n });\n await cleanWorkingDirectory(args.cwd, cwdSnapshot);\n } finally {\n await displayServer?.dispose();\n }\n}\n\nasync function resolveMainFilePath(context: {\n cwd: string;\n language?: string | string[];\n configuredMainFilePath?: string;\n allowConfiguredPathFallback?: boolean;\n}): Promise<string | undefined> {\n if (context.configuredMainFilePath) {\n const resolvedPath = path.join(context.cwd, context.configuredMainFilePath);\n if (await pathExists(resolvedPath)) return context.configuredMainFilePath;\n if (!context.allowConfiguredPathFallback) return undefined;\n }\n\n return await findEntryPointFile(context.cwd, context.language);\n}\n\nfunction inferLanguageIdsByPath(filePath: string): string[] | undefined {\n const languageIds = Object.entries(languageIdToDefinition)\n .filter(([, definition]) => definition.fileExtensions.some((ext) => filePath.endsWith(ext)))\n .map(([languageId]) => languageId);\n return languageIds.length > 0 ? languageIds : undefined;\n}\n\nfunction runDefaultPrepare(context: {\n cwd: string;\n env: NodeJS.ProcessEnv;\n mainFilePath: string;\n languageDefinition: NonNullable<ReturnType<typeof findLanguageDefinitionByPath>>;\n}): Partial<GuiJudgeCaseResult> | undefined {\n const buildCommand = context.languageDefinition.buildCommand?.(context.mainFilePath);\n if (!buildCommand) return undefined;\n\n const buildResult = spawnSyncWithTimeout(\n buildCommand[0],\n buildCommand.slice(1),\n { cwd: context.cwd, encoding: 'utf8', env: context.env },\n BUILD_TIMEOUT_SECONDS\n );\n\n if (buildResult.timeSeconds > BUILD_TIMEOUT_SECONDS) {\n return {\n decisionCode: DecisionCode.BUILD_TIME_LIMIT_EXCEEDED,\n stderr: buildResult.stderr || undefined,\n };\n }\n\n if (buildResult.status !== 0) {\n return {\n decisionCode: DecisionCode.BUILD_ERROR,\n stderr: buildResult.stderr || buildResult.stdout || undefined,\n };\n }\n\n return undefined;\n}\n\nfunction evaluateGuiRunResult(context: {\n runResult: GuiCommandRunResult;\n outputFiles: NonNullable<TestCaseResult['outputFiles']>;\n context: GuiJudgeContext;\n}): Partial<GuiJudgeCaseResult> {\n if (context.runResult.stopReason === 'timeout') {\n return {\n decisionCode: DecisionCode.TIME_LIMIT_EXCEEDED,\n stderr: context.runResult.stderr,\n };\n }\n\n if (context.runResult.status !== 0) {\n return {\n decisionCode: DecisionCode.RUNTIME_ERROR,\n stderr: context.runResult.stderr,\n };\n }\n\n if (\n context.runResult.memoryBytes >\n (context.context.problemMarkdownFrontMatter.memoryLimitByte ?? Number.POSITIVE_INFINITY)\n ) {\n return {\n decisionCode: DecisionCode.MEMORY_LIMIT_EXCEEDED,\n stderr: context.runResult.stderr,\n };\n }\n\n const requiredOutputFilesCount = context.context.problemMarkdownFrontMatter.requiredOutputFilePaths?.length ?? 0;\n if (context.outputFiles.length < requiredOutputFilesCount) {\n return {\n decisionCode: DecisionCode.MISSING_REQUIRED_OUTPUT_FILE_ERROR,\n };\n }\n\n return { decisionCode: DecisionCode.ACCEPTED };\n}\n\nasync function readGuiTestCases<TTestCase extends BaseGuiTestCase>(problemDir: string): Promise<readonly TTestCase[]> {\n return (await readFileTestCases(path.join(problemDir, 'test_cases'))) as unknown as readonly TTestCase[];\n}\n\nasync function spawnGuiProgram(context: {\n command: readonly [string, ...string[]];\n stdin: string;\n cwd: string;\n env: NodeJS.ProcessEnv;\n timeLimitSeconds: number;\n screenshotWaitSeconds: number;\n stopDetectionThreshold: number;\n}): Promise<GuiCommandRunResult> {\n const wrappedCommand = ['timeout', context.timeLimitSeconds.toFixed(3), ...TIME_COMMAND, ...context.command] as const;\n const child = childProcess.spawn(wrappedCommand[0], wrappedCommand.slice(1), {\n cwd: context.cwd,\n env: context.env,\n detached: process.platform !== 'win32',\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n child.stdout.setEncoding('utf8');\n child.stderr.setEncoding('utf8');\n\n let stdout = '';\n let stderr = '';\n let exitCode: number | undefined;\n let spawnError: Error | undefined;\n let stopReason: GuiCommandRunResult['stopReason'] = 'process_exit';\n const screenshotSignaturesHistory: string[][] = [];\n let screenshots: GuiScreenshotFile[] = [];\n const startTimeSeconds = Date.now() / 1000;\n let sampledMemoryBytes = 0;\n\n child.stdout.on('data', (chunk: string) => {\n stdout += chunk;\n });\n child.stderr.on('data', (chunk: string) => {\n stderr += chunk;\n });\n child.on('error', (error) => {\n spawnError = error;\n exitCode = 1;\n });\n child.on('close', (code, signal) => {\n if (code === 124) {\n stopReason = 'timeout';\n exitCode = 0;\n return;\n }\n if (signal) {\n exitCode = 1;\n stderr = stderr\n ? `${stderr}\\nprocess terminated by signal: ${signal}`\n : `process terminated by signal: ${signal}`;\n return;\n }\n exitCode = code ?? 1;\n });\n\n if (context.stdin) child.stdin.write(context.stdin);\n child.stdin.end();\n\n while (exitCode === undefined) {\n await wait(context.screenshotWaitSeconds * 1000);\n sampledMemoryBytes = Math.max(sampledMemoryBytes, readProcessGroupMemoryBytes(child.pid));\n const currentScreenshots = takeScreenshots(context.env.DISPLAY);\n screenshots = currentScreenshots.toSorted((a, b) => a.data.length - b.data.length);\n\n if (screenshots.length > 0) {\n const screenshotSignatures = screenshots.map((file) => file.data).toSorted();\n screenshotSignaturesHistory.unshift(screenshotSignatures);\n screenshotSignaturesHistory.length = Math.min(screenshotSignaturesHistory.length, context.stopDetectionThreshold);\n if (\n screenshotSignaturesHistory.length === context.stopDetectionThreshold &&\n screenshotSignaturesHistory.every(\n (files) =>\n files.length === screenshotSignatures.length &&\n files.every((file, index) => file === screenshotSignatures[index])\n )\n ) {\n stopReason = 'stable_screenshot';\n exitCode = 0;\n break;\n }\n }\n\n if (Date.now() / 1000 - startTimeSeconds > context.timeLimitSeconds) {\n stopReason = 'timeout';\n exitCode = 0;\n break;\n }\n }\n\n if (stopReason !== 'process_exit' && child.exitCode === null) {\n child.removeAllListeners('close');\n child.removeAllListeners('error');\n }\n await stopProcess(child);\n if (spawnError) throw spawnError;\n const {\n memoryBytes,\n stderr: normalizedStderr,\n timeSeconds,\n } = parseTimedStderr(stderr, startTimeSeconds, sampledMemoryBytes);\n\n return {\n stdin: context.stdin,\n stdout: stdout.trimEnd(),\n stderr: normalizedStderr,\n status: exitCode,\n timeSeconds,\n memoryBytes,\n screenshots,\n stopReason,\n };\n}\n\nfunction takeScreenshots(display: string | undefined): GuiScreenshotFile[] {\n const env = display ? { ...process.env, DISPLAY: display } : process.env;\n const xwininfo = childProcess.spawnSync('xwininfo', ['-root', '-tree'], { encoding: 'utf8', env });\n if (xwininfo.error) throw xwininfo.error;\n if (xwininfo.status !== 0 || !xwininfo.stdout) return [];\n\n const screenshots: GuiScreenshotFile[] = [];\n for (const windowId of extractTopLevelWindowIds(xwininfo.stdout)) {\n const screenshot = childProcess.spawnSync('maim', ['-i', windowId], { env });\n if (screenshot.error) throw screenshot.error;\n if (screenshot.status !== 0 || screenshot.stdout.length === 0) continue;\n\n const windowNameResult = childProcess.spawnSync('xdotool', ['getwindowname', windowId], { encoding: 'utf8', env });\n if (windowNameResult.error) throw windowNameResult.error;\n const windowName = windowNameResult.stdout.trim().replaceAll(/[\\s/]/g, '_');\n\n screenshots.push({\n path: `${windowName || 'window'}_${windowId}.png`,\n data: screenshot.stdout.toString('base64'),\n encoding: 'base64',\n });\n }\n\n return screenshots;\n}\n\nfunction extractTopLevelWindowIds(stdout: string): string[] {\n const windowIds: string[] = [];\n const lines = stdout.split('\\n');\n for (const line of lines) {\n if (line.includes('Root window id:') || line.includes('Parent window id:') || line.includes('()')) continue;\n\n const match = /^\\s{5}(0x[\\da-f]+) /.exec(line);\n if (!match?.[1]) continue;\n windowIds.push(Number.parseInt(match[1], 16).toString());\n }\n return windowIds;\n}\n\nfunction parseTimedStderr(\n stderr: string,\n startTimeSeconds: number,\n sampledMemoryBytes: number\n): Pick<GuiCommandRunResult, 'stderr' | 'timeSeconds' | 'memoryBytes'> {\n const match = /(?:^|\\n)(\\d+\\.\\d+) (\\d+)\\s*$/.exec(stderr);\n const normalizedStderr = match ? stderr.slice(0, match.index).trimEnd() : stderr.trimEnd();\n const parsedMemoryBytes = Number(match?.[2]) * 1024 || 0;\n return {\n stderr: normalizedStderr,\n timeSeconds: Number(match?.[1]) || Date.now() / 1000 - startTimeSeconds,\n memoryBytes: Math.max(parsedMemoryBytes, sampledMemoryBytes),\n };\n}\n\nasync function ensureDisplayServer(): Promise<{ display: string; dispose: () => Promise<void> }> {\n if (process.platform !== 'linux') {\n throw new Error('GUI screenshot capture is supported only on Linux.');\n }\n\n for (let displayNumber = 90; displayNumber < 100; displayNumber++) {\n const display = `:${displayNumber}`;\n let spawnError: Error | undefined;\n const xvfb = childProcess.spawn('Xvfb', [display, '-screen', '0', '1280x1024x24', '-ac'], {\n stdio: 'ignore',\n });\n xvfb.on('error', (error) => {\n spawnError = error;\n });\n\n await wait(XVFB_STARTUP_WAIT_SECONDS * 1000);\n if (spawnError) throw spawnError;\n if (xvfb.exitCode !== null) continue;\n\n return {\n display,\n dispose: async () => {\n if (!xvfb.killed) {\n xvfb.kill('SIGTERM');\n await wait(XVFB_SHUTDOWN_WAIT_SECONDS * 1000);\n if (xvfb.exitCode === null) xvfb.kill('SIGKILL');\n }\n },\n };\n }\n\n throw new Error('Xvfb could not be started.');\n}\n\nasync function stopProcess(child: childProcess.ChildProcess): Promise<void> {\n if (!child.pid) return;\n killProcessGroup(child.pid, 'SIGTERM');\n await wait(PROCESS_SHUTDOWN_WAIT_SECONDS * 1000);\n if (child.exitCode === null) killProcessGroup(child.pid, 'SIGKILL');\n}\n\nfunction readProcessGroupMemoryBytes(processGroupId: number | undefined): number {\n if (!processGroupId || process.platform !== 'linux') return 0;\n\n const result = childProcess.spawnSync('ps', ['-o', 'rss=', '--no-headers', '--pgroup', String(processGroupId)], {\n encoding: 'utf8',\n });\n if (result.error || result.status !== 0 || !result.stdout) return 0;\n\n return result.stdout\n .split('\\n')\n .map((line) => Number(line.trim()))\n .filter((value) => Number.isFinite(value) && value > 0)\n .reduce((sum, value) => sum + value * 1024, 0);\n}\n\nfunction killProcessGroup(processGroupId: number, signal: NodeJS.Signals): void {\n try {\n if (process.platform !== 'win32') {\n process.kill(-processGroupId, signal);\n return;\n }\n } catch {\n // The process group may already be gone. Fall back to the direct PID below.\n }\n\n try {\n process.kill(processGroupId, signal);\n } catch {\n // The direct child may also already be gone.\n }\n}\n\nasync function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction errorToMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"],"names":["TIME_COMMAND","os","platform","judgeParamsSchema","z","object","language","union","string","array","optional","_guiCommandJudgePreset","_asyncToGenerator","_regenerator","m","_callee","problemDir","options","_options$readTestCase","_testCases$0$id","_testCases$","_options$mainFilePath","_yield$options$prepar","_options$prepare","args","params","problemMarkdownFrontMatter","configuredTestCases","testCases","prebuildTestCaseId","staticAnalysisResult","initialMainFilePath","languageDefinition","env","resolvedMainFilePath","_params$language","prebuiltMainFilePath","prepareResult","_prepareResult$decisi","cwdSnapshot","displayServer","currentTestCaseId","currentStdin","_shared","sharedFileInputPath","_iterator2","_step2","_options$runTimeoutSe","_ref5","_yield$options$resolv","_options$resolveInput","_yield$options$comman","_options$command","_problemMarkdownFront","_judgeResult$decision","_judgeResult$stdout","_judgeResult$stderr","_judgeResult$outputFi","testCase","timeLimitSeconds","runEnv","stdin","command","runResult","_options$screenshotWa","_options$stopDetectio","_options$screenshotWa2","_options$stopDetectio2","outputFiles","judgeContext","baseJudgeResult","judgeResult","_extendedJudgeResult$","extendedJudgeResult","decisionCode","stdout","stderr","_displayServer","_t","_t2","_t4","_t5","_t7","_t9","_t1","_t10","_t11","_t12","_t13","_t14","w","_context","p","n","parseArgs","process","argv","cwd","Error","parse","readProblemMarkdownFrontMatter","v","readTestCases","readGuiTestCases","length","id","judgeByStaticAnalysis","printTestCaseResult","_objectSpread","testCaseId","a","mainFilePath","findEntryPointFile","DecisionCode","MISSING_REQUIRED_SUBMISSION_FILE_ERROR","concat","findLanguageDefinitionByPath","WRONG_ANSWER","CI","FORCE_COLOR","resolveMainFilePath","configuredMainFilePath","prebuild","inferLanguageIdsByPath","allowConfiguredPathFallback","BUILD_ERROR","errorToMessage","prepare","call","runDefaultPrepare","feedbackMarkdown","snapshotWorkingDirectory","runCommand","undefined","ensureDisplayServer","shared","fileInputPath","_createForOfIteratorHelper","s","done","value","copyTestCaseFileInput","timeLimitMs","runTimeoutSeconds","DISPLAY","display","resolveInput","input","screenshotWaitSeconds","stopDetectionThreshold","spawnGuiProgram","RUNTIME_ERROR","cleanWorkingDirectory","readOutputFiles","requiredOutputFilePaths","memoryLimitByte","evaluateGuiRunResult","context","ACCEPTED","test","exitStatus","status","timeSeconds","memoryBytes","e","f","dispose","apply","this","arguments","_x3","_resolveMainFilePath","_callee2","resolvedPath","_context2","path","join","pathExists","filePath","languageIds","Object","entries","languageIdToDefinition","filter","_ref","_slicedToArray","fileExtensions","some","ext","endsWith","map","_ref3","_context$languageDefi","_context$languageDefi2","buildCommand","buildResult","spawnSyncWithTimeout","slice","encoding","BUILD_TIME_LIMIT_EXCEEDED","_context$context$prob","_context$context$prob2","_context$context$prob3","stopReason","TIME_LIMIT_EXCEEDED","Number","POSITIVE_INFINITY","MEMORY_LIMIT_EXCEEDED","requiredOutputFilesCount","MISSING_REQUIRED_OUTPUT_FILE_ERROR","_x4","_readGuiTestCases","_callee3","_context3","readFileTestCases","_x5","_spawnGuiProgram","_callee4","wrappedCommand","child","exitCode","spawnError","screenshotSignaturesHistory","screenshots","startTimeSeconds","sampledMemoryBytes","_loop","_parseTimedStderr","normalizedStderr","_context5","toFixed","_toConsumableArray","childProcess","spawn","detached","stdio","setEncoding","Date","now","on","chunk","error","code","signal","write","end","currentScreenshots","screenshotSignatures","_context4","wait","Math","max","readProcessGroupMemoryBytes","pid","takeScreenshots","toSorted","b","data","file","unshift","min","every","files","index","d","_regeneratorValues","removeAllListeners","stopProcess","parseTimedStderr","trimEnd","xwininfo","spawnSync","_i","_extractTopLevelWindo","_step","windowIds","lines","split","_iterator","line","includes","match","exec","push","parseInt","toString","err","extractTopLevelWindowIds","windowId","screenshot","windowNameResult","windowName","trim","replaceAll","parsedMemoryBytes","_ensureDisplayServer","_callee6","_loop2","_ret2","displayNumber","_context8","xvfb","_context7","XVFB_STARTUP_WAIT_SECONDS","_dispose","_callee5","_context6","killed","kill","XVFB_SHUTDOWN_WAIT_SECONDS","_x6","_stopProcess","_callee7","_context9","killProcessGroup","PROCESS_SHUTDOWN_WAIT_SECONDS","processGroupId","result","String","isFinite","reduce","sum","_unused","_unused2","_x7","_pathExists","_callee8","_context0","fs","access","message","_x","_x2"],"mappings":"q0BA+BMA,EAAe,CAAmB,WAAlBC,EAAGC,WAA0B,QAAU,gBAAiB,WAAY,SAEpFC,EAAoBC,EAAAA,EAAEC,OAAO,CACjCC,SAAUF,EAAAA,EAAEG,MAAM,CAACH,EAAAA,EAAEI,SAAUJ,IAAEK,MAAML,EAAAA,EAAEI,YAAYE,aA+TtD,SAAAC,IAAA,OAAAA,EAAAC,EAAAA,iBAAAC,gBAAAC,EAhOM,SAAAC,EACLC,EACAC,GAAgD,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAA,OAAA5E,gBAAA6E,EAAA,SAAAC,GAAA,cAAAA,EAAAC,EAAAD,EAAAE,GAAA,KAAA,EAEZ,IAA9BrE,EAAOsE,EAAAA,UAAUC,QAAQC,OACrBC,IAAG,CAAAN,EAAAE,EAAA,EAAA,KAAA,CAAA,MAAQ,IAAIK,MAAM,yBAAwB,KAAA,EACJ,OAA7CzE,EAAStB,EAAkBgG,MAAM3E,EAAKC,QAAOkE,EAAAE,EAAA,EAEVO,EAAAA,+BAA+BpF,GAAW,KAAA,EAAnD,OAA1BU,EAA0BiE,EAAAU,EAAAV,EAAAE,EAAA,GACwB,OAAtB3E,EAACD,EAAQqF,eAAapF,EAAIqF,GAA6BvF,GAAW,KAAA,EAG3C,OAHnDW,EAAmBgE,EAAAU,EACnBzE,EACJD,EAAoB6E,OAAS,EAAI7E,EAAuB,CAAC,CAAE8E,GAAI,YAC3D5E,EAAqC,OAAnBV,EAAe,OAAfC,EAAGQ,EAAU,SAAE,EAAZR,EAAcqF,IAAEtF,EAAI,WAAUwE,EAAAE,EAAA,EAEtBa,wBAAsBlF,EAAKyE,IAAKvE,GAA2B,KAAA,EAApE,KAApBI,EAAoB6D,EAAAU,GACF,CAAAV,EAAAE,EAAA,EAAA,KAAA,CAC2D,OAAjFc,EAAAA,oBAAmBC,EAAAA,cAAA,CAAGC,WAAYhF,GAAuBC,IAAwB6D,EAAAmB,EAAA,GAAA,KAAA,EAAA,GAInC,OAJmCzF,EAIvDJ,EAAQ8F,cAAY,CAAApB,EAAAE,EAAA,EAAA,KAAA,CAAAf,GAAAzD,EAAAsE,EAAAE,EAAA,EAAA,MAAA,KAAA,EAAA,OAAAF,EAAAE,EAAA,EAAWmB,EAAAA,mBAAmBxF,EAAKyE,IAAKxE,EAAOnB,UAAS,KAAA,EAAAwE,GAAAa,EAAAU,EAAA,KAAA,EAA/E,GAAnBtE,EAAmB+C,GACD,CAAAa,EAAAE,EAAA,EAAA,KAAA,CAOnB,OANHc,sBAAoB,CAClBE,WAAYhF,EACZ6C,aAAcuC,EAAAA,aAAaC,uCAC3BtC,OAAQ3D,EAAQ8F,8CAAYI,OACSlG,EAAQ8F,cAAY,sBAAAI,OAC/B1F,EAAOnB,SAAQ,eAAA6G,OAAkB1F,EAAOnB,UAAa,MAC9EqF,EAAAmB,EAAA,GAAA,KAAA,EAIuE,GAAtE9E,EAAqBoF,EAAAA,6BAA6BrF,GACjC,CAAA4D,EAAAE,EAAA,GAAA,KAAA,CAKlB,OAJHc,sBAAoB,CAClBE,WAAYhF,EACZ6C,aAAcuC,EAAAA,aAAaI,aAC3BzC,OAAQ,yBACPe,EAAAmB,EAAA,GAAA,KAAA,GAIiD,OAAhD7E,EAAG2E,EAAAA,cAAAA,gBAAA,CAAA,EAAQb,QAAQ9D,KAAG,GAAA,CAAEqF,GAAI,GAAIC,YAAa,MAAG5B,EAAAE,EAAA,GAErB2B,EAAoB,CACnDvB,IAAKzE,EAAKyE,IACV3F,SAAUmB,EAAOnB,SACjBmH,uBAAwBxG,EAAQ8F,eAChC,KAAA,GAJsB,GAApB7E,EAAoByD,EAAAU,GAKpBrE,EAAmB0F,SAAQ,CAAA/B,EAAAE,EAAA,GAAA,KAAA,CAAA,OAAAF,EAAAC,EAAA,GAAAD,EAAAE,EAAA,GAErB7D,EAAmB0F,SAASlG,EAAKyE,KAAI,KAAA,GAAA,OAAAN,EAAAE,EAAA,GACR2B,EAAoB,CACrDvB,IAAKzE,EAAKyE,IACV3F,SAAyB,OAAjB6B,EAAEV,EAAOnB,UAAQ6B,EAAIwF,EAAuB5F,GACpD0F,uBAAwBxG,EAAQ8F,aAChCa,6BAA6B,IAC7B,KAAA,IALIxF,EAAoBuD,EAAAU,KAMAnE,EAAuBE,GAAqBuD,EAAAE,EAAA,GAAA,MAAA,KAAA,GAMnE,OANmEF,EAAAC,EAAA,GAAAb,GAAAY,EAAAU,EAEtEM,sBAAoB,CAClBE,WAAYhF,EACZ6C,aAAcuC,EAAAA,aAAaY,YAC3BjD,OAAQkD,EAAc/C,MACrBY,EAAAmB,EAAA,GAAA,KAAA,GAAA,GAIF5E,EAAoB,CAAAyD,EAAAE,EAAA,GAAA,KAAA,CAOpB,OANHc,sBAAoB,CAClBE,WAAYhF,EACZ6C,aAAcuC,EAAAA,aAAaC,uCAC3BtC,OAAQ3D,EAAQ8F,8CAAYI,OACSlG,EAAQ8F,cAAY,sBAAAI,OAC/B1F,EAAOnB,SAAQ,eAAA6G,OAAkB1F,EAAOnB,UAAa,MAC9EqF,EAAAmB,EAAA,GAAA,KAAA,GAAA,OAAAnB,EAAAE,EAAA,GAKmB,OALnBtE,EAKIN,EAAQ8G,gBAARxG,EAAAyG,KAAA/G,EAAkB,CACvBgF,IAAKzE,EAAKyE,IACVhE,IAAAA,EACA8E,aAAc7E,EACdR,2BAAAA,IACA,KAAA,GAAA,GAAA,OAAAJ,EAAAqE,EAAAU,GAAA,CAAAV,EAAAE,EAAA,GAAA,KAAA,CAAAb,GAAA1D,EAAAqE,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAAb,GACFiD,EAAkB,CAChBhC,IAAKzE,EAAKyE,IACVhE,IAAAA,EACA8E,aAAc7E,EACdF,mBAAAA,IACA,KAAA,GAZe,KAAbK,EAAa2C,IAaF,CAAAW,EAAAE,EAAA,GAAA,KAAA,CAQZ,OAPHc,sBAAoB,CAClBE,WAAYhF,EACZ6C,aAAwC,OAA5BpC,EAAED,EAAcqC,cAAYpC,EAAI2E,EAAAA,aAAaY,YACzDK,iBAAkB7F,EAAc6F,iBAChCtD,OAAQvC,EAAcuC,OACtBD,OAAQtC,EAAcsC,OACtBP,YAAa/B,EAAc+B,cAC1BuB,EAAAmB,EAAA,GAAA,KAAA,GAAA,OAAAnB,EAAAE,EAAA,GAIqBsC,EAAAA,yBAAyB3G,EAAKyE,KAAI,KAAA,GAElB,GAFpC1D,EAAWoD,EAAAU,EAEb5D,EAAoBZ,EAAkB8D,EAAAC,EAAA,IAGxB3E,EAAQmH,WAAU,CAAAzC,EAAAE,EAAA,GAAA,KAAA,CAAAZ,QAAGoD,EAAS1C,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAA,OAAAF,EAAAE,EAAA,GAASyC,IAAqB,KAAA,GAAArD,GAAAU,EAAAU,EAAA,KAAA,GAA5E7D,EAAayC,GACPrC,EAA6F,OAA1ED,EAAIhB,EAAgE4G,aAAM,EAAvE5F,EAAyE6F,cAAa3F,EAAA4F,EAAAA,0BAC3F7G,GAAS+D,EAAAC,EAAA,GAAA/C,EAAA6F,IAAA,KAAA,GAAA,IAAA5F,EAAAD,EAAAgD,KAAA8C,KAAA,CAAAhD,EAAAE,EAAA,GAAA,KAAA,CACE,GADvBnC,GAAQZ,EAAA8F,MACjBnG,EAAoBiB,GAAS+C,IACzB7D,EAAmB,CAAA+C,EAAAE,EAAA,GAAA,KAAA,CAAA,OAAAF,EAAAE,EAAA,GAAQgD,wBAAsBjG,EAAqBpB,EAAKyE,KAAI,KAAA,GAAA,IAC/EvC,GAAS8E,cAAa,CAAA7C,EAAAE,EAAA,GAAA,KAAA,CAAA,OAAAF,EAAAE,EAAA,GAAQgD,EAAAA,sBAAsBnF,GAAS8E,cAAehH,EAAKyE,KAAI,KAAA,GAOV,OALzEtC,GAC8C,iBAA3CjC,EAA2BoH,YAC9BpH,EAA2BoH,YAAc,IACf,OADmB/F,EAC5C9B,EAAQ8H,mBAAiBhG,EA/NA,EAiO1Ba,GAASpB,EAAaoE,gBAAAA,EAAAA,iBAAQ3E,GAAG,GAAA,CAAE+G,QAASxG,EAAcyG,UAAYhH,EAAG0D,EAAAE,EAAA,GACtC,OADsC3C,GAC1DjC,EAAQiI,qBAARhG,GAAA8E,KAAA/G,EAAuB,CAAEyC,SAAAA,GAAUuC,IAAKzE,EAAKyE,IAAKhE,IAAK2B,KAAS,KAAA,GAAA,GAAA,OAAAX,GAAA0C,EAAAU,GAAA,CAAAV,EAAAE,EAAA,GAAA,KAAA,CAAAX,GAAAjC,GAAA0C,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAAX,GAAKxB,GAASyF,MAAK,KAAA,GAAA,GAAA,OAAAnG,EAAAkC,IAAA,CAAAS,EAAAE,EAAA,GAAA,KAAA,CAAAV,GAAAnC,EAAA2C,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAAV,GAAI,GAAE,KAAA,GACzF,OAArBzC,EADMmB,GAAKsB,GACUQ,EAAAE,EAAA,GAEG,OAFHzC,GAEZnC,EAAQ6C,gBAARV,GAAA4E,KAAA/G,EAAkB,CAAEyC,SAAAA,GAAUuC,IAAKzE,EAAKyE,IAAKhE,IAAK2B,GAAQmD,aAAc7E,IAAuB,KAAA,GAAA,GAAA,OAAAiB,GAAAwC,EAAAU,GAAA,CAAAV,EAAAE,EAAA,GAAA,KAAA,CAAAT,GAAAjC,GAAAwC,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAAT,GACtGpD,EAAmB8B,QAAQ5B,GAAqB,KAAA,GAEhB,GAJ5B4B,GAAOsB,GAITrB,QAA8B,EAAA4B,EAAAC,EAAA,IAEpB3E,EAAQmH,WAAU,CAAAzC,EAAAE,EAAA,GAAA,KAAA,CAAA,OAAAF,EAAAE,EAAA,GACpB5E,EAAQmH,WAAW,CACvB1E,SAAAA,GACAI,QAAAA,GACAD,MAAAA,GACAoC,IAAKzE,EAAKyE,IACVhE,IAAK2B,GACLD,iBAAAA,GACAyF,sBAAoD,OAA/BpF,GAAE/C,EAAQmI,uBAAqBpF,GAjPlC,GAkPlBqF,uBAAsD,OAAhCpF,GAAEhD,EAAQoI,wBAAsBpF,GA9OnC,IA+OnB,KAAA,GAAAoB,GAAAM,EAAAU,EAAAV,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAA,OAAAF,EAAAE,EAAA,GACIyD,EAAgB,CACpBxF,QAAAA,GACAD,MAAAA,GACAoC,IAAKzE,EAAKyE,IACVhE,IAAK2B,GACLD,iBAAAA,GACAyF,sBAAoD,OAA/BlF,GAAEjD,EAAQmI,uBAAqBlF,GA1PlC,GA2PlBmF,uBAAsD,OAAhClF,GAAElD,EAAQoI,wBAAsBlF,GAvPnC,IAwPnB,KAAA,GAAAkB,GAAAM,EAAAU,EAAA,KAAA,GAnBNtC,GAASsB,GAAAM,EAAAE,EAAA,GAAA,MAAA,KAAA,GA0BN,OA1BMF,EAAAC,EAAA,GAAAN,GAAAK,EAAAU,EAqBTM,sBAAoB,CAClBE,WAAYnD,GAAS+C,GACrB/B,aAAcuC,EAAAA,aAAasC,cAC3B1F,MAAAA,GACAe,OAAQkD,EAAcxC,MACrBK,EAAAE,EAAA,GACG2D,wBAAsBhI,EAAKyE,IAAK1D,GAAY,KAAA,GAAA,OAAAoD,EAAAmB,EAAA,GAAA,KAAA,GAAA,OAAAnB,EAAAE,EAAA,GAI1B4D,EAAAA,gBAAgBjI,EAAKyE,IAAuD,OAApD5C,GAAE3B,EAA2BgI,yBAAuBrG,GAAI,IAAG,KAAA,GAS5E,GAT3Be,GAAWuB,EAAAU,EACXhC,GAAgC,CACpCV,iBAAAA,GACAjC,2BAA4B,CAC1BiI,gBAAiBjI,EAA2BiI,gBAC5CD,wBAAyBhI,EAA2BgI,0BAGlDpF,GAAkBsF,EAAqB,CAAE7F,UAAAA,GAAWK,YAAAA,GAAayF,QAASxF,KAC5EE,GAAcD,GACdA,GAAgBI,eAAiBuC,EAAAA,aAAa6C,SAAQ,CAAAnE,EAAAE,EAAA,GAAA,KAAA,CAAA,OAAAF,EAAAC,EAAA,GAAAD,EAAAE,EAAA,GAEpB5E,EAAQ8I,KAAK,CAC7CrG,SAAAA,GACAK,UAAAA,GACAK,YAAAA,GACAyF,QAASxF,KACT,KAAA,GALII,GAAmBkB,EAAAU,EAMzB9B,GAAc,CACZG,aAA8C,OAAlCF,GAAEC,GAAoBC,cAAYF,GAAIF,GAAgBI,aAClEwD,iBAAkBzD,GAAoByD,iBACtCtD,OAAQH,GAAoBG,OAC5BD,OAAQF,GAAoBE,OAC5BP,YAAaK,GAAoBL,aACjCuB,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAAF,EAAAC,EAAA,GAAAL,GAAAI,EAAAU,EAEF9B,GAAc,CACZG,aAAcuC,EAAAA,aAAasC,cAC3B3E,OAAQkD,EAAcvC,KACtB,KAAA,GAkBH,OAdGb,GAAuC,OAA3BpB,GAAGiB,GAAYG,cAAYpB,GAAI2D,EAAAA,aAAa6C,SACxDnF,GAA2B,OAArBpB,GAAGgB,GAAYI,QAAMpB,GAAIQ,GAAUY,OACzCC,GAA2B,OAArBpB,GAAGe,GAAYK,QAAMpB,GAAIO,GAAUa,OAC/C+B,sBAAoB,CAClBE,WAAYnD,GAAS+C,GACrB/B,aAAAA,GACAsF,WAAYjG,GAAUkG,OACtBpG,MAAOE,GAAUF,YAASwE,EAC1B1D,OAAQA,SAAU0D,EAClBzD,OAAQA,SAAUyD,EAClB6B,YAAanG,GAAUmG,YACvBC,YAAapG,GAAUoG,YACvBjC,iBAAkB3D,GAAY2D,iBAC9B9D,YAAoC,OAAzBX,GAAEc,GAAYH,aAAWX,GAAKW,GAAYoC,OAAS,EAAIpC,QAAciE,IAC/E1C,EAAAE,EAAA,GAEG2D,wBAAsBhI,EAAKyE,IAAK1D,GAAY,KAAA,GAAA,GAC9CmC,KAAiBuC,eAAa6C,SAAQ,CAAAnE,EAAAE,EAAA,GAAA,KAAA,CAAA,OAAAF,EAAAmB,EAAA,EAAA,IAAA,KAAA,GAAAnB,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAAF,EAAAE,EAAA,GAAA,MAAA,KAAA,GAAAF,EAAAC,EAAA,GAAAJ,GAAAG,EAAAU,EAAAxD,EAAAuH,EAAA5E,IAAA,KAAA,GAAA,OAAAG,EAAAC,EAAA,GAAA/C,EAAAwH,IAAA1E,EAAA0E,EAAA,IAAA,KAAA,GAAA1E,EAAAE,EAAA,GAAA,MAAA,KAAA,GAQzC,OARyCF,EAAAC,EAAA,GAAAH,GAAAE,EAAAU,EAG5CM,sBAAoB,CAClBE,WAAYpE,EACZiC,aAAcuC,EAAAA,aAAasC,cAC3B1F,MAAOnB,EACPkC,OAAQkD,EAAcrC,MACrBE,EAAAE,EAAA,GACG2D,wBAAsBhI,EAAKyE,IAAK1D,GAAY,KAAA,GAAA,OAAAoD,EAAAC,EAAA,GAAAD,EAAAE,EAAA,GAE/B,OAF+BhB,GAE5CrC,QAAa,EAAbqC,GAAeyF,UAAS,KAAA,GAAA,OAAA3E,EAAA0E,EAAA,IAAA,KAAA,GAAA,OAAA1E,EAAAmB,EAAA,GAAA,EAAA/F,EAAA,KAAA,CAAA,CAAA,GAAA,IAAA,CAAA,GAAA,IAAA,CAAA,GAAA,GAAA,GAAA,IAAA,CAAA,GAAA,GAAA,GAAA,IAAA,CAAA,GAAA,KAAA,KAEjCwJ,MAAAC,KAAAC,UAAA,CAAA,SAEcjD,EAAmBkD,GAAA,OAAAC,EAAAJ,MAAAC,KAAAC,UAAA,CAAA,SAAAE,IAajC,OAbiCA,EAAA/J,EAAAA,iBAAAC,EAAAA,cAAAC,EAAlC,SAAA8J,EAAmCf,GAKlC,IAAAgB,EAAA,OAAAhK,gBAAA6E,EAAA,SAAAoF,GAAA,cAAAA,EAAAjF,GAAA,KAAA,EAAA,IACKgE,EAAQpC,uBAAsB,CAAAqD,EAAAjF,EAAA,EAAA,KAAA,CAC2C,OAArEgF,EAAeE,EAAKC,KAAKnB,EAAQ5D,IAAK4D,EAAQpC,wBAAuBqD,EAAAjF,EAAA,EACjEoF,EAAWJ,GAAa,KAAA,EAAA,IAAAC,EAAAzE,EAAA,CAAAyE,EAAAjF,EAAA,EAAA,KAAA,CAAA,OAAAiF,EAAAhE,EAAA,EAAS+C,EAAQpC,wBAAsB,KAAA,EAAA,GACpEoC,EAAQjC,4BAA2B,CAAAkD,EAAAjF,EAAA,EAAA,KAAA,CAAA,OAAAiF,EAAAhE,EAAA,OAASuB,GAAS,KAAA,EAAA,OAAAyC,EAAAjF,EAAA,EAG/CmB,EAAAA,mBAAmB6C,EAAQ5D,IAAK4D,EAAQvJ,UAAS,KAAA,EAAA,OAAAwK,EAAAhE,EAAA,EAAAgE,EAAAzE,GAAA,EAAAuE,EAAA,KAC/DL,MAAAC,KAAAC,UAAA,CAED,SAAS9C,EAAuBuD,GAC9B,IAAMC,EAAcC,OAAOC,QAAQC,EAAAA,wBAChCC,OAAO,SAAAC,GAAc,OAAdC,EAAAA,cAAAD,EAAA,GAAc,GAAiBE,eAAeC,KAAK,SAACC,GAAG,OAAKV,EAASW,SAASD,EAAI,EAAC,GAC1FE,IAAI,SAAAC,GAAY,OAAZN,EAAAA,cAAAM,EAAA,GAAY,EAAgB,GACnC,OAAOZ,EAAY3E,OAAS,EAAI2E,OAAc9C,CAChD,CAEA,SAASJ,EAAkB4B,GAKiB,IAAAmC,EAAAC,EACpCC,EAAsD,OAA1CF,GAAGC,EAAApC,EAAQ7H,oBAAmBkK,mBAAY,EAAvCF,EAAAhE,KAAAiE,EAA0CpC,EAAQ9C,cACvE,GAAKmF,EAAL,CAEA,IAAMC,EAAcC,EAAAA,qBAClBF,EAAa,GACbA,EAAaG,MAAM,GACnB,CAAEpG,IAAK4D,EAAQ5D,IAAKqG,SAAU,OAAQrK,IAAK4H,EAAQ5H,KA7WzB,IAiX5B,OAAIkK,EAAYjC,YAjXY,GAkXnB,CACLxF,aAAcuC,EAAAA,aAAasF,0BAC3B3H,OAAQuH,EAAYvH,aAAUyD,GAIP,IAAvB8D,EAAYlC,OACP,CACLvF,aAAcuC,EAAAA,aAAaY,YAC3BjD,OAAQuH,EAAYvH,QAAUuH,EAAYxH,aAAU0D,QAHxD,CAhBmC,CAwBrC,CAEA,SAASuB,EAAqBC,GAIE,IAAA2C,EAAAC,EAAAC,EAC9B,GAAqC,YAAjC7C,EAAQ9F,UAAU4I,WACpB,MAAO,CACLjI,aAAcuC,EAAAA,aAAa2F,oBAC3BhI,OAAQiF,EAAQ9F,UAAUa,QAI9B,GAAiC,IAA7BiF,EAAQ9F,UAAUkG,OACpB,MAAO,CACLvF,aAAcuC,EAAAA,aAAasC,cAC3B3E,OAAQiF,EAAQ9F,UAAUa,QAI9B,GACEiF,EAAQ9F,UAAUoG,aACyC,OAD9BqC,EAC5B3C,EAAQA,QAAQnI,2BAA2BiI,iBAAe6C,EAAIK,OAAOC,mBAEtE,MAAO,CACLpI,aAAcuC,EAAAA,aAAa8F,sBAC3BnI,OAAQiF,EAAQ9F,UAAUa,QAI9B,IAAMoI,EAAqG,OAA7EP,SAAAC,EAAG7C,EAAQA,QAAQnI,2BAA2BgI,gCAA3CgD,EAAoElG,QAAMiG,EAAI,EAC/G,OAAI5C,EAAQzF,YAAYoC,OAASwG,EACxB,CACLtI,aAAcuC,EAAAA,aAAagG,oCAIxB,CAAEvI,aAAcuC,EAAAA,aAAa6C,SACtC,CAAC,SAEcvD,EAAgB2G,GAAA,OAAAC,EAAA5C,MAAAC,KAAAC,UAAA,CAAA,SAAA0C,IAE9B,OAF8BA,EAAAvM,EAAAA,iBAAAC,EAAAA,cAAAC,EAA/B,SAAAsM,EAAmEpM,GAAkB,OAAAH,gBAAA6E,EAAA,SAAA2H,GAAA,cAAAA,EAAAxH,GAAA,KAAA,EAAA,OAAAwH,EAAAxH,EAAA,EACrEyH,EAAAA,cAAkBvC,EAAKC,KAAKhK,EAAY,eAAc,KAAA,EAAA,OAAAqM,EAAAvG,EAAA,EAAAuG,EAAAhH,GAAA,EAAA+G,EAAA,KACrE7C,MAAAC,KAAAC,UAAA,CAAA,SAEcnB,EAAeiE,GAAA,OAAAC,EAAAjD,MAAAC,KAAAC,UAAA,CAAA,SAAA+C,IAgH7B,OAhH6BA,EAAA5M,EAAAA,iBAAAC,EAAAA,cAAAC,EAA9B,SAAA2M,EAA+B5D,GAQ9B,IAAA6D,EAAAC,EAAAhJ,EAAAC,EAAAgJ,EAAAC,EAAAlB,EAAAmB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAhE,EAAAiE,EAAAlE,EAAA,OAAArJ,gBAAA6E,EAAA,SAAA2I,GAAA,cAAAA,EAAAxI,GAAA,KAAA,EACO6H,EAAc,CAAI,UAAW7D,EAAQlG,iBAAiB2K,QAAQ,IAAEnH,OAAKnH,EAAYuO,EAAAA,kBAAK1E,EAAQ/F,WAC9F6J,EAAQa,EAAaC,MAAMf,EAAe,GAAIA,EAAerB,MAAM,GAAI,CAC3EpG,IAAK4D,EAAQ5D,IACbhE,IAAK4H,EAAQ5H,IACbyM,SAA+B,UAArB3I,QAAQ7F,SAClByO,MAAO,CAAC,OAAQ,OAAQ,WAGpBhK,OAAOiK,YAAY,QACzBjB,EAAM/I,OAAOgK,YAAY,QAErBjK,EAAS,GACTC,EAAS,GAGT+H,EAAgD,eAC9CmB,EAA0C,GAC5CC,EAAmC,GACjCC,EAAmBa,KAAKC,MAAQ,IAClCb,EAAqB,EAEzBN,EAAMhJ,OAAOoK,GAAG,OAAQ,SAACC,GACvBrK,GAAUqK,CACZ,GACArB,EAAM/I,OAAOmK,GAAG,OAAQ,SAACC,GACvBpK,GAAUoK,CACZ,GACArB,EAAMoB,GAAG,QAAS,SAACE,GACjBpB,EAAaoB,EACbrB,EAAW,CACb,GACAD,EAAMoB,GAAG,QAAS,SAACG,EAAMC,GACvB,OAAa,MAATD,GACFvC,EAAa,eACbiB,EAAW,IAGTuB,GACFvB,EAAW,OACXhJ,EAASA,EAAM,GAAAuC,OACRvC,EAAM,oCAAAuC,OAAmCgI,GAAM,iCAAAhI,OACjBgI,UAGvCvB,EAAe,MAAJsB,EAAAA,EAAQ,EACrB,GAEIrF,EAAQhG,OAAO8J,EAAM9J,MAAMuL,MAAMvF,EAAQhG,OAC7C8J,EAAM9J,MAAMwL,MAAMnB,EAAArN,EAAAA,cAAAC,WAAAoN,IAAA,IAAAoB,EAAAC,EAAA,OAAA1O,gBAAA6E,EAAA,SAAA8J,GAAA,cAAAA,EAAA3J,GAAA,KAAA,EAAA,OAAA2J,EAAA3J,EAAA,EAGV4J,aAAqC,IAAhC5F,EAAQT,uBAA6B,KAAA,EAGmC,GAFnF6E,EAAqByB,KAAKC,IAAI1B,EAAoB2B,EAA4BjC,EAAMkC,MAC9EP,EAAqBQ,EAAgBjG,EAAQ5H,IAAI+G,YACvD+E,EAAcuB,EAAmBS,SAAS,SAACjJ,EAAGkJ,GAAC,OAAKlJ,EAAEmJ,KAAKzJ,OAASwJ,EAAEC,KAAKzJ,MAAM,IAEjEA,OAAS,GAAC,CAAAgJ,EAAA3J,EAAA,EAAA,KAAA,CAG0F,GAF5G0J,EAAuBxB,EAAYjC,IAAI,SAACoE,GAAI,OAAKA,EAAKD,IAAI,GAAEF,WAClEjC,EAA4BqC,QAAQZ,GACpCzB,EAA4BtH,OAASkJ,KAAKU,IAAItC,EAA4BtH,OAAQqD,EAAQR,wBAExFyE,EAA4BtH,SAAWqD,EAAQR,yBAC/CyE,EAA4BuC,MAC1B,SAACC,GAAK,OACJA,EAAM9J,SAAW+I,EAAqB/I,QACtC8J,EAAMD,MAAM,SAACH,EAAMK,GAAK,OAAKL,IAASX,EAAqBgB,EAAM,EAAC,GACrE,CAAAf,EAAA3J,EAAA,EAAA,KAAA,CAGY,OADb8G,EAAa,oBACbiB,EAAW,EAAE4B,EAAA1I,EAAA,EAAA,GAAA,KAAA,EAAA,KAKb+H,KAAKC,MAAQ,IAAOd,EAAmBnE,EAAQlG,kBAAgB,CAAA6L,EAAA3J,EAAA,EAAA,KAAA,CAEpD,OADb8G,EAAa,UACbiB,EAAW,EAAE4B,EAAA1I,EAAA,EAAA,GAAA,KAAA,EAAA,OAAA0I,EAAA1I,EAAA,GAAA,EAAAoH,EAAA,GAAA,KAAA,EAAA,QA1BG7F,IAAbuF,EAAsB,CAAAS,EAAAxI,EAAA,EAAA,KAAA,CAAA,OAAAwI,EAAAmC,EAAAC,EAAAA,kBAAAvC,KAAA,GAAA,KAAA,EAAA,GAAA,IAAAG,EAAAhI,EAAA,CAAAgI,EAAAxI,EAAA,EAAA,KAAA,CAAA,OAAAwI,EAAAvH,EAAA,EAAA,GAAA,KAAA,EAAAuH,EAAAxI,EAAA,EAAA,MAAA,KAAA,EAkC5B,MAHkB,iBAAf8G,GAAoD,OAAnBgB,EAAMC,WACzCD,EAAM+C,mBAAmB,SACzB/C,EAAM+C,mBAAmB,UAC1BrC,EAAAxI,EAAA,EACK8K,EAAYhD,GAAM,KAAA,EAAA,IACpBE,EAAU,CAAAQ,EAAAxI,EAAA,EAAA,KAAA,CAAA,MAAQgI,EAAU,KAAA,EAInB,OAJmBM,EAK5ByC,EAAiBhM,EAAQoJ,EAAkBC,GAH7C9D,EAAWgE,EAAXhE,YACQiE,EAAgBD,EAAxBvJ,OACAsF,EAAWiE,EAAXjE,YAAWmE,EAAAvH,EAAA,EAGN,CACLjD,MAAOgG,EAAQhG,MACfc,OAAQA,EAAOkM,UACfjM,OAAQwJ,EACRnE,OAAQ2D,EACR1D,YAAAA,EACAC,YAAAA,EACA4D,YAAAA,EACApB,WAAAA,IACD,EAAAc,EAAA,KACFlD,MAAAC,KAAAC,UAAA,CAED,SAASqF,EAAgB7G,GACvB,IAAMhH,EAAMgH,EAAOrC,gBAAAA,EAAAA,cAAA,CAAA,EAAQb,QAAQ9D,KAAG,GAAA,CAAE+G,QAASC,IAAYlD,QAAQ9D,IAC/D6O,EAAWtC,EAAauC,UAAU,WAAY,CAAC,QAAS,SAAU,CAAEzE,SAAU,OAAQrK,IAAAA,IAC5F,GAAI6O,EAAS7B,MAAO,MAAM6B,EAAS7B,MACnC,GAAwB,IAApB6B,EAAS7G,SAAiB6G,EAASnM,OAAQ,MAAO,GAGtD,IADA,IAAMoJ,EAAmC,GACzCiD,EAAA,EAAAC,EAmBF,SAAkCtM,GAChC,IAEwBuM,EAFlBC,EAAsB,GACtBC,EAAQzM,EAAO0M,MAAM,MAAMC,EAAA7I,EAAAA,0BACd2I,GAAK,IAAxB,IAAAE,EAAA5I,MAAAwI,EAAAI,EAAAzL,KAAA8C,MAA0B,CAAA,IAAf4I,EAAIL,EAAAtI,MACb,KAAI2I,EAAKC,SAAS,oBAAsBD,EAAKC,SAAS,sBAAwBD,EAAKC,SAAS,OAA5F,CAEA,IAAMC,EAAQ,sBAAsBC,KAAKH,GAC/B,MAALE,GAAAA,EAAQ,IACbN,EAAUQ,KAAK9E,OAAO+E,SAASH,EAAM,GAAI,IAAII,WAJsD,CAKrG,CAAC,CAAA,MAAAC,GAAAR,EAAAlH,EAAA0H,EAAA,CAAA,QAAAR,EAAAjH,GAAA,CACD,OAAO8G,CACT,CA9ByBY,CAAyBjB,EAASnM,QAAOqM,EAAAC,EAAAzK,OAAAwK,IAAE,CAA7D,IAAMgB,EAAQf,EAAAD,GACXiB,EAAazD,EAAauC,UAAU,OAAQ,CAAC,KAAMiB,GAAW,CAAE/P,IAAAA,IACtE,GAAIgQ,EAAWhD,MAAO,MAAMgD,EAAWhD,MACvC,GAA0B,IAAtBgD,EAAWhI,QAA6C,IAA7BgI,EAAWtN,OAAO6B,OAAjD,CAEA,IAAM0L,EAAmB1D,EAAauC,UAAU,UAAW,CAAC,gBAAiBiB,GAAW,CAAE1F,SAAU,OAAQrK,IAAAA,IAC5G,GAAIiQ,EAAiBjD,MAAO,MAAMiD,EAAiBjD,MACnD,IAAMkD,EAAaD,EAAiBvN,OAAOyN,OAAOC,WAAW,SAAU,KAEvEtE,EAAY4D,KAAK,CACf5G,KAAI,GAAA5D,OAAKgL,GAAc,SAAQ,KAAAhL,OAAI6K,EAAQ,QAC3C/B,KAAMgC,EAAWtN,OAAOkN,SAAS,UACjCvF,SAAU,UATmD,CAWjE,CAEA,OAAOyB,CACT,CAeA,SAAS6C,EACPhM,EACAoJ,EACAC,GAEA,IAAMwD,EAAQ,+BAA+BC,KAAK9M,GAC5CwJ,EAAmBqD,EAAQ7M,EAAOyH,MAAM,EAAGoF,EAAMlB,OAAOM,UAAYjM,EAAOiM,UAC3EyB,EAAyC,KAArBzF,OAAY,MAAL4E,SAAAA,EAAQ,KAAc,EACvD,MAAO,CACL7M,OAAQwJ,EACRlE,YAAa2C,OAAY,MAAL4E,OAAK,EAALA,EAAQ,KAAO5C,KAAKC,MAAQ,IAAOd,EACvD7D,YAAauF,KAAKC,IAAI2C,EAAmBrE,GAE7C,CAAC,SAEc3F,IAAmB,OAAAiK,EAAAhI,MAAAC,KAAAC,UAAA,CAAA,SAAA8H,IAgCjC,OAhCiCA,EAAA3R,EAAAA,iBAAAC,EAAAA,cAAAC,EAAlC,SAAA0R,IAAA,IAAAC,EAAAC,EAAAC,EAAA,OAAA9R,gBAAA6E,EAAA,SAAAkN,GAAA,cAAAA,EAAA/M,GAAA,KAAA,EAAA,GAC2B,UAArBE,QAAQ7F,SAAoB,CAAA0S,EAAA/M,EAAA,EAAA,KAAA,CAAA,MACxB,IAAIK,MAAM,sDAAqD,KAAA,EAAAuM,EAAA5R,EAAAA,cAAAC,WAAA2R,IAAA,IAAAxJ,EAAA4E,EAAAgF,EAAA,OAAAhS,gBAAA6E,EAAA,SAAAoN,GAAA,cAAAA,EAAAjN,GAAA,KAAA,EAWlE,OAPGoD,EAAO,IAAA9B,OAAOwL,IAEdE,EAAOrE,EAAaC,MAAM,OAAQ,CAACxF,EAAS,UAAW,IAAK,eAAgB,OAAQ,CACxF0F,MAAO,YAEJI,GAAG,QAAS,SAACE,GAChBpB,EAAaoB,CACf,GAAG6D,EAAAjN,EAAA,EAEG4J,EAAAA,WAAKsD,KAAiC,KAAA,EAAA,IACxClF,EAAU,CAAAiF,EAAAjN,EAAA,EAAA,KAAA,CAAA,MAAQgI,EAAU,KAAA,EAAA,GACV,OAAlBgF,EAAKjF,SAAiB,CAAAkF,EAAAjN,EAAA,EAAA,KAAA,CAAA,OAAAiN,EAAAhM,EAAA,EAAA,GAAA,KAAA,EAAA,OAAAgM,EAAAhM,EAAA,EAAA,CAAAT,EAEnB,CACL4C,QAAAA,EACAqB,QAAO,WAAA,IAAA0I,EAAApS,EAAAA,iBAAAC,EAAAA,cAAAC,EAAE,SAAAmS,IAAA,OAAApS,gBAAA6E,EAAA,SAAAwN,GAAA,cAAAA,EAAArN,GAAA,KAAA,EAAA,GACFgN,EAAKM,OAAM,CAAAD,EAAArN,EAAA,EAAA,KAAA,CACO,OAArBgN,EAAKO,KAAK,WAAWF,EAAArN,EAAA,EACf4J,EAAAA,WAAK4D,KAAkC,KAAA,EACvB,OAAlBR,EAAKjF,UAAmBiF,EAAKO,KAAK,WAAW,KAAA,EAAA,OAAAF,EAAApM,EAAA,GAAA,EAAAmM,EAAA,IAJ9C,OAMN,WANM,OAAAD,EAAAzI,MAAAC,KAAAC,UAAA,CAAA,CAAA,MAOR,EAAAgI,EAAA,GAvBME,EAAgB,GAAE,KAAA,EAAA,KAAEA,EAAgB,KAAG,CAAAC,EAAA/M,EAAA,EAAA,KAAA,CAAA,OAAA+M,EAAApC,EAAAC,EAAAA,kBAAAgC,KAAA,GAAA,KAAA,EAAA,GAAA,KAAAC,EAAAE,EAAAvM,GAAA,CAAAuM,EAAA/M,EAAA,EAAA,KAAA,CAAA,OAAA+M,EAAA9L,EAAA,EAAA,GAAA,KAAA,EAAA,IAAA4L,EAAA,CAAAE,EAAA/M,EAAA,EAAA,KAAA,CAAA,OAAA+M,EAAA9L,EAAA,EAAA4L,EAAArM,GAAA,KAAA,EAAEsM,IAAeC,EAAA/M,EAAA,EAAA,MAAA,KAAA,EAAA,MA0B3D,IAAIK,MAAM,8BAA6B,KAAA,EAAA,OAAA0M,EAAA9L,EAAA,GAAA,EAAA0L,EAAA,IAC9CD,EAAAhI,MAAAC,KAAAC,UAAA,CAAA,SAEckG,EAAW2C,GAAA,OAAAC,EAAAhJ,MAAAC,KAAAC,UAAA,CAAA,SAAA8I,IAKzB,OALyBA,EAAA3S,EAAAA,iBAAAC,EAAAA,cAAAC,EAA1B,SAAA0S,EAA2B7F,GAAgC,OAAA9M,gBAAA6E,EAAA,SAAA+N,GAAA,cAAAA,EAAA5N,GAAA,KAAA,EAAA,GACpD8H,EAAMkC,IAAG,CAAA4D,EAAA5N,EAAA,EAAA,KAAA,CAAA,OAAA4N,EAAA3M,EAAA,GAAA,KAAA,EACyB,OAAvC4M,EAAiB/F,EAAMkC,IAAK,WAAW4D,EAAA5N,EAAA,EACjC4J,EAAAA,WAAKkE,KAAqC,KAAA,EACzB,OAAnBhG,EAAMC,UAAmB8F,EAAiB/F,EAAMkC,IAAK,WAAW,KAAA,EAAA,OAAA4D,EAAA3M,EAAA,GAAA,EAAA0M,EAAA,KACrEjJ,MAAAC,KAAAC,UAAA,CAED,SAASmF,EAA4BgE,GACnC,IAAKA,GAAuC,UAArB7N,QAAQ7F,SAAsB,OAAO,EAE5D,IAAM2T,EAASrF,EAAauC,UAAU,KAAM,CAAC,KAAM,OAAQ,eAAgB,WAAY+C,OAAOF,IAAkB,CAC9GtH,SAAU,SAEZ,OAAIuH,EAAO5E,OAA2B,IAAlB4E,EAAO5J,SAAiB4J,EAAOlP,OAAe,EAE3DkP,EAAOlP,OACX0M,MAAM,MACNvF,IAAI,SAACyF,GAAI,OAAK1E,OAAO0E,EAAKa,OAAO,GACjC7G,OAAO,SAAC3C,GAAK,OAAKiE,OAAOkH,SAASnL,IAAUA,EAAQ,CAAC,GACrDoL,OAAO,SAACC,EAAKrL,GAAK,OAAKqL,EAAc,KAARrL,CAAY,EAAE,EAChD,CAEA,SAAS8K,EAAiBE,EAAwBzE,GAChD,IACE,GAAyB,UAArBpJ,QAAQ7F,SAEV,YADA6F,QAAQqN,MAAMQ,EAAgBzE,EAGlC,CAAE,MAAA+E,GACA,CAGF,IACEnO,QAAQqN,KAAKQ,EAAgBzE,EAC/B,CAAE,MAAAgF,GACA,CAEJ,CAAC,SAEclJ,EAAUmJ,GAAA,OAAAC,EAAA9J,MAAAC,KAAAC,UAAA,CAAA,SAAA4J,IAOxB,OAPwBA,EAAAzT,EAAAA,iBAAAC,EAAAA,cAAAC,EAAzB,SAAAwT,EAA0BpJ,GAAgB,OAAArK,gBAAA6E,EAAA,SAAA6O,GAAA,cAAAA,EAAA3O,EAAA2O,EAAA1O,GAAA,KAAA,EAAA,OAAA0O,EAAA3O,EAAA,EAAA2O,EAAA1O,EAAA,EAEhC2O,EAAGC,OAAOvJ,GAAS,KAAA,EAAA,OAAAqJ,EAAAzN,EAAA,GAClB,GAAI,KAAA,EAAA,OAAAyN,EAAA3O,EAAA,EAAA2O,EAAAlO,EAAAkO,EAAAzN,EAAA,GAEJ,GAAK,EAAAwN,EAAA,KAAA,CAAA,CAAA,EAAA,IAAA,KAEf/J,MAAAC,KAAAC,UAAA,CAED,SAAS3C,EAAemH,GACtB,OAAOA,aAAiB/I,MAAQ+I,EAAMyF,QAAUZ,OAAO7E,EACzD,+BAhkBA,SAA2C0F,EAAAC,GAAA,OAAAjU,EAAA4J,MAAAC,KAAAC,UAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{asyncToGenerator as e,regenerator as n,createForOfIteratorHelper as t,objectSpread2 as r,slicedToArray as i,regeneratorValues as s,toConsumableArray as a}from"../_virtual/_rollupPluginBabelHelpers.js";import o from"node:child_process";import u from"node:fs/promises";import c from"node:os";import d from"node:path";import{setTimeout as l}from"node:timers/promises";import{z as f}from"zod";import{cleanWorkingDirectory as p,snapshotWorkingDirectory as m}from"../helpers/cleanWorkingDirectory.js";import{copyTestCaseFileInput as h}from"../helpers/copyTestCaseFileInput.js";import{findEntryPointFile as v}from"../helpers/findEntryPointFile.js";import{findLanguageDefinitionByPath as w}from"../helpers/findLanguageDefinitionByPath.js";import{judgeByStaticAnalysis as b}from"../helpers/judgeByStaticAnalysis.js";import{parseArgs as g}from"../helpers/parseArgs.js";import{printTestCaseResult as k}from"../helpers/printTestCaseResult.js";import{readOutputFiles as C}from"../helpers/readOutputFiles.js";import{readProblemMarkdownFrontMatter as I}from"../helpers/readProblemMarkdownFrontMatter.js";import{readTestCases as y}from"../helpers/readTestCases.js";import{spawnSyncWithTimeout as E}from"../helpers/spawnSyncWithTimeout.js";import{DecisionCode as R}from"../types/decisionCode.js";import{languageIdToDefinition as S}from"../types/language.js";var F=["darwin"===c.platform()?"gtime":"/usr/bin/time","--format","%e %M"],M=f.object({language:f.union([f.string(),f.array(f.string())]).optional()});function P(e,n){return _.apply(this,arguments)}function _(){return(_=e(n().m(function e(i,s){var a,o,u,c,d,l,f,y,E,S,F,P,_,T,N,U,A,G,q,X,Y,Q,H,K,V,$,J,Z,ee,ne,te,re,ie,se,ae,oe,ue,ce,de,le,fe,pe,me,he,ve,we,be,ge,ke,Ce,Ie,ye,Ee,Re,Se,Fe,Me,Pe,_e,De,Te,Le,xe,Oe,je,Ne,Be,Ue,Ae,Ge,We,qe;return n().w(function(e){for(;;)switch(e.p=e.n){case 0:return f=g(process.argv),y=M.parse(f.params),e.n=1,I(i);case 1:return E=e.v,e.n=2,(null!=(a=s.readTestCases)?a:j)(i);case 2:return S=e.v,F=S.length>0?S:[{id:"default"}],P=null!=(o=null==(u=F[0])?void 0:u.id)?o:"prebuild",e.n=3,b(f.cwd,E);case 3:if(!(_=e.v)){e.n=4;break}return k(r({testCaseId:P},_)),e.a(2);case 4:if(null==(c=s.mainFilePath)){e.n=5;break}Te=c,e.n=7;break;case 5:return e.n=6,v(f.cwd,y.language);case 6:Te=e.v;case 7:if(T=Te){e.n=8;break}return k({testCaseId:P,decisionCode:R.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:s.mainFilePath?"required main file not found: ".concat(s.mainFilePath):"main file not found".concat(y.language?": language: ".concat(y.language):"")}),e.a(2);case 8:if(N=w(T)){e.n=9;break}return k({testCaseId:P,decisionCode:R.WRONG_ANSWER,stderr:"unsupported language"}),e.a(2);case 9:return U=r(r({},process.env),{},{CI:"",FORCE_COLOR:"0"}),e.n=10,D({cwd:f.cwd,language:y.language,configuredMainFilePath:s.mainFilePath});case 10:if(A=e.v,!N.prebuild){e.n=15;break}return e.p=11,e.n=12,N.prebuild(f.cwd);case 12:return e.n=13,D({cwd:f.cwd,language:null!=(G=y.language)?G:L(T),configuredMainFilePath:s.mainFilePath,allowConfiguredPathFallback:!0});case 13:(q=e.v)&&(A=q),e.n=15;break;case 14:return e.p=14,Le=e.v,k({testCaseId:P,decisionCode:R.BUILD_ERROR,stderr:z(Le)}),e.a(2);case 15:if(A){e.n=16;break}return k({testCaseId:P,decisionCode:R.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:s.mainFilePath?"required main file not found: ".concat(s.mainFilePath):"main file not found".concat(y.language?": language: ".concat(y.language):"")}),e.a(2);case 16:return e.n=17,null==(l=s.prepare)?void 0:l.call(s,{cwd:f.cwd,env:U,mainFilePath:A,problemMarkdownFrontMatter:E});case 17:if(null==(d=e.v)){e.n=18;break}xe=d,e.n=19;break;case 18:xe=x({cwd:f.cwd,env:U,mainFilePath:A,languageDefinition:N});case 19:if(!(X=xe)){e.n=20;break}return k({testCaseId:P,decisionCode:null!=(Y=X.decisionCode)?Y:R.BUILD_ERROR,feedbackMarkdown:X.feedbackMarkdown,stderr:X.stderr,stdout:X.stdout,outputFiles:X.outputFiles}),e.a(2);case 20:return e.n=21,m(f.cwd);case 21:if(Q=e.v,K=P,e.p=22,!s.runCommand){e.n=23;break}Oe=void 0,e.n=25;break;case 23:return e.n=24,W();case 24:Oe=e.v;case 25:H=Oe,J=null==($=S.shared)?void 0:$.fileInputPath,Z=t(F),e.p=26,Z.s();case 27:if((ee=Z.n()).done){e.n=53;break}if(fe=ee.value,K=fe.id,!J){e.n=28;break}return e.n=28,h(J,f.cwd);case 28:if(!fe.fileInputPath){e.n=29;break}return e.n=29,h(fe.fileInputPath,f.cwd);case 29:return pe="number"==typeof E.timeLimitMs?E.timeLimitMs/1e3:null!=(ne=s.runTimeoutSeconds)?ne:5,me=H?r(r({},U),{},{DISPLAY:H.display}):U,e.n=30,null==(ie=s.resolveInput)?void 0:ie.call(s,{testCase:fe,cwd:f.cwd,env:me});case 30:if(null==(re=e.v)){e.n=31;break}je=re,e.n=32;break;case 31:je=fe.input;case 32:if(null==(te=je)){e.n=33;break}Ne=te,e.n=34;break;case 33:Ne="";case 34:return V=he=Ne,e.n=35,null==(ae=s.command)?void 0:ae.call(s,{testCase:fe,cwd:f.cwd,env:me,mainFilePath:A});case 35:if(null==(se=e.v)){e.n=36;break}Be=se,e.n=37;break;case 36:Be=N.command(A);case 37:if(ve=Be,we=void 0,e.p=38,!s.runCommand){e.n=40;break}return e.n=39,s.runCommand({testCase:fe,command:ve,stdin:he,cwd:f.cwd,env:me,timeLimitSeconds:pe,screenshotWaitSeconds:null!=(be=s.screenshotWaitSeconds)?be:.3,stopDetectionThreshold:null!=(ge=s.stopDetectionThreshold)?ge:5});case 39:Ue=e.v,e.n=42;break;case 40:return e.n=41,B({command:ve,stdin:he,cwd:f.cwd,env:me,timeLimitSeconds:pe,screenshotWaitSeconds:null!=(ke=s.screenshotWaitSeconds)?ke:.3,stopDetectionThreshold:null!=(Ce=s.stopDetectionThreshold)?Ce:5});case 41:Ue=e.v;case 42:we=Ue,e.n=45;break;case 43:return e.p=43,Ae=e.v,k({testCaseId:fe.id,decisionCode:R.RUNTIME_ERROR,stdin:he,stderr:z(Ae)}),e.n=44,p(f.cwd,Q);case 44:return e.a(2);case 45:return e.n=46,C(f.cwd,null!=(oe=E.requiredOutputFilePaths)?oe:[]);case 46:if(Ie=e.v,ye={timeLimitSeconds:pe,problemMarkdownFrontMatter:{memoryLimitByte:E.memoryLimitByte,requiredOutputFilePaths:E.requiredOutputFilePaths}},Ee=O({runResult:we,outputFiles:Ie,context:ye}),Re=Ee,Ee.decisionCode!==R.ACCEPTED){e.n=50;break}return e.p=47,e.n=48,s.test({testCase:fe,runResult:we,outputFiles:Ie,context:ye});case 48:Fe=e.v,Re={decisionCode:null!=(Se=Fe.decisionCode)?Se:Ee.decisionCode,feedbackMarkdown:Fe.feedbackMarkdown,stderr:Fe.stderr,stdout:Fe.stdout,outputFiles:Fe.outputFiles},e.n=50;break;case 49:e.p=49,Ge=e.v,Re={decisionCode:R.RUNTIME_ERROR,stderr:z(Ge)};case 50:return Me=null!=(ue=Re.decisionCode)?ue:R.ACCEPTED,Pe=null!=(ce=Re.stdout)?ce:we.stdout,_e=null!=(de=Re.stderr)?de:we.stderr,k({testCaseId:fe.id,decisionCode:Me,exitStatus:we.status,stdin:we.stdin||void 0,stdout:Pe||void 0,stderr:_e||void 0,timeSeconds:we.timeSeconds,memoryBytes:we.memoryBytes,feedbackMarkdown:Re.feedbackMarkdown,outputFiles:null!=(le=Re.outputFiles)?le:Ie.length>0?Ie:void 0}),e.n=51,p(f.cwd,Q);case 51:if(Me===R.ACCEPTED){e.n=52;break}return e.a(3,53);case 52:e.n=27;break;case 53:e.n=55;break;case 54:e.p=54,We=e.v,Z.e(We);case 55:return e.p=55,Z.f(),e.f(55);case 56:e.n=58;break;case 57:return e.p=57,qe=e.v,k({testCaseId:K,decisionCode:R.RUNTIME_ERROR,stdin:V,stderr:z(qe)}),e.n=58,p(f.cwd,Q);case 58:return e.p=58,e.n=59,null==(De=H)?void 0:De.dispose();case 59:return e.f(58);case 60:return e.a(2)}},e,null,[[47,49],[38,43],[26,54,55,56],[22,57,58,60],[11,14]])}))).apply(this,arguments)}function D(e){return T.apply(this,arguments)}function T(){return(T=e(n().m(function e(t){var r;return n().w(function(e){for(;;)switch(e.n){case 0:if(!t.configuredMainFilePath){e.n=3;break}return r=d.join(t.cwd,t.configuredMainFilePath),e.n=1,K(r);case 1:if(!e.v){e.n=2;break}return e.a(2,t.configuredMainFilePath);case 2:if(t.allowConfiguredPathFallback){e.n=3;break}return e.a(2,void 0);case 3:return e.n=4,v(t.cwd,t.language);case 4:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function L(e){var n=Object.entries(S).filter(function(n){return i(n,2)[1].fileExtensions.some(function(n){return e.endsWith(n)})}).map(function(e){return i(e,1)[0]});return n.length>0?n:void 0}function x(e){var n,t,r=null==(n=(t=e.languageDefinition).buildCommand)?void 0:n.call(t,e.mainFilePath);if(r){var i=E(r[0],r.slice(1),{cwd:e.cwd,encoding:"utf8",env:e.env},10);return i.timeSeconds>10?{decisionCode:R.BUILD_TIME_LIMIT_EXCEEDED,stderr:i.stderr||void 0}:0!==i.status?{decisionCode:R.BUILD_ERROR,stderr:i.stderr||i.stdout||void 0}:void 0}}function O(e){var n,t,r;if("timeout"===e.runResult.stopReason)return{decisionCode:R.TIME_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(0!==e.runResult.status)return{decisionCode:R.RUNTIME_ERROR,stderr:e.runResult.stderr};if(e.runResult.memoryBytes>(null!=(n=e.context.problemMarkdownFrontMatter.memoryLimitByte)?n:Number.POSITIVE_INFINITY))return{decisionCode:R.MEMORY_LIMIT_EXCEEDED,stderr:e.runResult.stderr};var i=null!=(t=null==(r=e.context.problemMarkdownFrontMatter.requiredOutputFilePaths)?void 0:r.length)?t:0;return e.outputFiles.length<i?{decisionCode:R.MISSING_REQUIRED_OUTPUT_FILE_ERROR}:{decisionCode:R.ACCEPTED}}function j(e){return N.apply(this,arguments)}function N(){return(N=e(n().m(function e(t){return n().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,y(d.join(t,"test_cases"));case 1:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function B(e){return U.apply(this,arguments)}function U(){return(U=e(n().m(function e(t){var r,i,u,c,d,f,p,m,h,v,w,b,g,k,C,I;return n().w(function(e){for(;;)switch(e.n){case 0:r=["timeout",t.timeLimitSeconds.toFixed(3)].concat(F,a(t.command)),(i=o.spawn(r[0],r.slice(1),{cwd:t.cwd,env:t.env,detached:"win32"!==process.platform,stdio:["pipe","pipe","pipe"]})).stdout.setEncoding("utf8"),i.stderr.setEncoding("utf8"),u="",c="",p="process_exit",m=[],h=[],v=Date.now()/1e3,w=0,i.stdout.on("data",function(e){u+=e}),i.stderr.on("data",function(e){c+=e}),i.on("error",function(e){f=e,d=1}),i.on("close",function(e,n){return 124===e?(p="timeout",void(d=0)):n?(d=1,void(c=c?"".concat(c,"\nprocess terminated by signal: ").concat(n):"process terminated by signal: ".concat(n))):void(d=null!=e?e:1)}),t.stdin&&i.stdin.write(t.stdin),i.stdin.end(),b=n().m(function e(){var r,s;return n().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,l(1e3*t.screenshotWaitSeconds);case 1:if(w=Math.max(w,Q(i.pid)),r=A(t.env.DISPLAY),!((h=r.toSorted(function(e,n){return e.data.length-n.data.length})).length>0)){e.n=2;break}if(s=h.map(function(e){return e.data}).toSorted(),m.unshift(s),m.length=Math.min(m.length,t.stopDetectionThreshold),m.length!==t.stopDetectionThreshold||!m.every(function(e){return e.length===s.length&&e.every(function(e,n){return e===s[n]})})){e.n=2;break}return p="stable_screenshot",d=0,e.a(2,0);case 2:if(!(Date.now()/1e3-v>t.timeLimitSeconds)){e.n=3;break}return p="timeout",d=0,e.a(2,0);case 3:return e.a(2)}},e)});case 1:if(void 0!==d){e.n=4;break}return e.d(s(b()),2);case 2:if(0!==e.v){e.n=3;break}return e.a(3,4);case 3:e.n=1;break;case 4:return"process_exit"!==p&&null===i.exitCode&&(i.removeAllListeners("close"),i.removeAllListeners("error")),e.n=5,X(i);case 5:if(!f){e.n=6;break}throw f;case 6:return g=G(c,v,w),k=g.memoryBytes,C=g.stderr,I=g.timeSeconds,e.a(2,{stdin:t.stdin,stdout:u.trimEnd(),stderr:C,status:d,timeSeconds:I,memoryBytes:k,screenshots:h,stopReason:p})}},e)}))).apply(this,arguments)}function A(e){var n=e?r(r({},process.env),{},{DISPLAY:e}):process.env,i=o.spawnSync("xwininfo",["-root","-tree"],{encoding:"utf8",env:n});if(i.error)throw i.error;if(0!==i.status||!i.stdout)return[];for(var s=[],a=0,u=function(e){var n,r=[],i=e.split("\n"),s=t(i);try{for(s.s();!(n=s.n()).done;){var a=n.value;if(!(a.includes("Root window id:")||a.includes("Parent window id:")||a.includes("()"))){var o=/^\s{5}(0x[\da-f]+) /.exec(a);null!=o&&o[1]&&r.push(Number.parseInt(o[1],16).toString())}}}catch(e){s.e(e)}finally{s.f()}return r}(i.stdout);a<u.length;a++){var c=u[a],d=o.spawnSync("maim",["-i",c],{env:n});if(d.error)throw d.error;if(0===d.status&&0!==d.stdout.length){var l=o.spawnSync("xdotool",["getwindowname",c],{encoding:"utf8",env:n});if(l.error)throw l.error;var f=l.stdout.trim().replaceAll(/[\s/]/g,"_");s.push({path:"".concat(f||"window","_").concat(c,".png"),data:d.stdout.toString("base64"),encoding:"base64"})}}return s}function G(e,n,t){var r=/(?:^|\n)(\d+\.\d+) (\d+)\s*$/.exec(e),i=r?e.slice(0,r.index).trimEnd():e.trimEnd(),s=1024*Number(null==r?void 0:r[2])||0;return{stderr:i,timeSeconds:Number(null==r?void 0:r[1])||Date.now()/1e3-n,memoryBytes:Math.max(s,t)}}function W(){return q.apply(this,arguments)}function q(){return q=e(n().m(function t(){var r,i,a;return n().w(function(t){for(;;)switch(t.n){case 0:if("linux"===process.platform){t.n=1;break}throw new Error("GUI screenshot capture is supported only on Linux.");case 1:r=n().m(function t(){var r,i,s;return n().w(function(t){for(;;)switch(t.n){case 0:return r=":".concat(a),(s=o.spawn("Xvfb",[r,"-screen","0","1280x1024x24","-ac"],{stdio:"ignore"})).on("error",function(e){i=e}),t.n=1,l(300);case 1:if(!i){t.n=2;break}throw i;case 2:if(null===s.exitCode){t.n=3;break}return t.a(2,0);case 3:return t.a(2,{v:{display:r,dispose:function(){var t=e(n().m(function e(){return n().w(function(e){for(;;)switch(e.n){case 0:if(s.killed){e.n=2;break}return s.kill("SIGTERM"),e.n=1,l(100);case 1:null===s.exitCode&&s.kill("SIGKILL");case 2:return e.a(2)}},e)}));return function(){return t.apply(this,arguments)}}()}})}},t)}),a=90;case 2:if(!(a<100)){t.n=6;break}return t.d(s(r()),3);case 3:if(0!==(i=t.v)){t.n=4;break}return t.a(3,5);case 4:if(!i){t.n=5;break}return t.a(2,i.v);case 5:a++,t.n=2;break;case 6:throw new Error("Xvfb could not be started.");case 7:return t.a(2)}},t)})),q.apply(this,arguments)}function X(e){return Y.apply(this,arguments)}function Y(){return(Y=e(n().m(function e(t){return n().w(function(e){for(;;)switch(e.n){case 0:if(t.pid){e.n=1;break}return e.a(2);case 1:return H(t.pid,"SIGTERM"),e.n=2,l(200);case 2:null===t.exitCode&&H(t.pid,"SIGKILL");case 3:return e.a(2)}},e)}))).apply(this,arguments)}function Q(e){if(!e||"linux"!==process.platform)return 0;var n=o.spawnSync("ps",["-o","rss=","--no-headers","--pgroup",String(e)],{encoding:"utf8"});return n.error||0!==n.status||!n.stdout?0:n.stdout.split("\n").map(function(e){return Number(e.trim())}).filter(function(e){return Number.isFinite(e)&&e>0}).reduce(function(e,n){return e+1024*n},0)}function H(e,n){try{if("win32"!==process.platform)return void process.kill(-e,n)}catch(e){}try{process.kill(e,n)}catch(e){}}function K(e){return V.apply(this,arguments)}function V(){return(V=e(n().m(function e(t){return n().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,u.access(t);case 1:return e.a(2,!0);case 2:return e.p=2,e.v,e.a(2,!1)}},e,null,[[0,2]])}))).apply(this,arguments)}function z(e){return e instanceof Error?e.message:String(e)}export{P as guiCommandJudgePreset};
|
|
1
|
+
import{asyncToGenerator as e,regenerator as n,createForOfIteratorHelper as r,objectSpread2 as t,slicedToArray as i,regeneratorValues as s,toConsumableArray as a}from"../_virtual/_rollupPluginBabelHelpers.js";import o from"node:child_process";import u from"node:fs/promises";import c from"node:os";import d from"node:path";import{setTimeout as l}from"node:timers/promises";import{z as f}from"zod";import{cleanWorkingDirectory as p,snapshotWorkingDirectory as m}from"../helpers/cleanWorkingDirectory.js";import{copyTestCaseFileInput as h}from"../helpers/copyTestCaseFileInput.js";import{findEntryPointFile as v}from"../helpers/findEntryPointFile.js";import{findLanguageDefinitionByPath as w}from"../helpers/findLanguageDefinitionByPath.js";import{judgeByStaticAnalysis as b}from"../helpers/judgeByStaticAnalysis.js";import{parseArgs as g}from"../helpers/parseArgs.js";import{printTestCaseResult as k}from"../helpers/printTestCaseResult.js";import{readOutputFiles as C}from"../helpers/readOutputFiles.js";import{readProblemMarkdownFrontMatter as I}from"../helpers/readProblemMarkdownFrontMatter.js";import{readTestCases as y}from"../helpers/readTestCases.js";import{spawnSyncWithTimeout as E}from"../helpers/spawnSyncWithTimeout.js";import{DecisionCode as R}from"../types/decisionCode.js";import{languageIdToDefinition as S}from"../types/language.js";var F=["darwin"===c.platform()?"gtime":"/usr/bin/time","--format","%e %M"],M=f.object({language:f.union([f.string(),f.array(f.string())]).optional()});function P(e,n){return _.apply(this,arguments)}function _(){return(_=e(n().m(function e(i,s){var a,o,u,c,d,l,f,y,E,S,F,P,_,T,N,U,A,G,q,X,Y,Q,H,K,V,$,J,Z,ee,ne,re,te,ie,se,ae,oe,ue,ce,de,le,fe,pe,me,he,ve,we,be,ge,ke,Ce,Ie,ye,Ee,Re,Se,Fe,Me,Pe,_e,De,Te,Le,xe,Oe,je,Ne,Be,Ue,Ae,Ge,We,qe;return n().w(function(e){for(;;)switch(e.p=e.n){case 0:if((f=g(process.argv)).cwd){e.n=1;break}throw new Error("cwd argument required");case 1:return y=M.parse(f.params),e.n=2,I(i);case 2:return E=e.v,e.n=3,(null!=(a=s.readTestCases)?a:j)(i);case 3:return S=e.v,F=S.length>0?S:[{id:"default"}],P=null!=(o=null==(u=F[0])?void 0:u.id)?o:"prebuild",e.n=4,b(f.cwd,E);case 4:if(!(_=e.v)){e.n=5;break}return k(t({testCaseId:P},_)),e.a(2);case 5:if(null==(c=s.mainFilePath)){e.n=6;break}Te=c,e.n=8;break;case 6:return e.n=7,v(f.cwd,y.language);case 7:Te=e.v;case 8:if(T=Te){e.n=9;break}return k({testCaseId:P,decisionCode:R.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:s.mainFilePath?"required main file not found: ".concat(s.mainFilePath):"main file not found".concat(y.language?": language: ".concat(y.language):"")}),e.a(2);case 9:if(N=w(T)){e.n=10;break}return k({testCaseId:P,decisionCode:R.WRONG_ANSWER,stderr:"unsupported language"}),e.a(2);case 10:return U=t(t({},process.env),{},{CI:"",FORCE_COLOR:"0"}),e.n=11,D({cwd:f.cwd,language:y.language,configuredMainFilePath:s.mainFilePath});case 11:if(A=e.v,!N.prebuild){e.n=16;break}return e.p=12,e.n=13,N.prebuild(f.cwd);case 13:return e.n=14,D({cwd:f.cwd,language:null!=(G=y.language)?G:L(T),configuredMainFilePath:s.mainFilePath,allowConfiguredPathFallback:!0});case 14:(q=e.v)&&(A=q),e.n=16;break;case 15:return e.p=15,Le=e.v,k({testCaseId:P,decisionCode:R.BUILD_ERROR,stderr:z(Le)}),e.a(2);case 16:if(A){e.n=17;break}return k({testCaseId:P,decisionCode:R.MISSING_REQUIRED_SUBMISSION_FILE_ERROR,stderr:s.mainFilePath?"required main file not found: ".concat(s.mainFilePath):"main file not found".concat(y.language?": language: ".concat(y.language):"")}),e.a(2);case 17:return e.n=18,null==(l=s.prepare)?void 0:l.call(s,{cwd:f.cwd,env:U,mainFilePath:A,problemMarkdownFrontMatter:E});case 18:if(null==(d=e.v)){e.n=19;break}xe=d,e.n=20;break;case 19:xe=x({cwd:f.cwd,env:U,mainFilePath:A,languageDefinition:N});case 20:if(!(X=xe)){e.n=21;break}return k({testCaseId:P,decisionCode:null!=(Y=X.decisionCode)?Y:R.BUILD_ERROR,feedbackMarkdown:X.feedbackMarkdown,stderr:X.stderr,stdout:X.stdout,outputFiles:X.outputFiles}),e.a(2);case 21:return e.n=22,m(f.cwd);case 22:if(Q=e.v,K=P,e.p=23,!s.runCommand){e.n=24;break}Oe=void 0,e.n=26;break;case 24:return e.n=25,W();case 25:Oe=e.v;case 26:H=Oe,J=null==($=S.shared)?void 0:$.fileInputPath,Z=r(F),e.p=27,Z.s();case 28:if((ee=Z.n()).done){e.n=54;break}if(fe=ee.value,K=fe.id,!J){e.n=29;break}return e.n=29,h(J,f.cwd);case 29:if(!fe.fileInputPath){e.n=30;break}return e.n=30,h(fe.fileInputPath,f.cwd);case 30:return pe="number"==typeof E.timeLimitMs?E.timeLimitMs/1e3:null!=(ne=s.runTimeoutSeconds)?ne:5,me=H?t(t({},U),{},{DISPLAY:H.display}):U,e.n=31,null==(ie=s.resolveInput)?void 0:ie.call(s,{testCase:fe,cwd:f.cwd,env:me});case 31:if(null==(te=e.v)){e.n=32;break}je=te,e.n=33;break;case 32:je=fe.input;case 33:if(null==(re=je)){e.n=34;break}Ne=re,e.n=35;break;case 34:Ne="";case 35:return V=he=Ne,e.n=36,null==(ae=s.command)?void 0:ae.call(s,{testCase:fe,cwd:f.cwd,env:me,mainFilePath:A});case 36:if(null==(se=e.v)){e.n=37;break}Be=se,e.n=38;break;case 37:Be=N.command(A);case 38:if(ve=Be,we=void 0,e.p=39,!s.runCommand){e.n=41;break}return e.n=40,s.runCommand({testCase:fe,command:ve,stdin:he,cwd:f.cwd,env:me,timeLimitSeconds:pe,screenshotWaitSeconds:null!=(be=s.screenshotWaitSeconds)?be:.3,stopDetectionThreshold:null!=(ge=s.stopDetectionThreshold)?ge:5});case 40:Ue=e.v,e.n=43;break;case 41:return e.n=42,B({command:ve,stdin:he,cwd:f.cwd,env:me,timeLimitSeconds:pe,screenshotWaitSeconds:null!=(ke=s.screenshotWaitSeconds)?ke:.3,stopDetectionThreshold:null!=(Ce=s.stopDetectionThreshold)?Ce:5});case 42:Ue=e.v;case 43:we=Ue,e.n=46;break;case 44:return e.p=44,Ae=e.v,k({testCaseId:fe.id,decisionCode:R.RUNTIME_ERROR,stdin:he,stderr:z(Ae)}),e.n=45,p(f.cwd,Q);case 45:return e.a(2);case 46:return e.n=47,C(f.cwd,null!=(oe=E.requiredOutputFilePaths)?oe:[]);case 47:if(Ie=e.v,ye={timeLimitSeconds:pe,problemMarkdownFrontMatter:{memoryLimitByte:E.memoryLimitByte,requiredOutputFilePaths:E.requiredOutputFilePaths}},Ee=O({runResult:we,outputFiles:Ie,context:ye}),Re=Ee,Ee.decisionCode!==R.ACCEPTED){e.n=51;break}return e.p=48,e.n=49,s.test({testCase:fe,runResult:we,outputFiles:Ie,context:ye});case 49:Fe=e.v,Re={decisionCode:null!=(Se=Fe.decisionCode)?Se:Ee.decisionCode,feedbackMarkdown:Fe.feedbackMarkdown,stderr:Fe.stderr,stdout:Fe.stdout,outputFiles:Fe.outputFiles},e.n=51;break;case 50:e.p=50,Ge=e.v,Re={decisionCode:R.RUNTIME_ERROR,stderr:z(Ge)};case 51:return Me=null!=(ue=Re.decisionCode)?ue:R.ACCEPTED,Pe=null!=(ce=Re.stdout)?ce:we.stdout,_e=null!=(de=Re.stderr)?de:we.stderr,k({testCaseId:fe.id,decisionCode:Me,exitStatus:we.status,stdin:we.stdin||void 0,stdout:Pe||void 0,stderr:_e||void 0,timeSeconds:we.timeSeconds,memoryBytes:we.memoryBytes,feedbackMarkdown:Re.feedbackMarkdown,outputFiles:null!=(le=Re.outputFiles)?le:Ie.length>0?Ie:void 0}),e.n=52,p(f.cwd,Q);case 52:if(Me===R.ACCEPTED){e.n=53;break}return e.a(3,54);case 53:e.n=28;break;case 54:e.n=56;break;case 55:e.p=55,We=e.v,Z.e(We);case 56:return e.p=56,Z.f(),e.f(56);case 57:e.n=59;break;case 58:return e.p=58,qe=e.v,k({testCaseId:K,decisionCode:R.RUNTIME_ERROR,stdin:V,stderr:z(qe)}),e.n=59,p(f.cwd,Q);case 59:return e.p=59,e.n=60,null==(De=H)?void 0:De.dispose();case 60:return e.f(59);case 61:return e.a(2)}},e,null,[[48,50],[39,44],[27,55,56,57],[23,58,59,61],[12,15]])}))).apply(this,arguments)}function D(e){return T.apply(this,arguments)}function T(){return(T=e(n().m(function e(r){var t;return n().w(function(e){for(;;)switch(e.n){case 0:if(!r.configuredMainFilePath){e.n=3;break}return t=d.join(r.cwd,r.configuredMainFilePath),e.n=1,K(t);case 1:if(!e.v){e.n=2;break}return e.a(2,r.configuredMainFilePath);case 2:if(r.allowConfiguredPathFallback){e.n=3;break}return e.a(2,void 0);case 3:return e.n=4,v(r.cwd,r.language);case 4:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function L(e){var n=Object.entries(S).filter(function(n){return i(n,2)[1].fileExtensions.some(function(n){return e.endsWith(n)})}).map(function(e){return i(e,1)[0]});return n.length>0?n:void 0}function x(e){var n,r,t=null==(n=(r=e.languageDefinition).buildCommand)?void 0:n.call(r,e.mainFilePath);if(t){var i=E(t[0],t.slice(1),{cwd:e.cwd,encoding:"utf8",env:e.env},10);return i.timeSeconds>10?{decisionCode:R.BUILD_TIME_LIMIT_EXCEEDED,stderr:i.stderr||void 0}:0!==i.status?{decisionCode:R.BUILD_ERROR,stderr:i.stderr||i.stdout||void 0}:void 0}}function O(e){var n,r,t;if("timeout"===e.runResult.stopReason)return{decisionCode:R.TIME_LIMIT_EXCEEDED,stderr:e.runResult.stderr};if(0!==e.runResult.status)return{decisionCode:R.RUNTIME_ERROR,stderr:e.runResult.stderr};if(e.runResult.memoryBytes>(null!=(n=e.context.problemMarkdownFrontMatter.memoryLimitByte)?n:Number.POSITIVE_INFINITY))return{decisionCode:R.MEMORY_LIMIT_EXCEEDED,stderr:e.runResult.stderr};var i=null!=(r=null==(t=e.context.problemMarkdownFrontMatter.requiredOutputFilePaths)?void 0:t.length)?r:0;return e.outputFiles.length<i?{decisionCode:R.MISSING_REQUIRED_OUTPUT_FILE_ERROR}:{decisionCode:R.ACCEPTED}}function j(e){return N.apply(this,arguments)}function N(){return(N=e(n().m(function e(r){return n().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,y(d.join(r,"test_cases"));case 1:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function B(e){return U.apply(this,arguments)}function U(){return(U=e(n().m(function e(r){var t,i,u,c,d,f,p,m,h,v,w,b,g,k,C,I;return n().w(function(e){for(;;)switch(e.n){case 0:t=["timeout",r.timeLimitSeconds.toFixed(3)].concat(F,a(r.command)),(i=o.spawn(t[0],t.slice(1),{cwd:r.cwd,env:r.env,detached:"win32"!==process.platform,stdio:["pipe","pipe","pipe"]})).stdout.setEncoding("utf8"),i.stderr.setEncoding("utf8"),u="",c="",p="process_exit",m=[],h=[],v=Date.now()/1e3,w=0,i.stdout.on("data",function(e){u+=e}),i.stderr.on("data",function(e){c+=e}),i.on("error",function(e){f=e,d=1}),i.on("close",function(e,n){return 124===e?(p="timeout",void(d=0)):n?(d=1,void(c=c?"".concat(c,"\nprocess terminated by signal: ").concat(n):"process terminated by signal: ".concat(n))):void(d=null!=e?e:1)}),r.stdin&&i.stdin.write(r.stdin),i.stdin.end(),b=n().m(function e(){var t,s;return n().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,l(1e3*r.screenshotWaitSeconds);case 1:if(w=Math.max(w,Q(i.pid)),t=A(r.env.DISPLAY),!((h=t.toSorted(function(e,n){return e.data.length-n.data.length})).length>0)){e.n=2;break}if(s=h.map(function(e){return e.data}).toSorted(),m.unshift(s),m.length=Math.min(m.length,r.stopDetectionThreshold),m.length!==r.stopDetectionThreshold||!m.every(function(e){return e.length===s.length&&e.every(function(e,n){return e===s[n]})})){e.n=2;break}return p="stable_screenshot",d=0,e.a(2,0);case 2:if(!(Date.now()/1e3-v>r.timeLimitSeconds)){e.n=3;break}return p="timeout",d=0,e.a(2,0);case 3:return e.a(2)}},e)});case 1:if(void 0!==d){e.n=4;break}return e.d(s(b()),2);case 2:if(0!==e.v){e.n=3;break}return e.a(3,4);case 3:e.n=1;break;case 4:return"process_exit"!==p&&null===i.exitCode&&(i.removeAllListeners("close"),i.removeAllListeners("error")),e.n=5,X(i);case 5:if(!f){e.n=6;break}throw f;case 6:return g=G(c,v,w),k=g.memoryBytes,C=g.stderr,I=g.timeSeconds,e.a(2,{stdin:r.stdin,stdout:u.trimEnd(),stderr:C,status:d,timeSeconds:I,memoryBytes:k,screenshots:h,stopReason:p})}},e)}))).apply(this,arguments)}function A(e){var n=e?t(t({},process.env),{},{DISPLAY:e}):process.env,i=o.spawnSync("xwininfo",["-root","-tree"],{encoding:"utf8",env:n});if(i.error)throw i.error;if(0!==i.status||!i.stdout)return[];for(var s=[],a=0,u=function(e){var n,t=[],i=e.split("\n"),s=r(i);try{for(s.s();!(n=s.n()).done;){var a=n.value;if(!(a.includes("Root window id:")||a.includes("Parent window id:")||a.includes("()"))){var o=/^\s{5}(0x[\da-f]+) /.exec(a);null!=o&&o[1]&&t.push(Number.parseInt(o[1],16).toString())}}}catch(e){s.e(e)}finally{s.f()}return t}(i.stdout);a<u.length;a++){var c=u[a],d=o.spawnSync("maim",["-i",c],{env:n});if(d.error)throw d.error;if(0===d.status&&0!==d.stdout.length){var l=o.spawnSync("xdotool",["getwindowname",c],{encoding:"utf8",env:n});if(l.error)throw l.error;var f=l.stdout.trim().replaceAll(/[\s/]/g,"_");s.push({path:"".concat(f||"window","_").concat(c,".png"),data:d.stdout.toString("base64"),encoding:"base64"})}}return s}function G(e,n,r){var t=/(?:^|\n)(\d+\.\d+) (\d+)\s*$/.exec(e),i=t?e.slice(0,t.index).trimEnd():e.trimEnd(),s=1024*Number(null==t?void 0:t[2])||0;return{stderr:i,timeSeconds:Number(null==t?void 0:t[1])||Date.now()/1e3-n,memoryBytes:Math.max(s,r)}}function W(){return q.apply(this,arguments)}function q(){return q=e(n().m(function r(){var t,i,a;return n().w(function(r){for(;;)switch(r.n){case 0:if("linux"===process.platform){r.n=1;break}throw new Error("GUI screenshot capture is supported only on Linux.");case 1:t=n().m(function r(){var t,i,s;return n().w(function(r){for(;;)switch(r.n){case 0:return t=":".concat(a),(s=o.spawn("Xvfb",[t,"-screen","0","1280x1024x24","-ac"],{stdio:"ignore"})).on("error",function(e){i=e}),r.n=1,l(300);case 1:if(!i){r.n=2;break}throw i;case 2:if(null===s.exitCode){r.n=3;break}return r.a(2,0);case 3:return r.a(2,{v:{display:t,dispose:function(){var r=e(n().m(function e(){return n().w(function(e){for(;;)switch(e.n){case 0:if(s.killed){e.n=2;break}return s.kill("SIGTERM"),e.n=1,l(100);case 1:null===s.exitCode&&s.kill("SIGKILL");case 2:return e.a(2)}},e)}));return function(){return r.apply(this,arguments)}}()}})}},r)}),a=90;case 2:if(!(a<100)){r.n=6;break}return r.d(s(t()),3);case 3:if(0!==(i=r.v)){r.n=4;break}return r.a(3,5);case 4:if(!i){r.n=5;break}return r.a(2,i.v);case 5:a++,r.n=2;break;case 6:throw new Error("Xvfb could not be started.");case 7:return r.a(2)}},r)})),q.apply(this,arguments)}function X(e){return Y.apply(this,arguments)}function Y(){return(Y=e(n().m(function e(r){return n().w(function(e){for(;;)switch(e.n){case 0:if(r.pid){e.n=1;break}return e.a(2);case 1:return H(r.pid,"SIGTERM"),e.n=2,l(200);case 2:null===r.exitCode&&H(r.pid,"SIGKILL");case 3:return e.a(2)}},e)}))).apply(this,arguments)}function Q(e){if(!e||"linux"!==process.platform)return 0;var n=o.spawnSync("ps",["-o","rss=","--no-headers","--pgroup",String(e)],{encoding:"utf8"});return n.error||0!==n.status||!n.stdout?0:n.stdout.split("\n").map(function(e){return Number(e.trim())}).filter(function(e){return Number.isFinite(e)&&e>0}).reduce(function(e,n){return e+1024*n},0)}function H(e,n){try{if("win32"!==process.platform)return void process.kill(-e,n)}catch(e){}try{process.kill(e,n)}catch(e){}}function K(e){return V.apply(this,arguments)}function V(){return(V=e(n().m(function e(r){return n().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,u.access(r);case 1:return e.a(2,!0);case 2:return e.p=2,e.v,e.a(2,!1)}},e,null,[[0,2]])}))).apply(this,arguments)}function z(e){return e instanceof Error?e.message:String(e)}export{P as guiCommandJudgePreset};
|
|
2
2
|
//# sourceMappingURL=guiCommand.js.map
|