UNPKG

@typecad/typecad

Version:

🤖programmatically 💥create 🛰️hardware

1 lines 48.5 kB
import a10_0x3f0dd6 from'chalk';function a10_0x87b4(){const _0x845f95=['resolve','TYPECAD_DEBUG','debug','_getStagedComponents','number','min','max','line','end','forEach','elements','type','minX','maxX','minY','maxY','size','layers','\x20(called\x20from\x20','algorithm','function','file','from','routes','getCallSite','nodes','Excluded\x20connection\x20',':\x20\x27from\x27\x20and\x20\x27to\x27\x20pins\x20are\x20the\x20same\x20(','map','np_thru_hole','getPadCenter','filter','layer','F.Cu','length','yellow','Nodes','owner','isArray','push','[PCB]\x20Found\x20','Schematic','reference',',\x20searching\x20','[PCB]\x20No\x20schematic\x20available\x20for\x20net\x20inference\x20(Schematic:\x20','options','current','copper_thickness','blue','mm\x20for\x20','A\x20(source:\x20','_getStagedOutlines','gridResolution','grLines','[PCB]\x20Board\x20bounds:\x20(',')\x20to\x20(','reason','[PCB]\x20Grid\x20configurator\x20for\x20algorithm\x20\x27','occupancyPercent','getPadGeometry','center','unknown','cpus','viaCost','heuristicWeight','add','\x20provided\x20route(s)','routeDetails','getElements','uuid','[PCB]\x20Removing\x20','toFixed',')\x20->\x20(','[PCB]\x20Inferred\x20manual\x20route:\x20','set','[PCB]\x20Added\x20manual\x20route\x20with\x20','\x20blocking\x20segments\x20(','manual','sort',',\x20length=',',\x20segments=','success','stringify','segments','[PCB]\x20Creating\x20','abs','details','start','width','viaCount','error','[PCB]\x20Routing\x20pair\x20','[PCB]\x20Using\x20manual\x20route:\x20','\x20<->\x20','path','name','waypoints','fastFallback','createRouter','maxStrideCells','_track','temp-route-','\x20track\x20segments\x20as\x20obstacles\x20for\x20subsequent\x20routes','gray','stagedOutlines','tracks','\x20TrackBuilder(s)\x20with\x20','\x20total\x20elements','locked','_deferStaging','[PCB]\x20Skipping\x20builder\x20',',\x20outlines_public=','[PCB]\x20Autoroute\x20complete:\x20','[PCB]\x20Failed\x20routes:','Unknown\x20error','[PCB]\x20\x20\x20Route\x20','warn','message','[PCB]\x20Checking\x20','some','\x20existing\x20TrackBuilder(s)\x20from\x20provided\x20route','completedCount','updates','newLength','\x20routes\x20updated,\x20','routeCount'];a10_0x87b4=function(){return _0x845f95;};return a10_0x87b4();}import{PadResolver}from'../routing/shared/pad_resolver';import{RoutingGrid}from'../routing/shared/routing_grid';import{ObstacleBuilder}from'../routing/shared/obstacle_builder';import{DebugVisualizer}from'../routing/utils/debug_visualizer';import a10_0x25916f from'../logging.js';let _autorouteLock=Promise[a10_0xe9b2df(-0x187,-0x181)]();async function enqueueAutoroute(_0x4a8c67){const _0x5dbd49=_autorouteLock['then'](()=>_0x4a8c67(),()=>_0x4a8c67());return _autorouteLock=_0x5dbd49['then'](()=>undefined,()=>undefined),_0x5dbd49;}import{calculateBoardBounds,calculateMinTraceWidth}from'./pcb_routing_calculations';import{pinToIdentifier,pinsMatch,connectionMatches,validatePin}from'./pcb_routing_helpers';import{pathToTrackBuilder}from'./pcb_routing_core';import{collectManualViaFreeLocations}from'./manual_via_helpers';import a10_0x32bc0e from'os';function a10_0x1651(_0x87b412,_0x16511f){const _0x1b6982=a10_0x87b4();return a10_0x1651=function(_0x31ff26,_0x372390){_0x31ff26=_0x31ff26-0x0;let _0x388fa4=_0x1b6982[_0x31ff26];return _0x388fa4;},a10_0x1651(_0x87b412,_0x16511f);}let LengthMatcher;try{LengthMatcher=require('@typecad/typecad-astar')['LengthMatcher'];}catch(a10_0x3b7f8c){LengthMatcher=null;}function debugLog(_0x2197a2,_0x131757){function _0x274397(_0x536b9f,_0x3ba964){return a10_0x1651(_0x536b9f-0x118,_0x3ba964);}_0x2197a2&&process['env'][_0x274397(0x119,0x143)]==='1'&&a10_0x25916f[_0x274397(0x11a,0x146)](_0x131757);}function a10_0xe9b2df(_0x458bd3,_0x305a13){return a10_0x1651(_0x305a13- -0x181,_0x458bd3);}function collectComponentsForBounds(_0x5b42d6,_0x2d6b2a){function _0x5d55f3(_0x21919c,_0x57ddda){return a10_0x1651(_0x57ddda-0x1ef,_0x21919c);}const _0x884e7b=new Set(_0x2d6b2a),_0x10b1a1=_0x5b42d6['_getComponents']?.()||_0x5b42d6['#components']||[];_0x10b1a1['forEach'](_0x5aa5ca=>_0x884e7b['add'](_0x5aa5ca));const _0x2d0b82=_0x5b42d6[_0x5d55f3(0x224,0x1f2)]?.()||_0x5b42d6['#stagedComponents']||[];return{'components':Array['from'](_0x884e7b),'stagedComponents':_0x2d0b82};}function expandBoundsToIncludeTracks(_0x47e105,_0x3ae60c,_0x3772dd,_0x22ce53){let _0x3971b7=Infinity,_0x53082e=Infinity;function _0x493257(_0x1fe50d,_0x4d7eb6){return a10_0x1651(_0x1fe50d-0x19d,_0x4d7eb6);}let _0x60d636=-Infinity,_0x194261=-Infinity;const _0x2e54ff=(_0x49be36,_0x57a79d)=>{if(typeof _0x49be36!=='number'||typeof _0x57a79d!==_0x4f4f04(0x35f,0x344))return;_0x3971b7=Math[_0x4f4f04(0x360,0x35e)](_0x3971b7,_0x49be36),_0x60d636=Math[_0x4f4f04(0x361,0x34d)](_0x60d636,_0x49be36);function _0x4f4f04(_0x51ea7b,_0x468375){return a10_0x1651(_0x51ea7b-0x35b,_0x468375);}_0x53082e=Math['min'](_0x53082e,_0x57a79d),_0x194261=Math[_0x4f4f04(0x361,0x32d)](_0x194261,_0x57a79d);},_0x8f9aa6=_0x4cca5e=>{if(!_0x4cca5e||_0x4cca5e['type']!==_0x23a32d(0x55,0x8f))return;function _0x23a32d(_0x24c782,_0x181402){return a10_0x1651(_0x181402-0x88,_0x24c782);}_0x2e54ff(_0x4cca5e['start']?.['x'],_0x4cca5e['start']?.['y']),_0x2e54ff(_0x4cca5e['end']?.['x'],_0x4cca5e[_0x23a32d(0x73,0x90)]?.['y']);};(_0x3ae60c??[])[_0x493257(0x1a6,0x1c1)](_0x57deac=>_0x8f9aa6(_0x57deac)),(_0x3772dd??[])[_0x493257(0x1a6,0x1e2)](_0x23f58a=>{if(!_0x23f58a?.[_0x285fdc(-0x36b,-0x331)])return;function _0x285fdc(_0x26ebcf,_0x11c62a){return a10_0x1651(_0x26ebcf- -0x375,_0x11c62a);}for(const _0x36adff of _0x23f58a['elements']){_0x36adff[_0x285fdc(-0x36a,-0x333)]==='line'&&_0x8f9aa6(_0x36adff);}});if(!isFinite(_0x3971b7)||!isFinite(_0x60d636)||!isFinite(_0x53082e)||!isFinite(_0x194261))return _0x47e105;const _0x571f80={..._0x47e105},_0x1e9265=0.01,_0xd5ad32=Math['max'](0x0,Number['isFinite'](_0x22ce53)?_0x22ce53:0x0);return _0x3971b7<_0x47e105['minX']-_0x1e9265&&(_0x571f80['minX']=Math['min'](_0x571f80[_0x493257(0x1a9,0x195)],_0x3971b7-_0xd5ad32)),_0x60d636>_0x47e105['maxX']+_0x1e9265&&(_0x571f80['maxX']=Math['max'](_0x571f80[_0x493257(0x1aa,0x175)],_0x60d636+_0xd5ad32)),_0x53082e<_0x47e105[_0x493257(0x1ab,0x1d2)]-_0x1e9265&&(_0x571f80[_0x493257(0x1ab,0x1ac)]=Math['min'](_0x571f80['minY'],_0x53082e-_0xd5ad32)),_0x194261>_0x47e105[_0x493257(0x1ac,0x1ae)]+_0x1e9265&&(_0x571f80[_0x493257(0x1ac,0x1c8)]=Math[_0x493257(0x1a3,0x1b7)](_0x571f80['maxY'],_0x194261+_0xd5ad32)),_0x571f80;}function collectPadSummariesForRouting(_0x119076){function _0xf0a467(_0x3593a2,_0x25bf32){return a10_0x1651(_0x25bf32-0x2e2,_0x3593a2);}const _0x6afda1=[];for(const _0x584168 of _0x119076){const _0x2860ac=PadResolver['getAllPadGeometries'](_0x584168);for(const _0x48e0c6 of _0x2860ac){_0x6afda1['push']({'componentRef':_0x48e0c6['componentRef']??_0x584168['reference'],'size':{'width':_0x48e0c6['size']['width'],'height':_0x48e0c6[_0xf0a467(0x2ba,0x2f2)]['height']},'type':_0x48e0c6['type'],'layers':_0x48e0c6[_0xf0a467(0x308,0x2f3)]});}}return _0x6afda1;}export async function autoroute(_0x441c9c,_0x505a8a){return enqueueAutoroute(async()=>{if(!_0x505a8a['from']||!_0x505a8a['to']){const _0x503ff0=_0x441c9c['getCallSite'](),_0x2888c8=_0x503ff0?_0x2aa85d(0x136,0x106)+_0x503ff0['file']+':'+_0x503ff0['line']+')':'';throw new Error('autoroute()\x20requires\x20both\x20\x27from\x27\x20and\x20\x27to\x27\x20parameters'+_0x2888c8);}const _0x4ffd38=_0x505a8a[_0x2aa85d(0x137,0x12a)]??((()=>{function _0x50edef(_0x102251,_0x46a216){return a10_0x1651(_0x46a216-0x37b,_0x102251);}const _0x44df5b=typeof _0x441c9c['getRegisteredRouters']===_0x50edef(0x3c3,0x38f)?_0x441c9c['getRegisteredRouters']():[];if(_0x44df5b['length']===0x0){const _0x58d465=_0x441c9c['getCallSite'](),_0x1ad487=_0x58d465?'\x20(called\x20from\x20'+_0x58d465[_0x50edef(0x369,0x390)]+':'+_0x58d465[_0x50edef(0x3b9,0x382)]+')':'';throw new Error('autoroute()\x20requires\x20an\x20\x27algorithm\x27\x20but\x20no\x20routers\x20are\x20registered\x20with\x20this\x20PCB\x20instance.\x20Use\x20typecad.registerRouter()\x20first.'+_0x1ad487);}return _0x44df5b[0x0];})());debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue']('[PCB]\x20Starting\x20autoroute\x20operation'));const _0x240c6a=Array['isArray'](_0x505a8a[_0x2aa85d(0x13a,0x165)])?_0x505a8a[_0x2aa85d(0x13a,0x101)]:[_0x505a8a['from']],_0x58b8b0=Array['isArray'](_0x505a8a['to'])?_0x505a8a['to']:[_0x505a8a['to']],_0x3ae0b7=_0x505a8a[_0x2aa85d(0x13b,0x155)]||[],_0x4633b8=_0x505a8a['excludeConnections']||[];if(_0x3ae0b7['length']>0x0)for(let _0x20863b=0x0;_0x20863b<_0x3ae0b7['length'];_0x20863b++){const _0x3df0ff=_0x3ae0b7[_0x20863b],_0x1574a2='Route\x20'+(_0x20863b+0x1);let _0x526787;if(_0x3df0ff&&typeof _0x3df0ff==='object'&&'routeDetails'in _0x3df0ff&&Array['isArray'](_0x3df0ff['routeDetails'])){const _0x117463=_0x3df0ff['routeDetails'];if(_0x117463['length']===0x0||!_0x117463[0x0]['path']){const _0x421a3e=_0x441c9c[_0x2aa85d(0x13c,0x13b)](),_0x521096=_0x421a3e?'\x20(called\x20from\x20'+_0x421a3e['file']+':'+_0x421a3e[_0x2aa85d(0x12b,0x117)]+')':'';throw new Error(_0x1574a2+':\x20IAutorouteResult\x20has\x20no\x20path\x20data'+_0x521096);}_0x526787=_0x117463[0x0]['path'];}else _0x526787=_0x3df0ff;if(!_0x526787||!_0x526787[_0x2aa85d(0x13d,0x14b)]||_0x526787['nodes']['length']<0x2){const _0x1dd0a4=_0x441c9c['getCallSite'](),_0x2a69db=_0x1dd0a4?'\x20(called\x20from\x20'+_0x1dd0a4['file']+':'+_0x1dd0a4['line']+')':'';throw new Error(_0x1574a2+':\x20Path\x20must\x20have\x20at\x20least\x202\x20nodes'+_0x2a69db);}}if(_0x4633b8['length']>0x0)for(let _0x37499c=0x0;_0x37499c<_0x4633b8['length'];_0x37499c++){const _0x4f2d66=_0x4633b8[_0x37499c],_0x276f9e=_0x2aa85d(0x13e,0x119)+(_0x37499c+0x1);validatePin(_0x4f2d66[_0x2aa85d(0x13a,0x142)],_0x276f9e+'\x20\x27from\x27\x20pin'),validatePin(_0x4f2d66['to'],_0x276f9e+'\x20\x27to\x27\x20pin');if(pinsMatch(_0x4f2d66['from'],_0x4f2d66['to'])){const _0x1ff8bf=_0x441c9c['getCallSite'](),_0x282407=_0x1ff8bf?'\x20(called\x20from\x20'+_0x1ff8bf['file']+':'+_0x1ff8bf['line']+')':'';throw new Error(_0x276f9e+_0x2aa85d(0x13f,0x177)+pinToIdentifier(_0x4f2d66['from'])+')'+_0x282407);}}const _0x19b6dd=_0x505a8a[_0x2aa85d(0x135,0x151)]&&_0x505a8a['layers']['length']>0x0?_0x505a8a['layers'][0x0]:undefined,_0x2586ac=_0x240c6a[_0x2aa85d(0x140,0x12c)](_0x369260=>{const _0x16b70c=PadResolver['getPadCenter'](_0x369260);function _0xfae11a(_0x3b156e,_0x25ee6f){return a10_0x1651(_0x25ee6f-0x79,_0x3b156e);}if(_0x16b70c&&_0x19b6dd&&_0x369260['owner']){const _0x51cb23=PadResolver['getPadGeometry'](_0x369260['owner'],_0x369260['number']);if(_0x51cb23&&(_0x51cb23['type']==='thru_hole'||_0x51cb23[_0xfae11a(0x5c,0x84)]===_0xfae11a(0xcc,0x96))){if(_0x51cb23['layers']['includes'](_0x19b6dd))return{..._0x16b70c,'layer':_0x19b6dd};}}return _0x16b70c;}),_0x26cba1=_0x58b8b0['map'](_0x5d7cf6=>{const _0x670f67=PadResolver[_0x5ac53e(0xc8,0xe0)](_0x5d7cf6);if(_0x670f67&&_0x19b6dd&&_0x5d7cf6['owner']){const _0x4e4c04=PadResolver['getPadGeometry'](_0x5d7cf6['owner'],_0x5d7cf6['number']);if(_0x4e4c04&&(_0x4e4c04[_0x5ac53e(0xb5,0x8e)]==='thru_hole'||_0x4e4c04['type']==='np_thru_hole')){if(_0x4e4c04['layers']['includes'](_0x19b6dd))return{..._0x670f67,'layer':_0x19b6dd};}}function _0x5ac53e(_0x36fd86,_0x4732e2){return a10_0x1651(_0x36fd86-0xaa,_0x4732e2);}return _0x670f67;}),_0x526867=_0x2586ac['filter'](_0x28b162=>_0x28b162===null)['length'],_0x1cb6ec=_0x26cba1[_0x2aa85d(0x143,0x155)](_0x14cdde=>_0x14cdde===null)['length'];if(_0x526867>0x0||_0x1cb6ec>0x0){const _0x310912=_0x441c9c['getCallSite'](),_0x310732=_0x310912?'\x20(called\x20from\x20'+_0x310912['file']+':'+_0x310912[_0x2aa85d(0x12b,0x13f)]+')':'';throw new Error('Unable\x20to\x20resolve\x20pin\x20positions:\x20'+_0x526867+'\x20invalid\x20start\x20pins,\x20'+_0x1cb6ec+'\x20invalid\x20end\x20pins'+_0x310732);}const _0x9d9083=_0x2586ac[_0x2aa85d(0x143,0x16c)](_0xacc046=>_0xacc046!==null),_0x226675=_0x26cba1['filter'](_0x4dd9b8=>_0x4dd9b8!==null),_0x63986f=new Set();for(const _0x2fb3b4 of[..._0x9d9083,..._0x226675]){_0x63986f['add'](_0x2fb3b4[_0x2aa85d(0x144,0x157)]);}let _0x5ab8e0=_0x505a8a['layers']||[_0x2aa85d(0x145,0x158),'B.Cu'];if(_0x505a8a[_0x2aa85d(0x135,0xfe)]&&_0x505a8a['layers']['length']>0x0){const _0x4b5496=Array[_0x2aa85d(0x13a,0x144)](_0x63986f)[_0x2aa85d(0x143,0x112)](_0x4e057d=>!_0x505a8a['layers']['includes'](_0x4e057d));_0x4b5496[_0x2aa85d(0x146,0x141)]>0x0&&(debugLog(_0x505a8a['debug'],a10_0x3f0dd6['yellow']('[PCB]\x20WARNING:\x20Some\x20pads\x20exist\x20on\x20layers\x20not\x20included\x20in\x20routing\x20layers')),debugLog(_0x505a8a['debug'],a10_0x3f0dd6['yellow']('[PCB]\x20\x20\x20Requested\x20layers:\x20'+_0x505a8a[_0x2aa85d(0x135,0x14d)]['join'](',\x20'))),debugLog(_0x505a8a[_0x2aa85d(0x126,0xf6)],a10_0x3f0dd6['yellow']('[PCB]\x20\x20\x20Pads\x20exist\x20on\x20layers:\x20'+Array['from'](_0x63986f)['join'](',\x20'))),debugLog(_0x505a8a['debug'],a10_0x3f0dd6[_0x2aa85d(0x147,0x175)]('[PCB]\x20\x20\x20Missing\x20layers:\x20'+_0x4b5496['join'](',\x20'))),debugLog(_0x505a8a['debug'],a10_0x3f0dd6[_0x2aa85d(0x147,0x12d)]('[PCB]\x20\x20\x20Automatically\x20expanding\x20routing\x20layers\x20to\x20include\x20all\x20pad\x20layers')),_0x5ab8e0=Array['from'](new Set([..._0x505a8a['layers'],..._0x63986f])),debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue']('[PCB]\x20\x20\x20Final\x20routing\x20layers:\x20'+_0x5ab8e0['join'](',\x20'))));}const _0x57c4c9=[];for(const _0x1ecda5 of[..._0x240c6a,..._0x58b8b0]){_0x1ecda5['owner']&&!_0x57c4c9['includes'](_0x1ecda5['owner'])&&_0x57c4c9['push'](_0x1ecda5['owner']);}if(_0x441c9c['Schematic']&&_0x441c9c['Schematic'][_0x2aa85d(0x148,0x167)])for(const _0x325a75 of _0x441c9c['Schematic'][_0x2aa85d(0x148,0x13b)]){if(_0x325a75['nodes'])for(const _0x1aa752 of _0x325a75['nodes']){_0x1aa752[_0x2aa85d(0x149,0x13f)]&&!_0x57c4c9['includes'](_0x1aa752['owner'])&&_0x57c4c9['push'](_0x1aa752['owner']);}}if(_0x441c9c['Schematic']&&Array[_0x2aa85d(0x14a,0x127)](_0x441c9c['Schematic']['Components']))for(const _0x5e7ecd of _0x441c9c['Schematic']['Components']){_0x5e7ecd&&!_0x57c4c9['includes'](_0x5e7ecd)&&_0x57c4c9[_0x2aa85d(0x14b,0x153)](_0x5e7ecd);}debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue'](_0x2aa85d(0x14c,0x17f)+_0x57c4c9[_0x2aa85d(0x146,0x134)]+'\x20components\x20from\x20pins\x20and\x20schematic\x20nets'));let _0x223471=_0x505a8a['net'];if(!_0x223471&&_0x441c9c[_0x2aa85d(0x14d,0x119)]&&_0x441c9c['Schematic'][_0x2aa85d(0x148,0x116)]){const _0x4305f3=_0x240c6a[0x0];debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue']('[PCB]\x20Attempting\x20to\x20infer\x20net\x20from\x20pin\x20'+_0x4305f3['reference']+'.'+_0x4305f3['number']));if(_0x4305f3['owner']){debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue']('[PCB]\x20Pin\x20owner:\x20'+_0x4305f3['owner'][_0x2aa85d(0x14e,0x11f)]+_0x2aa85d(0x14f,0x16f)+_0x441c9c['Schematic']['Nodes'][_0x2aa85d(0x146,0x145)]+'\x20schematic\x20nodes'));for(const _0x36e2d4 of _0x441c9c['Schematic'][_0x2aa85d(0x148,0x178)]){if(_0x36e2d4['nodes']){const _0x12f8d6=_0x36e2d4[_0x2aa85d(0x13d,0x11c)]['find'](_0x15b216=>_0x15b216['reference']===_0x4305f3['owner']['reference']&&String(_0x15b216[_0x2aa85d(0x128,0x12a)])===String(_0x4305f3['number']));if(_0x12f8d6){_0x223471=_0x36e2d4['name'],debugLog(_0x505a8a[_0x2aa85d(0x126,0x13b)],a10_0x3f0dd6['green']('[PCB]\x20✓\x20Inferred\x20net\x20from\x20pins:\x20'+_0x223471));break;}}}!_0x223471&&debugLog(_0x505a8a['debug'],a10_0x3f0dd6[_0x2aa85d(0x147,0x124)]('[PCB]\x20Could\x20not\x20find\x20net\x20for\x20pin\x20in\x20schematic'));}}else!_0x223471&&debugLog(_0x505a8a['debug'],a10_0x3f0dd6['yellow'](_0x2aa85d(0x150,0x162)+!!_0x441c9c['Schematic']+',\x20Nodes:\x20'+(_0x441c9c[_0x2aa85d(0x14d,0x113)]?.['Nodes']?.['length']||0x0)+')'));let _0xfb5f91=_0x505a8a['width'],_0x53b2f0=_0x505a8a['powerInfo'],_0x12eb52=_0x2aa85d(0x151,0x168);if(!_0xfb5f91&&!_0x53b2f0){const _0xdfea3b=[..._0x240c6a,..._0x58b8b0];for(const _0x262f29 of _0xdfea3b){if(_0x262f29&&_0x262f29['powerInfo']){_0x53b2f0=_0x262f29['powerInfo'],_0x12eb52='pin',debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue']('[PCB]\x20Found\x20power\x20info\x20on\x20pin\x20'+(_0x262f29['owner']?.[_0x2aa85d(0x14e,0x13d)]||'unknown')+'.'+_0x262f29['number']+':\x20'+_0x53b2f0?.['current']+'A'));break;}}}if(!_0xfb5f91&&_0x53b2f0){const _0x10ec31=_0x505a8a['layers']?.[0x0]||_0x9d9083[0x0]['layer'];_0xfb5f91=calculateMinTraceWidth(_0x53b2f0[_0x2aa85d(0x152,0x13b)],_0x10ec31,_0x53b2f0['maxTempRise']||0xa,_0x53b2f0['thickness']||_0x441c9c[_0x2aa85d(0x153,0x177)]),debugLog(_0x505a8a['debug'],a10_0x3f0dd6[_0x2aa85d(0x154,0x17d)]('[PCB]\x20Calculated\x20trace\x20width\x20from\x20power\x20info:\x20'+_0xfb5f91['toFixed'](0x3)+_0x2aa85d(0x155,0x145)+_0x53b2f0['current']+_0x2aa85d(0x156,0x123)+_0x12eb52+')'));}_0x53b2f0&&!_0x505a8a['powerInfo']&&(_0x505a8a['powerInfo']=_0x53b2f0);_0xfb5f91=_0xfb5f91||0.2;const _0x3511a2=_0x505a8a['clearance']||0.2,_0x11da0d=Math[_0x2aa85d(0x129,0xff)](0.05,_0x3511a2*0.25),_0x4a263d=_0x3511a2+_0x11da0d,{components:_0x157b31,stagedComponents:_0x471c4f}=collectComponentsForBounds(_0x441c9c,_0x57c4c9);let _0x1dc33d=calculateBoardBounds(_0x157b31,_0x441c9c['outlines'],_0x471c4f);const _0x6165a3=typeof _0x441c9c[_0x2aa85d(0x157,0x165)]==='function'?_0x441c9c[_0x2aa85d(0x157,0x17b)]():[],_0x236d37=_0x505a8a[_0x2aa85d(0x158,0x13e)]??0.1,_0x2e5e94=Math['max'](0x5,_0xfb5f91*0x8,_0x4a263d*0x4,_0x236d37*0x50),_0xde17b=expandBoundsToIncludeTracks(_0x1dc33d,Array['isArray'](_0x441c9c[_0x2aa85d(0x159,0x144)])?_0x441c9c['grLines']:[],_0x6165a3,_0x2e5e94),_0x30872b=_0xde17b['minX']!==_0x1dc33d['minX']||_0xde17b[_0x2aa85d(0x131,0x120)]!==_0x1dc33d['maxX']||_0xde17b['minY']!==_0x1dc33d['minY']||_0xde17b['maxY']!==_0x1dc33d['maxY'];_0x1dc33d=_0xde17b;_0x30872b&&debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue']('[PCB]\x20Expanded\x20routing\x20bounds\x20to\x20('+_0x1dc33d['minX']+',\x20'+_0x1dc33d['minY']+')\x20-\x20('+_0x1dc33d[_0x2aa85d(0x131,0x151)]+',\x20'+_0x1dc33d[_0x2aa85d(0x133,0x166)]+')\x20to\x20include\x20existing\x20tracks'));debugLog(_0x505a8a[_0x2aa85d(0x126,0x150)],a10_0x3f0dd6['blue'](_0x2aa85d(0x15a,0x144)+_0x1dc33d['minX']+',\x20'+_0x1dc33d['minY']+_0x2aa85d(0x15b,0x145)+_0x1dc33d['maxX']+',\x20'+_0x1dc33d[_0x2aa85d(0x133,0x109)]+')'));let _0x44ea8d=_0x236d37;const _0x22c2cc=typeof _0x441c9c['getRouterGridConfigurator']==='function'?_0x441c9c['getRouterGridConfigurator'](_0x4ffd38):undefined;if(_0x22c2cc)try{const _0x55ae89=collectPadSummariesForRouting(_0x57c4c9),_0xf23e9a=_0x22c2cc({'requestedResolution':_0x236d37,'defaultResolution':0.1,'pads':_0x55ae89});if(_0xf23e9a&&typeof _0xf23e9a['gridResolution']==='number'&&_0xf23e9a['gridResolution']>0x0){const _0x388cd3=_0xf23e9a['reason']?'\x20('+_0xf23e9a[_0x2aa85d(0x15c,0x177)]+')':'';debugLog(_0x505a8a['debug'],a10_0x3f0dd6['yellow']('[PCB]\x20Router\x20selected\x20grid\x20resolution\x20'+_0xf23e9a[_0x2aa85d(0x158,0x194)]+'mm'+_0x388cd3)),_0x44ea8d=_0xf23e9a['gridResolution'];}}catch(_0x150f79){debugLog(_0x505a8a[_0x2aa85d(0x126,0x11d)],a10_0x3f0dd6[_0x2aa85d(0x147,0x163)](_0x2aa85d(0x15d,0x165)+_0x4ffd38+'\x27\x20threw:\x20'+(_0x150f79?.['message']??_0x150f79)));}const _0x49949e=new RoutingGrid(_0x1dc33d,_0x44ea8d,_0x5ab8e0,_0x505a8a[_0x2aa85d(0x126,0x149)]),_0x3a4a7d=ObstacleBuilder['buildFromPCB'](_0x441c9c,_0x4a263d,_0x57c4c9,_0x505a8a['debug']),_0x31d92b=[],_0xe37179=_0x426b11=>{_0x31d92b['push'](_0x426b11),_0x49949e['addObstacle'](_0x426b11);};_0x3a4a7d[_0x2aa85d(0x12d,0x11d)](_0xe37179);const _0x302f14=_0x49949e['getStats']();debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue']('[PCB]\x20Grid\x20stats:\x20'+_0x302f14['occupiedCells']+'\x20occupied\x20cells\x20('+_0x302f14[_0x2aa85d(0x15e,0x141)]['toFixed'](0x1)+'%)'));const _0x146dad=[];if(_0x223471&&_0x441c9c['Schematic']&&_0x441c9c['Schematic']['Nodes']){const _0x467654=_0x441c9c['Schematic']['Nodes']['find'](_0x442724=>_0x442724['name']===_0x223471);if(_0x467654&&_0x467654['nodes'])for(const _0x11fbb7 of _0x467654['nodes']){if(_0x11fbb7['owner']){const _0x2a5189=PadResolver['getPadGeometry'](_0x11fbb7['owner'],_0x11fbb7['number']);_0x2a5189&&((_0x2a5189['type']==='thru_hole'||_0x2a5189['type']==='np_thru_hole')&&_0x146dad['push']({'x':_0x2a5189['center']['x'],'y':_0x2a5189['center']['y']}));}}}else for(const _0x83e7ac of[..._0x240c6a,..._0x58b8b0]){if(_0x83e7ac['owner']){const _0x47d906=PadResolver[_0x2aa85d(0x15f,0x168)](_0x83e7ac['owner'],_0x83e7ac[_0x2aa85d(0x128,0x118)]);_0x47d906&&(_0x47d906['type']==='thru_hole'||_0x47d906['type']==='np_thru_hole')&&_0x146dad['push']({'x':_0x47d906['center']['x'],'y':_0x47d906[_0x2aa85d(0x160,0x12c)]['y']});}}debugLog(_0x505a8a['debug'],a10_0x3f0dd6[_0x2aa85d(0x154,0x16b)]('[PCB]\x20Identified\x20'+_0x146dad['length']+'\x20through-hole\x20pad\x20locations\x20as\x20free\x20via\x20points\x20for\x20net\x20'+(_0x223471||_0x2aa85d(0x161,0x137))));if(_0x223471){const _0x348c8=collectManualViaFreeLocations(_0x441c9c,_0x223471);if(_0x348c8[_0x2aa85d(0x146,0x11c)]>0x0){let _0x2747b9=0x0;_0x348c8['forEach'](_0xda288f=>{const _0x2e04e6=_0x146dad['some'](_0x48efe1=>Math['abs'](_0x48efe1['x']-_0xda288f['x'])<0.000001&&Math['abs'](_0x48efe1['y']-_0xda288f['y'])<0.000001);!_0x2e04e6&&(_0x146dad['push'](_0xda288f),_0x2747b9++);}),_0x2747b9>0x0&&debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue']('[PCB]\x20Added\x20'+_0x2747b9+'\x20manual\x20via\x20location(s)\x20as\x20free\x20via\x20points\x20for\x20net\x20'+_0x223471));}}const _0x1e94f6=_0x1c4acb=>{const _0x3e737a=new RoutingGrid(_0x1dc33d,_0x1c4acb,_0x5ab8e0,_0x505a8a[_0x4d51a4(-0x14f,-0x113)]);function _0x4d51a4(_0x5637e6,_0x158a57){return a10_0x1651(_0x158a57- -0x115,_0x5637e6);}return _0x31d92b['forEach'](_0x46293e=>_0x3e737a['addObstacle'](_0x46293e)),_0x3e737a;},_0x4493d8=Math['max'](0x1,(a10_0x32bc0e[_0x2aa85d(0x162,0x19b)]()?.['length']??0x1)-0x1),_0x10b8ed={'traceWidth':_0xfb5f91,'clearance':_0x4a263d,'viaClearance':_0x505a8a['viaClearance'],'allowedLayers':_0x5ab8e0,'preferredLayers':_0x505a8a[_0x2aa85d(0x135,0x13a)],'viaCost':_0x505a8a[_0x2aa85d(0x163,0x19b)],'bendCost':_0x505a8a['bendCost'],'maxIterations':_0x505a8a['maxIterations'],'allowVias':_0x505a8a['allowVias'],'impedance':_0x505a8a['impedance'],'freeViaLocations':_0x146dad,'heuristicWeight':_0x505a8a[_0x2aa85d(0x164,0x18f)],'requestedGridResolution':_0x44ea8d,'resumeGridResolution':_0x44ea8d,'coarseGridFactory':_0x1e94f6,'parallelMSTWorkers':_0x505a8a['parallelMSTWorkers']??_0x4493d8,'gridObstacles':_0x31d92b,'gridBounds':_0x1dc33d},_0x11763f=[],_0x5299f2=[],_0x1debcb=[],_0x5d0d4d=[],_0x372aee=[..._0x240c6a,..._0x58b8b0],_0xb06782=new Set();if(_0x441c9c['Schematic']&&_0x441c9c['Schematic']['Nodes'])for(const _0x2dc518 of _0x372aee){if(_0x2dc518['owner'])for(const _0x600dbc of _0x441c9c['Schematic']['Nodes']){if(_0x600dbc[_0x2aa85d(0x13d,0x133)]){const _0x1d37cc=_0x600dbc['nodes']['find'](_0x16fd41=>_0x16fd41['reference']===_0x2dc518['owner']['reference']&&String(_0x16fd41[_0x2aa85d(0x128,0x101)])===String(_0x2dc518['number']));if(_0x1d37cc){_0xb06782[_0x2aa85d(0x165,0x131)](_0x600dbc['name']);break;}}}}const _0x4b66fe=_0xb06782['size']===0x1&&_0x372aee['length']>0x2,_0x262ca6=[..._0x9d9083,..._0x226675],_0x3500b7=new Set(),_0x3efbe2=new Map();if(_0x3ae0b7['length']>0x0){debugLog(_0x505a8a['debug'],a10_0x3f0dd6[_0x2aa85d(0x154,0x13c)]('[PCB]\x20Processing\x20'+_0x3ae0b7['length']+_0x2aa85d(0x166,0x133)));for(const _0x978584 of _0x3ae0b7){let _0x263a25,_0x551688;if(_0x978584&&typeof _0x978584==='object'&&'routeDetails'in _0x978584&&Array[_0x2aa85d(0x14a,0x15d)](_0x978584['routeDetails'])){const _0x190de2=_0x978584;_0x263a25=_0x190de2[_0x2aa85d(0x167,0x12c)][0x0]['path'],_0x551688=Array[_0x2aa85d(0x13a,0x163)](_0x190de2);const _0x49d20b=[];for(const _0xb234a2 of _0x551688||[]){const _0x51910f=_0xb234a2[_0x2aa85d(0x168,0x152)]();for(const _0x1f7b0c of _0x51910f){_0x1f7b0c[_0x2aa85d(0x169,0x167)]&&_0x49d20b[_0x2aa85d(0x14b,0x186)](_0x1f7b0c[_0x2aa85d(0x169,0x159)]);}}_0x49d20b[_0x2aa85d(0x146,0x17b)]>0x0&&(debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue'](_0x2aa85d(0x16a,0x158)+_0x49d20b[_0x2aa85d(0x146,0x154)]+'\x20staged\x20tracks\x20from\x20manual\x20route\x20to\x20prevent\x20duplicates')),_0x441c9c['_removeStagedOutlinesByUuid'](_0x49d20b));}else _0x263a25=_0x978584;let _0xb8a7f8,_0x1d6bb7;if(!_0xb8a7f8||!_0x1d6bb7){const _0x405382=_0x263a25['nodes'][0x0],_0x1c1eaf=_0x263a25['nodes'][_0x263a25['nodes']['length']-0x1],_0x1dc72c=0.01;for(const _0x163b6e of _0x372aee){const _0x2481b0=PadResolver['getPadCenter'](_0x163b6e);if(!_0x2481b0)continue;!_0xb8a7f8&&Math['abs'](_0x2481b0['x']-_0x405382['x'])<_0x1dc72c&&Math['abs'](_0x2481b0['y']-_0x405382['y'])<_0x1dc72c&&(_0xb8a7f8=_0x163b6e);!_0x1d6bb7&&Math['abs'](_0x2481b0['x']-_0x1c1eaf['x'])<_0x1dc72c&&Math['abs'](_0x2481b0['y']-_0x1c1eaf['y'])<_0x1dc72c&&(_0x1d6bb7=_0x163b6e);if(_0xb8a7f8&&_0x1d6bb7)break;}if(!_0xb8a7f8||!_0x1d6bb7){console['warn'](a10_0x3f0dd6['yellow']('[PCB]\x20WARNING:\x20Could\x20not\x20infer\x20from/to\x20pins\x20for\x20manual\x20route.\x20Path:\x20('+_0x405382['x'][_0x2aa85d(0x16b,0x153)](0x3)+',\x20'+_0x405382['y']['toFixed'](0x3)+_0x2aa85d(0x16c,0x12e)+_0x1c1eaf['x']['toFixed'](0x3)+',\x20'+_0x1c1eaf['y']['toFixed'](0x3)+')'));continue;}debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue'](_0x2aa85d(0x16d,0x161)+pinToIdentifier(_0xb8a7f8)+'\x20<->\x20'+pinToIdentifier(_0x1d6bb7)));}const _0x46f1c6=pinToIdentifier(_0xb8a7f8),_0x1a9803=pinToIdentifier(_0x1d6bb7),_0x1c29d2=_0x46f1c6+'::'+_0x1a9803,_0x1fc99e=_0x1a9803+'::'+_0x46f1c6;_0x3500b7['add'](_0x1c29d2),_0x3500b7['add'](_0x1fc99e),_0x3efbe2['set'](_0x1c29d2,{'path':_0x263a25,'manual':{'from':_0xb8a7f8,'to':_0x1d6bb7,'route':_0x978584},'trackBuilders':_0x551688}),_0x3efbe2[_0x2aa85d(0x16e,0x159)](_0x1fc99e,{'path':_0x263a25,'manual':{'from':_0xb8a7f8,'to':_0x1d6bb7,'route':_0x978584},'trackBuilders':_0x551688}),debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue']('[PCB]\x20Marked\x20manual\x20route:\x20'+_0x46f1c6+'\x20<->\x20'+_0x1a9803));const _0x17179f=_0x263a25['nodes'][0x0],_0x479405=_0x263a25['nodes'][_0x263a25['nodes'][_0x2aa85d(0x146,0x133)]-0x1],_0x39bada=(_0x505a8a[_0x2aa85d(0x158,0x191)]??0.1)*0x2;let _0x4bbb14=0x0;for(let _0x4e4f6c=0x1;_0x4e4f6c<_0x263a25[_0x2aa85d(0x13d,0x157)]['length'];_0x4e4f6c++){const _0x424dd9=_0x263a25['nodes'][_0x4e4f6c-0x1],_0x2d24e2=_0x263a25['nodes'][_0x4e4f6c];if(_0x424dd9['x']===_0x2d24e2['x']&&_0x424dd9['y']===_0x2d24e2['y'])continue;const _0x28704b=Math['abs'](_0x424dd9['x']-_0x17179f['x'])<_0x39bada&&Math['abs'](_0x424dd9['y']-_0x17179f['y'])<_0x39bada,_0x4319e4=Math['abs'](_0x2d24e2['x']-_0x479405['x'])<_0x39bada&&Math['abs'](_0x2d24e2['y']-_0x479405['y'])<_0x39bada,_0x2562ed=_0x28704b||_0x4319e4,_0x10e3e6=ObstacleBuilder['buildFromTrack']({'type':'line','uuid':'manual-route-'+_0x46f1c6+'-'+_0x1a9803+'-'+_0x4e4f6c,'layer':_0x424dd9['layer'],'strokeWidth':_0xfb5f91,'start':{'x':_0x424dd9['x'],'y':_0x424dd9['y']},'end':{'x':_0x2d24e2['x'],'y':_0x2d24e2['y']}},_0xfb5f91,_0x4a263d,_0x223471,!_0x2562ed);_0xe37179(_0x10e3e6);if(!_0x2562ed)_0x4bbb14++;}debugLog(_0x505a8a['debug'],a10_0x3f0dd6[_0x2aa85d(0x154,0x144)](_0x2aa85d(0x16f,0x17e)+_0x4bbb14+_0x2aa85d(0x170,0x191)+(_0x263a25['nodes']['length']-0x1-_0x4bbb14)+'\x20near\x20endpoints\x20allow\x20same-net\x20routing)'));}}let _0x2a27ee=![];const _0x593d12=typeof _0x441c9c['createRouter']==='function'?_0x441c9c['createRouter'](_0x4ffd38,_0x49949e,{..._0x10b8ed,'net':_0x223471}):null;if(!_0x593d12)throw new Error('Unable\x20to\x20create\x20router\x20for\x20algorithm\x20\x27'+_0x4ffd38+'\x27.\x20Ensure\x20it\x27s\x20registered\x20with\x20this\x20PCB\x20instance\x20using\x20typecad.registerRouter().');if(_0x4b66fe&&'routeNet'in _0x593d12){const _0x16395f=_0x593d12;debugLog(_0x505a8a[_0x2aa85d(0x126,0xea)],a10_0x3f0dd6[_0x2aa85d(0x154,0x14a)]('[PCB]\x20Detected\x20single-net\x20routing\x20with\x20'+_0x262ca6['length']+'\x20pins\x20-\x20using\x20MST\x20algorithm'));const _0x29c269=_0x505a8a['useSteinerOptimization']??!![];_0x29c269&&debugLog(_0x505a8a['debug'],a10_0x3f0dd6[_0x2aa85d(0x154,0x17f)]('[PCB]\x20Steiner\x20tree\x20optimization\x20enabled'));let _0x51a1a5=_0x262ca6;if(_0x3ae0b7['length']>0x0){const _0x37f6a4=[],_0x39f0d2=new Set(),_0x7479f0=_0x262ca6['reduce']((_0x532d6c,_0x4b2046)=>({'x':_0x532d6c['x']+_0x4b2046['x'],'y':_0x532d6c['y']+_0x4b2046['y']}),{'x':0x0,'y':0x0});_0x7479f0['x']/=_0x262ca6[_0x2aa85d(0x146,0x144)],_0x7479f0['y']/=_0x262ca6['length'];for(const [_0x2160da,_0x391bb8]of _0x3efbe2){const _0x274590=pinToIdentifier(_0x391bb8['manual']['from']),_0xd14e4d=pinToIdentifier(_0x391bb8[_0x2aa85d(0x171,0x188)]['to']),_0x3c3224=[_0x274590,_0xd14e4d][_0x2aa85d(0x172,0x153)]()['join']('::');if(_0x39f0d2['has'](_0x3c3224))continue;_0x39f0d2[_0x2aa85d(0x165,0x152)](_0x3c3224);const _0x3457aa=PadResolver['getPadCenter'](_0x391bb8['manual']['from']),_0x5d2ec8=PadResolver['getPadCenter'](_0x391bb8['manual']['to']);if(!_0x3457aa||!_0x5d2ec8)continue;const _0xfc6255=Math['hypot'](_0x3457aa['x']-_0x7479f0['x'],_0x3457aa['y']-_0x7479f0['y']),_0x599d07=Math['hypot'](_0x5d2ec8['x']-_0x7479f0['x'],_0x5d2ec8['y']-_0x7479f0['y']),_0x4163e5=_0xfc6255>_0x599d07?_0x3457aa:_0x5d2ec8;_0x37f6a4[_0x2aa85d(0x14b,0x117)]({'x':_0x4163e5['x'],'y':_0x4163e5['y']});}if(_0x37f6a4['length']>0x0){const _0x4cb0e5=0.01;_0x51a1a5=_0x262ca6['filter'](_0x3fda13=>!_0x37f6a4['some'](_0x5b2aba=>Math['abs'](_0x3fda13['x']-_0x5b2aba['x'])<_0x4cb0e5&&Math['abs'](_0x3fda13['y']-_0x5b2aba['y'])<_0x4cb0e5)),debugLog(_0x505a8a[_0x2aa85d(0x126,0x124)],a10_0x3f0dd6['blue']('[PCB]\x20Reduced\x20MST\x20terminals\x20by\x20'+_0x37f6a4['length']+'\x20due\x20to\x20provided\x20routes\x20(now\x20'+_0x51a1a5['length']+')'));}}const _0x173198=await _0x16395f['routeNet'](_0x51a1a5,_0x29c269);_0x5d0d4d['push'](_0x173198),debugLog(_0x505a8a['debug'],a10_0x3f0dd6['gray']('[PCB][DEBUG]\x20MST\x20path\x20result:\x20success='+_0x173198['success']+_0x2aa85d(0x173,0x16b)+_0x173198[_0x2aa85d(0x146,0x136)]+',\x20nodes='+(_0x173198['nodes']?.['length']??0x0)+_0x2aa85d(0x174,0x1af)+(_0x173198['segments']?.['length']??0x0)+',\x20viaCount='+_0x173198['viaCount']));if(_0x505a8a['debug'])try{const _0x106bb7={'success':_0x173198[_0x2aa85d(0x175,0x17b)],'length':_0x173198['length'],'viaCount':_0x173198['viaCount'],'segments':_0x173198['segments']?.['map'](_0x33bf3b=>({'nodes':_0x33bf3b['nodes']['length'],'viaCount':_0x33bf3b['viaCount']}))};a10_0x25916f['debug']('[PCB][DEBUG]\x20MST\x20path\x20full\x20summary:',JSON[_0x2aa85d(0x176,0x137)](_0x106bb7,null,0x2));}catch(_0x1aadd0){}if(_0x173198[_0x2aa85d(0x175,0x16d)]||_0x173198['nodes']['length']>0x0){if(_0x173198['segments']&&_0x173198[_0x2aa85d(0x177,0x149)]['length']>0x0){debugLog(_0x505a8a[_0x2aa85d(0x126,0xf0)],a10_0x3f0dd6[_0x2aa85d(0x154,0x155)](_0x2aa85d(0x178,0x164)+_0x173198['segments']['length']+'\x20separate\x20tracks\x20for\x20MST\x20segments'));const _0x56c089=[];for(const _0x11da29 of _0x173198[_0x2aa85d(0x177,0x155)]){let _0x26616a=_0x11da29,_0x438ef2=_0x26616a['nodes'][0x0],_0x1a7bd0=_0x26616a[_0x2aa85d(0x13d,0x131)][_0x26616a['nodes']['length']-0x1];const _0x397a19=0.01;let _0x50a579,_0x27b141;for(const _0x2d878f of _0x372aee){const _0x28fd77=PadResolver['getPadCenter'](_0x2d878f);if(!_0x28fd77)continue;if(!_0x50a579&&Math['abs'](_0x28fd77['x']-_0x438ef2['x'])<_0x397a19&&Math['abs'](_0x28fd77['y']-_0x438ef2['y'])<_0x397a19)_0x50a579=_0x2d878f;if(!_0x27b141&&Math[_0x2aa85d(0x179,0x151)](_0x28fd77['x']-_0x1a7bd0['x'])<_0x397a19&&Math['abs'](_0x28fd77['y']-_0x1a7bd0['y'])<_0x397a19)_0x27b141=_0x2d878f;if(_0x50a579&&_0x27b141)break;}let _0x50018e=![];if(_0x50a579&&_0x27b141){const _0x18257d=pinToIdentifier(_0x50a579),_0x95f887=pinToIdentifier(_0x27b141),_0x5d4d8c=_0x18257d+'::'+_0x95f887,_0xa29895=_0x95f887+'::'+_0x18257d;if(_0x3500b7['has'](_0x5d4d8c)||_0x3500b7['has'](_0xa29895)){const _0x25890a=_0x3efbe2['get'](_0x3500b7['has'](_0x5d4d8c)?_0x5d4d8c:_0xa29895);if(_0x25890a&&_0x25890a['trackBuilders']){debugLog(_0x505a8a[_0x2aa85d(0x126,0xf5)],a10_0x3f0dd6[_0x2aa85d(0x154,0x162)]('[PCB]\x20Reusing\x20manual\x20route\x20for\x20MST\x20segment:\x20'+_0x18257d+'\x20<->\x20'+_0x95f887));for(const _0x538f17 of _0x25890a['trackBuilders']){_0x11763f['push'](_0x538f17);const _0x17780a=_0x538f17['getElements']();for(const _0xbd8d4d of _0x17780a){if(_0xbd8d4d['type']==='track'&&_0xbd8d4d['details']&&'start'in _0xbd8d4d['details']){const _0x2995ab=_0xbd8d4d[_0x2aa85d(0x17a,0x1b6)];_0x441c9c['_track'](_0x2995ab[_0x2aa85d(0x17b,0x15b)],_0x2995ab[_0x2aa85d(0x12c,0x155)],_0x2995ab[_0x2aa85d(0x17c,0x13e)],_0x2995ab[_0x2aa85d(0x144,0x110)],_0x2995ab['locked']??![],_0xbd8d4d['uuid'],undefined);}}}_0x5299f2[_0x2aa85d(0x14b,0x138)]({'length':_0x25890a['path']['length'],'viaCount':_0x25890a['path']['viaCount'],'layers':[...new Set(_0x25890a['path']['nodes'][_0x2aa85d(0x140,0x154)](_0x3c831e=>_0x3c831e['layer']))],'success':_0x25890a['path'][_0x2aa85d(0x175,0x170)],'error':_0x25890a['path']['error'],'path':_0x25890a['path']}),_0x50018e=!![];}}}!_0x50018e&&_0x56c089['push'](_0x26616a);}for(const _0x1e93bf of _0x56c089){const _0x5b57f2=pathToTrackBuilder(_0x441c9c,_0x1e93bf,_0xfb5f91,_0x505a8a,_0x223471,_0x146dad,_0x505a8a['deferStaging']);_0x5b57f2&&_0x11763f['push'](_0x5b57f2),_0x5299f2['push']({'length':_0x1e93bf[_0x2aa85d(0x146,0x117)],'viaCount':_0x1e93bf['viaCount'],'layers':[...new Set(_0x1e93bf['nodes']['map'](_0x5dca09=>_0x5dca09['layer']))],'success':_0x1e93bf['success'],'error':_0x1e93bf['error'],'path':_0x1e93bf});}}else{debugLog(_0x505a8a['debug'],a10_0x3f0dd6['yellow']('[PCB]\x20WARNING:\x20No\x20segments\x20array,\x20using\x20merged\x20path\x20(may\x20create\x20incorrect\x20tracks)'));const _0x490af2=pathToTrackBuilder(_0x441c9c,_0x173198,_0xfb5f91,_0x505a8a,_0x223471,_0x146dad,_0x505a8a['deferStaging']);_0x490af2&&_0x11763f['push'](_0x490af2),_0x5299f2['push']({'length':_0x173198['length'],'viaCount':_0x173198['viaCount'],'layers':[...new Set(_0x173198['nodes']['map'](_0x6c1822=>_0x6c1822['layer']))],'success':_0x173198[_0x2aa85d(0x175,0x197)],'error':_0x173198['error'],'path':_0x173198});}}else _0x5299f2['push']({'length':_0x173198['length'],'viaCount':_0x173198[_0x2aa85d(0x17d,0x13f)],'layers':[],'success':![],'error':_0x173198[_0x2aa85d(0x17e,0x163)]||'Failed\x20to\x20route\x20any\x20connections\x20in\x20the\x20net','path':_0x173198});_0x2a27ee=!![];}if(!_0x2a27ee){const _0x59948a=_0x240c6a[_0x2aa85d(0x146,0x158)]===0x1&&_0x58b8b0['length']>0x1,_0x20d2e2=_0x59948a?_0x58b8b0['length']:Math['min'](_0x9d9083['length'],_0x226675[_0x2aa85d(0x146,0x138)]);debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue']('[PCB]\x20Using\x20pairwise\x20routing\x20for\x20'+_0x20d2e2+'\x20connection(s)'));for(let _0x2fbb50=0x0;_0x2fbb50<_0x20d2e2;_0x2fbb50++){debugLog(_0x505a8a['debug'],a10_0x3f0dd6[_0x2aa85d(0x154,0x165)](_0x2aa85d(0x17f,0x18e)+(_0x2fbb50+0x1)+'/'+_0x20d2e2));const _0x11f120=_0x59948a?_0x240c6a[0x0]:_0x240c6a[_0x2fbb50],_0x56e9f7=_0x58b8b0[_0x2fbb50],_0x2ae0cf=pinToIdentifier(_0x11f120),_0x372e64=pinToIdentifier(_0x56e9f7);let _0x359949=![];for(const _0x1a62a6 of _0x4633b8){if(connectionMatches(_0x11f120,_0x56e9f7,_0x1a62a6['from'],_0x1a62a6['to'])){debugLog(_0x505a8a['debug'],a10_0x3f0dd6[_0x2aa85d(0x147,0x110)]('[PCB]\x20Skipping\x20excluded\x20connection:\x20'+_0x2ae0cf+'\x20<->\x20'+_0x372e64)),_0x359949=!![];break;}}if(_0x359949)continue;const _0x54a278=_0x59948a?_0x9d9083[0x0]:_0x9d9083[_0x2fbb50],_0x3d0688=_0x226675[_0x2fbb50],_0x2d56b5=_0x2ae0cf+'::'+_0x372e64,_0x373b49=_0x372e64+'::'+_0x2ae0cf;let _0xa69b8a=null,_0x5c36b7;if(_0x3500b7['has'](_0x2d56b5)){const _0x290aec=_0x3efbe2['get'](_0x2d56b5);_0x290aec&&(_0xa69b8a=_0x290aec['path'],_0x5c36b7=_0x290aec['trackBuilders'],debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue'](_0x2aa85d(0x180,0x175)+_0x2ae0cf+_0x2aa85d(0x181,0x147)+_0x372e64)));}else{if(_0x3500b7['has'](_0x373b49)){const _0x23cd25=_0x3efbe2['get'](_0x373b49);_0x23cd25&&(_0xa69b8a=_0x23cd25[_0x2aa85d(0x182,0x148)],_0x5c36b7=_0x23cd25['trackBuilders'],debugLog(_0x505a8a['debug'],a10_0x3f0dd6[_0x2aa85d(0x154,0x182)]('[PCB]\x20Using\x20manual\x20route:\x20'+_0x2ae0cf+'\x20<->\x20'+_0x372e64)));}}let _0x107fab=undefined;if(_0x441c9c['Schematic']&&_0x441c9c['Schematic']['Nodes']&&_0x11f120?.['owner'])for(const _0x3f2cfc of _0x441c9c[_0x2aa85d(0x14d,0x11e)]['Nodes']){if(_0x3f2cfc['nodes']){const _0xd497df=_0x3f2cfc[_0x2aa85d(0x13d,0x121)]['find'](_0x6c892b=>_0x6c892b[_0x2aa85d(0x14e,0x13b)]===_0x11f120['owner']['reference']&&String(_0x6c892b[_0x2aa85d(0x128,0x138)])===String(_0x11f120['number']));if(_0xd497df){_0x107fab=_0x3f2cfc[_0x2aa85d(0x183,0x197)];break;}}}if(!_0xa69b8a){const _0x2f2c9c=_0x505a8a['vias']&&_0x505a8a['vias'][_0x2aa85d(0x146,0x13f)]>0x0?{'waypoints':_0x505a8a['waypoints'],'vias':_0x505a8a['vias']}:_0x505a8a[_0x2aa85d(0x184,0x19e)],_0x21e223=_0x505a8a[_0x2aa85d(0x185,0x16c)]===!![]||process['env']['MAST_FAST']==='1';if(_0x21e223&&!_0x2f2c9c)try{const _0x5d0354=typeof _0x441c9c['createRouter']==='function'?_0x441c9c[_0x2aa85d(0x186,0x19b)](_0x4ffd38,_0x49949e,{..._0x10b8ed,'net':_0x107fab??_0x223471,'heuristicWeight':0x8,'maxIterations':0x4e20,'useAdaptiveStride':!![],'maxStrideCells':Math['max'](0x20,_0x10b8ed[_0x2aa85d(0x187,0x1a1)]??0x20)}):null;if(_0x5d0354){const _0x2908b9=_0x5d0354['route'](_0x54a278,_0x3d0688);_0x2908b9&&_0x2908b9['success']&&(_0xa69b8a=_0x2908b9,debugLog(_0x505a8a['debug'],a10_0x3f0dd6['green']('[PCB]\x20fastFallback\x20succeeded\x20for\x20'+_0x2ae0cf+_0x2aa85d(0x181,0x17f)+_0x372e64)));}}catch(_0x1abfb4){}if(!_0xa69b8a){const _0x51e826=typeof _0x441c9c['createRouter']===_0x2aa85d(0x138,0x129)?_0x441c9c['createRouter'](_0x4ffd38,_0x49949e,{..._0x10b8ed,'net':_0x107fab??_0x223471}):null;if(!_0x51e826)throw new Error('Unable\x20to\x20create\x20router\x20for\x20algorithm\x20\x27'+_0x4ffd38+'\x27.\x20Ensure\x20it\x27s\x20registered\x20with\x20this\x20PCB\x20instance\x20using\x20typecad.registerRouter().');_0xa69b8a=_0x51e826['route'](_0x54a278,_0x3d0688,_0x2f2c9c);}}if(_0xa69b8a&&_0xa69b8a['success']&&!_0x5c36b7){}_0x5d0d4d['push'](_0xa69b8a);if(_0xa69b8a['success']){if(_0x5c36b7){debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue']('[PCB]\x20Reusing\x20'+_0x5c36b7['length']+'\x20existing\x20TrackBuilder(s)\x20from\x20manual\x20route'));for(const _0x3c03cb of _0x5c36b7){_0x11763f['push'](_0x3c03cb);const _0x23f16a=_0x3c03cb['getElements']();for(const _0x37a93f of _0x23f16a){if(_0x37a93f['type']==='track'&&_0x37a93f['details']&&_0x2aa85d(0x17b,0x199)in _0x37a93f['details']){const _0x560385=_0x37a93f['details'];_0x441c9c[_0x2aa85d(0x188,0x175)](_0x560385['start'],_0x560385['end'],_0x560385['width'],_0x560385[_0x2aa85d(0x144,0x11f)],_0x560385['locked']??![],_0x37a93f[_0x2aa85d(0x169,0x165)],undefined);}}}_0x1debcb[_0x2fbb50]=_0x5c36b7;}else{const _0x26294d=_0x505a8a['deferStaging'],_0x54f3f3=pathToTrackBuilder(_0x441c9c,_0xa69b8a,_0xfb5f91,_0x505a8a,_0x223471,_0x146dad,_0x26294d);_0x1debcb[_0x2fbb50]=_0x54f3f3?[_0x54f3f3]:[];}if(!_0x5c36b7){for(let _0x5d7967=0x1;_0x5d7967<_0xa69b8a['nodes'][_0x2aa85d(0x146,0x15c)];_0x5d7967++){const _0x8846f3=_0xa69b8a['nodes'][_0x5d7967-0x1],_0x5ba0c2=_0xa69b8a[_0x2aa85d(0x13d,0x156)][_0x5d7967];if(_0x8846f3['x']===_0x5ba0c2['x']&&_0x8846f3['y']===_0x5ba0c2['y'])continue;const _0x4924ac=ObstacleBuilder['buildFromTrack']({'type':'line','uuid':_0x2aa85d(0x189,0x165)+_0x2fbb50+'-'+_0x5d7967,'layer':_0x8846f3[_0x2aa85d(0x144,0x13d)],'strokeWidth':_0xfb5f91,'start':{'x':_0x8846f3['x'],'y':_0x8846f3['y']},'end':{'x':_0x5ba0c2['x'],'y':_0x5ba0c2['y']}},_0xfb5f91,_0x4a263d,typeof _0x107fab==='string'?_0x107fab:_0x223471);_0xe37179(_0x4924ac);}debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue']('[PCB]\x20Added\x20'+(_0xa69b8a['nodes']['length']-0x1)+_0x2aa85d(0x18a,0x178))),debugLog(_0x505a8a['debug'],a10_0x3f0dd6[_0x2aa85d(0x18b,0x17e)]('[PCB][DEBUG]\x20stagedOutlines='+_0x441c9c[_0x2aa85d(0x18c,0x1bb)]['length']+',\x20tracks='+_0x441c9c[_0x2aa85d(0x18d,0x156)]['length']+',\x20outlines_public='+_0x441c9c['outlines_public']['length']));}}const _0x10400e={'length':_0xa69b8a['length'],'viaCount':_0xa69b8a['viaCount'],'layers':[...new Set(_0xa69b8a['nodes']['map'](_0x9a9aef=>_0x9a9aef['layer']))],'success':_0xa69b8a['success'],'error':_0xa69b8a[_0x2aa85d(0x17e,0x15c)],'path':_0xa69b8a};_0x5299f2['push'](_0x10400e);}}for(const _0x188893 of _0x1debcb){if(_0x188893)for(const _0x8442d4 of _0x188893){_0x11763f['push'](_0x8442d4);}}debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue']('[PCB]\x20Staging\x20'+_0x11763f[_0x2aa85d(0x146,0x183)]+_0x2aa85d(0x18e,0x1ae)+_0x11763f['reduce']((_0x206cf7,_0xf00625)=>_0x206cf7+_0xf00625['getElements']()['length'],0x0)+_0x2aa85d(0x18f,0x1bc)));for(let _0xea8285=0x0;_0xea8285<_0x11763f['length'];_0xea8285++){const _0x5d15ba=_0x11763f[_0xea8285],_0x4d6f8d=_0x5d15ba['getElements']();if(_0x5d15ba['_deferStaging']&&_0x4d6f8d[_0x2aa85d(0x146,0x137)]>0x0){debugLog(_0x505a8a['debug'],a10_0x3f0dd6[_0x2aa85d(0x18b,0x17e)]('[PCB]\x20Staging\x20builder\x20'+_0xea8285+'\x20with\x20'+_0x4d6f8d['length']+'\x20elements\x20(deferStaging=true)'));for(const _0x5b6341 of _0x4d6f8d){if(_0x5b6341['type']==='track'&&_0x5b6341['details']){const _0x44f41f=_0x5b6341['details'];debugLog(_0x505a8a['debug'],a10_0x3f0dd6['gray']('[PCB]\x20Staging\x20track:\x20('+_0x44f41f['start']['x']['toFixed'](0x3)+',\x20'+_0x44f41f[_0x2aa85d(0x17b,0x1b0)]['y']['toFixed'](0x3)+')\x20->\x20('+_0x44f41f['end']['x']['toFixed'](0x3)+',\x20'+_0x44f41f['end']['y']['toFixed'](0x3)+')')),_0x441c9c[_0x2aa85d(0x188,0x1aa)](_0x44f41f[_0x2aa85d(0x17b,0x193)],_0x44f41f['end'],_0x44f41f['width'],_0x44f41f['layer'],_0x44f41f[_0x2aa85d(0x190,0x1c9)]||![],_0x5b6341['uuid'],_0x5d15ba['_net']);}}}else _0x5d15ba[_0x2aa85d(0x191,0x16d)]?debugLog(_0x505a8a['debug'],a10_0x3f0dd6['gray'](_0x2aa85d(0x192,0x1b8)+_0xea8285+'\x20(deferStaging=true\x20but\x20no\x20elements)')):debugLog(_0x505a8a['debug'],a10_0x3f0dd6[_0x2aa85d(0x18b,0x192)]('[PCB]\x20Skipping\x20builder\x20'+_0xea8285+'\x20(deferStaging=false)'));}debugLog(_0x505a8a['debug'],a10_0x3f0dd6['gray']('[PCB][DEBUG]\x20After\x20processing\x20track\x20builders:\x20stagedOutlines='+_0x441c9c['stagedOutlines']['length']+',\x20tracks='+_0x441c9c['tracks']['length']+_0x2aa85d(0x193,0x173)+_0x441c9c['outlines_public']['length']));if(_0x505a8a['debug']&&_0x441c9c[_0x2aa85d(0x18c,0x187)][_0x2aa85d(0x146,0x10c)]>0x0)try{const _0x42b631=_0x441c9c['stagedOutlines']['slice'](0x0,0x5)['map'](_0x182474=>({'uuid':_0x182474['uuid'],'elements':_0x182474['elements']['map'](_0x46c692=>({'type':_0x46c692['type'],'layer':_0x46c692[_0x2aa85d(0x144,0x170)]??_0x46c692[_0x2aa85d(0x17a,0x16e)]?.['layer'],'start':_0x46c692['details']?.['start'],'end':_0x46c692[_0x2aa85d(0x17a,0x17b)]?.['end']}))}));a10_0x25916f['debug']('[PCB][DEBUG]\x20stagedOutlines\x20sample:',JSON[_0x2aa85d(0x176,0x13b)](_0x42b631,null,0x2));}catch(_0x5b7276){}const _0x5bc61f=_0x5299f2['filter'](_0x9ae0a0=>_0x9ae0a0['success'])['length'],_0x2a9881=_0x5299f2[_0x2aa85d(0x146,0x113)]-_0x5bc61f,_0x3038ec=_0x5bc61f===_0x5299f2['length'];debugLog(_0x505a8a['debug'],a10_0x3f0dd6[_0x3038ec?'green':'yellow'](_0x2aa85d(0x194,0x1a6)+_0x5bc61f+'/'+_0x5299f2[_0x2aa85d(0x146,0x17d)]+'\x20routes\x20successful'));if(_0x2a9881>0x0){const _0x19d441=_0x441c9c[_0x2aa85d(0x13c,0x109)](),_0x1318a5=_0x19d441?'\x20(called\x20from\x20'+_0x19d441[_0x2aa85d(0x139,0x10b)]+':'+_0x19d441['line']+')':'';debugLog(_0x505a8a['debug'],a10_0x3f0dd6['red'](_0x2aa85d(0x195,0x17b))),_0x5299f2['forEach']((_0x4aa43f,_0x43f50e)=>{function _0x4c48f7(_0x59110e,_0x4a46fa){return a10_0x1651(_0x4a46fa- -0xc3,_0x59110e);}if(!_0x4aa43f['success']){const _0x125f1c=_0x4aa43f[_0x4c48f7(-0x95,-0x69)]||_0x4c48f7(-0x51,-0x51);debugLog(_0x505a8a[_0x4c48f7(-0x85,-0xc1)],a10_0x3f0dd6['red'](_0x4c48f7(-0x57,-0x50)+(_0x43f50e+0x1)+':\x20'+_0x125f1c));}}),console['warn'](a10_0x3f0dd6[_0x2aa85d(0x147,0x11a)]('[PCB]\x20WARNING:\x20Some\x20routes\x20failed.\x20Check\x20routing\x20constraints\x20and\x20available\x20space'+_0x1318a5));}if(_0x505a8a[_0x2aa85d(0x126,0x132)])try{const _0x4f7d35=0x1;DebugVisualizer['visualizeAllLayers'](_0x49949e,_0x3a4a7d,_0x5d0d4d,'routing_debug_'+(_0x223471||_0x2aa85d(0x161,0x170)),_0x4f7d35,undefined,_0x505a8a['debug']);}catch(_0x242945){console[_0x2aa85d(0x198,0x186)](a10_0x3f0dd6['yellow']('[PCB]\x20Failed\x20to\x20generate\x20debug\x20visualization:\x20'+_0x242945[_0x2aa85d(0x199,0x181)]));}if(_0x3ae0b7['length']>0x0){debugLog(_0x505a8a[_0x2aa85d(0x126,0x10b)],a10_0x3f0dd6['blue'](_0x2aa85d(0x19a,0x1d1)+_0x3ae0b7['length']+'\x20provided\x20route(s)...'));for(const _0xd1b72b of _0x3ae0b7){let _0x5d773e;_0xd1b72b&&typeof _0xd1b72b==='object'&&'routeDetails'in _0xd1b72b&&Array['isArray'](_0xd1b72b['routeDetails'])?_0x5d773e=_0xd1b72b['routeDetails'][0x0]['path']:_0x5d773e=_0xd1b72b;const _0x371479=_0x5299f2[_0x2aa85d(0x19b,0x1c5)](_0x4ce076=>_0x4ce076['path']===_0x5d773e);if(!_0x371479){debugLog(_0x505a8a['debug'],a10_0x3f0dd6[_0x2aa85d(0x154,0x134)]('[PCB]\x20Provided\x20route\x20was\x20not\x20used\x20during\x20routing,\x20adding\x20it\x20now'));if(_0xd1b72b&&typeof _0xd1b72b==='object'&&_0x2aa85d(0x167,0x19c)in _0xd1b72b&&Array['isArray'](_0xd1b72b)){for(let _0x576578=0x0;_0x576578<_0xd1b72b['length'];_0x576578++){const _0x51838b=_0xd1b72b[_0x576578];_0x11763f['push'](_0x51838b);const _0x5b0a9e=_0x51838b['getElements']();for(const _0x494242 of _0x5b0a9e){if(_0x494242['type']==='track'&&_0x494242['details']&&'start'in _0x494242['details']){const _0x46b190=_0x494242['details'];_0x441c9c['_track'](_0x46b190['start'],_0x46b190[_0x2aa85d(0x12c,0x158)],_0x46b190[_0x2aa85d(0x17c,0x189)],_0x46b190['layer'],_0x46b190['locked']??![],_0x494242['uuid'],undefined);}}}debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue']('[PCB]\x20Reused\x20'+_0xd1b72b['length']+_0x2aa85d(0x19c,0x174)));}else{const _0x55caac=pathToTrackBuilder(_0x441c9c,_0x5d773e,_0xfb5f91,_0x505a8a,_0x223471,_0x146dad);_0x55caac&&_0x11763f['push'](_0x55caac);}const _0x42b4b2={'length':_0x5d773e['length'],'viaCount':_0x5d773e['viaCount'],'layers':[...new Set(_0x5d773e[_0x2aa85d(0x13d,0x162)][_0x2aa85d(0x140,0x14f)](_0x11a1fc=>_0x11a1fc[_0x2aa85d(0x144,0x16c)]))],'success':_0x5d773e['success'],'error':_0x5d773e[_0x2aa85d(0x17e,0x162)],'path':_0x5d773e};_0x5299f2['push'](_0x42b4b2);}else debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue']('[PCB]\x20Provided\x20route\x20was\x20already\x20used\x20during\x20routing,\x20skipping\x20duplicate'));}}if(_0x505a8a['lengthMatch']&&_0x5299f2['length']>=0x2){if(!LengthMatcher){console['warn'](a10_0x3f0dd6[_0x2aa85d(0x147,0x142)]('[PCB]\x20Length\x20matching\x20requested\x20but\x20@typecad/typecad-astar\x20is\x20not\x20installed.\x20Skipping\x20length\x20matching.'));const _0x5e53ef=_0x11763f;return _0x5e53ef[_0x2aa85d(0x175,0x157)]=_0x3038ec,_0x5e53ef['routeCount']=_0x5299f2['length'],_0x5e53ef[_0x2aa85d(0x19d,0x18c)]=_0x5bc61f,_0x5e53ef['routeDetails']=_0x5299f2,_0x5e53ef;}debugLog(_0x505a8a['debug'],a10_0x3f0dd6['blue']('[PCB]\x20Applying\x20length\x20matching\x20to\x20'+_0x5299f2[_0x2aa85d(0x146,0x124)]+'\x20routes'));try{const _0x3fded5={'pcb':_0x441c9c,'grid':_0x49949e,'traceWidth':_0xfb5f91,'clearance':_0x4a263d,'net':_0x223471,'locked':_0x505a8a[_0x2aa85d(0x190,0x1a6)]||![]},_0x5b7a73=LengthMatcher['apply'](_0x3fded5,_0x5299f2[_0x2aa85d(0x140,0x107)](_0x4c7047=>({'path':_0x4c7047[_0x2aa85d(0x182,0x182)],'success':_0x4c7047[_0x2aa85d(0x175,0x185)]})),_0x1debcb,_0x505a8a['lengthMatch']);for(const _0x4df631 of _0x5b7a73[_0x2aa85d(0x19e,0x17d)]){_0x5299f2[_0x4df631['index']]&&(_0x5299f2[_0x4df631['index']]['length']=_0x4df631[_0x2aa85d(0x19f,0x196)],_0x5299f2[_0x4df631['index']]['path']&&(_0x5299f2[_0x4df631['index']][_0x2aa85d(0x182,0x19b)][_0x2aa85d(0x146,0x12b)]=_0x4df631['newLength']));}_0x11763f['push'](..._0x5b7a73['builders']),debugLog(_0x505a8a[_0x2aa85d(0x126,0x100)],a10_0x3f0dd6['green']('[PCB]\x20Length\x20matching\x20applied:\x20'+_0x5b7a73[_0x2aa85d(0x19e,0x161)][_0x2aa85d(0x146,0x15b)]+_0x2aa85d(0x1a0,0x18d)+_0x5b7a73['builders']['length']+'\x20new\x20tracks\x20added'));}catch(_0x4d4206){debugLog(_0x505a8a['debug'],a10_0x3f0dd6['yellow']('[PCB]\x20Length\x20matching\x20failed:\x20'+_0x4d4206[_0x2aa85d(0x199,0x197)])),console['warn'](a10_0x3f0dd6['yellow']('[PCB]\x20WARNING:\x20Length\x20matching\x20failed,\x20continuing\x20without\x20it:\x20'+_0x4d4206[_0x2aa85d(0x199,0x164)]));}}const _0x2f8d51=_0x11763f;_0x2f8d51[_0x2aa85d(0x175,0x15e)]=_0x3038ec,_0x2f8d51[_0x2aa85d(0x1a1,0x18c)]=_0x5299f2['length'],_0x2f8d51[_0x2aa85d(0x19d,0x1bd)]=_0x5bc61f;function _0x2aa85d(_0x55cda0,_0x24cd90){return a10_0x1651(_0x55cda0-0x124,_0x24cd90);}return _0x2f8d51[_0x2aa85d(0x167,0x198)]=_0x5299f2,_0x2f8d51;});}