diff --git a/tcaptcha/core_js/tdc_sample.lifted.txt b/tcaptcha/core_js/tdc_sample.lifted.txt new file mode 100644 index 0000000..1e10f65 --- /dev/null +++ b/tcaptcha/core_js/tdc_sample.lifted.txt @@ -0,0 +1,3149 @@ +// ===== lifted from tdc.js bytecode (45636 bytes) ===== + +function func_9109() { + @09109: + var r2; + var r3; + var r4; + var r5; + var r6; + var r2; + r5 = r3[0]; + r6 = r3[1]; + r2 = 0; + @09152: + if (!(84941944608 == r2)) goto @9164; + goto @9439; + @09164: + if ((0 == (3 & r2))) goto @9254; + if ((3 == (3 & r2))) goto @9220; + goto @9285; + @09220: + goto @9285; + @09254: + @09285: + r = ( + ((((r6 << 4) ^ (r6 >>> 5)) + r6) ^ (r2 + r7[(3 & r2)]))); + r2 = (r2 + 2654435769); + if (([6] == ((0 >>> 11) & 3))) goto @9398; + if ((3 == ((r2 >>> 11) & 3))) goto @9361; + goto @9432; + @09361: + goto @9432; + @09398: + @09432: + r = ( + ((((r5 << 4) ^ (r5 >>> 5)) + r5) ^ (r2 + r7[((r2 >>> 11) & 3)]))); + goto @9152; + @09439: + r3[0] = r5; + r3[1] = r6; + // closure func_9109(p0->r3, p1->r4) caps=[r7<-r8] target=@9109 + r = ; + goto @9584; + var r2; + var r3; + var r4; + var r5; + r = ; + r = ; + @09501: + if () goto @9514; + goto @9580; + @09514: + r = ; + r = ; + goto @9501; + @09580: + @09584: + // closure sub_9477(p0->r3) caps=[] target=@9477 + r = ; + if () goto @9991; + goto @9986; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r9; + r = ; + r = ; + r = ; + r = ; + @09817: + if () goto @9856; + r = ; + @09856: + if () goto @9862; + goto @9982; + @09862: + r = ; + r = ; + if () goto @9914; + goto @9923; + @09914: + @09923: + r = ; + r = ; + goto @9817; + @09982: + @09986: + // closure sub_9627(p0->r3) caps=[] target=@9627 + @09991: + r = ; + r = ; + r = ; + goto @10066; + var r2; + var r3; + @10066: + // closure sub_10053(p0->r3) caps=[r4<-r10] target=@10053 + = ; + // closure sub_7127(p0->r3, p1->r4, p2->r5) caps=[] target=@7127 + = ; + goto @11224; + var r2; + var r3; + var r4; + var r5; + var r6; + r = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + @11224: + // closure sub_10095(p0->r3, p1->r4, p2->r5) caps=[] target=@10095 + = ; + goto @11354; + var r2; + var r3; + var r4; + var r5; + var r6; + r = ; + goto @11340; + var r2; + = ; + @11340: + // closure sub_11310() caps=[r3<-r6] target=@11310 + = ; + = ; + @11354: + // closure sub_11241(p0->r3, p1->r4, p2->r5) caps=[] target=@11241 + = ; + goto @12803; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r9; + var r10; + var r11; + var r12; + goto @11681; + var r2; + var r3; + goto @11415; + @11407: + try {} catch -> @11678 (var r0) + // pop try + goto @11678; + @11415: + var r4; + try {} catch -> @11407 (var r4) + goto @11667; + var r2; + var r3; + var r4; + var r5; + var r6; + goto @11509; + @11501: + try {} catch -> @11664 (var r0) + // pop try + goto @11664; + @11509: + var r7; + try {} catch -> @11501 (var r7) + r = ; + r = ; + if () goto @11602; + goto @11663; + @11602: + if () goto @11637; + goto @11663; + @11637: + = ; + @11663: + // pop try + @11664: + // (异常检查: 结束) + @11667: + // closure sub_11486(p0->r3) caps=[r8<-r5] target=@11486 + // pop try + @11678: + // (异常检查: 结束) + @11681: + // closure sub_11398() caps=[r5<-r6] target=@11398 + r = ; + goto @11879; + var r2; + var r3; + var r4; + r = ; + if () goto @11825; + goto @11828; + @11825: + @11828: + r = ; + if () goto @11871; + goto @11878; + @11871: + @11878: + @11879: + // closure sub_11695() caps=[] target=@11695 + r = ; + goto @11944; + var r2; + @11944: + // closure sub_11891() caps=[] target=@11891 + r = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + r = ; + goto @12063; + var r2; + @12063: + // closure sub_12057() caps=[] target=@12057 + r = ; + goto @12081; + var r2; + @12081: + // closure sub_12075() caps=[] target=@12075 + r = ; + r = ; + goto @12196; + var r2; + = ; + if () goto @12154; + goto @12187; + @12154: + @12187: + @12196: + // closure sub_12117() caps=[r3<-r6, r4<-r9] target=@12117 + = ; + goto @12309; + var r2; + = ; + if () goto @12267; + goto @12300; + @12267: + @12300: + @12309: + // closure sub_12230() caps=[r3<-r6, r4<-r9] target=@12230 + = ; + goto @12636; + var r2; + var r3; + goto @12340; + @12332: + try {} catch -> @12633 (var r0) + // pop try + goto @12633; + @12340: + var r4; + try {} catch -> @12332 (var r4) + goto @12611; + var r2; + var r3; + goto @12424; + @12383: + try {} catch -> @12608 (var r0) + // pop try + goto @12608; + @12424: + var r4; + try {} catch -> @12383 (var r4) + if () goto @12439; + goto @12480; + @12439: + // pop try + @12480: + if () goto @12492; + goto @12527; + @12492: + // pop try + @12527: + // pop try + @12608: + // (异常检查: 结束) + @12611: + // closure sub_12374() caps=[r5<-r5, r6<-r6, r7<-r7, r8<-r8, r9<-r9] target=@12374 + r = ; + // pop try + @12633: + // (异常检查: 结束) + @12636: + // closure sub_12323() caps=[r5<-r9, r6<-r12, r7<-r7, r8<-r11, r9<-r8] target=@12323 + goto @12792; + var r2; + var r3; + var r4; + goto @12701; + @12690: + try {} catch -> @12789 (var r0) + // pop try + goto @12789; + @12701: + var r5; + try {} catch -> @12690 (var r5) + r = ; + // pop try + @12789: + // (异常检查: 结束) + @12792: + // closure sub_12679() caps=[r6<-r6] target=@12679 + = ; + @12803: + // closure sub_11371(p0->r3, p1->r4, p2->r5) caps=[] target=@11371 + = ; + goto @12979; + var r2; + var r3; + var r4; + var r5; + goto @12967; + var r2; + if () goto @12963; + @12963: + = ; + @12967: + // closure sub_12876() caps=[] target=@12876 + = ; + = ; + @12979: + // closure sub_12820(p0->r3, p1->r4, p2->r5) caps=[] target=@12820 + = ; + goto @13459; + var r2; + var r3; + var r4; + var r5; + var r6; + goto @13360; + var r2; + var r3; + var r4; + var r5; + goto @13040; + @13024: + try {} catch -> @13357 (var r0) + // pop try + goto @13357; + @13040: + var r6; + try {} catch -> @13024 (var r6) + r = ; + = ; + r = ; + if () goto @13347; + goto @13355; + @13347: + @13355: + // pop try + @13357: + // (异常检查: 结束) + @13360: + // closure sub_13011() caps=[] target=@13011 + r = ; + goto @13445; + var r2; + = ; + @13445: + // closure sub_13415() caps=[r3<-r6] target=@13415 + = ; + = ; + @13459: + // closure sub_12996(p0->r3, p1->r4, p2->r5) caps=[] target=@12996 + = ; + goto @14278; + var r2; + var r3; + var r4; + var r5; + var r6; + r = ; + goto @14264; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + r = ; + if () goto @13703; + @13703: + if () goto @13759; + @13759: + r = ; + if () goto @13883; + @13883: + if () goto @13941; + @13941: + r = ; + if () goto @14069; + if () goto @14072; + goto @14072; + @14069: + @14072: + r = ; + if () goto @14202; + if () goto @14205; + goto @14205; + @14202: + @14205: + r = ; + = ; + = ; + = ; + @14264: + // closure sub_13545() caps=[r8<-r6] target=@13545 + = ; + = ; + @14278: + // closure sub_13476(p0->r3, p1->r4, p2->r5) caps=[] target=@13476 + = ; + goto @14884; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + goto @14521; + var r2; + var r3; + var r4; + goto @14333; + @14323: + try {} catch -> @14518 (var r0) + // pop try + goto @14518; + @14333: + var r5; + try {} catch -> @14323 (var r5) + r = ; + if () goto @14435; + goto @14505; + @14435: + if () goto @14471; + goto @14491; + @14471: + @14491: + @14505: + if () goto @14511; + goto @14515; + @14511: + // pop try + @14515: + // pop try + @14518: + // (异常检查: 结束) + @14521: + // closure sub_14312() caps=[r6<-r6] target=@14312 + r = ; + if () goto @14572; + goto @14621; + @14572: + @14621: + if () goto @14799; + goto @14791; + var r2; + var r3; + if () goto @14640; + goto @14674; + @14640: + @14674: + if () goto @14679; + goto @14722; + @14679: + @14722: + if () goto @14727; + goto @14767; + @14727: + @14767: + if () goto @14776; + goto @14790; + @14776: + @14790: + @14791: + // closure sub_14627(p0->r3) caps=[] target=@14627 + goto @14818; + @14799: + goto @14813; + var r2; + var r3; + @14813: + // closure sub_14803(p0->r3) caps=[] target=@14803 + @14818: + r = ; + = ; + = ; + @14884: + // closure sub_14295(p0->r3, p1->r4, p2->r5) caps=[] target=@14295 + = ; + goto @15034; + var r2; + var r3; + var r4; + var r5; + goto @15022; + var r2; + = ; + @15022: + // closure sub_14957() caps=[] target=@14957 + = ; + = ; + @15034: + // closure sub_14901(p0->r3, p1->r4, p2->r5) caps=[] target=@14901 + = ; + goto @15168; + var r2; + var r3; + var r4; + var r5; + var r6; + r = ; + goto @15154; + var r2; + r = ; + = ; + @15154: + // closure sub_15116() caps=[r3<-r6] target=@15116 + = ; + = ; + @15168: + // closure sub_15051(p0->r3, p1->r4, p2->r5) caps=[] target=@15051 + = ; + goto @15514; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r9; + goto @15329; + var r2; + var r3; + var r3; + goto @15272; + @15217: + try {} catch -> @15326 (var r0) + goto @15232; + @15224: + try {} catch -> @15267 (var r0) + // pop try + goto @15267; + @15232: + var r5; + try {} catch -> @15224 (var r5) + // pop try + // pop try + @15267: + // (异常检查: 结束) + // pop try + goto @15326; + @15272: + var r4; + try {} catch -> @15217 (var r4) + // pop try + @15326: + // (异常检查: 结束) + @15329: + // closure sub_15206() caps=[] target=@15206 + r = ; + r = ; + r = ; + goto @15366; + @15358: + try {} catch -> @15425 (var r0) + // pop try + goto @15425; + @15366: + var r10; + try {} catch -> @15358 (var r10) + r = ; + // pop try + @15425: + // (异常检查: 结束) + goto @15500; + var r2; + = ; + @15500: + // closure sub_15472() caps=[r3<-r7] target=@15472 + = ; + = ; + @15514: + // closure sub_15185(p0->r3, p1->r4, p2->r5) caps=[] target=@15185 + = ; + goto @15675; + var r2; + var r3; + var r4; + var r5; + var r6; + goto @15640; + var r2; + var r3; + var r4; + if () goto @15562; + goto @15636; + @15562: + r = ; + if () goto @15602; + goto @15636; + @15602: + r = ; + @15636: + @15640: + // closure sub_15546(p0->r3) caps=[] target=@15546 + r = ; + = ; + @15675: + // closure sub_15531(p0->r3, p1->r4, p2->r5) caps=[] target=@15531 + = ; + goto @15964; + var r2; + var r3; + var r4; + var r5; + var r6; + r = ; + goto @15950; + var r2; + if () goto @15827; + goto @15946; + @15827: + @15946: + = ; + @15950: + // closure sub_15796() caps=[r3<-r6] target=@15796 + = ; + = ; + @15964: + // closure sub_15692(p0->r3, p1->r4, p2->r5) caps=[] target=@15692 + = ; + goto @18080; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + goto @17812; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r9; + var r9; + var r10; + goto @16279; + var r2; + var r3; + var r4; + var r5; + var r6; + goto @16048; + @16040: + try {} catch -> @16276 (var r0) + // pop try + goto @16276; + @16048: + var r7; + try {} catch -> @16040 (var r7) + r = ; + r = ; + if () goto @16258; + goto @16266; + @16258: + @16266: + = ; + // pop try + @16276: + // (异常检查: 结束) + @16279: + // closure sub_16025(p0->r3) caps=[r8<-r4, r9<-r3] target=@16025 + r = ; + r = ; + if () goto @16427; + @16427: + if () goto @16485; + @16485: + if () goto @16551; + @16551: + r = ; + r = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + r = ; + r = ; + goto @17082; + @17072: + try {} catch -> @17101 (var r0) + // pop try + goto @17101; + @17082: + var r11; + try {} catch -> @17072 (var r11) + r = ; + // pop try + @17101: + // (异常检查: 结束) + goto @17223; + var r2; + var r3; + if () goto @17172; + goto @17221; + @17172: + @17221: + @17223: + // closure sub_17137(p0->r3) caps=[r4<-r10] target=@17137 + = ; + goto @17435; + @17282: + try {} catch -> @17547 (var r0) + goto @17408; + var r2; + var r3; + goto @17386; + var r2; + @17386: + // closure sub_17380() caps=[] target=@17380 + goto @17399; + var r2; + @17399: + // closure sub_17393() caps=[] target=@17393 + @17408: + // closure sub_17327(p0->r3) caps=[r4<-r8] target=@17327 + goto @17424; + var r2; + @17424: + // closure sub_17418() caps=[] target=@17418 + // pop try + goto @17547; + @17435: + var r12; + try {} catch -> @17282 (var r12) + goto @17536; + var r2; + var r3; + @17536: + // closure sub_17481(p0->r3) caps=[r4<-r8] target=@17481 + // pop try + @17547: + // (异常检查: 结束) + goto @17797; + var r2; + var r3; + var r4; + goto @17621; + @17584: + try {} catch -> @17794 (var r0) + // pop try + goto @17794; + @17621: + var r5; + try {} catch -> @17584 (var r5) + r = ; + goto @17783; + var r2; + var r3; + if () goto @17773; + goto @17781; + @17773: + @17781: + @17783: + // closure sub_17713(p0->r3) caps=[r4<-r7] target=@17713 + // pop try + @17794: + // (异常检查: 结束) + @17797: + // closure sub_17573() caps=[r6<-r8, r7<-r10] target=@17573 + @17812: + // closure sub_16000(p0->r3) caps=[] target=@16000 + r = ; + r = ; + goto @17839; + @17831: + try {} catch -> @17991 (var r0) + // pop try + goto @17991; + @17839: + var r9; + try {} catch -> @17831 (var r9) + goto @17980; + var r2; + var r3; + if () goto @17970; + r = ; + goto @17978; + @17970: + r = ; + @17978: + @17980: + // closure sub_17849(p0->r3) caps=[r4<-r6] target=@17849 + // pop try + @17991: + // (异常检查: 结束) + goto @18066; + var r2; + = ; + @18066: + // closure sub_18038() caps=[r3<-r6] target=@18038 + = ; + = ; + @18080: + // closure sub_15981(p0->r3, p1->r4, p2->r5) caps=[] target=@15981 + = ; + goto @18522; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r9; + var r10; + goto @18368; + var r2; + var r3; + var r4; + if () goto @18137; + goto @18140; + @18137: + @18140: + r = ; + goto @18189; + @18149: + try {} catch -> @18364 (var r0) + r = ; + // pop try + goto @18364; + @18189: + var r6; + try {} catch -> @18149 (var r6) + r = ; + // pop try + @18364: + // (异常检查: 结束) + @18368: + // closure sub_18120() caps=[r5<-r8, r7<-r7] target=@18120 + r = ; + r = ; + r = ; + r = ; + r = ; + goto @18506; + var r2; + if () goto @18502; + r = ; + @18502: + = ; + @18506: + // closure sub_18464() caps=[r3<-r9, r4<-r10] target=@18464 + = ; + = ; + @18522: + // closure sub_18097(p0->r3, p1->r4, p2->r5) caps=[] target=@18097 + = ; + goto @18929; + var r2; + var r3; + var r4; + var r5; + var r6; + goto @18895; + var r2; + var r3; + var r4; + var r5; + goto @18577; + @18567: + try {} catch -> @18892 (var r0) + // pop try + goto @18892; + @18577: + var r6; + try {} catch -> @18567 (var r6) + r = ; + if () goto @18753; + @18753: + r = ; + if () goto @18884; + goto @18889; + @18884: + // pop try + @18889: + // pop try + @18892: + // (异常检查: 结束) + @18895: + // closure sub_18554() caps=[] target=@18554 + r = ; + = ; + @18929: + // closure sub_18539(p0->r3, p1->r4, p2->r5) caps=[] target=@18539 + = ; + goto @19121; + var r2; + var r3; + var r4; + var r5; + var r6; + goto @19086; + var r2; + var r3; + @19086: + // closure sub_18961(p0->r3) caps=[] target=@18961 + r = ; + = ; + @19121: + // closure sub_18946(p0->r3, p1->r4, p2->r5) caps=[] target=@18946 + = ; + goto @19944; + var r2; + var r3; + var r4; + var r5; + var r6; + goto @19836; + var r2; + var r3; + var r3; + var r3; + var r3; + var r3; + var r4; + goto @19180; + @19172: + try {} catch -> @19833 (var r0) + // pop try + goto @19833; + @19180: + var r5; + try {} catch -> @19172 (var r5) + r = ; + if () goto @19413; + goto @19451; + @19413: + @19451: + r = ; + if () goto @19533; + goto @19573; + @19533: + @19573: + r = ; + if () goto @19653; + goto @19657; + @19653: + @19657: + r = ; + if () goto @19757; + goto @19825; + @19757: + if () goto @19822; + goto @19825; + @19822: + @19825: + r = ; + // pop try + @19833: + // (异常检查: 结束) + @19836: + // closure sub_19153() caps=[] target=@19153 + r = ; + goto @19930; + var r2; + var r3; + r = ; + = ; + @19930: + // closure sub_19891() caps=[r4<-r6] target=@19891 + = ; + = ; + @19944: + // closure sub_19138(p0->r3, p1->r4, p2->r5) caps=[] target=@19138 + = ; + goto @20155; + var r2; + var r3; + var r4; + var r5; + goto @20143; + var r2; + var r3; + r = ; + if () goto @20136; + goto @20139; + @20136: + @20139: + = ; + @20143: + // closure sub_20017() caps=[] target=@20017 + = ; + = ; + @20155: + // closure sub_19961(p0->r3, p1->r4, p2->r5) caps=[] target=@19961 + = ; + goto @20267; + var r2; + var r3; + var r4; + var r5; + goto @20255; + var r2; + = ; + @20255: + // closure sub_20228() caps=[] target=@20228 + = ; + = ; + @20267: + // closure sub_20172(p0->r3, p1->r4, p2->r5) caps=[] target=@20172 + = ; + goto @20385; + var r2; + var r3; + var r4; + var r5; + goto @20373; + var r2; + = ; + @20373: + // closure sub_20340() caps=[] target=@20340 + = ; + = ; + @20385: + // closure sub_20284(p0->r3, p1->r4, p2->r5) caps=[] target=@20284 + = ; + goto @22420; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r9; + var r10; + var r11; + var r12; + var r13; + var r14; + var r15; + var r16; + var r17; + var r18; + goto @20930; + var r2; + var r3; + var r4; + var r5; + if () goto @20485; + @20485: + r = ; + if () goto @20500; + goto @20928; + @20500: + r = ; + if () goto @20587; + r = ; + goto @20631; + @20587: + r = ; + @20631: + r = ; + if () goto @20746; + goto @20831; + @20746: + @20831: + = ; + = ; + = ; + = ; + r = ; + @20928: + @20930: + // closure sub_20441(p0->r3) caps=[r6<-r15, r7<-r13, r8<-r7, r9<-r16, r10<-r14] target=@20441 + r = ; + goto @21342; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + r = ; + r = ; + r = ; + @20999: + if () goto @21027; + goto @21283; + @21027: + r = ; + if () goto @21181; + = ; + = ; + = ; + goto @21253; + @21181: + = ; + = ; + = ; + @21253: + r = ; + r = ; + goto @20999; + @21283: + = ; + = ; + = ; + @21342: + // closure sub_20953(p0->r3) caps=[] target=@20953 + r = ; + r = ; + r = ; + r = ; + r = ; + r = ; + r = ; + r = ; + if () goto @21457; + goto @21460; + @21457: + @21460: + r = ; + r = ; + r = ; + if () goto @21579; + goto @21664; + @21579: + @21664: + r = ; + goto @21960; + var r2; + var r3; + var r4; + r = ; + if () goto @21880; + if () goto @21899; + goto @21899; + @21880: + @21899: + r = ; + @21960: + // closure sub_21729() caps=[r5<-r9, r6<-r6, r7<-r17] target=@21729 + = ; + goto @22341; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + r = ; + r = ; + r = ; + @22025: + if () goto @22053; + goto @22141; + @22053: + r = ; + r = ; + r = ; + goto @22025; + @22141: + r = ; + r = ; + r = ; + if () goto @22230; + goto @22296; + @22230: + r = ; + r = ; + @22248: + if () goto @22261; + goto @22296; + @22261: + r = ; + r = ; + goto @22248; + @22296: + = ; + = ; + = ; + @22341: + // closure sub_21985() caps=[r8<-r18, r9<-r14, r10<-r8] target=@21985 + = ; + goto @22404; + var r2; + = ; + r = ; + @22404: + // closure sub_22370() caps=[r3<-r14, r4<-r15] target=@22370 + = ; + = ; + @22420: + // closure sub_20402(p0->r3, p1->r4, p2->r5) caps=[] target=@20402 + = ; + goto @22621; + var r2; + var r3; + var r4; + var r5; + var r6; + goto @22584; + var r2; + var r3; + var r4; + var r5; + if () goto @22537; + = ; + goto @22582; + @22537: + @22582: + @22584: + // closure sub_22452(p0->r3, p1->r4, p2->r5) caps=[] target=@22452 + r = ; + = ; + @22621: + // closure sub_22437(p0->r3, p1->r4, p2->r5) caps=[] target=@22437 + = ; + goto @24672; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r9; + goto @23154; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r9; + r = ; + r = ; + if () goto @22713; + goto @22747; + @22713: + @22747: + if () goto @22753; + goto @23111; + @22753: + r = ; + r = ; + r = ; + r = ; + if () goto @22859; + goto @22894; + @22859: + @22894: + if () goto @22948; + r = ; + r = ; + goto @23097; + @22948: + if () goto @23000; + goto @23020; + @23000: + @23020: + r = ; + if () goto @23074; + goto @23094; + @23074: + @23094: + r = ; + @23097: + r = ; + r = ; + @23111: + = ; + = ; + @23154: + // closure sub_22659(p0->r3) caps=[r10<-r6] target=@22659 + r = ; + goto @23706; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r9; + r = ; + r = ; + if () goto @23237; + goto @23285; + @23237: + @23285: + if () goto @23291; + goto @23663; + @23291: + r = ; + r = ; + r = ; + r = ; + if () goto @23411; + goto @23446; + @23411: + @23446: + if () goto @23500; + r = ; + r = ; + goto @23649; + @23500: + if () goto @23552; + goto @23572; + @23552: + @23572: + r = ; + if () goto @23626; + goto @23646; + @23626: + @23646: + r = ; + @23649: + r = ; + r = ; + @23663: + = ; + = ; + @23706: + // closure sub_23169(p0->r3) caps=[r10<-r6] target=@23169 + r = ; + goto @24502; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r9; + var r10; + r = ; + r = ; + r = ; + r = ; + r = ; + if () goto @23831; + goto @23866; + @23831: + @23866: + if () goto @23920; + r = ; + r = ; + goto @24069; + @23920: + if () goto @23972; + goto @23992; + @23972: + @23992: + r = ; + if () goto @24046; + goto @24066; + @24046: + @24066: + r = ; + @24069: + if () goto @24396; + goto @24112; + @24090: + try {} catch -> @24392 (var r0) + r = ; + r = ; + // pop try + goto @24392; + @24112: + var r12; + try {} catch -> @24090 (var r12) + if () goto @24244; + if () goto @24274; + goto @24274; + @24244: + @24274: + r = ; + r = ; + r = ; + // pop try + @24392: + // (异常检查: 结束) + goto @24459; + @24396: + if () goto @24409; + goto @24425; + @24409: + @24425: + r = ; + if () goto @24440; + goto @24456; + @24440: + @24456: + r = ; + @24459: + = ; + = ; + @24502: + // closure sub_23721(p0->r3) caps=[r11<-r6] target=@23721 + r = ; + r = ; + = ; + = ; + = ; + = ; + @24672: + // closure sub_22638(p0->r3, p1->r4, p2->r5) caps=[] target=@22638 + = ; + goto @25068; + var r2; + var r3; + var r4; + var r5; + goto @25059; + var r2; + var r3; + var r4; + var r5; + var r6; + r = ; + r = ; + r = ; + r = ; + if () goto @24869; + goto @25057; + @24869: + r = ; + if () goto @24942; + goto @24975; + @24942: + @24975: + if () goto @24981; + goto @24984; + @24981: + @24984: + r = ; + if () goto @25041; + goto @25048; + @25041: + @25048: + if () goto @25054; + goto @25057; + @25054: + @25057: + @25059: + // closure sub_24726() caps=[] target=@24726 + = ; + @25068: + // closure sub_24689(p0->r3, p1->r4, p2->r5) caps=[] target=@24689 + = ; + goto @25196; + var r2; + var r3; + var r4; + var r5; + var r6; + r = ; + goto @25182; + var r2; + = ; + @25182: + // closure sub_25154() caps=[r3<-r6] target=@25154 + = ; + = ; + @25196: + // closure sub_25085(p0->r3, p1->r4, p2->r5) caps=[] target=@25085 + = ; + goto @25452; + var r2; + var r3; + var r4; + var r5; + var r6; + if () goto @25315; + goto @25400; + @25315: + @25400: + r = ; + = ; + @25452: + // closure sub_25213(p0->r3, p1->r4, p2->r5) caps=[] target=@25213 + = ; + goto @25819; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + r = ; + r = ; + goto @25805; + var r2; + var r3; + var r4; + r = ; + if () goto @25603; + goto @25621; + @25603: + @25621: + if () goto @25627; + goto @25756; + @25627: + r = ; + @25635: + if () goto @25663; + goto @25711; + @25663: + r = ; + r = ; + goto @25635; + @25711: + r = ; + @25756: + = ; + = ; + = ; + @25805: + // closure sub_25582() caps=[r5<-r7] target=@25582 + = ; + = ; + @25819: + // closure sub_25469(p0->r3, p1->r4, p2->r5) caps=[] target=@25469 + = ; + goto @27917; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r9; + var r10; + var r11; + var r12; + var r13; + var r14; + var r15; + goto @27620; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + r = ; + r = ; + if () goto @25942; + goto @25946; + @25942: + @25946: + if () goto @25995; + @25995: + r = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + goto @27365; + var r2; + var r3; + var r4; + goto @27204; + @27194: + try {} catch -> @27362 (var r0) + // pop try + goto @27362; + @27204: + var r5; + try {} catch -> @27194 (var r5) + r = ; + if () goto @27355; + goto @27359; + @27355: + // pop try + @27359: + // pop try + @27362: + // (异常检查: 结束) + @27365: + // closure sub_27183() caps=[] target=@27183 + = ; + = ; + = ; + = ; + = ; + = ; + if () goto @27447; + goto @27533; + @27447: + @27533: + = ; + r = ; + r = ; + @27546: + if () goto @27574; + goto @27617; + @27574: + if () goto @27587; + goto @27594; + @27587: + @27594: + r = ; + goto @27546; + @27617: + @27620: + // closure sub_25869() caps=[r8<-r12, r9<-r11, r10<-r13, r11<-r6, r12<-r7, r13<-r8, r14<-r9, r15<-r10] target=@25869 + r = ; + r = ; + r = ; + r = ; + r = ; + r = ; + r = ; + r = ; + r = ; + goto @27759; + @27731: + try {} catch -> @27771 (var r0) + r = ; + // pop try + goto @27771; + @27759: + var r16; + try {} catch -> @27731 (var r16) + // pop try + @27771: + // (异常检查: 结束) + goto @27903; + var r2; + var r3; + var r4; + goto @27861; + @27829: + try {} catch -> @27900 (var r0) + = ; + // pop try + goto @27900; + @27861: + var r5; + try {} catch -> @27829 (var r5) + r = ; + = ; + // pop try + @27900: + // (异常检查: 结束) + @27903: + // closure sub_27818() caps=[r6<-r15] target=@27818 + = ; + = ; + @27917: + // closure sub_25836(p0->r3, p1->r4, p2->r5) caps=[] target=@25836 + = ; + goto @28514; + var r2; + var r3; + var r4; + var r5; + var r6; + goto @28480; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + goto @27978; + @27968: + try {} catch -> @28477 (var r0) + // pop try + goto @28477; + @27978: + var r9; + try {} catch -> @27968 (var r9) + r = ; + r = ; + r = ; + r = ; + if () goto @28283; + @28283: + if () goto @28287; + @28287: + r = ; + r = ; + r = ; + r = ; + if () goto @28442; + goto @28475; + @28442: + @28475: + // pop try + @28477: + // (异常检查: 结束) + @28480: + // closure sub_27949() caps=[] target=@27949 + r = ; + = ; + @28514: + // closure sub_27934(p0->r3, p1->r4, p2->r5) caps=[] target=@27934 + = ; + goto @29427; + var r2; + var r3; + var r4; + var r5; + var r6; + goto @29393; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r9; + var r10; + var r11; + goto @28581; + @28571: + try {} catch -> @29390 (var r0) + // pop try + goto @29390; + @28581: + var r12; + try {} catch -> @28571 (var r12) + r = ; + r = ; + r = ; + r = ; + r = ; + r = ; + = ; + if () goto @29047; + @29047: + r = ; + r = ; + r = ; + r = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + = ; + r = ; + if () goto @29384; + goto @29388; + @29384: + @29388: + // pop try + @29390: + // (异常检查: 结束) + @29393: + // closure sub_28546() caps=[] target=@28546 + r = ; + = ; + @29427: + // closure sub_28531(p0->r3, p1->r4, p2->r5) caps=[] target=@28531 + = ; + goto @29956; + var r2; + var r3; + var r4; + var r5; + var r6; + goto @29922; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + goto @29488; + @29478: + try {} catch -> @29919 (var r0) + // pop try + goto @29919; + @29488: + var r9; + try {} catch -> @29478 (var r9) + r = ; + = ; + r = ; + r = ; + r = ; + if () goto @29793; + @29793: + r = ; + r = ; + r = ; + // pop try + @29919: + // (异常检查: 结束) + @29922: + // closure sub_29459() caps=[] target=@29459 + r = ; + = ; + @29956: + // closure sub_29444(p0->r3, p1->r4, p2->r5) caps=[] target=@29444 + = ; + goto @30028; + var r2; + var r3; + var r4; + var r5; + var r6; + goto @29994; + var r2; + @29994: + // closure sub_29988() caps=[] target=@29988 + r = ; + = ; + @30028: + // closure sub_29973(p0->r3, p1->r4, p2->r5) caps=[] target=@29973 + = ; + goto @30972; + var r2; + var r3; + var r4; + var r5; + var r6; + goto @30938; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r6; + var r9; + goto @30093; + @30083: + try {} catch -> @30935 (var r0) + // pop try + goto @30935; + @30093: + var r10; + try {} catch -> @30083 (var r10) + r = ; + r = ; + r = ; + r = ; + r = ; + r = ; + r = ; + if () goto @30813; + @30813: + if () goto @30817; + @30817: + r = ; + r = ; + r = ; + // pop try + @30935: + // (异常检查: 结束) + @30938: + // closure sub_30060() caps=[] target=@30060 + r = ; + = ; + @30972: + // closure sub_30045(p0->r3, p1->r4, p2->r5) caps=[] target=@30045 + = ; + goto @31401; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r9; + r = ; + if () goto @31041; + goto @31067; + @31041: + @31067: + r = ; + r = ; + goto @31088; + @31080: + try {} catch -> @31271 (var r0) + // pop try + goto @31271; + @31088: + var r10; + try {} catch -> @31080 (var r10) + if () goto @31143; + goto @31269; + @31143: + goto @31256; + var r2; + r = ; + @31256: + // closure sub_31239() caps=[r3<-r8, r4<-r7] target=@31239 + = ; + @31269: + // pop try + @31271: + // (异常检查: 结束) + goto @31385; + var r2; + var r3; + r = ; + if () goto @31378; + goto @31381; + @31378: + @31381: + = ; + @31385: + // closure sub_31318() caps=[r4<-r6, r5<-r8] target=@31318 + = ; + = ; + @31401: + // closure sub_30989(p0->r3, p1->r4, p2->r5) caps=[] target=@30989 + = ; + goto @32423; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + goto @32145; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + goto @31494; + @31454: + try {} catch -> @32142 (var r0) + r = ; + // pop try + goto @32142; + @31494: + var r8; + try {} catch -> @31454 (var r8) + r = ; + r = ; + goto @31585; + @31574: + try {} catch -> @31627 (var r0) + // pop try + // pop try + goto @31627; + @31585: + var r10; + try {} catch -> @31574 (var r10) + r = ; + // pop try + @31627: + // (异常检查: 结束) + r = ; + = ; + = ; + = ; + = ; + = ; + = ; + // pop try + @32142: + // (异常检查: 结束) + @32145: + // closure sub_31437() caps=[r9<-r6, r11<-r8] target=@31437 + r = ; + goto @32303; + var r2; + var r3; + var r4; + r = ; + if () goto @32203; + goto @32207; + @32203: + @32207: + @32303: + // closure sub_32161(p0->r3) caps=[] target=@32161 + r = ; + r = ; + goto @32407; + var r2; + if () goto @32403; + r = ; + @32403: + = ; + @32407: + // closure sub_32365() caps=[r3<-r6, r4<-r7] target=@32365 + = ; + = ; + @32423: + // closure sub_31418(p0->r3, p1->r4, p2->r5) caps=[] target=@31418 + = ; + goto @32861; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r9; + var r10; + goto @32707; + var r2; + var r3; + var r4; + if () goto @32480; + goto @32483; + @32480: + @32483: + r = ; + goto @32532; + @32492: + try {} catch -> @32703 (var r0) + r = ; + // pop try + goto @32703; + @32532: + var r6; + try {} catch -> @32492 (var r6) + r = ; + // pop try + @32703: + // (异常检查: 结束) + @32707: + // closure sub_32463() caps=[r5<-r8, r7<-r7] target=@32463 + r = ; + r = ; + r = ; + r = ; + r = ; + goto @32845; + var r2; + if () goto @32841; + r = ; + @32841: + = ; + @32845: + // closure sub_32803() caps=[r3<-r9, r4<-r10] target=@32803 + = ; + = ; + @32861: + // closure sub_32440(p0->r3, p1->r4, p2->r5) caps=[] target=@32440 + = ; + goto @33784; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r7; + r = ; + goto @32912; + @32904: + try {} catch -> @33050 (var r0) + // pop try + goto @33050; + @32912: + var r8; + try {} catch -> @32904 (var r8) + if () goto @32928; + goto @33049; + @32928: + goto @32940; + @32932: + try {} catch -> @32967 (var r0) + // pop try + goto @32967; + @32940: + var r9; + try {} catch -> @32932 (var r9) + = ; + // pop try + @32967: + // (异常检查: 结束) + if () goto @33009; + goto @33017; + @33009: + r = ; + @33017: + @33049: + // pop try + @33050: + // (异常检查: 结束) + goto @33770; + var r2; + var r3; + var r4; + var r5; + goto @33125; + @33110: + try {} catch -> @33745 (var r0) + r = ; + // pop try + goto @33745; + @33125: + var r6; + try {} catch -> @33110 (var r6) + r = ; + r = ; + if () goto @33319; + @33319: + if () goto @33350; + @33350: + if () goto @33736; + if () goto @33498; + @33498: + if () goto @33589; + goto @33597; + @33589: + r = ; + @33597: + if () goto @33704; + @33704: + goto @33744; + @33736: + r = ; + @33744: + // pop try + @33745: + // (异常检查: 结束) + = ; + @33770: + // closure sub_33097() caps=[r7<-r6] target=@33097 + = ; + = ; + @33784: + // closure sub_32878(p0->r3, p1->r4, p2->r5) caps=[] target=@32878 + = ; + goto @34368; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + goto @34231; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + goto @33847; + @33837: + try {} catch -> @34228 (var r0) + // pop try + goto @34228; + @33847: + var r8; + try {} catch -> @33837 (var r8) + if () goto @33942; + goto @34027; + @33942: + @34027: + r = ; + r = ; + r = ; + r = ; + r = ; + if () goto @34168; + r = ; + r = ; + goto @34223; + @34168: + r = ; + r = ; + r = ; + @34223: + // pop try + @34228: + // (异常检查: 结束) + @34231: + // closure sub_33820() caps=[] target=@33820 + r = ; + r = ; + goto @34257; + @34249: + try {} catch -> @34263 (var r0) + // pop try + goto @34263; + @34257: + var r9; + try {} catch -> @34249 (var r9) + // pop try + @34263: + // (异常检查: 结束) + goto @34352; + var r2; + if () goto @34348; + r = ; + @34348: + = ; + @34352: + // closure sub_34310() caps=[r3<-r6, r4<-r8] target=@34310 + = ; + = ; + @34368: + // closure sub_33801(p0->r3, p1->r4, p2->r5) caps=[] target=@33801 + = ; + goto @34676; + var r2; + var r3; + var r4; + var r5; + goto @34664; + var r2; + if () goto @34551; + goto @34636; + @34551: + @34636: + = ; + @34664: + // closure sub_34441() caps=[] target=@34441 + = ; + = ; + @34676: + // closure sub_34385(p0->r3, p1->r4, p2->r5) caps=[] target=@34385 + = ; + goto @34961; + var r2; + var r3; + var r4; + var r5; + var r6; + if () goto @34788; + @34788: + if () goto @34806; + @34806: + r = ; + if () goto @34835; + goto @34873; + @34835: + r = ; + @34873: + goto @34947; + var r2; + = ; + @34947: + // closure sub_34919() caps=[r3<-r6] target=@34919 + = ; + = ; + @34961: + // closure sub_34693(p0->r3, p1->r4, p2->r5) caps=[] target=@34693 + = ; + goto @35367; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r9; + goto @35207; + var r2; + if () goto @35093; + goto @35178; + @35093: + @35178: + r = ; + @35207: + // closure sub_34999() caps=[r3<-r8, r4<-r7] target=@34999 + r = ; + r = ; + r = ; + r = ; + goto @35353; + var r2; + = ; + @35353: + // closure sub_35325() caps=[r3<-r8] target=@35325 + = ; + = ; + @35367: + // closure sub_34978(p0->r3, p1->r4, p2->r5) caps=[] target=@34978 + = ; + goto @35582; + var r2; + var r3; + var r4; + var r5; + var r6; + r = ; + goto @35568; + var r2; + if () goto @35543; + goto @35547; + @35543: + @35547: + = ; + = ; + = ; + @35568: + // closure sub_35510() caps=[r3<-r6] target=@35510 + = ; + = ; + @35582: + // closure sub_35384(p0->r3, p1->r4, p2->r5) caps=[] target=@35384 + = ; + goto @35729; + var r2; + var r3; + var r4; + var r5; + goto @35717; + var r2; + var r3; + r = ; + = ; + @35717: + // closure sub_35655() caps=[] target=@35655 + = ; + = ; + @35729: + // closure sub_35599(p0->r3, p1->r4, p2->r5) caps=[] target=@35599 + = ; + goto @35938; + var r2; + var r3; + var r4; + var r5; + var r6; + if () goto @35843; + @35843: + if () goto @35847; + @35847: + r = ; + goto @35924; + var r2; + = ; + @35924: + // closure sub_35896() caps=[r3<-r6] target=@35896 + = ; + = ; + @35938: + // closure sub_35746(p0->r3, p1->r4, p2->r5) caps=[] target=@35746 + = ; + goto @36068; + var r2; + var r3; + var r4; + var r5; + var r6; + r = ; + goto @36054; + var r2; + = ; + @36054: + // closure sub_36024() caps=[r3<-r6] target=@36024 + = ; + = ; + @36068: + // closure sub_35955(p0->r3, p1->r4, p2->r5) caps=[] target=@35955 + = ; + goto @36182; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + goto @36135; + var r2; + var r3; + r = ; + if () goto @36128; + goto @36132; + @36128: + @36132: + @36135: + // closure sub_36102() caps=[r4<-r6] target=@36102 + r = ; + r = ; + = ; + @36182: + // closure sub_36085(p0->r3, p1->r4, p2->r5) caps=[] target=@36085 + = ; + goto @36295; + var r2; + var r3; + var r4; + var r5; + goto @36283; + var r2; + = ; + @36283: + // closure sub_36255() caps=[] target=@36255 + = ; + = ; + @36295: + // closure sub_36199(p0->r3, p1->r4, p2->r5) caps=[] target=@36199 + = ; + goto @43551; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r9; + var r10; + var r11; + var r12; + var r13; + var r14; + var r15; + var r16; + var r17; + var r18; + var r19; + var r20; + goto @36449; + var r2; + var r3; + goto @36441; + var r2; + var r3; + @36441: + // closure sub_36406(p0->r3) caps=[] target=@36406 + @36449: + // closure sub_36355(p0->r3) caps=[] target=@36355 + r = ; + goto @36569; + var r2; + var r3; + var r4; + var r5; + var r6; + r = ; + if () goto @36561; + if () goto @36530; + @36530: + if () goto @36542; + @36542: + if () goto @36556; + @36556: + goto @36563; + @36561: + @36563: + r = ; + @36569: + // closure sub_36462(p0->r3, p1->r4) caps=[r7<-r9] target=@36462 + r = ; + goto @36637; + var r2; + @36637: + // closure sub_36585() caps=[r3<-r10] target=@36585 + r = ; + goto @36708; + var r2; + @36708: + // closure sub_36651() caps=[r3<-r7] target=@36651 + r = ; + goto @36748; + var r2; + @36748: + // closure sub_36722() caps=[r3<-r8] target=@36722 + r = ; + goto @38408; + var r2; + var r3; + var r4; + var r5; + var r6; + var r6; + r = ; + goto @36793; + @36785: + try {} catch -> @38404 (var r0) + // pop try + goto @38404; + @36793: + var r7; + try {} catch -> @36785 (var r7) + r = ; + = ; + r = ; + = ; + goto @37589; + @37581: + try {} catch -> @38326 (var r0) + // pop try + goto @38326; + @37589: + var r8; + try {} catch -> @37581 (var r8) + if () goto @37778; + goto @37956; + @37778: + @37956: + if () goto @37961; + goto @38137; + @37961: + @38137: + if () goto @38142; + goto @38322; + @38142: + @38322: + r = ; + // pop try + @38326: + // (异常检查: 结束) + // pop try + @38404: + // (异常检查: 结束) + @38408: + // closure sub_36762() caps=[] target=@36762 + r = ; + goto @39860; + var r2; + var r3; + var r4; + var r5; + var r6; + var r6; + r = ; + goto @38451; + @38443: + try {} catch -> @39856 (var r0) + // pop try + goto @39856; + @38451: + var r7; + try {} catch -> @38443 (var r7) + r = ; + = ; + r = ; + = ; + goto @39411; + @39403: + try {} catch -> @39778 (var r0) + // pop try + goto @39778; + @39411: + var r8; + try {} catch -> @39403 (var r8) + if () goto @39602; + goto @39774; + @39602: + @39774: + r = ; + // pop try + @39778: + // (异常检查: 结束) + // pop try + @39856: + // (异常检查: 结束) + @39860: + // closure sub_38420() caps=[] target=@38420 + r = ; + goto @40274; + var r2; + var r3; + var r4; + r = ; + goto @39897; + @39889: + try {} catch -> @40270 (var r0) + // pop try + goto @40270; + @39897: + var r5; + try {} catch -> @39889 (var r5) + if () goto @40133; + @40133: + if () goto @40266; + @40266: + r = ; + // pop try + @40270: + // (异常检查: 结束) + @40274: + // closure sub_39872() caps=[] target=@39872 + r = ; + goto @40583; + var r2; + var r3; + var r4; + r = ; + goto @40311; + @40303: + try {} catch -> @40579 (var r0) + // pop try + goto @40579; + @40311: + var r5; + try {} catch -> @40303 (var r5) + if () goto @40575; + @40575: + r = ; + // pop try + @40579: + // (异常检查: 结束) + @40583: + // closure sub_40286() caps=[] target=@40286 + r = ; + goto @41550; + var r2; + var r3; + var r4; + var r5; + var r6; + r = ; + goto @40624; + @40616: + try {} catch -> @41546 (var r0) + // pop try + goto @41546; + @40624: + var r7; + try {} catch -> @40616 (var r7) + r = ; + = ; + r = ; + if () goto @41363; + @41363: + if () goto @41401; + @41401: + if () goto @41447; + @41447: + = ; + r = ; + // pop try + @41546: + // (异常检查: 结束) + @41550: + // closure sub_40595() caps=[] target=@40595 + r = ; + goto @41623; + var r2; + @41623: + // closure sub_41562() caps=[] target=@41562 + r = ; + goto @41732; + var r2; + if () goto @41692; + goto @41731; + @41692: + @41731: + @41732: + // closure sub_41635() caps=[] target=@41635 + r = ; + goto @42100; + var r2; + var r3; + var r4; + r = ; + r = ; + goto @42090; + var r2; + var r3; + var r4; + if () goto @41902; + goto @41905; + @41902: + @41905: + goto @41993; + var r2; + var r3; + @41993: + // closure sub_41958(p0->r3) caps=[] target=@41958 + r = ; + r = ; + @42025: + r = ; + if () goto @42050; + goto @42088; + @42050: + if () goto @42082; + goto @42025; + @42082: + goto @42025; + @42088: + @42090: + // closure sub_41870(p0->r3) caps=[r5<-r3, r6<-r4] target=@41870 + @42100: + // closure sub_41746() caps=[] target=@41746 + r = ; + goto @42635; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r9; + var r10; + r = ; + = ; + r = ; + r = ; + @42238: + if () goto @42266; + goto @42325; + @42266: + r = ; + goto @42238; + @42317: + try {} catch -> @42627 (var r0) + // pop try + goto @42627; + @42325: + var r11; + try {} catch -> @42317 (var r11) + if () goto @42358; + goto @42400; + @42358: + @42400: + if () goto @42406; + goto @42626; + @42406: + r = ; + r = ; + @42420: + if () goto @42448; + goto @42626; + @42448: + if () goto @42533; + r = ; + goto @42587; + @42533: + r = ; + @42587: + if () goto @42598; + goto @42603; + @42598: + // pop try + @42603: + r = ; + goto @42420; + @42626: + // pop try + @42627: + // (异常检查: 结束) + @42635: + // closure sub_42114(p0->r3, p1->r4) caps=[r12<-r6] target=@42114 + r = ; + goto @42918; + var r2; + var r3; + var r4; + var r5; + var r6; + r = ; + goto @42680; + @42672: + try {} catch -> @42914 (var r0) + // pop try + goto @42914; + @42680: + var r7; + try {} catch -> @42672 (var r7) + r = ; + = ; + r = ; + // pop try + @42914: + // (异常检查: 结束) + @42918: + // closure sub_42651(p0->r3) caps=[] target=@42651 + r = ; + goto @43519; + var r2; + var r3; + var r4; + var r5; + goto @42993; + @42985: + try {} catch -> @43494 (var r0) + // pop try + goto @43494; + @42993: + var r6; + try {} catch -> @42985 (var r6) + r = ; + r = ; + = ; + // pop try + @43494: + // (异常检查: 结束) + = ; + @43519: + // closure sub_42972() caps=[r7<-r11, r8<-r12, r9<-r18, r10<-r13, r11<-r14, r12<-r19, r13<-r16, r14<-r17, r15<-r20, r16<-r15] target=@42972 + = ; + = ; + @43551: + // closure sub_36312(p0->r3, p1->r4, p2->r5) caps=[] target=@36312 + = ; + goto @43700; + var r2; + var r3; + var r4; + var r5; + goto @43688; + var r2; + var r3; + r = ; + = ; + @43688: + // closure sub_43624() caps=[] target=@43624 + = ; + = ; + @43700: + // closure sub_43568(p0->r3, p1->r4, p2->r5) caps=[] target=@43568 + = ; + goto @43974; + var r2; + var r3; + var r4; + var r5; + var r6; + r = ; + goto @43798; + var r2; + @43798: + // closure sub_43792() caps=[] target=@43792 + = ; + goto @43908; + var r2; + = ; + = ; + = ; + @43908: + // closure sub_43817() caps=[r3<-r6] target=@43817 + = ; + goto @43960; + var r2; + = ; + @43960: + // closure sub_43933() caps=[r3<-r6] target=@43933 + = ; + = ; + @43974: + // closure sub_43717(p0->r3, p1->r4, p2->r5) caps=[] target=@43717 + = ; + goto @44142; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + r = ; + r = ; + goto @44128; + var r2; + = ; + @44128: + // closure sub_44100() caps=[r3<-r7] target=@44100 + = ; + = ; + @44142: + // closure sub_43991(p0->r3, p1->r4, p2->r5) caps=[] target=@43991 + = ; + goto @44513; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + goto @44299; + var r2; + var r3; + var r3; + goto @44242; + @44187: + try {} catch -> @44296 (var r0) + goto @44202; + @44194: + try {} catch -> @44237 (var r0) + // pop try + goto @44237; + @44202: + var r5; + try {} catch -> @44194 (var r5) + // pop try + // pop try + @44237: + // (异常检查: 结束) + // pop try + goto @44296; + @44242: + var r4; + try {} catch -> @44187 (var r4) + // pop try + @44296: + // (异常检查: 结束) + @44299: + // closure sub_44176() caps=[] target=@44176 + r = ; + r = ; + goto @44497; + var r2; + var r3; + var r4; + r = ; + goto @44385; + @44377: + try {} catch -> @44472 (var r0) + // pop try + goto @44472; + @44385: + var r6; + try {} catch -> @44377 (var r6) + r = ; + if () goto @44459; + goto @44471; + @44459: + r = ; + @44471: + // pop try + @44472: + // (异常检查: 结束) + = ; + @44497: + // closure sub_44360() caps=[r5<-r6, r7<-r7] target=@44360 + = ; + = ; + @44513: + // closure sub_44159(p0->r3, p1->r4, p2->r5) caps=[] target=@44159 + = ; + goto @44893; + var r2; + var r3; + var r4; + var r5; + var r6; + var r7; + var r8; + var r9; + var r10; + var r11; + goto @44570; + var r2; + var r3; + r = ; + @44570: + // closure sub_44555(p0->r3) caps=[r4<-r7] target=@44555 + r = ; + goto @44592; + var r2; + @44592: + // closure sub_44585() caps=[r3<-r7] target=@44585 + r = ; + goto @44704; + var r2; + var r3; + var r3; + goto @44625; + @44617: + try {} catch -> @44701 (var r0) + // pop try + goto @44701; + @44625: + var r4; + try {} catch -> @44617 (var r4) + // pop try + @44701: + // (异常检查: 结束) + @44704: + // closure sub_44606(p0->r3) caps=[r5<-r8, r6<-r6] target=@44606 + r = ; + goto @44778; + var r2; + var r3; + goto @44745; + @44730: + try {} catch -> @44775 (var r0) + // pop try + goto @44775; + @44745: + var r4; + try {} catch -> @44730 (var r4) + throw ; + // pop try + @44775: + // (异常检查: 结束) + @44778: + // closure sub_44721() caps=[r5<-r10] target=@44721 + r = ; + r = ; + r = ; + = ; + = ; + = ; + @44893: + // closure sub_44530(p0->r3, p1->r4, p2->r5) caps=[] target=@44530 + = ; + goto @45281; + var r2; + var r3; + var r4; + var r5; + var r6; + goto @45246; + var r2; + var r3; + var r4; + var r5; + var r6; + r = ; + if () goto @44950; + goto @44966; + @44950: + @44966: + if () goto @44972; + goto @45162; + @44972: + r = ; + goto @45162; + @45154: + try {} catch -> @45242 (var r0) + // pop try + goto @45242; + @45162: + var r7; + try {} catch -> @45154 (var r7) + r = ; + if () goto @45226; + goto @45241; + @45226: + r = ; + @45241: + // pop try + @45242: + // (异常检查: 结束) + @45246: + // closure sub_44925(p0->r3) caps=[] target=@44925 + r = ; + = ; + @45281: + // closure sub_44910(p0->r3, p1->r4, p2->r5) caps=[] target=@44910 + = ; + goto @45621; + var r2; + var r3; + var r4; + var r5; + var r6; + goto @45587; + var r2; + var r3; + r = ; + = ; + @45587: + // closure sub_45313() caps=[] target=@45313 + r = ; + = ; + @45621: + // closure sub_45298(p0->r3, p1->r4, p2->r5) caps=[] target=@45298 + = ; +} diff --git a/tools/tdc_lift.py b/tools/tdc_lift.py index 77d3bbf..1be99f5 100644 --- a/tools/tdc_lift.py +++ b/tools/tdc_lift.py @@ -87,39 +87,72 @@ class Lifter: return self.funcs[target]["name"] def _lift_func(self, entry: int, name: str): - all_ins = disassemble_cfg(self.z, entry) - insts = {i["pc"]: i for i in all_ins if i["pc"] >= entry} - # 只在"跳转目标/入口/洞"处打标签, 避免每行一个标签 + insts = {i["pc"]: i for i in disassemble_cfg(self.z, entry) if i["pc"] >= entry} + # ---------- 第一遍: 沿执行流传播"求值栈快照"(DFS, 每 pc 记录首次到达时的栈) ---------- + state: Dict[int, List[Expr]] = {entry: []} + seen: Dict[int, bool] = {} + work = [entry] + while work: + pc = work.pop() + if pc in seen: + continue + st = list(state.get(pc, [])) + while pc in insts and pc not in seen: + seen[pc] = True + state.setdefault(pc, list(st)) # 每条 pc 都记录"进入时的栈" + ins = insts[pc] + self._emit(ins["op"], ins, pc, st, []) # 只改栈, 丢弃语句 + op = ins["op"] + ops = ins["operands"] or [] + nxt = self._next_pc(ins) + if op == OP_JUMP: + succ = [ops[0]] + elif op == OP_JUMP_IF_TRUE: + succ = [ops[0], nxt] + elif op in (19, 49): # RET_TRUE / THROW + succ = [] + else: + succ = [nxt] + for t in succ: + if t in insts and t not in state: + state[t] = list(st) + if t in insts and t not in seen: + work.append(t) + if succ != [nxt]: + break + pc = nxt + # ---------- 第二遍: 按地址序渲染 (块首用快照还原栈) ---------- targets = {entry} - for i in all_ins: - for o in i.get("operands") or []: + for i in insts.values(): + for o in (i.get("operands") or []): if isinstance(o, int) and o in insts: targets.add(o) - # 只保留可达块; 逐块输出 self.out.append("") self.out.append(f"function {name}() {{") - stack: List[Expr] = [] pending: List[str] = [] - last_pc = None - - def flush(): - for s in pending: - self.out.append(" " + s) - pending.clear() - - pcs = sorted(insts) - for pc in pcs: + for pc in sorted(insts): ins = insts[pc] - op = ins["op"] - if op is None: + if ins["op"] is None: continue + st = list(state.get(pc, [])) if pc in targets: - flush() - self.out.append(f" @{pc:05d}:") # 目标标签 - self._emit(op, ins, pc, stack, pending) - flush() + for x in pending: + self.out.append(" " + x) + pending.clear() + self.out.append(f" @{pc:05d}:") + self._emit(ins["op"], ins, pc, st, pending) + for x in pending: + self.out.append(" " + x) self.out.append("}") + def _next_pc(self, ins) -> int: + from tdc_disasm import ARITY, DYNAMIC_ARITY + op = ins["op"]; ops = ins["operands"] or [] + if op == OP_CREATE_CLOSURE: + capn = self.z[ins["pc"] + 2]; parn = self.z[ins["pc"] + 3] + return ins["pc"] + 1 + 3 + 2 * capn + parn + return ins["pc"] + 1 + ARITY.get(op, 0) + def _fallthrough(self, ins) -> int: op = ins["op"] if op == OP_JUMP: