From 058003f395d3a88322094c3a07bf86dcd25ab7c2 Mon Sep 17 00:00:00 2001 From: iamboss Date: Sat, 23 May 2026 21:23:06 +0800 Subject: [PATCH] rename XFactory.Regs to XFactory.Generators. --- App/Hi.WpfPlus.dll | Bin 71168 -> 71168 bytes App/HiCbtr.dll | Bin 127488 -> 127488 bytes App/HiDisp.dll | Bin 11493376 -> 11493376 bytes App/HiGeom.dll | Bin 431104 -> 431104 bytes App/HiLicense.dll | Bin 81920 -> 84480 bytes App/HiMech.dll | Bin 1140224 -> 1184256 bytes App/HiNC-2025-win-desktop.deps.json | 150 +- App/HiNC-2025-win-desktop.dll | Bin 894976 -> 893440 bytes App/HiNC-2025-win-desktop.exe | Bin 215552 -> 215552 bytes App/HiNC-2025-win-desktop.pdb | Bin 337840 -> 336904 bytes App/HiNc-Resource.dll | Bin 56320 -> 56320 bytes App/HiNc.dll | Bin 402432 -> 402944 bytes App/HiUniNc.dll | Bin 186880 -> 187392 bytes App/en/HiGeom.resources.dll | Bin 4608 -> 4608 bytes App/en/HiMech.resources.dll | Bin 4608 -> 4608 bytes ...i.Common.Collections.LazyLinkedList-1.html | 53 + ...XmlUtils.XFactory.XGeneratorDelegate.html} | 14 +- .../api/Hi.Common.XmlUtils.XFactory.html | 12 +- .../HiAPI-docsite/api/Hi.Common.XmlUtils.html | 2 +- .../Hi.MachiningProcs.SessionProgress.html | 31 + ...arsers.Dependencys.CncBrandDependency.html | 2 +- ...ys.Fanuc.FanucGotoIterationDependency.html | 531 ++++ ...cys.Fanuc.FanucPositionVariableLookup.html | 153 +- ...s.Fanuc.FanucToolOffsetVariableLookup.html | 121 +- .../api/Hi.NcParsers.Dependencys.Fanuc.html | 56 +- ...rsers.EvaluationSyntaxs.CallStackUtil.html | 322 ++ ...axs.Evaluation.IRuntimeVariableLookup.html | 19 +- ...yntaxs.Evaluation.LocalVariableLookup.html | 181 +- ...uationSyntaxs.Evaluation.NcBinaryExpr.html | 14 +- ...aluationSyntaxs.Evaluation.NcBinaryOp.html | 39 + ...taxs.Evaluation.NcExpressionEvaluator.html | 16 +- ...Syntaxs.Evaluation.NcExpressionParser.html | 47 +- ...axs.Evaluation.VolatileVariableLookup.html | 176 +- ...cParsers.EvaluationSyntaxs.Evaluation.html | 120 +- ...aluationSyntaxs.Fanuc.FanucGotoSyntax.html | 526 ++++ ...uationSyntaxs.Fanuc.FanucIfThenSyntax.html | 473 +++ ...Fanuc.FanucLocalVariableReadingSyntax.html | 531 ++++ ...onSyntaxs.Fanuc.FanucMacroArgumentMap.html | 223 ++ ...ionSyntaxs.Fanuc.FanucMacroCallSyntax.html | 487 ++++ ...nuc.FanucModalMacroSyntax.SyntaxPhase.html | 191 ++ ...onSyntaxs.Fanuc.FanucModalMacroSyntax.html | 547 ++++ ...nuc.FanucSystemControlVariableSyntax.html} | 44 +- .../Hi.NcParsers.EvaluationSyntaxs.Fanuc.html | 396 +++ ...rsers.EvaluationSyntaxs.LabelScanUtil.html | 277 ++ ...yntaxs.MacroFileResolver.ResolvedFile.html | 345 +++ ...s.EvaluationSyntaxs.MacroFileResolver.html | 338 +++ ...ers.EvaluationSyntaxs.MacroInlineUtil.html | 338 +++ ...s.RetainedCommonVariableReadingSyntax.html | 2 +- ...valuationSyntaxs.SubProgramCallSyntax.html | 10 +- ...luationSyntaxs.SubProgramReturnSyntax.html | 115 +- ...uationSyntaxs.VariableEvaluatorSyntax.html | 13 +- ...Syntaxs.VolatileVariableReadingSyntax.html | 2 +- .../api/Hi.NcParsers.EvaluationSyntaxs.html | 188 +- .../api/Hi.NcParsers.ISentenceCarrier.html | 185 ++ .../api/Hi.NcParsers.ISentenceIndexed.html | 211 ++ .../api/Hi.NcParsers.IndexedSentence.html | 362 +++ ...rsers.InspectionSyntaxs.CleanupSyntax.html | 2 +- ...ctionSyntaxs.ProgramXyzBackfillSyntax.html | 2 +- ...sers.InspectionSyntaxs.SnapshotSyntax.html | 2 +- ...spectionSyntaxs.UnconsumedCheckSyntax.html | 2 +- .../api/Hi.NcParsers.Keywords.CallFrame.html | 244 ++ .../api/Hi.NcParsers.Keywords.CallStack.html | 255 ++ .../api/Hi.NcParsers.Keywords.FanucGoto.html | 362 +++ .../Hi.NcParsers.Keywords.FanucIfThen.html | 341 +++ .../Hi.NcParsers.Keywords.FanucMacroCall.html | 390 +++ ...Hi.NcParsers.Keywords.FanucModalMacro.html | 386 +++ ...Hi.NcParsers.Keywords.IMotionEventDef.html | 23 +- .../api/Hi.NcParsers.Keywords.MacroFrame.html | 275 ++ .../Hi.NcParsers.Keywords.SubProgramCall.html | 36 +- ...i.NcParsers.Keywords.SubProgramReturn.html | 50 +- .../api/Hi.NcParsers.Keywords.html | 189 +- ...cParsers.LogicSyntaxs.BareG28Behavior.html | 387 +++ ...ers.LogicSyntaxs.CircularMotionSyntax.html | 155 + ....NcParsers.LogicSyntaxs.CoolantSyntax.html | 22 + ...LogicSyntaxs.FanucPathSmoothingSyntax.html | 31 + ...NcParsers.LogicSyntaxs.FeedrateSyntax.html | 29 + ...ogicSyntaxs.G53p1RotaryPositionSyntax.html | 2 +- ...hain.HeidenhainCoordinateOffsetSyntax.html | 73 + ...LogicSyntaxs.IncrementalResolveSyntax.html | 49 + ...ogicSyntaxs.IsoCoordinateOffsetSyntax.html | 79 + ...ers.LogicSyntaxs.IsoG68RotationSyntax.html | 87 + ...yntaxs.IsoLocalCoordinateOffsetSyntax.html | 69 + ...rsers.LogicSyntaxs.LinearMotionSyntax.html | 44 + ...LogicSyntaxs.MachineCoordSelectSyntax.html | 41 +- ...rs.LogicSyntaxs.McAbcCyclicPathSyntax.html | 81 +- ...Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html | 31 + ...s.LogicSyntaxs.McAbcXyzFallbackSyntax.html | 41 + ...Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html | 49 + ...arsers.LogicSyntaxs.PlaneSelectSyntax.html | 22 + ...arsers.LogicSyntaxs.PositioningSyntax.html | 24 + ...rs.LogicSyntaxs.ProgramEndCleanSyntax.html | 51 +- ...Parsers.LogicSyntaxs.ProgramEndSyntax.html | 14 + ...arsers.LogicSyntaxs.ProgramStopSyntax.html | 17 + ...Parsers.LogicSyntaxs.ProgramXyzSyntax.html | 33 + ...NcParsers.LogicSyntaxs.ProgramXyzUtil.html | 10 +- ...rs.LogicSyntaxs.ReferenceReturnSyntax.html | 75 +- ...NcParsers.LogicSyntaxs.RotaryAxisUtil.html | 10 +- ...Siemens.SiemensCoordinateOffsetSyntax.html | 74 + ...rsers.LogicSyntaxs.SpindleSpeedSyntax.html | 25 + ...Parsers.LogicSyntaxs.ToolChangeSyntax.html | 26 + ...s.LogicSyntaxs.ToolHeightOffsetSyntax.html | 91 + ...NcParsers.LogicSyntaxs.UnitModeSyntax.html | 19 + .../api/Hi.NcParsers.LogicSyntaxs.html | 56 +- .../api/Hi.NcParsers.NcDiagnostic.html | 27 +- .../Hi.NcParsers.NcDiagnosticProgress.html | 100 +- ...arsers.ParsingSyntaxs.BlockSkipSyntax.html | 14 + ...axs.CommentSyntaxs.QuoteCommentSyntax.html | 13 + ...taxs.CommentSyntaxs.TailCommentSyntax.html | 15 +- ...Parsers.ParsingSyntaxs.CsScriptSyntax.html | 2 +- ...gSyntaxs.Fanuc.FanucGotoParsingSyntax.html | 495 ++++ ...yntaxs.Fanuc.FanucIfThenParsingSyntax.html | 485 ++++ ...ntaxs.Fanuc.FanucProgramNumberSyntax.html} | 72 +- .../Hi.NcParsers.ParsingSyntaxs.Fanuc.html | 210 ++ ...i.NcParsers.ParsingSyntaxs.FlagSyntax.html | 2 +- ...arsers.ParsingSyntaxs.HeadIndexSyntax.html | 15 +- ...xs.Heidenhain.HeidenhainBlkFormSyntax.html | 43 +- ...ntaxs.Heidenhain.HeidenhainCallSyntax.html | 28 +- ...gSyntaxs.Heidenhain.HeidenhainLSyntax.html | 24 +- ...yntaxs.Heidenhain.HeidenhainLblSyntax.html | 24 +- ...taxs.Heidenhain.HeidenhainPlaneSyntax.html | 44 +- ...xs.Heidenhain.HeidenhainProgramSyntax.html | 20 +- ...s.Heidenhain.HeidenhainToolCallSyntax.html | 22 +- ...i.NcParsers.ParsingSyntaxs.Heidenhain.html | 6 +- ...ers.ParsingSyntaxs.NumberedFlagSyntax.html | 2 +- ...arsingSyntaxs.ParameterizedFlagSyntax.html | 2 +- ...gSyntaxs.ShrinkIfNoDecimalPointSyntax.html | 2 +- ...ers.ParsingSyntaxs.TapeBoundarySyntax.html | 19 +- .../api/Hi.NcParsers.ParsingSyntaxs.html | 10 - ...ers.PostLogicSyntaxs.ModalCarrySyntax.html | 26 +- ...LogicSyntaxs.RadiusCompensationSyntax.html | 2 +- .../api/Hi.NcParsers.PostLogicSyntaxs.html | 22 + ...arsers.Segmenters.SingleLineSegmenter.html | 2 +- ...sers.Semantics.CompoundMotionSemantic.html | 2 +- .../api/Hi.NcParsers.Semantics.html | 2 +- .../api/Hi.NcParsers.SoftNcRunner.html | 2 +- .../api/Hi.NcParsers.SoftNcUtil.html | 38 +- .../Hi.NcParsers.Syntaxs.BundleSyntax.html | 2 +- .../api/Hi.NcParsers.Syntaxs.SyntaxPiece.html | 23 +- .../HiAPI-docsite/api/Hi.NcParsers.html | 31 + .../Hi.Numerical.FilePlayers.CsvRunner.html | 5 +- .../api/Hi.Numerical.HardNcLine.html | 54 +- .../api/Hi.Numerical.SourcedActEntry.html | 20 +- App/wwwroot/HiAPI-docsite/api/toc.html | 102 +- App/wwwroot/HiAPI-docsite/api/toc.json | 2 +- .../fundamentals/common/xml-io.html | 2 +- App/wwwroot/HiAPI-docsite/index.json | 358 ++- App/wwwroot/HiAPI-docsite/manifest.json | 454 ++- .../HiAPI-docsite/release-note/index.html | 7 + ...mple.MachineTool.DemoBuildMachineTool.html | 2 +- App/wwwroot/HiAPI-docsite/xrefmap.yml | 2584 ++++++++++++++--- App/zh-Hans/HiMech.resources.dll | Bin 13312 -> 13312 bytes App/zh-Hans/HiNc.resources.dll | Bin 4608 -> 4608 bytes App/zh-Hant/HiGeom.resources.dll | Bin 4608 -> 4608 bytes App/zh-Hant/HiMech.resources.dll | Bin 13312 -> 13312 bytes App/zh-Hant/HiNc.resources.dll | Bin 6656 -> 6656 bytes 155 files changed, 16416 insertions(+), 1261 deletions(-) rename App/wwwroot/HiAPI-docsite/api/{Hi.Common.XmlUtils.XFactory.GenByXElementDelegate.html => Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.html} (92%) create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html rename App/wwwroot/HiAPI-docsite/api/{Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html => Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html} (81%) create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ISentenceCarrier.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ISentenceIndexed.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.IndexedSentence.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.CallFrame.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.CallStack.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucGoto.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucIfThen.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucMacroCall.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucModalMacro.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.MacroFrame.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html rename App/wwwroot/HiAPI-docsite/api/{Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html => Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html} (72%) create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.html diff --git a/App/Hi.WpfPlus.dll b/App/Hi.WpfPlus.dll index ac63ce7e8499390d670ccefa009f96798ea3faaf..f05cdce2106fa759474c78f800ceb9c0541ad554 100644 GIT binary patch delta 318 zcmZoz!_u&ZWkLsw$-B23Hui|fGj>m2C~wI)aq?~XZpOCF=?XK&1kB}TU0}ao=HB3U z&}{L6_LR*6=KEMJE%gi-7)%)%42<;*^$d+IwN1^EQjC&QEKJi(3=GnYQxg+SQw+^a z5>t&$jgl?XlFZVQ(vl5Kk|(p+Xy5Z+_y-AxD?cOp@4q)Wn%;#|B9A`HJBLg!714H-r*L;jC z85u3NPZeOyXAHJv&}J}YFk?t!NMSHyNCuJ?Kz0zX)Vtpyf+@bB~L zQb?NpL1D9i`94-l3q1n{22(}`17kfyJwsy)?bK8gQ`2MvL*wLR1LLHWq!c4FBU5t& zLnD(Eb3;p0ES|*mOu+83Nhw00|3t+T@L^N diff --git a/App/HiCbtr.dll b/App/HiCbtr.dll index 8ef933a1d5252410c06a92e13a5f1bd38aa25258..f42d7023210fb3dde7ecbd3dfeaec572fd8f44f3 100644 GIT binary patch delta 13890 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 G^8Wz}NVYNn delta 13887 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

t0g)xrLMt-`+^-G4;-e-)@2 zVtWt2(oX+HLDWvqV4Wo#j!JjN2cW~BGe&Gp4gXrMe{!~!T^;xzJT>a1{K~-pW!&~X z|4Vgy|H>@3H@ms51~k+}Ax>0^U-pFGOQ1HP1gc!^6LygNE9@!3X$vJkDnQBKAF$i? zFv@AiSN20qcDoVIr`YW#XyKJN(M?wEJ&a+A>P?L&o(tL&QHIpgdKjSn#X zay{`)5Eb?MC8E9SoA=Sp!^H9VtZO`Z$iRJsKRa?ei1n5xq3p_yO8=0RPc z4vNug8Gc7W9!jA(b2F4-dmEHPC}I~>VtX%sKh@}Of@z4&P!0I_c?1uW()00aFfyx$ zTE_+02sXoI{H4Fqf0Ye%Vlq4xw1_?Mh0%%lw~V9cdYC65_5r=QXl6VGY1S_IgXZ{P zH_?K&y+kYG{lYBhku4fAABsgz>}ABP6vF+Ufpj>ZK=@SpW#}j9m2w_T4}2_2(cqK_ zA)ZC-tD;!khEDT2fl9n{y|z0Q>sl&J7LOV5<+w09 z$bT*lnJ4z(`_g{GD_s?N;tAFUW1p7t;f~-^X&R2T5|Lg^m%>NJEogheco}L@UMe+< zo=N|Zj$^wSKQr88D8kP|+-aAkbK<_VYtjWV%{~|79~)tkF9@uwpAP;sxfL;=6YGXQ zc}x%Vl7*xuw$^w`kYusE5w=BRaM*5<`w4n;UW&*@sbEimnZY91WVl0^wknQ z01bjGY15%nx+7SFTIyeoJsVKI$1qeX$M!Z1eo}oXw+ljc>zSFQzdQX4AK;=Db z$dfwZlVganMLM0CYdnX>&2UQEukUFz%Z>gm#%7+@W;o~EVWcJeXO=hNnxj{Z%}{GU zXbj4m%f9K%qIzPnj+qIZeqO~4zgwza^#dJ6>g+-ZuInX2GexA_zjK`(-oSm$t5bo~ZXIw5% zb{85}%O^4mtjpz5zI=S^P4m5<<9(aseVgNbpNFCI$5LxE$oSrL0#sUtO389Zqcvii z{B@Q+Vvjt=>x($SwrAM(4BIBlnOw7ItZTAdm{Dl>5*iCIox@sL?!F&8Hb|cQPKe`f#*MP__DDyE?iIu{JtiRHYAd3>jnB|X<~yo&O~I1rJoq}R$aWisRRlVYp+BcFh;fhHFV%;$QS9(V3};C##+DCbxV>8U z@AzxZ33LX+ulaP|_!!ql-ShZG+eY16o@V_<-Iui3rCGKzJ>e@l!VyxXyvkhYdW>Dn zKpYS`g9o00H@lPVHi(b9~ooZrH~f856>LG$5$_<@LmSBpTKq{JcC${tBTIEjsD&4 zQ&LpKU){&0JY5r<(oJw2a_2#Fpv8SocRKT!n}W;7i|Fyx({2ig+Kv9t-4{^%jk{GR zM3kphH^mX-5&CYyfTuKCPf^Dq;`JPHh$jybuVReFjQto(8Os>U87mnlGfqRyhiZM} zcIO-aGTTaBL-1+DC5=ZcSM+}ihJVazmHYIqKXON#b?)lF+O3$M!!Y95D zWWq~~s<#@~n^wG!UV;aJS`%SQW(#)GCw_pawqJIUyZcivqGYYpiMR2sJiv_DIBctx zI2WY#F~myPnG3$svjT7R2RLc?QAsaiyCQP~;>OrNA#O_Vf=?QGNw+wmNQ?Sqj`tqM z#7r7eXQY5+nOwxB_KLyJwS#vfs`9w)r{1>d<+U-pl?yGCqwfvkf)ZC6MbgY+Vus=n*jr}c=hS7t+SSnTXak(@=NBlX-WTE5Auq6Aaku3j~4O8Vmq!3S& zb>u+Gkmp(Hh<6xXI%dmrIFKB93BP9;Wj*u6R+!v zIpRiL2A6D~ZX#!7*1zqi0j&CuxWqPn6TJx(QF;>x8m(`_?|VTw^()yvM&BRbsO+u- z{H|A5MNdcqpNX#j9a6&Y`@&CNr_dLlAOY{P+WrK1Qf`+0gl`Z3v)^lJBqRR|slk6Q z;iL0^_B+A-+Kr(@lOu}%Xhsk}D!ZxsSGZUH(?ydq@o2Ir*%fG!#QC@!G_P39{XtnjNc)0hpVI>nPCRRNB*!HRa zT;!DRt$1*|?$UT^`>fW{rqtW|6yFx=63Xe4*SjPqzod7UoZg{=yquy?UZ>7o3VRn9 z-(Ij(CyA86|Dxl}rFTlAr+wf%`k9IS8-7!F($(vavj?5qwM-J*VncbkodCKD=+q@Q zFE=kgFT3-Y!t$a{qsvEkE*f1iwqR^gVJMV8s?+Ggv7NhA6pbkeg(?cmyX1{o`h-t> zAPtLOTAeE5cRdm>R)}4Z31Y=N<^@ O^B@;G(Z3N}^M3&1V7p@g diff --git a/App/HiDisp.dll b/App/HiDisp.dll index 19fb2b4a7775bc9e7b7e5a6ad8c573f30ff7dc7b..c05a32c6f3ea813beef089e7c8a29f16edcab1b3 100644 GIT binary patch delta 95806 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 z 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 AivR!s delta 95803 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 diff --git a/App/HiGeom.dll b/App/HiGeom.dll index 72de11884798ac9d8b80cbb7a71ff890986a2c00..38e96acf5b24aa95e794d8ac40e68735809a0d36 100644 GIT binary patch delta 96701 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 b?oua$fx~yHm$0f&CN@iVt1qzoVl@8`?kvi# delta 96874 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 a)W(5<`UkbkSj`=inxx-qudsU}bpH<^fsQ8t diff --git a/App/HiLicense.dll b/App/HiLicense.dll index b72f5cb581724e354993d0a5885e2f4c95e4b605..54c313b4cd6e93e270e2497d2a51a6d4a03ff301 100644 GIT binary patch delta 12155 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%0A>1~_t^)I0Qgf;Cn`hHz*fG0WCoNzOb7k2vUdTbn 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 diff --git a/App/HiMech.dll b/App/HiMech.dll index e360be2620db5f113114cea888adbab4d44d0bfc..bd6106926d733c3812a11f9ed2d0c45577084cf9 100644 GIT binary patch literal 1184256 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

cW;08okm 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

-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%0A9C3Q5%$CLW=;sNzN(m(2#We9~JK7|)! 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%0D=bsu5`Qm zer;OsE{{8{6!uhUmb_(xx?no;r+&+8qFXDovxC-b*zoifK73sE2v+n{c+taZTHER< zP z`e1^sh{Npq%Ffw2d&=PEA67oTYj(&cWcVQ+qo%b7{&_hmHMMFe-tOOtx4L6vV#@mi z@7aALUl;D1yscxe)tiJsg+Y@hnQPY$T@KqDak#R}#Pr}_U0gq6s(b53n~agAMWY45 zKk>IN3kSQqw@5rvcpsjnnkfS_)4?5vC*3-42Z`>Ryt|`LyAJVFE;`B;FV_Xi)!#x>eJw_qDeDrNzTG!6#-lfAa*a zy9z6~6ztx&@ADx@Ym`yz}p6jfBM+Pu@@b&DptW zwUmKDsmJa*Z`!=Me7(=2$uhg*_rKVxIb>=#13mn)W#`WKtCS=hKFWLvNQ>U;gR5*PC$J*)axtZMQ$~H76~thOz!s-Q~-c z#lD5`?a`@ICoM}$%e%#qRPl(`O{TZLF>v1|hvVv_7k+*>ahKm*V?p1|Waz5jx^?gF z>f++Ea^1Se_c0hvi(bB5w%_OMtEhQzEaqE)VhT%2?csYnG$A6QWD>^h7{o!Ngec7q zmyfQ9E*ogkw|>U-_QJK&n+`(O=_hRxl7;8$t%T9Gwo|WPAAkAg&0be>b6>|Cad};` z^74}?kl)uWj2@MiPjzO#zpmT(7Q#QBAVy)Os&J1=|J0llu@u;IwXi+aKeWW+mV*9RSg z&`mB3nHweaoE5TX(rE4bmK6rZ{gz*vym4cDd$rTuh1)Z&PwySxGj70@Zi_EioLY6D zYED7AO~=&1%@fwHZGHLr^$#r#^hCRmkhha(op~^D;dqBe?ULf>&pCE%5GIkBsHnZM z;MP9ZZ`{ZUK%h1L=tRTxQ_ITsWgRosZK+?ahrKBoUQJ7_)Be&8 zQwBL$#qDpWcdg_>v}T2&b)&()&3nXeYPzy#(Z0ZSonF0o;WKR5u#%cJYrfJ-I#L3H zt_d?;JepncEPGkp3F?zU*a zow>F#-9BybbT+CLf9dg{ZjE*(4A4Jx`psN_ivwki`iD0wm|cIL@7>b!*jpPR^UhjU z?f0qJqV}fjYxZ_@47RrM}b0;X+);dWPw3wrt&6d=$i7 zaO=-MBMTlq@*LSxf9nMYyXWQ;2jpHfssFNY8jS^{$yS^5`R&vk{Jc%;=dSy_xQ?N5 zg-4gEgPY&=9Xa}#BR#X%xN95mR;fRyx?#wW0 zBdanx9>VqR-fr>SsLu2(RHiz;VqU+osW-&-t9STGSE4a%SMWLuIo&2!_=%L!RuLiNS{> zrw|>B(ACwAegSWKx?atiaTeMWmRPhLky8-&@ctV!i<>jgj&0qh4S2HAs8OR1xnq{N zh2W;vuHC!4c6lFJ9`kwF(n!qHOZ0nCpmrHOJWP*s}NGu`{FI^?C8ZYT}aD`g?7Bx-4AneI&}# z@=~Z}#3gv={mY66H=ppw4QIW^_1ep-8%-{|9#me>uwS$dG__AMASjN&`W5{CF48Q} z(m_A3N>r16c`qLB>8Ticdbn%wL-XqSMep+-1$V4B$jmUp!P!J~sFJ%k<&o9R)H1t= zZzn8YdXi={dFGwPCr@-6X)e@KKiW-gWRhu>ZZ%%#CiWQN-Nn&^C}Kr0q0g6Nhn(O^X{Q%bq)^!b}r}U z7D8~wl)x`h($U!XAf)p4c|yOrXExXkE^AYNT=%9&YgjZ>e0l}Nu%r|Ntd@Sty@S^0 zC5s>4-SzR)t8L9kmyf#9;jP-~F_}eci`JA3-xHQu)F^r3%F?xS)RKh}YOZ!Uev9-n zw#^6?T6Y|Kt()$XMO81jr|7$1Zh#k2%}7&zh$z?eefuqAbJpy9xV(C^eofO)T`)Ha zzH{Zt$#d8G%-L-Yq)y5HI4xV7l+Z~OjJyB~_ZBd#9-Z(wY2K9r=$8rRNQ-~Gt6`_f zmv7G;G~L87{nkfwnXHx2Gu$>S^ueF|qeqN!(L6h0dV+)g=a~j#o36{lV+`|F-@iOF zyHTeLdHGESo?3l+%Ag6uGt@sXowMvl(TSTk8~)s*M>)hni_138&y5;o8J+67DfV*x zn9FzL%Cp7y`_^4ao7bhPLcf`2MPbbfy!&);GiJDggEVX69>>JgOnLhVc6Z&j4Z+Bvc#RGR)3-vQM z4%baQb$@FMgHX{UZBKCx582vv=VL1xSzA1?yF4lIL7RR3$E-cjUT%7|*~CecmXpF{ z0fpqfO~-J%wRL}gX#7fj%Zat!d-RCASyon70-}vR^X%EiQRAXufe7Y4`Sac^id@q) ze|3w6BjC$98eXmK@uAaJjJ_D(SD0mgG$PopEcv(GPd#5YTVA^IeoOmSH)jrdT%}`` zRz{f6S0Xxor^e)CO?6TRiU&7uesOHz6fvakrI)+T*gL72O?;=_Z~3d2&|pb^=6J#0 zD=sTD5S~}Nq}KcMeyirM!Vf&CKkQPqS}jNQy{kER-Q1DI120~>HLbYG^3fA#UVQuN zwAtk7j%yrzPToA!W^#>@SCZEjyr5KnLKG40z?U)WPKrRQ}x_NV}`=9a;i|hjqIgD9f-RMQq8vggf%x0nuEIKX^ZV11*4 zIo>y~tsKbqH`#+Gczuk2AESIu%gSwgjw56`lu2$WuilV5t%Tp}wPG7Xf|6_wI zQ3Eqaug=bXbpc9tP3XC?XH936L;Xx#Ui7wkP{S&UjfaZ*_v*DbXaD}vV~CJBAKJMy zCDLr!Z$UW=#&oP=eo7uvdrEYR!|Ki^&|+#Z{9 zC#(DY?%LkXo7`A;DMNkAsrwc!^&8eRAF!f>OFLoygO{&E<>xzHzIN?>4s`FF z4eQr`T;kf`%x*XP?T-yLrVL#Ln-!+_^E*%;f?x@V^AOM*+NFDTlAZmCjQekQ_(1{7 zi=y6OX|?7wD%sP%*||s0pX;VK?SCEpJk-TNFQ-o(ofuMI zR@QPm+im28TaO11aF@gI{pC}kR{tr;HJ=H$LfjUp{nr{dZrm3n5x!@At|EVA-G*D+ zq|{0qnqkq>e+BO6>ouM=+%izZRddH{wLjB__BtBZIOSyW?dsb;;tld0<>lqqQB%{N zusrr*3C;9LX3LsJ-B0V$yk^sW2VR~#q#tEc_wd!Lby6o!j#)02Juc|cxpT1wRO)PW z_{omaPvsReQtR!ueURIv@Vuc}|Ng_w40jKjykxTF*~GGFd9_HL?8UQojPzR{b0%@6 z@UF#$@(BlC8r9s}WR}Tbi&LYjy|-R5X|-3*jvdKx!jhbc%Z2H&4z35UNDnMF&h!(-A$V` ziCMjIzGshCA5Aa+ zDL(9xQnkUXqs_xt)vaP-^GW@Bn(ZU=R9lyWUcaS04Ds4(y!hDh zK)k}s`gPMw(MhZeG?Ot*mFRS z^UZ>Spy7MfJ{()!vu8WCWsB_EZg{*_=h9Dwzg)auyyDOy!@hm{!cX#HLGa2^F)@8l zo;rospcAG}tv15a@_u2V07X8_WyE-^M?I^pP7|BY$ZUIO=IUR9K75LvnGzQr?O))B zSyuPh;XnS+2Y0;0yKNQldt9_e@I3a-jo24ADqcrTs2;df-J4c46}|=L6ytOCAg|a@tt4Y2pzhgzZO<8z<}JF-CW=U+dCr_wJolI%M&xBLV_m_>o~T z5l^bk&3mNV^X2{G(e*wZFKgOq*tlPYjDFU$cjiY}udvexMnv>z)VOiiSrJd{dIrUd zcK{#Ewd7;2W>If6!S#?|CM7G@M7(HT!?E+Sq_cfjl>QC|1J!?HjttbzZt(=6Oft7vug+O?E< z^Xg4Ly84oSt;p!;84DLS95G@9_~Dl4(=`i|tahH-`@~^YRg(rnLVTB>OmFNtTg}p} zoyDkjYd4MZJvCI=`Ygn}_n70Q-E)gK#QVXrw}p+<7%V4dVs73I>+VQ^`%n4a)m?mj zb>Pa$2bbj>04F9uR+VhZ%IfWVM#HD;0?VFy9%rU6a$5DezH`R|@oi#8%^MiewqGw< z%ifK>Tg{&2eI&Pevxh_1PO`SH4?;8O*l%~0c9W||1@s@2np{&eX#i-(ZQ{g6&^p_# zzO8X($LW&xR(%(rShX?YaNOf6{kL6K$fl<|-Pf6S!&2xtD%rs~Bfaaop&>J-1Q|W( zjTa5Z!#X^;A4IeinWb?JbgRalG@T)C-LuDAPxtoBZ5}(?(rbUq;d(gmx~-?Q$2usvoP92*c5hi1Z5a4QeM{Ydwsi)=p9R7-?b$niGKG~Ko?SQV+WbXe8IJCCY29W-+} znR7R{dwm8GI6r}FWXtZ|B_BXt%WDrjf4|=9CIvmKyxw3LqXRV|02nLS28+`eO3?pCn%=n7wIgd_H@R~hN`}ecK7>BA=tL9$6?pa^A zl}`5a8};P@WfR+$&-WE4MAKlyfiPv+FoOrpj4ot#Jh?!&eWtg+Rd?Mf#SPMizObm3 zR^!Z&4TWYq_ifvzKT!Mm%a?9(aXC@&2$VuE&ymB6QlFNXecw3fK<%6}JMJ}JCBQ{} z_w6TN%22!wv!*8b-Tb_~P7Ufa%i-sJHjCyy-Wjre!Hxs%*E;!bzF5DDV%d5a55~sE zPhP#+eIdrT`O#zXZw}UJAKffu;uhBi&{7&SYBccIU#r)vU%zwT?rC?HHi1XH&&|}X zFQ+xT8LVGn5Owz|?7PxW?R~py4d^8Adt1lIdc>7(h{w4ATfvYZlQCK+kKKKJ$+DSvg}^=ZAT9g}$fPSuX!z+^Lgz3$t1$2HN9=H;fmr7;NC{?QL#pSrfv2w6k+i&Z(k%#VK*MJH)?QySl8W@q&}T z-Ux$-i~<+|#+w%`U3%j7Z38%Q1D+@JD+pM3pdr^zBpqbal`gI=@51|r1pw2|& zdeeI~?=Np9dtm9ct*G~atR8$^jm4u;15+-r@yK=U_QmMqPlrE{S$CquU)%t%f4+oz8O{1CTKQT zx4eIwm3XgxeBRCJp_T_mSBtQWysN)4b#U?LD_6!&|M;-j?zdmAOdIRFsA`La8(r7` zmaeWg^2VKz>2tc*SRJdkw%TmdYQowxJ++1x!HKZAb5GMq;JYLVN>>hC{?^Ws#V7Q$ zHkCa*YaCx*9s^g?r6WfMTmj4XAm90YWJVoCLp3aZin7{2|LpVqoA$`|7B^Y2zgeB3 zvx@GW`DOUfT@O=6{^ZcQ!{yEz2?Bc7+01N4R+h=Bs83rT?s6AQ0yg9xT~#3aCCh)p z6Q`O-``+>P4LJG7J$;xMTMiyvYSO5^=99}lM;k6IbU!|KCsk=)->?VO^zRWVPx{c_VQVu7ay9h zpM6ThRp)u&E0?&4?5%wplx=vs{cTXu^XFx2(yr}v)(sCe7}}!t_HAoF|MB+YO1VtO zTpP|VBq`{;xV&nZGnqG?z$RL|ckL?kc=YJrBj+_wTZX9hJgR4;5%y?d$eWS}S-o$U zt=7*Ud^OYmU_yf0;{BGr`XW5Uix)r~vc9)W<%j2(f>+&+GPD1aXn-xuC&SYdfSfq;-Z97)A$uu$VcWPzMr=)vnz4z|D(Er!v*_cAZ z!n%X#1L7@Trh7H0+Ne<@Q;c6mM(sYEhD}egH`q4rh&XS6`OVL#PgM!tZu8)+qUeaR zUhFau3nm9QAD?OvrMcZMTs-r5d7GyF^r!xLX?n>h&5o_e;|r(2F;oADgsx@*RT4)$ zTyWvq{?oUECpmTxvaro~Kg*)!Xlv`q!95T3>)G>TQRe7VIj^1;EuFe#*sPK8JJ@NY z{4(4)e$ARzOO`JmbY(|{_uD;&dt3i@Vs)>W1tr=KUaA#5 z{N(Y-WM-}LyIde%h7KE6TPMZf{80U2aR(c>lzX;v+znTzy?tY1(Y(BACr%9M;J?6k z^Uy%e|3lJQutmAOU3`Y_Zt3ol?(Pl&r5mLi84v_Sy1TnUK{{XXbhKzVEeuYmMKV9lmln9vTwZ`>^K)Tz*OgWn{QkG%AL^`Q79^?JQSM#WQ|% z4R;6AgYX9I`Dbvsp8`VRd{tWHG3#gknT7wK>A&9HHJ!M1r!GcUk80%*pqJBzJBmn3 z2AzW|3b(GIVPj)u#UrzOMQrXTk?xn3;-vr^te@058C%SDvI87vzyJfbk+rik77(>6 z>+5|Xt}tCw=2|1QO&B_{(33t1CY$d|OC@Dx5lzR=2Kn32HDp@vyvm;jg{cKGL^Y+eryZejxO6<%EG1-s_I`zKTxR62-~Q*ukz zwH;vmnlJb(0RGM!FuU+9Z*2Vg3HGuE07QOQxt=dfwnwrYxp#Y6Mjg=a#nku5K*}xp*$6DN))=4H*@pQw#l;9fUjTEIuf73XqTb5* zNW{6@%A(}x`aeI@uXRiv&m1enNH%!yO_TH&p&Z*j*4A>bfKKr3>}UQz%s%BOgF{M@ zLrA?*D%$g_^xtji4^G*^1=Dwbz`(N6)6%l2$;qiz%;tlfZygo_Pt@D-x;{_JI=_88 zyS5e!*3z}^K(JbZ51$s%cmn0jqwlmFV2hMXrDCl|#8aep(me+_)$5-ZtHu z1S&eMP8DooE1lYQ0gNlO2szN2A`gZh-~+e`6#5a%5dx)p3&?k%F`m|4gd*;TZH=SA z+iiO4_OA=MGi=ziqUd#RI4Rb82j$2HhuRF-Xn@e=x&Z`-@fiv{!+>%i3A z(l1qfclDK|Z;Z6<6eA=7o0uvs=%w60@O_;`yz}<9%~;sVi#)s*8pM5Z+%z7o#z=_H zm>l)}(du};n%CNg3grYt(Y287oo_~fq>-(PRI8f*k1t_{ud{hI9G>}#-jy2b5h3?w zc?hfoFq0;t2p=%RX|L`ZB{E5&uAY*Kuy}cjjQSizeaH!#GT8o~rmOXJ>?6fK;=Ee_ zdxUmQi+|;4(-f)4Pyq3Pw*ea%^dK;5FZoW(mph=_=mP1wtEi5q#H`;l2uV)W(1d~nO`CMYOF_U{pb6zn&_q~RB zH618?qRJQzET!UlDD%T+>O(_XW2>auSVnFnhE5$tIjI6jtVC2I1MXx~Ix@6-qg z{uwT9^#A@OczXeBZt3Gg4Bjq0Igx1loqwEc(^6C~n7X2t-wXT)D}iFv{4mwf&C5{k z-T6(x-zvX!E2mG+&BQc;oapEIYOu_)&K6~S!ME+4DQA4BEnlt|u{7m9klXNaBEj96 zRpL3BT~L!5V}Y`)#s#0T9BWc%P7&%8mXwU^?v@l^Q{L7&Fh(2S&cM4i=Cn6@C}ZS= zkOzB8aoaUEk_kVCt}#^WD13G!UUUzIm1C-p5ryO=j5PQ8zvP-u-@-g>vXT#&ZQDfR zzZiK31_OFrO!zf-VCRPkmaqD}zyMot2t=tCCYN zG(JyPL4OcONHvtws|OgPsWG`hIkjg%O|3@q~)1 z8Ds&wJ>rG`@H1s)!!HO1lt-q;)yoW+L#BU%rNOuIG?fD}4;aZ}1BO>xeIpy=!3G{z5M_ef#{$Cb>PFJVvgWSnJvaI z`oArvD)PgqJ8Ljuffu)}UHVsZ`ZC!c0ddZ>G-#1Q^Kp^yq!P7mcUq z;f5GaU_X z2;2MYYzndup}>mwmpEHCHn0z_KlXm64sW}u73uTS51?5xC&^X7p-LX@K5CZyY&x?4 zm3T$Df?FIB5z*1b#pnB1)IuzD^GMt4%XPWN2`yExAU`HxF6kSdwz`;snc#1up!*}&Lcu?6Z|>J&Qc5` zs38J5YP+QK4gq19{C9w&^YVHQrglC70Z@2`5-2xc-}j}x+Tu|YFTk_C=vd%V1T(Hj zn*>KVEaKCT_kd~H9!p^{e)X#P&+DdvdxYoMguIH?cnRpV5kD%-C)|G_F!JPA|BpARj$M}Mm8NahX5@kya`v*)S)@`+)3x(q z(B@Q<Wtj*B>_Fno5Q&N|DaA;$70Za#Q(Z(@qE8!V_umG(cijwyY79Ice*xx^^gEVDng*5L|P5;>5%>d_z$G^WpPrd=L3*^wm z_a8f;nR=LU*qU#DkE~app1J_(b=gXC0Ak>ZPZP);5nBw))yr;e5>bn+i2lq>fZjP| zY-pIq;5-^CPhE~ev^oCFo@$Rn_$3r_mS(bh$JV7>06zP{g9BC&Ap|!pRcWyvDN8q- z9El!(*5^SBgGvE{D9hkrYOnx!37q`$hbClJYM5Tldi^-!)|)ibm#SaA^e0Ost4N)e zwUL*hYp@?;pmGhlb$RvJ$E5>tr7vlcSYgCNvvhaI1CH3|sUT4#R>Dx%=26Fj=L9k;_NOlT5Z5&iLo;M8 zSoFv?`1gmlw&;QSkB^4r?(1v+{9YuXfb{;?_P9xE_OP6fTu>f7In7|R)$|XZL3&th zSS1m|yEBP7c{N-WH#}ST1wD@`zOBCZO1?=wAAPI>vJlBD*Ut#HUC=_6OFJ3SaU5xMU# zxL(ov#leVm4%0c3r>ZyiM_bwqimkIe6B9bcQ#Z%b5EEB$lcd8;r?tM+i2DYX5+4~l z>j*1B+tw?i-;T9IV5p37-1CuekF~!&*jps*yMl1Y^5aKvZU6w!3VeUyS;E0mDB}zm zVs6(#Hp;(xp2EZNj8K0_Kd~TY^;&N|u*GYvV0UC&(P?Lx`SG#oczalKY{WF9j>d!y zvZGbTmuCHe)Xy>UqYx2zdGITY}cVJWo(L~?3wbT1v-`Ne4 zBJat({6bQSPaJGUF220y?bBm3C$<=L*-W`e^=c*X@l>QS|Gr%<_A2A`q-!{W4&3>% zyuCcbrs;9>!hPYDs(@w~P#72q`uFyjfsoV)9L|yw2IXcw!)LD4{JX)@L6JG5kL@}V z8__2F@9G}2(tq?C#t{}sdm0-kmL`u`-AIl{7M3=emYv6VoR%d%D}pp}1qUD`7nC3I zGa?GKKaQ?4U;S~H`ntJE2lRzcZEYU`PL?x@*q5|Hs~@V`RyFn<8o(`y`mNRr6Vh?~ z+b;&8t$W0xcl0`W$~O&RTfA$Ma@U65jhoT4Kpuzo>a)kfbB-I62^kx<(j8=3+oT{S zaNZ8FZH&wr<^f8`cp+~h4*1FE0;!QP z3H~qxsf3(2V_vMbF;Sdsannyzais_g*GDr5SE95It^w64|n%M zjqgcmC0#M2Fh59D1P?BK?GANSR!o_57kO}3txl5%bgh2u^xAZd6B9wMy^}uU%#&~d zZdhOx@#uJ6Bs!^IzFW>;?TAL>mbCjen#(8}S}9N!L{|$h!uZ9|e%cwxUGz|97BdM4 zqYap&!IEqRJP7cb{0ExnK3_9cFBhwHe%Y|z6KqvN!>{=9DDy*sdndm+@A=a0jA($Y z33YejH0hhOi#YWjT=Rs2(Pvo-KY2{5ywnGCexsP6+A}M|=V?qx8xDn2G$3phi4%NS3y>RYQO)^dOl%c2cr$-#94E*9-P)jolqAOVq{}g?jhqgs+@ePyHHh=D)4J4*Y<(hx10e2 zVWg31gF)4AzI{nF7(b+s(H^dKbgmR5HbDaGKQ)c=hJx=j`%gK(GFA-QRUFN8!qE!3 z{|sZ4afru9e8v5$c;8RFS21Ci-2D zN;RgJ4iR!*#JCS#v$v#niB@(UJ0Qw54J$QgzOJ@eWBiop>ze&2KplPtIIHa`;f=50 z)du_zq^~@SJ!y*|3J<(~X;;)3Nec8<*91FlU29C4y(7Zd=57UHi7RVE);!79v7I>! zinpv|^o5SmPT4O$>=Gv~sf{E4!cBh=cirrBX7(21WnHqgsJK{9t6<70kD8j&1W?D; z;d}*-G);&kxxYZ6@m)E;M+9Eg@8F}KH*iZt{*S8TG1nB85H`1pdW4W&94Y>M+D=+w z!_lL%4MSSG5eYz0U{&jd&yk{VMI-1)B8k@S?~Rx;?j%o9s%gh2$G1TP~P!BZu z5HS8dF=fC~^A+XR!)tQWmYGv5p^*DMGBWcQb^LtVHME`0S=c=_r>k_*KUnhoRC&AP zHG0PR*0lW}Guuau71)(%d>7o~H*Y(P+AQ*-?D%=5aoSLFF)PH}IMkKIo!MXpr%)~! z9wGOxf(Llils{|p)E(l2tVET=lg;3cr zocy~alM~Q*-UKF2(<4O z_ODk|Sd?oF@Y$d zC!1i^HSD?@%OU>!p}?|;tl7Esr(;xdY|&&aIQAlJWes_Dk#+iTb^OSJN@|!>Y?Y}( z!56ss0F!#KXe@KIlKDNtQvX`nKr+)b`?-98jQZ)7&db{PG3A>@PJtzB)s`{Pk@3;U zB8V7JxL`si-^=TAOs!A;)GD{%@710ER(-}Ff>S`d^nBcBnmuWqdbJoIVWtj&z9T)J z0MNm-lsMa71rNDqBYk2YpjKj?&t?ZaFz>1qzGUutq^G5?c1_x;5^eF1uA!+zF;UU{ zw+BN$Z%-(ah;pUihKy6NE|+!|EhkJ;(ay)q@O)d(&i*rQ8j$wx+e zi8Xd)+qdDpwfZb4B>wx=MS*;C)XC=sIcP=>;eonYLJWOM37v!-eTvyZusT-;UB?bX zxZTALC7^5Jtx`NNbDH8=R{ErmROA5E_`1AI24uO*`%9ay%i(80{Z-gGSsPaSsHT3{ zO4@!t5&w#hv^Tfh8L?2s3kCdxv)MhBx)AEcU(q2Y{jM9+!+H}pRhAF+a0}bn5pMZ5 zC-#TLoo)RX?w|dv=P0F$U8qYsmiWxACpBJjiA($Pb1DF=`HJI(;GP%=q9+&eeqD&b z^Yni_;A3WC{?yqS1N`p!SRNv5Hg{pa>-`u(B^c~pk|~Z63)u%gtOUIuN@D8sD%nK~ z#bDb<1m*lntGfsI;9T>3gn%RJqGud;2^os1HB%Ib7a&M10~7{yrQB}AgecWpESCu zzd*KYU2Ff00WR*^u-|NH7csFu03`K60cR|kzcBDP8d#<=Bjy?!g?f7_wby36-fF{U zG}NisYpR~k3KyA|IeytMexOLC%KZ~TIXFOxEDljP>v^AOG{TODR_k#_LfuQqW7c?Y zjX08BenP7B`ZIV_IUa9>(<>x)NHPa%LVZa?FD_tOfT%kRc!W@p2Lzx1#N8Ij^Gvqo za{Bhfwv1W%`Pz}es7y&M*8M~7)}*keo~@@3qakA*ncj_Qh$$=kP~_Noiks;Wi%yQ& zV*CM#`FC3F$^q1A7v(V{!ikuV8wJ(cbTm9YA}8p|cUw)z`&%8Il02>Z8C>-JBk37E z^je5t7Ndu(g}N6y{IJV6gS)Se%bf;PUUtDd{mzSlS);G7|D*s74}ZXp)rA^#;ABN* zCafk-QS4$&yQGXq?7Q!(To(vIBN0N&yXv3SK>l}ccom3F=j>IzU6I?wl76i?{CxdDil_La=AaDy5cp{~ z*I{*@?r?XJ*e8Gsh^PR}_-QPX6wR3+_s6$Yr)X6h9@vB|hw;(xS$U(bZ<(6r554)2 zP!1K8WQ!DzY63JREBSp_UD%#JohKWzcj%>FR#N#}X#M7ShNCG=?7bAvOQlWsG+oQ@3ZX{`pp+Y{3VP!SJL&t%=#>fhMfM!m*_`FG22 z;PxYf12>{3QKU$&7J6#Mkfu-)Psc>zhjSvT>A!Ma~%w=E#2Gi0fmRtUE?jIhu&ue@KArt+5;4!Or$0_`?@M{(L z2!@B1o*1#f|FD4F5TBP8S%R4+N3Va?oLDD9L9=qJZ-s8erihI=-bwK5yFCJe53Web&iRB=&goLj!e=v+DBT^xc3A3DnJC5ETXPocF+wQNt=8ti!PzE zaI%yuNaEkZ)SBN$!>(`dgkKZBfh$}QD$u0e=sz!jA2VdiAa=E!JrFLhx-Z_SPoX#O z<0xkwtpLfcmtB%jDG%xSJ&dwe)16?cjHf?8{{&^u&f+V~t^A#!_UiYwB&|{VBHn2d zcH`{7oO1r#RTt5zNe0a!^+Q90wYn-g1(db2P(BuvfjOPk}gw=1Rd7!u`$)oWPaj}PwQw! zT72JH9$sY>I&i8CG^+4ju}j|sx3vF~FxmUTmX=z}n0Y1JDRU)2x0|OnFTkiUfRgRc zpk&pj#xCoMr=gzLrh|A?EcH%mM3ZLTrKoKKx598gOtkYJVv~|9TLfu?+3(-O0e;r0C}vmlqo+OHcj&&Y5@PaAyRdgRV*1Uq zQM%I!$d@vN05@AN9jyoDPcS~lYXJ%$g9hlY%75?l!)xg~7J*+I8y5#WP#cgC2SzfOX*nJ#{%X8_5cK^tgBN5 zs4Lisf!h*qEPz3n1)=)$ZJ+M+(KhIET)8U|{a+Vs()5ltk-VR6VT~&Z0nf=|ibF9NVB^-{85{Y_B?M-|3gvA*@QO_xT z9Xpb|Si;ezq-if-6p3(xu1RG_4-ZV0J=P1etjKiWfDCN%f-zv`=g;^dIC75WXoBVv znz2dl_kCLG1djfB)9Ifsx%?K>NG)#OWS_{2J49R86-z>sLU^-By(Nx@w|pOK(lv7B zT!{8N7GWYcumSh+FS(Q3cMnu-6Qem&*k$vJ&3obN?5bYivS$}JaF*4 zuERjQ10?QKW@hPRUxDT7vR!fKgE;Yae*L&LR~`bZrR7zYhN;5q_0dZQt(-LR^9$dp zCA#XU%Jx`&A&x3M-BT@J^PZ&`U<2e7%H6ELA22kL@-z9~ndmW<@rjA_7m-}w`L+C# z0B}*j{qQt114@7qkZe$7$>2WKyecR}@aEFk#5?O9*XUTgi(6g10E==IGc5 z992|WXN)71;*=25ump~ZR0{}H(8hZs;inSzF>opD2M!XLhU!pT*DR9Eb5gdgtgrtS_w6;cqjqXVi@%APHnFiqh>noud z-05-t72MF=eITabm+5ofbMEOYguRn+R=)WTl6pXDTqRxfp#r%HhP)Tw5I6-+vf=O= z+1B;=38+rzQt?@6mVjlZ69*qb)Gq)J0BihcF=ap*BS?z9DecH-AI&V!M>p9Nvb^?M za71joJYsjrf$_9d111wz4((7P4xUT3`ZlnIy9DruEDdWvKhmc-1^DI2(AimCP&xzX z^`EnaNd!Xv(M{~J{wt0MG%Ux)2-%pM%K193n9(_hO?Y9+QpyKX!gc{)w!k5hGr2`_ zl(K#7x|Dhudl-=Y4fZic3EHG8b(X?V>W~TMIS%RHwUe6_=5e_Qr!7&H#RB!{GVJY| z29~=rI@I+OJD*tMR2*P-l!PJQNZVWtA=K+B{c#zj9Gg&(olsX-e^Ru-0)DpM840X8 z10$o=avt5d0MgZ12TxUYhrK~=353Gpi}8k(g6VmW_3_x*@V&g~c|rKRqIs0y$OzM` zvOL&;bs5pZ`-%by3WU&D9s1DW+;FAw)ZzE$Mz_p~3|#HQ{g>oTSPd$OL|<4dx0SBq z5FFdnsNQAf22MRohK#Zja-9R#z2b@e1gTt*H2@K6vv4`OoHKTol{U7}7%g*U#=hM> zFS-Nv7DnOQ0A;iM0gi2ScBVe@g}KIik%{u=9Kju_LoV0@J8RR5Z%~g+1aDe_Zk%X^ zoIZ`TUUF7iLgKYl+WBm|V8yK|dpkL8Aw$Imn?#OUeKoxw{W#NSj-^+w%_~AO*keHF>D26eW+L?13G$h*^a>b(-h z>_<`4M*7A@u0~r>V~>$K{E_ug;#T;XlDqz{J!=T3mvX%T=lO35VX0>?r#ujTTmrV~ zQ*-kZ7QNQ{jt2OV;4J-;9G6+(huxYtU%Pjw(J54R*kN~IC!SG@Hu{!UQAbzTs`(f2 zurxb54(a%q{?X&U<)(34*!TA$&`Y)D8Y2#JYa${>bVmqmFM*JdGb5kyy)hOt3J_5< zOg8zi-9V*ABdKgjWB%*W5j#jC@q*TeNL-rYnwp7Ctx=E5iTETXOXfr2=98g89GOPaHL>D3%_m53SJL{ZB4<8YFxBgKYtG%SU)?g<;{7U9(Y4knFV`XM# z^)D`x0Gy0hOe`8uV>$9TeS7b(6*JuoLN-uQ3%w&6SoR;hF52a~p8*on z>OvhtY=#{;I0T+Utiq3lRkY!sY}Q=)F6H)L+BYSMTUF~cn^F@B*ThQ6-{P|-geVso zV7wGWp|`_-J(t@)DzeL<=!TshO!u(AgREibwwuTQj3WQsXIE}P)UOcGRUoSg=rMrr zjR21iw1+*BNx-X*Y}pqlryFQb^w^(1`OAWOB+@tXOtGVErvtyvlk3KLTO~#kWSN6` z*brT*#tz4Eo_Bw|t>^Z{jes@Gv{yt|&WK!QLtUengR$ucky+E2+{V2L~(Ax`2lRrk&L^JAfWpHW#Y^ z6x{_SH5TtHma@^VA4H@=d9dq0e{&VhGp5G<+v>bWsH1YNO3dsnExWhXJ4+(d6Q;BU zX%Z0GnuNJGK{Z_)NSmI!&&R%^+1Ut?paztv4gErqucajfzI?LIC~TeAM@E~caIIpP)blL zX%Po7sA(P4mj%a2mHMBx8afBU%H38Q{uMsF5S<~=iY51Kln;`B`>oQS^ug+{Ya!H8_3R~#zGT36G+e^N9jnSrv zZEy$P_fx(|lmwQv#@E>@jM!xM9aQ-nZlU3-gP&G=WSe;*=1Yw;eB(yZ#Sq){d{a%O zd4U?qR(rt%yt%WoA4J^IcoWGubvlS>!O29wtT8w!QMnd!XoG^lP30kxa2Cp|`IJon zmnncd$*8H7029)2{Dwa3#p{71SgHo29=fKO<;&N+&jxh`aXewtG{JIoBB42obY947 zQri2`N+t1nHonrK{**Jn`m|J3O?Os0xPF`FMA{Ij6dA)s#&yin-*`$eSTV^sWve(n z!#w7XWyE42R-J_wj&egIL|Go4`b|;FFVLe!^ zQp}m^_>`02NCAc~$J_G&1IsA7N`^oGnCLRGCIQX(ry)WFqgRGl(!w+G)@-d}YxIX*Y6V zo9pXl;=P5vy)-}LXEvS{6HKcpPip8C!D#Twz8Qqgp2@2E<;v zm&fC%{yVx*gw9&`26Q)eTb0g#E(Rb{IC}YVd?DNxda<6DUnE%IeL&q{R{O>H?2{UJ znqViP1j@Pk+;)qE>sY--&Pdr48u1fXNCx}mW-%r0x%Ys*3b+ZCS@&)5^--clyZ|1n##=@5G ziV|f&j5ESg?#|eCeryaKoTWfX)z#NeNdl{e8tnq^=tA#wOO#!wAN7A_f5XPFIf&k~ zX^=&E_oDnTZql9NVOP|J?BGtYb*y2GDxM^v(yhJ`7_Gir_f?*_=g~lJ%gbSCCO5QS zLE5}U-SIRHM|HPI{APl-yif9D0=1i2@t1vQTU`6mOGC^sU(TP4n)CDMLZH?LU{Z>1 zZakn2pn>tMjwq)z(*)nd4t)m~LQuD)#}C(y(Z^?daT(2vU~NI7AB}?G$<)VI>l(|_ zik#cfZoyidS9hVr&6IN7{mzN3E7$G-^lClA;O=0UYxMSyTtQ6j zuM-KBc^N?JfC9Cr3k|SAt4mWpnoNY~m(#;uqYfJUT+;@m)){Q{-b zhO|km6RyR(sC}P>^_80978#HF(UCybpYgOR(qbpT-1!s6Q%i^BgQ@qYNySLuvAR79 zB&{B!sLlr6T4bvF`h*~Aig$!nB({4#FOoLU%Js$88u_f9bdjt&L3aDN^3oDG6W_Yt zKhs3=jENkt>)Z*?g7u{l$&)H=(|Uu(D1m@5 zQ!bC>q7F$9Pyk67Xn2kbLU@ys@C-26C~!k?V=1vAxwXOz^q;Q3E_auYwpWq8rWn|c z_|W#o4lzj1*x*%4KE|tXZa512XVbrw-CDOBA}WJZ#=)FDed~Au=DyiF7M_>}Of|b+ zMD*=F8C(y^`rQEs+)iW{2Vyq{lhUBfp`!x>w0|5Np2-G&q6(FX*qtahr4=LP84F$s z@FVAocupwzz{i#nLwaea28E2CEVaFN-%{{w6A03pDvr&0QICc7T(H2+kvoKaZ`w}+ z@}J!1XX8K-#iPCOa#O}?Mrtm>Irg=M@;}*&eRi02EBhI8>FgXI!u(7F+Kb?eU)|@_ zM31-&QuO7=7sg~-@#{#*aG0rcBlmGp1L5ZIMSdim1|uQK&sqE3r38wmY=eo)q6G*hRk;M!K zI!ff&gcLWQldN71lzogNk|bv>n09vuK9OU`p5^!1z|Zp?QO~~g;-w@$?B1CDO*z_{ z58JN%GJd|hMB7{5p|y~CiAV2&Dk4=#aV^)FAU9>Nb?&R=s{vBEE96PQ4T)Ev)gyxc zk`y*`W^(+4EcMWaT&D0}Xe zu<6lOO=9DA*Hw-Gr(U(5(@N<9i46CrxPPgQh~Mg1=5vg4d=Ot7h<{=yVv*+jozqF# z<%z#*gZM3PdTKg-BqZ1QnP_3^gh7zs2d5DLVB6mPlX~B8`9t%0GVe;; zcxPwq9Z}3iVX>wKnn5aS9}Mf>)c5SaZyp9r17qBFLgPNef#uI?KHaMof={PDs!l62 zgsLIKEuCd%^lt;D=4jcWT}oWMY8DJh=4v^xeqCxw^!^y$#_hU+`b%c+@NLyATod)r z?uS9YsVxdA(*VeWqaGur{&)>MQebL4MQcDOEx4a$I7tTKa8d8qd&vxw#vdnMR1zWU zySJOi>n0g{acWv8ORG;u#&0W~`gYpK8O!@N4iw{N$=8?h$n0qn*0b|J@|{V0DAJD9 zu5S%Iu3cSK0v+$$q{m4F6eRH`CvII*`HW6H%_2{Ll3{?(1YzE6@| zbv1<&21G!Uu-tu7+})kt_29@TuIAM)6B^;C8U&B`q`xi`2{fmX2S1sD+hEqqgvqHG zt=!A_mz;^RSjtCf8xKq_2zix2#HX6C(Uxc5mGi)`lKtZ+h!d1USOc0Hj6m=YPt#Rz)q{z%#7{VJiM;A}H5xNYl}YA{5S zUjlWVmjf|8zyAJt00%l~Pc4VaXU<5ZSJh;Z%&;UD8x8(usSm00#rN12zGzhC&>mD< zn}vdUB*9Bw=v4Sw5$6l~=S;M;h4Nt|<)@AzP6f-2mDklWOl$voqKmjx#Xf1;dG{2L zMwKqD+1!k8bC9r~s(?rda5VtoAXKPmCFzRO8L{lSp7T1XGw44#n~aDbIoNAE+p^Xe zgaaWA)-q%=@-~RnvC@5*JY69=tVrwIp<_Q_;?qg*^ky~jiJc|~n~0%WpZP5_(?Rhc zGy8zkR9>aedG?nmS+wJd+tXMFuPWWywYYsfl_*}w?PB5D%2k_5>ri3z8}Z|sH#mMp zIxVI>YN6(x+`N;T9vJgK%GkQeARt|ZkA-r1=GXfS)J_2I;InD*s~2e%GmV=v{0`gX zRq3V%dG|XzNFenhA|>_Bow!y4lGJ4EM)O}$GDiZ!4u8$HnF2q-H^CtA&Ru)# zTOeW72TD?KaBv`{uL|bi+NL7Fk2^cX zpA^!$xn#5IToHn=ZKY_*Y#Ovy<*c2;?_771=e$v02(33WZXh#VpY2k;D*t_DT$>w8 z9H-<`5Knr_XxHDs@yv$fnY#9E0NgDtO}}!eGzGHzMfubTV#=vV^~PaA$y6H>!g$x4zv2;}S*J31!M>yq54_s&)-Z9heTKUb z`1nWeU|8Zi+y4G_#8VLy@D1zT$uy@lg$_rcc;#oIB=X$xQbrxZR(j%(o)O553D2jf z=#apl_*8NrC>Q}OiLW;Juh^0icCEBE=P7Tg5zT1?8k&haj=GTe?I)VLT-j8KXm71$ zQId1LWe1+$8bnFBT1f^Jds0iJt#94SfWkv`9?$XWR|GS5!yKzyeyg*NP53EEO~i*i z)z!6PFrYmEk0DGN?~|H`s#=^y?<-R41;L4pUi8KH?9l_V+QCzxs}$(zPu~!bR>4OF zrE`AS@EB007y9L*yDBbxU?LTpZ7FyMmXgEDKczi;@kbiq8$5b{iLdt z?O#H!7NGlY%T^QV(Pcjt$0)Rj?QH9oXo|If_yX7+K#Kxcid@11qZEoOYm=>;7}eQe zcg#2cKw1V6@K2m9NX{Ch|%4;<2^6T6+l@BB_rXGuS5& zS%Jv6hNk<;M5F2p<$`}6j7cT*4P9R2Y?Ve_67kx9-vTTB_rn9IIu7gT5L@L3-GfHz zY@Kv+)3Ls5pknn2sRNxHfbj{(8~En%shy5~LdI^AiQSrk@(Tx=KHV=9L)QP8)y9Zq zid3=L2~!*{#?ZOg6M1t!>{d0wk{z?{Qz9x~)h!)=NwH`f>JK`F3H-Jria6?&pj5p5 zFA^x4KYzONzz~{1(@gRQT>~bakN+&hn6gZkQ!!6ZKox}X%a;S-%>#bFyQil$4~#;6 z>pG0?x3_@oh>#}Q3Wi2nBa1b;3p0^PVdK^xT-VpvDalGu1ASVfp01OUs}_?-FaDW5 zrMsPtZOja1#DhBkPJxWtE2NNJVNV<=s_)vj0v8y6{j@5pS1>M{8gbGK4MOt-R6zFl zovq1gyWt}I4Jk>i_6b5LcM4jXe4k-@Ltc|#u-aDhvo|+0zJE^7z>DG^xck9F3JP|Z zK@|cp!LZPv1xs(z7VW>g)9J;D=!exoXTlXPX7&E@bDNZ^1v4}sXmXM?uS2!e_aTBb zF(-!uMm9afiqIK)pU=qibF5!5E|OU=r{}geQc!tb9VjY&Fht~_QC4z9|Gs%2QeK8> zTRHHdscL`ked0jlh96^T={2LEX0!kOjAizRv`^dD#b3&h!NEyJNv5Fbf*oSeuZJe1 zO`0HtHQ)5w2YWz=l%LCBEfvkE+%*ZoaEHNSwo;^?8Da$)P#b7$QpR@dz|lVXDeTvJ zc@QUjakKIq)U(i$#K~U^ZJJrj=3E*0>4b3KyNZ zdjt`b=No-OL^b`b;cwS64=9r5z-O`RzV^;*RfTeVT&G!DQ`D^hMR}w=kCMg@X zZpr~EeOrDtI8PTWIv)Z;wGDJWtTj_{HE+)n@7xSF~dSW(t=;L1>G{Uj^CN1 zF1&Y~6==n{6ZYS9%xCPR%K-%g7#i;T->ATuPKSrKtjWYmU`ZpKrgiGevxIDJo-Li& zVehInp9_9l_9-=F9(XDUD5GDXY#c&a)=?TW22<@=bUxn?>|M0OjD%~~Lp`t!>ic~Z z(A8|9rB|hf%#sa9^5PXI`!!pOMqJ)gpGBg?)a}iHiTc#^g=@O=GU%^&KlX2_yb>V( z-JNfY%*^0{It09g5x|_(ZY~IjqvUC?-X149FX>m(^G7U*#n%pjSD>zr3wGvJFnHY1 z8xN@9hi>bVvxtzDriJl3)#8`>pF>Qij=%M?zLkWuLX&KM-$?Ns4oR~-TrLUrkJWBR z2&IfMf?JMCD0axYeoD4kl|BhHz(sLPxO z)Z0`2`MJYC=UU1nsi=q&0+Q^p;HQ6l?h&Av>j|Ld8y+BNnQc1+xsSeGTL)fr2`qk) zG;Zk_IXoU@FeHM06Fp&-;06LJBczY7!m+1K*UfHsOg@;xee(_TCWdwoO+BsS-wVNh zGn9S7j74njXoSMo5;7fBEzFSh67kBUESJPQin-I!_K4gaMUH=ysOmb3IQJkKfAweX zJ= zkKkntYkC%^1nnEf2E|~%0|PHCVU(bUyt1L86`g4%L|!yo?%bl4K5>LQhkuume9LNP zIdKlSea2=cL;Dti#0fOr;O7qnA)nynp5J$yWE|Lrr(NPFWO%1ZFWyRCybby|QWy8N zm?H+usNLAp2^lnUN8rMKA%4?h?LbL5~Ye#Do{Du|#y?jny(Ng|JWR zkkIdDj9Bx59jEK@YNE~SjywAmr?fQSW@^h!Q{d&H!B=f<9(4Z73=kY-8O%-a+X_#; z+80MP4c0*}*p0?twZ@nxjMDb6G6`4q<1aKQ?|3b9MP3Ut=SgpaCrJ=7J^bDw0kFlg zD}F@T6RCQ!Dc^PK;wJBALF1j^+KKt~e81<93lTZ8k)&S_-9>OLFqiy)->^wNtV~;5 zThkNUF982{^J9aTSG&&ZD^2}ee)PBy8O?cMQ|s!RA%bpJN5=OG==3N+2HyDhXTz=M zuKQdP*e73sfvM4uRjkp$3yE<5YRj|jmG-iUjb`D^PBSR36vI#jZaaAXx4x~5gIT(% z4tY>uQ@!ktfYyJWP^Bq4ojtqi6OxF2>eBwa4;8S;pO{Ps=?4=^O3GzEuXzDWiWjq5 zcHwBzFPlX_TKuWkWI?SdRrk|Mv6j7Z@kT9B{O@yzpty$`hI`okKaGP>*0Ox zJ@=e*&pG$pd(L@{=TlQF+wS7TSIQS)*_po4!VU0ugo(aB13z}Ujc4V(y)qop?t=*= z)Y=7j2XY5tm*S@^pu6Kdd60d((rWVS=5&1*xYC0`1MpQov9$Ffjny7&ieBD4r3bw9PJh;O5uGQIi zP7cv~itl>8SOjMN6tJ(xJ!ZIKe{fW}h~iYi!~BObx*nHd4zxHr)+{|eH@j;Cl7cTq zd1o0K_5EA*%|RQbfm>b2_4Wo>1HhMba(eRYVBg@kA0H3+o2DP@QuuYEnTO3o+~ z9_}>fU7c(~Y%7DiER#UKafA1RTC+CO_ZHbf_q}V^VoH>3mT#6GraVep z`t6mxa5#2Qz&$nTiI$!PaWyWYK0``^nQeqRL{?h3PkQnCjf7b*Hi@%ay~iTSz!mdU za36sRGsf?4WotX544{7_X(=f?c>sd_3ozUhn%;D1ez8S8~)`3E=#SYL_WN1At_@9uRwD$8zMY zY1d`T;DXE(>UYmN5l<;?(i^)0-9TAckAbP-`vVpI}%l?V!Kes zaGa?h4Xkb6dM&V`c$>q+SgRug-yg!-_0S8Ngu8e#>%?(=~g7j0~dpI)OYxTt)Btd?>p(ulw?T4?KgE;8|^nLT!6Cy;uDHUUNt zXKGp+!bZe`_ok(wCikZ`^X<5sCd#V!0da*`W(O7<4M!+LvgI+`_s+|jG60;C!5_^MJn+Hz9Q8LBJsikyo_$q-m1+vB z%S0#mRH(4~5)YABVM* zjp5YuH5KP`DZF7aSi3oy+yR{^RFbueAK)wk?M+OE%!a_L5S~%HdA0SS(bYxd=iTni zxNRz}isNC-TR(>Ue4ahR&I%iA0Z<eXdp(hBP$Fv_HlYU^peNZo7!Ylr7vYb(16K|JP<+^s^cSvXZ|shJ_dbv2wvn}%w< zVrW)ZrKN- z^Ip(tdwFr9IgWzs+_?hZQ9&>A%8lx9qw{PLFx*w<{yN%j_?TJf=h)S)aHJos@uCIQl-|{6-pq6}D#{46$Dx@8?cd>fZ|jHHL`VYx)DLAC0BRDbEeLTu z&6$F%TfLuR%Qe409US|(mgqt2Zer!K>T{7H>7+zgOJu)(0nLLNTc^9ikrWhM)FisS zy&zQ;s{>4-^wqVsJ@-5MI0B&dPxbcdD)?!Hw8!a_X3HLeX}l(^*hlnDOm@r1u-FC> z$;+23s!PLR-3D-R*RCq~j7<*g>huS#)a*!)cE6qQ^Lwf>W*^kqTVq;BL9OIw*QFrYCG-n;#$#o5Z}&a5My(1_`r9acUWc zWZWZK8h!U54!~tF%P#&qm~X=0(uWV|{V0zmEh;P|MPQxjzk~Ivn{5UM`i7CO-*y}| z?b7|1VCu24_wK5UW(b*X|LuM?naWzCEq_JDg!|kw=`mhs#A?)A1)p-CG#lJhWCBZ` zceHN%2KAT3!|V5?P(@B*En+(M{S*0h205DyH*r4m5MkPNT2$8#=#aNy^!Z{V^hzKU zAJ7q@vzJ)dM6a2dai^tFFf>d1XGnG_owc^+1%?OLa9{Aa&@WfK^g`ismHlINdmadJe1c znwL7s#I%*ziN%g|3ptjT6w-(oI>i#R&rDNaB`?70+9c&wbz+1Nb{upn3>;pSLhzQ7hC#6U*4r zb~5+<$?Wp#%f#DivzH_HzKA9e8=WJ5QS~^NvQ~E@%4MSEsu?kN$Y^^P$9(r}Qns9? ztALtClTzZ|$D^VHU;4wYSX$b1ayGNE!fa)|?tvT`(xN`JS~aLdiewHE_Xt&9d#{L@ z2Edetepc$eU7$?nPfJdw0yoQnCGWhV=bf)`=9EWn+kKf%Dh^Zh_sR;P&5XFz-E<>_ z$vW1Ibl$p|{4IxTeiZw{%^i==X@hz%Bd@KqCo0`?wV+QvnLIr=*9tao&_x|RvwAlb z%YIB}Cnn7>LECEDB$<5qFty4N{kU2Cn4aSU0A8%!`jwvm4%fqJ*7Ib6cw!JzSkgOme!W01v;py`9n&v+IG5 z?tKFTrClAWZmz|=<6B2NCFUlW>?c}H4){C{AFIrd6~1^uEJ_Y{<3z5k%4hZLBj1DR z9?5r(<-Z0EO8r>?#Nme95CG0=s~hMd3XL|nL`;dE!Y4{4Bu5(n9IQ{ z2`W!_FRxdCr4HW;fE8Cl00;u~Km`Ftd5~Fy63XHNg0AwwpI>VI zj^64Jz;O6Ed?>wQ9*2;LoKWxS>N?IxOG~aOfNJwD z2?^V8HYWdyx+?2ohKZ>&l`2F}0iBaLsHCz|L=31M15n(03`#*(4Tfya#s&tj0j}Ni zW-U;K4bMF*ILsUL_|g6LYx>H<(j#+!;^S@#S(n;P3(9jPrKh)naWe{+D=KQked0R9 zBrvrAoy_9aY!UiN@57ILG_Q{4xe%)Qhe*MBfOzbC>g8)7NTn5`BxFkgRO@4_!RB_jegi-7qw*3ac zIbQt>hb)ZW*}rC4gA$q@xq%+9$S^J8fzJMtwlo%zB0<=|7 zf&og${0p&|!_~jWLk2g{{)XON%<^ng8>*XOP-FTjKanL_izAN-*E z%Lum-!}2nQ(pUM6 zbZJ^8>ugVQnQ}&EW_~06hnE>EcFAI|bD9FW=`^$4y@F-EHx|d!-}AEO19HJ+A8pjuF3ta(x7vvzH&9M z4N-Jnhu5lYZ3AvkrMfUJ`tF< zoD?QkeNVAJRm(Jfw)A#W0Xv%=nX3L8Xz*moWpG+IZbSeh&Z~DB@66^FW(i?1jfRGJ z^(EPJ_w-D<#Xc#6>n=ds@{EhSLEz$PxuZ}oQ0&66lO!9o(!Ap5Ug^lejWQP z<=zJZ7;e|tT?d^iXf}4uc@>bC)hK)FYiyqE*Tw##BTs)Z#o!(lzpBqZ$(gIl&D<C)Ves6MmnZCX{&9&zi6$CMOHRgaEr8UZj?0Oe*sgKSXt^WwWEGcIU>b zhXfk)si7i}xYEd0ymb;5A1BW*F4qRuY_Oi>PcFYEhOG7Wo&BSmhg;FLGV&<# zrmoHg?|M8Kv+Ug_G>%>~elSOvAAUe~MIe}wnYp&x8ygLU zdDuMzd*j*lf+A=Ck)JKWQ_~xLd5)nvHd;Mjv#NMzRhwu^d2Pg)*mJVm$ zx@MiXJLK3+?&I4v%9J#NboC?{qKJqE9&_b8nqPO3G^Jg!5+~zGRAZ0srd!;mU)&s9 z-=foOiGIZWdjKOJmlaZ!*i`cSa-?{_ia#m)(3KbDUEdrB)#&hoChRSNT|!zTeUD%a zeGg!*fq7S$_cYhd{B2ofb`%XS=%00_AeC{OnrA@-;-5d)+uqvVGxYY`jv5%iO97<+ zpC|COsRrM&4edWNU?f&BS(`GF)?uw>o%_)?-`}k|Kwmsh*Z6Q##eo9*a_`w0m74Fj zD&is!PNxaw4CVM`%mmqeUyG`V2k4dx3J zrf)e-=9v(kNa}D3qIS_I3ijWhs_71`PO~z~HVUYr!0g`MJ!f*gktpnx1FUnijbwxU3-5ic3r^T^n;zdz#*L1h{$AkM*m^n0>PyGB*_9EacF9t0526=2m2LiuqwjjQ*B3D0 z-o3=hM%ZY(gIOfQEZ!bFisPD~M;5EP0uJ4ic`>oLxEKl=!+N{GzNkceVuYY0ZcQzJfh;_rBsG}C!DjD zR>xHTP&^V-ni}^xT6%vRhs~Q%qI_(Y4Eex!8;Cqi!el;Zoym?{E+8^3Qn-2Pac22A zRpacRjI1nD;NAS=wJ^ME0F-hdWD3;>8jw#qr}IijdF_ZkEVrL8k|8hI2Kjm5!j+ND zPQq6_eme?4CmO7L-SPlGt=kmIx=?dE!fpL~L50Da@w+aXCfaz(E7yHAGF1!&L$1Xd znhqq#E9L}}yE|a1!%uUh+Nz0I^mx%U|5%72Uh%GbU6kJjV!6!-{`w6+Fd~x%hCS1h ztgL(s8arI>-B^lg@DU!8he=u--YW*6cetVB)^KMeM;hvA(DYrkyx~Kbj4X?Exr)&Bp z%%v86JvOF-FV@+>v65Cab(QaH65Pd{O zJ6}{$PKE&lyN${aI^)R5F4{W{I@)>&-zA|-)Tde$M`Q@0$8S$za*7%Vp*cC(^;;ly zpsA^;@jSO&>mJCCEJqMmC+nbVZr5ifj!Z!&FH}#d>8}$-Q8E> z4<6jY%rE$lI`7RC?QJbQ_u7%jDnLrf)dApPcjCMG_WCzmZ$Ku1tX}~yzy>!9iwrv; zvsL`)BO30@+AhO3GPikubSU6Avqvr!3?M-~)CLnYRH|Rc0DTJAB6a)T>_g9hTa3OE ztne8CUsmx&A`#Wo+a!qEDRUWv?*Lb5pD*WK55fLpT-x3;#rJC`^!6Ay)R_4IrQb1bBo%AuPp zzJ@f$1vI;X^Jjo(=@~)iES@gBvKgS&inZ@Jw<(w2;Y+4V_;y zx3N(gthzfzfTj6vj*I9{l{d#le1C7ikeuszXcfw*$4Ax<2h%N$?0p{Dn*iyJ35M?1 z^u~MmWQl;mLk)-wYpa+-7e{6UkLvxj{-|vGx_h_7{U9GHi@qlXIosm)ZUx5+K1B&N z!w|ry3T#a>dvWW|h=owjX4+ zcw$*XKwm19mhb6r9T!Nx|Gakb(*Jr zx2iAH^2PCSA#&s?3Y}xhO9#Qe>F~pQ-h=HbLLt3=NVRSnbM-;aUVeo5bzbgOXS0PR zknUi>_-nlg#8QN5pd{pt&i2!V*D5~t-a8`lQ&0SSs|mQq#>N~Yyb;0Z&fD25fH*?{ zA;e*@R;UeRlQ7LkLb{Rk5ls(niv;B>JGUvLiK_}p^Zk&4Lm>ilhot*INZFo_G5Yo< z{~3k3hg!+uyJ{A=AC)6zvp=Rdnbhd6a}P;{UOJY$5lSS(6{D1J(0>m(mxn6w9TYQY znWz!vBcf5QTKdMJE?#~9pc_84wY^nO2#IG6RO_j|-Y5?eO%LhiDV6rTH;;fY+iY{0 zzpY^_o>2M+9b2GB6PBTYWx+}goIFr1aTc9+oDVf85vTQhzS^FDMC{qz=3-B;p-&Fh ziaMhx{2*n@R*=HM_B)~K$JXhM&P`qGkW37w6CfR3C)0|vvj*ZcGSEK*DQ-$y+RMDs z!?f?);unVNw!^^RG~LnJKKY5_tFR|p)75MXcX_O-UOZ}&b+b?3`N>U~JP)&dH&xXR zk%EHmAaYFvA=^}zzp7K|H|e)5?%D3vpwsC6b(6->8)IL= zAnA$~O75($&kaVdYe3|O0S2VqZXgbyx~8buj+ljINmQRkDR}|LkN~2A2VjA)5V*B6 zqpzu^_6;;5S#Ik+xvtB6g&d!b+MSRoMW)NJ3^FQ|<%oP**#{10TRPb?d)kAA6uthmIJNtym$fd``_=#GJ;+L#Xz0llKyU2?i(IYe8 zJ0`+Z+Uh6((y{R9=x9I=`9c_mwfFkS(i1P{WA5{%N7dUI8jn##Y%lDzHf*G&!;rOO z_4fSAJ(%1r_$>bnOCLz0KW4x;pZHnag@h=Ct~;}dy_Gjmg-UWr_VKeY(Yb_Da_~gG zC?t{c)^B|;2MCx5GY`mUrPv}ByE-EFwlXD_aa@1y3NCK?>%zqaAQ;$5Yl~vTjQ#j= zs|VJ@U_vlXky*2STQ&2#B9R&qVOvqzr_;-JIQB z61HEI>;53exU&wQH{34c@G`uaxU&u-YyOi_QoA^iVeSoq0n2bjZSC(YJJDDJc?IRN zEQULeYz>i}i^p#eB_y?e>#3W$#e;%)a6HYn1!3cRVA9in7ikqPFY$ z^Jl7?JcCI82>vQ4oV-A(T3cGXT*;ktrXkSIF3$s47na1TdXJA5G{v0C4!WIiC>U!) zi99DbQy%H|XnW!eY%3>Ex`Nd;@WiaMp`R0V(ZM=*preb8@pO6)Uq6~>W#g7Qz2CRa zaHj>nTV7t4#w`E*xbge9!{uH!ExlsvpDg{PK|C+wwTQHomkl@$Y32#bf^jN{JvHXx z<=O-Wwsc@JAPiYu@)^VtzUNh9j8XFW1jdh|?opaou1I2&Qj@pyk94I4bhNaz)Bw*{ z09Y>NwRUY0XR0jAYR3I>1KbzB@eR*KnA+f?&fzKjJU2*W^KKX1M&+jdAf{$KnTY zJg!OKiPYSU=MU`idw$<>ZXrD}Wh*Z%EUW^Q%v?wGd<4{co~oT%3T%+JPD=J%jy9JF z$otIi&K;v^6Ldz%+nxVeSa4k*4~NAnu~IyHj|c6!bLSPj%oe`)4P9xtbm`J^hcVt5 zBP{NjL%le}!6Th(%u$0!jV4yQ)HI|Ll2f`57R_K`--E;u@j$Q0#NJztF$;-W-E-nb77jOQV z66b0qolG25eAv@w3Ct(JKl3aMw%hiw(jb&zY!=Iw41QlQ=COG)<5=e^A{Fe znE5CVg88CGA$63R9funSOQ9w2lzOtLHY%BG_NuDO!@JwbuQ)lSN2EnJBDmYy{#bgw zZ=c+|dv=0*D@9p_ep;|ca1Pi>F#rX$g&+3cd3(n(UP0kJpKW!;(%xmR%O6og34pzVW&wlVivhsSW*c;CgRODKLHxk%R$BM&3LGB=V>Of z2e?@pFyRdZg3p#piR1)tYs-Kk5I2JR32O3Na>cU9E3^hPnN?Z0)6v^|`8x8_VZPyV z=1%Mg$MS%E(aX}(Qb$|YC4S%<4D^#=#dvvmta^$v?^%JuE{d8as`FLt;)t7e;DGbR z&7J)82XrsL%&yi~VzEw+w{K5I)vxde^m~};8MbRbFOAK*V9lfYkHeK^0`cVZJ#zaa z?yCrF$_g6tSXuM?2*SvB7*Rum{h|K|X&&c@q>=6Zm5F_mDf6rb+ z91=u8;2&qF5dnnhz+#MEyQELY*uiM9m3GqF8gKmhI2F>8V@a@EyQqy zF!b08_IDw~5mNsxxAlH{cZh4fpU(MTbwTgp17WHV-wCcd{-d6j5T*n7bAf*c_`d_O z_#jLJj@@C8wu8fdO0>n?AjAUx|K9a)3DNSQ?dq_f^BuT~=8cy3@0~8}r*VKZ&T!-g zzqjBY%^Q6tju8Ggh9#sy%a6uG+xc%@{#j4Y{n%)z`+jMh;R*iFJE3j&pQZHL&&eJ_ z(VWo|^6fuT9fav$&%_1tb%GoGU9-8>IYqd_lv_mi7}~`W`lc8>6H#bu0VtO+grMzy3lV{RYtb*uLqyUMT(!${!&rcH)%J3{^q%k#}2lOX37d^2ap|6(~ms4=jbC(ImJDr=cr?QPG5IQ&)QRZ_Bh~OJtw=z96Q+Bn%&A1ec+ykam+=g z@rw(ec)(BX6=P9Pv$@1Du9|Hazx1&Pdk7Enpkk*7R7Oo$+K$82N$gK<>!t^JnS#@s04e+u^)#(|MIgJ&Fj_8E9zas{*jP4e#L z!)F8fh{4mVrymW3=ms6dK3B(cFdSsskGc79ACOEVY0Umo%1CTV8%-YTJ_n`(U)X%? z>6H0q4O(Z*2;o-Q@*$=|(PT}lPPCb*3)V35ODtnoL`Qm#wGPkjtZ5H!XZJ5wHW@{V zEl)QEM1N7G1<&}l$aXUT%Y|~W{6NowX0&y zf)3EkX;VkmFB4eVYdY$ZY&jbCY#%uN~a~s z$A`~HSo5h?Dhi9Bm?VUYO4#Owd4^X9mLeN0MJ_X0CzF{=)P+gxb{ces8DKYi20OP?aE;<^dAf4|!p;T3Gda7)r(48B?2L3-ZnPQy zdOmjOZQsC9oiHvZD#2-I9B(1KK!yI?3H<^DMo2+vr4DIzq;4+;qwu0DDy5P&a&_JLNprL z^65cYlZ>(^6=f|%vGFMK3=cvX!){W>@38y#_R5%%>>8iCj2C-lOewacq|3PIl`+NI zH9n<`qhxp=(gAEJe7KWm)RgWsnK)M48=zGV2V= zj8eCx%$UrUlo``~t1=7f-#jq0EarRR0x#@g7}h_sp-jkyG9eS|pD+dW4{Z|42F*ZY z{bOXi#%H|#QJO6&$Lk-(+ciGp^^eKfH9j|A|86+rzQz|}K zbN%~%to|{zEh$STza?c!ecq}pOQ?TTaEt5TLNJ$C1@%o{4c(4ygAh)Qazq0y{oW&cTmZ{-_-UA6)gH%yx~>xLp|A7Rgb& z?6~vCUyj*DB2KppV{gVTKZx0d@wdb-6u8B9=>s$Evb7f~FNA{&zRd8}pbn57_98dh zH!`z*BeR)H)`eNxxl7^8XyIT-^t4hx-fQ=t<<$=gv1@#4J09-!L6mBXCc2&5+v|gv zj9ueXw{wfVaR!sMYkW#Ohx%6mY}TlTEl;-}V6@LV2YT_ZXZ<$o_KlT}s58BEsM8GX zpC~iE{S#fJ{qtmp3b_N2#9@i_alb`~mIHPDhbZIjpsrJkEh%HF^;TufaS8R@l6H}b zzg4?f>e8moC)yIF(=hn!UeAX=fFT?mz=RFwAcU8fnl*;*V!rh0mn+tmvxRcjL?bIi zE8#99d0+4KrUVn=quf>99+Y#l#qx5G=R~p3Fgf4TuM8 zqOa^Be1(1tt84hOzop+qmxMb)+#y!KUBwVFdv1hQKFq6{jBDLYi|elI^qKJk<{Z?j z-5Nxd_lX26`;Vti2obfo8K< z%GL?m&}WfZ5V&lYH%|Q2HWGd6NRZSgF`k@2uacOuzX7m%6p-%Gc$B-;u3H;6DkbN0 zmqRvMeMdKT)nmYb$*0;49O_s`ISvnXJRXU5yS-gK)n(Xq3}g~u+I>2ctv*f$j7-R| z$7UHY#7UT@`V=%X)lGP+VmBV22BgOYr$8_MNj^jqe@q~lF{FkJnH7dT3>RTuE&vc1p=g8v`4wu)iF!bTqf175Ri?c95n=#PkzBM?B+OmWk`0v zGuNjQHJZq!`oln|nuawD^x1FSuP%hMSYzguy zt+JDHx2CGub`-PtB13v6LwXpRX7yEsUg2WG2vVVXDrA)htG9zP$%;ny1aXV3MD=>c z+skxYnhd+QV_=Vi{=KkscpQ>~7i-LI1rf10sMD?_01#XG2mye=@J4e800jC>jSv6` zbdDM!01)T}H9`O&(A{Z-06?G#&^dJUTuv$MpoLw#)#!t!AqKD|ruMb*tPf}iW*=QZHx zd-w%{?@~Po(WWib!6F7>;=N=-;#*1Bp-K!R^gfTiwMSPC^ldzP*`rs44pU)_rA;LO z5E$ubgaAMc`Un9&Vyeermv(hJJY>LZN6p|n3LJmKR}QNxJ?AnL^+`Ca_R1_Pq++Qv zs~)FeXAtxR1ueMnh1IuT*E?O1ML_{I6a*D9EYUg(AoY45sDt$%jA8R=n6h?%+O*Y+ zOt`ISL03_&gCcEBsvmYxX9{c$Kv&yRXHmr_!>E9a5ofk~E*|Hi#Z)gbI^^b;Bn_sz8~++>OPQK3aynn>CDD_BIP99^MD^P3*}64q&1ViV(rpr0C_$fKZww#k~~Zz(REe>f3^Tv4*+~D0L+e>T*EU z^?00{E{?RUSOWD4c#1*E?5erId78Rc0Fh5jT*)9Qvhp2;d}n2i)8TY(%y&5nr>m{o zy$baHot^Fli`);8wcF`dR|8NVl!%Wl>2tc<=Bf{otr@_F1zpL2?IW5a=X4fF@|{kn z(}D82L3_OM>L#?;33Wem*p_0WTItU?DG{Cb>I`|(;CX;N8J{PkdD5YrEO;IyPqWX{ zta-8_PYZbH5N)kGM;WJ8^R$FKIq=X~+GhDYvoudGJ=f?CESL?PRMTgN>aQC+E!8V4KtK z6a=ikfT->@pj-VZEA4IsG|N=iA{ej=mDzwl4mdxrZJzoBfPS=C+M!qd@QqEI>~hm= z__Z;sY4(DqMMG%lZ#30);H$Is^FX$H9?15^>l_g)5AWNP(eby1(a?(g78;|o`5l9# zdYVBlp`Jmg+m@uUuNG;T?r(s#S_zY?p3%4P~PH)GaS; z$9!T&JXJu4-6Zo+4p=akRs%r;4K|(on?Ui&gHf{1dX&64N@hQ0xluBkca92=qAo9k zjA7895lpg;F0ZoOPl3T}6Uu#-5ACHJrJF&tR1%e1?3*@{=r#CfT8X(E;5FT)!o>EF zB+dSI0H*AJL3$MfY_xTxpyi%e9_M&1#z z94KI4Q&M1)46>RHhQhO&)aPM~aeHF7cto2KzaVBJMP+HGW<2bP-Q%38kdu@s=N@s+ zbjV3cloO3oH0zm=lawguUUANB$Vp0+bMH83bI3_b$XWdbTmtpzRRoiC`tnjsnyuOw zk^kW3mgviuycgEcfK6U}HhB>?@hjUvmW=|(Eq5SJ78^}UM(I{zBmBoI;@M$!Y`oF^ z4#*+3Q>a}+?FRLGq?X$d3y&fn9ei~1(ZxsiMycBgY3GadV{i8bvzZv{ zg(CbL9&53WwZ>AZv2=QDWV|((NR8!^05b>xCemZ0nX&4ZnN_fNqi$4CH#(SyZWuFb zoAuQ&mu=S=OuP*bX*e*FMZ?ifdw&IyOOvFi7JAUFc<&gi9|(j!WzQwcSAnv*{*>t4 zfO^|hx^G?!*lz>6(5b$LU}9eoBa-JZ+SfrSO_IVz_lnBl;pOb0VRbvGU7bBYhTiHM zfZcE6(Oh|V%Ka9AmIaGCs_Ot?4O0DRq2H`qX*CN{fV(@ysUL@My7p~E(#oDRu4ZfI zbAVGQH4GLH!*k%;$Fi6!r`#j(@@Uy$e{CB7ZLIBS%0eCK*WM00cG8aD1y8ovyn==` z-S4AtQzwm~NBapO7IxOX1CLhIy(^B%CrtNe4XC8){;&aMo9?|0sFdm6-GEAGm^8*~ z5{zfuJM|lbQQuvRf`Sg&>JRY9XD~{aD7KD*SBYawFms$N=KB&S?ZrvyIO#Wu(`=`m zjFWYmtNkc+W-ps6jx-|=%$EBjybt|gio+tooIrTA{P5$cQVSN^`41zhKaQKVmpZEgh@q z*#)z`S!7n-%hb;Vy)BCcK*VXw%G6ObYHMELc%04Z=K*IkmT!c$Ib^M35|GWO(+aIZ z#Yv9$74j`Bu4_UOq@0$Mp!zRCmyuw;)oI21C&`~n1I|tC7dKW1jiv2R%EbP0awo|T zA$n<&l!*i4ZA3DT5B22O| z=fE*8TsT#eHU7zADds?4=l(2Q=F z+bUd>wTjm?TOHT5$o@k@n*UZ)dJ`A@C+5M0e6oTdi;Vt!Td4K}AbD&9x^G8^MzZR1O)0F|;I)(`ivpF@aVzaV6L) z>9k6m8zS$Fe1n6v4YY$9C%yC{_}B>M&6qh49gHH#aB1w@Xu^1 zjA^P}z_5N51|+h<;l2!d`7u)+^Pj{!Y`XHtQkD5;b(Icl%#*l_0N5DV2?X8uVv%wT z>(`cNfCGod)Xt1G)+kk7O7viLHw2S3GOA~F2jV>I9|U*; zb5F3ST}?z^4x^paBYcDaEN|05vGcsDV|5I+TAj-}wd`!Ar~y;$2Wey33N{fA0EDeLm`1IRrwL2jkY637_SOp*pqmU*9%dKZ37Z>fr|7{R?3L@yl7LDE#v| z|1V`*>H&xjcmBBLQE4-$>@~<)^%Z(=7rL}QOFcL<-$*0hFK6Z(ZRC4sX1=jTzF#%) znSEubHy&rBZEWK*Z5l(-;UrJ~S;#P#rrI0Cu!eC>I8a%ab(Gkl0zI`0M2Vd$P)>VA zgsArybz3qAdeOH`D{K@>S+x%o@z%2Rp6?7i^x^*vp8dB#&Vj-+SbaCbNmf_Za^qS4>?HX79cC@ULsQe!MvMU4K`HUb)-i;ra>k zDqJUh+N&KW5+@FiiuD(Go~8cCmF!~y%C59DvT;;sPjwPBvefg_W5iLB7^g^#7pBLE zqara*l^8Ehj}b>jVxV7xR{xB}kUBO`v404v+j{U-|H|stt*hHhZy9AnW0aR;QN&tt zR79_{MXx_ij}b>jV!T&kY|Dkhc!|VOkrG^9f*wj8 z%`m?tZG6&erxh!WSZqNnN=y#VD~yum>_XtoraBR9k>&&Yrh(s@>f{DurwUxuRBi*Y zO9kF&s?!>X-70V_Q&k&?b5-CkraG&EI8OzxfnBc#;(Qf&fvMitKwOYfL5Z8{{f*SD z3QE^h=QmQDRZxl1QYeo<^6idPB?RY+EZf5P*Gw9!$`3+W3iW##0BtU>6H)+ zha1vj=`a@iF^MGr5GVNv0f0E!M+gAKDLz5~AY30Iz_b5pM~V(v=DzT6IKETmKpiVD z+oSPw>8u_|U-fMG#D&8yds4gi_W3+u@be*;9_vvj*A2ULT07|2UHYv@HTD~J>AI1) z^j^Ey@Ah4q$Yb`qeV2~x3pi)kr7zpP+Z=l3oqt!44!Lw^e9^K!2E3($E@q4xWH_zg zp8NQ4bvMirFpkrRJI>SNiQvs6cX+WcjgpOX{Mely|J70Q9jANb>T9S0)qmsRvaUd* zZKNspWO{?}-t5CSow{@OuS2qW9cW~%^<;`2?tH^1`x>3&k&lzVxx-#;Un4(1%lP-z zl^(hJIyHKO8nN&3#$H(GXejIDVOa|pDQj5DD{F1;d*WsNkvA*r$<=;Y>r6c~oSiIjatr^SuxqE!FXW5>MqlJ0GkA1Rd*`D=L@+Eiue^%C(e5tAD z46@FEDTP!&j6XI{8?0UlcbVjPhQoUB(lzGFEylW8Zii%lxLl5C@ z^q4SSv%{5+c+>7)Po_gm_gaLe`w4m8faln_*cvNj20By6bUzHFf6l}(a6qWCRmx7g zNoeS0HKrCos)9|JaIQtjV={Z4%&w`)wSdT-SsXo-JvfK})#i92}s`5Kg<#6|fGO z$ThoIg)@P*4p7rhI+vYF7N(l=8N~lB;_Jhm zOC~0vq70qi2Vlzn8A#PMGFh4=MJP#I{IZ%qdoe05U=`x`Aq-)jtGcpRGt?klv%thD<# zhO?9Ir*T#_k1ePVGi;k~p*k&;&*4ZN%vHrp-*lcy^0ZIKUrYQPFYY-r$Ne683e)4B z2YfCOWCzAgVYxNSTo$KupG7Gh5mzYs@BkUQ+S+7KKiK1UoN*ox z%bYZxpXs>mDv0m&j*jI^ z&VuoLAGSvN#`9Y{TYJP|IFNGsXp(IlN3}xIz}%=MW;uNtYvb_NHhq0|jWs-9ZqHZJ z?$=@8;p>LV%7BzKrNPl^GjYISRTFPYjwDov82wg&5Xeo*Y8(UG61*x5$$lfo|w z^-4hbFBp5B4HQ0GIfp^Ael7!i{#cVRS%0sDcD*iPsy@L`?^6uk2SIuRj}u|ak%_PX zKv1F}1OS4v1t99$=-!1fE({}HG9r`o&f*yCCP#4raz->VTiLsq&U;|FdM`3#uE7DH{qAXK=1<`T# za;mTjlR=51Q?b;OQMRvcmhGu1+t)VB_H>l(zcjX+op{H@F#v1j9eCSJ%8o<4N%$sMM`7+P@p_Fv z+`}__mN>u0@2$f8SyBgFMLCN-JTquXRnT~R?;W8k0a!t zKhu&7=qj%@*7aU%sVl$MOg8{p8{G(K4Rk}GQ7q@iYxd+%A=AC=_C~w}m zg%e(`E3qNtSgia`v&IfNA-#rHYE0^ZX`ndd&)<`MbyNLvutr|j$6q(ZU$2P2emMU6 z5x)BSVo$&}sGGmn!E+1}>U9LVd=tjaP5-ZSk!hpS3dzjT)5`q=)KQ`uRu2fjNHs0@ z*9i3NaGQybBU3UvycWQeork5p*&!)1yOW`*`i+ho&Mdc?_(VKzdl;9LNZdzt+}}mg zy)GViP8gSzNZiMCT+S!eD;nmEQvF54eSCaoik{@_9 zb@_~4GcZbKgMo$4SNO`TNnd!lb}a+ntlbG*e^VK`VJGN&0c*SO1+4MD7qHU%Uch>< zHM3k+edSr2wO>k`HSQARTsn0DfWQb+BLo2AG9MuT5Ug<$MF5;5d7J{{=Sb+R6wm4? zyaIri3m*-0FA^E;~Gix0bVvV!Ycp}AN3Ie0P!&&Apj89 z_y_@j*ytk!@cjE^-*42z3sD2qlQ4mL1R&3XW!*9!mio1jo|%dC8zKF1Cem+(^wM;a zu3J{{-H{bZ+pRRD=pn*%JVYp65Pp5d-mkF;^;OGkLnZCU0J^_Le>s^|PeC1>p|+-g zmXh^U^{mjCQX5)sFJ4;Ho);PuZNt$;kCxH2mqF9%n+7(=^jRgzlNvy72DZ@&>X(wG zn1X&;h)=14mwA<~wEeS{lBsCzY-O&gXxnThZz@_ci!U{FiM_fB=bUsKg?8Ei7T<=T9z3n%!Z{Mn!_4K_QG$`3Zb7gnC#ZIK$#VmhW7)7(Uyqt#F z1|iamn3BF$3&HtodCRE9U?|IR?1Z}%@t5AF>$*Mz^baJAIr0CBo`J?#$X$Vn5|&Qw zM7lxgGZ zmOZL7?@47@C5``rs#p@hI&NgmHl4sC;3u%ym*`I=)D-~yRlZk-atZgwMpeObz55y#q20$Iv>A)`Fk3R0 z$zi=am%y5JYszf1+7jyX;B7I}>JfxyMvpmga-HK1+m)qw44PT@Y+31(4FmDATw)Z9 z5Xt_1Oe``alax@_T)&>8#O5i2e9Q7Nl z>*FQ>I*zx}-P+cw%T~+eo(gvf)GB1Ye-;FC+~cH1Wa#6mp3dd^7vQ5p4x57YoH6w| zysm>7GoP+t59E1Rh+7IPG3qj$v>am4ee=X8(XT|tivV|dDSjrO&!rR#Uk`heD#4p69LHJNiX7T2Q+zs(`&(wb&35lY=(LUH z^Onnjq>~R!Jhr?|<3j7<1is_$-6;ZgMUcW0WPTi*39;g1hPWZ%w2%3D3WZM3PJWK* z%u#8bCk||#IU{;(tN3QST zk3?tl9VQmiJ4R%@jCo%hQk~>{fRjGX;usoW8~)6I4Y9JGD##j5*EgY zqarbOKn#?mTEGzflx;k(i^otbP|iV(f@q ze*-agL~gKw7&{`jw1F5qBDXwF49^3b2FCO9w`G3mE`lW0iw9;~TM;g4nD$U~LExEv zMdt#{+$y>aU}jFyApkQkYO#i?x?&juPfe9qI@KP$u)f{M`o`}_1OVbDA0Yq`pYjm` z0CBUA5CDiz`v?JmVC@s30sw)Libe>qm#L^@&^|Tn)r;=b?X!L?0T7EhkXSRF=JIk@ zV_lcT1@L3}n+uJnxg^#{wxopgxqPe<$zOF9bSbGFfQEE`-JBqT^^>?|%oPzQuY!#+lLe{>K7QSkz>nH1m4@<54y$I1`&*R^K1g zhGq5DK*?I|l(&+;I}p=X(rMb*BDh{urhzqDmbFtmWO<9YfbW6%nuR#|*JjGj5oPzh)l;zycUY=37(#u@0Dc>sRo%`eqC+}jq!$6q$ z3ZzWgM+1!X)^L+A0WWSM01#jH5dxr=u0fojMQHpWX#~XZqEmGUUNNf{Z0K^_qtzr! z=9-$`rJg{c$+|N3r;M#-&X|BZ<14KvK~cNIfiNC;itw?(hh1D8g|imLcC{3PNlC;~ zPfw2#M@2eCQI+>U9O3DJiNB=2CsS9nog^L{unN*P<$RExNV zy7gMQdboa@yvhYs^B)?je@$K`LeJU5^{0|`|65*PT+P#_-yf>qF0beOv2WY- z7hW8ye9LK3zl{ z6%nznQ3Mf|`p0w;aa2UaS&bryu);3}!s@ZvG2=NB2|@rM*j5Qb03g^}2|@rM*j@=j0Q6-vP0*J$j&AW=9z3q9Xd+>n zX)sGyWd_*xiD&`*SeqNn`mxwVN-O~&hV7#u1i<#dMUdaH5ppq;lyMe@2=e#;Q@ihv zg+JoyUcC(2!O}Nf!lgR^K7sIw8fIN{*~|mas^zl12F#k|vf%~HisP~c1ex1I(g!S)_njqAtq-FkReb^8uI+?RpIZ`&Ia_{AnGfbJZ$pP&5qsS*@hL=n?&_ z)>Atd`dO{2=WC}8Yi)b|epV~o>-V!-XU&X$R;%qzN0P%@^IpH7)yivT^s`a@XG8nB z97kEQXMywRG=Ls6Y>qZqy$U>&9CFA#s>k6?rX1e`22+kZ82D3;RnaL28N_!5fHRX- z5CTA#ndSz+$KY(nxxqC^cnjtR3iklB%u7WF~?#GLEQaD00ZVBB1cl?4s zlk%{yZmRwi@9rOnv}8Gb@vM}Ui5}LMdqg#@II{G+T7vs1Vqob$nZwe4E{mOx&k&Jq zR~r%bci1)2r$%*fBQXV_ymILZz#dm{J5XwIlMAPKH(&^%1f`-M4Y_+8i>`u z-VWKtQFRkgUb2sojd!u=yalwZOyQGTpD z$)He{;UKq#6F`a8Wz0gn1L9e`u*51>nrv(}oiyHTCAf;7N)*+0P@*(o_bJS8D{46& zxCP+zkX}6y>Z%=x&Ee6fl}e`ES3u-JBNl+z(~^UnY6Z9^et^P}{e-&!Oxd?k&}s-O zO_HKkQXDj`tj3Mdp!M&`lS&PeU^-N&%ES-jvc43`A|)aVUs1HLMu*f5d(_~T03GkV z{J(}^gOO2AKHmv7kn_|yF64R_;MU6AjC&9OmMm|%Wl`WXdwR^h8<4)GbKud(vYCFo z9D$kYqq(H#j78ky?6Q_2U?szc2>*q^Q$*hp)@!J@8(F9$dhLO*!g^*EN7RmhMTcyq z#TFeBlBT}Eci_dxa9=R?1SHL*X*HMJL!f7B)LnyMwcHtM;vu>>9b!?kJLU$MEnF z#nBKoI?`;{C^Hjh9|yZS6c4X(Gs9zHTcf}C5$RF^mtL+DMe8t%1Zk4(DQX8WtFn-PY{JmiC;uG$y&tS znjhn(JfGjcV`twOq#x-*WW!?CSadMpyI~qrm*|gx2Q0-tR#Jb(YqMEn@kchkTT1Rd zAh>tp(dz!(2d#V}lTT*&!IB)XmZy6dgr^DxbvVKi_Xs?N&o1F)HV$s{R(RPb)qKS` zADCv8S8R}1%FisX7?qdEr=TCMB$NN{kx(T);vR(nl$iaLNI;qc>((d=T%Z z_6yq476ZbZq>jQ|^i-aY5MQP9d8iOE;pL;HpMk zi^WQk@rnl5|J7JoB4v|LMhYj7jli&UQVw@>ZQNFs!eYW|rAdNZ{Oz$c9qF4+KDF7U|-@6qA$m%L%v4%}Bw`TeyfaEEDN8ht}Y3 zGYn%mUO5$YX9>#CLXTF!Kgo?LLj$wM!HKR@EYE_Jr~4~_W7=aA&8b4FAga7|6jM4~ z#H43&5cMFW*T#3|IN-0gj-T{tWlDRgTm#b&Hww#!!^yVZ0X8 zt}zSp9ghc|2ObaP#4Q+4i5}i~Dv9KhPEu^Q6kn&3hUW77Sx^CK*2b)^Td_`NJ1iDSO+Wg1{ z|8)&c_%%4m3-e|s%J9Bp=||1bHyV@FwMKVYx`w_f2UWw^twsE^h;unUfJ*>zCPp4& z#gtdkJ$lNlv1VyYuns?tH<`-{0K^kMLI5D1^brC8@sy7c;PhbG`!48&O_3imNGc8) zF-(&FeLX^qt9jpeM{wWxA23}F?i**1t9HUD5I2lJ7bS2Es{TmK&YJpsl*(Q`Mtvbl zZYeN~m8jNUHl8;3VFI z5+>C{2>tRvKkk=D&s_ih_m@Hoc}YbJ<>e?f=zIMl`%{!k)nkS7N|eg%#i)OdQXgrg z{v}HNHL0_;AIwys&-sNR07~bNK0*K>p7#*~0P%v45CDi5eS`ogtpp}IX7v~}it2Yr z-{d_s_{kK2*alUcqg(EA>=E(CUe@9rJ=rpU%VRGShg0GAnvFN1;5V>>OGq$JT}x3< zQtCA9(}E4UI^Oe>RnHJ9sqolcwt2;u&~oBuQBJ}O&-6VHdMm;g5aNQ}a5S4wro#~v zC-YB`10zNZJCZXDoHAY`tXq!=JMNoBl*Z9hrcjjDrh%QTGfFS&CVm?GW~3M6(w};B z-8txsX%q0zEFSzb%HN#!7#qwepM%Ajj066td=%HoD6Um|Vhs0Kj=!;R0%pYS5u8t( zwU^+2r2*bOC`Dwd-y^f`Kkz{1-E}U;=cv1*_GFQbx2H;wQ;DKcUxu8*bBC3G2csrrBiAbvAeiek@WV~=@ENI32JPM2-Ib+4f&jr!v6TCDjo910#xMDqm!Z>()2S<|6 z0KxOHbpSEC!P4KEfH1LRK4s4|m9pK}AT5>Pf%2tydyUyyj9^#hwaL|Ca$_;STV|gj z10xwhf_M)227Uuax2Fmx29ECE8~=5q{DgL4+5%HPVoPWT*UND;WD-C3XX3v zKsXyOP^B@k&Mvw19!J78MR!i7`diS2fFR?EzY`qRXcD2mr)Ch+rF(GCqa&8E)q9 zC6H2`FImEO?pUbC1UOkwNSLW(wLYBjT6~$WEHGp7U+Z(yc-;oNpx^w@>=w`@U#BCs zqNHSLnuq_hdU>}cXQ#*ea;almIfY$hs%Ee|$xIIS_QP~~Qv$<)YerffZw{Km&t*OA zmz{xlc4cp!q+^fpw+%%^%3r*RZf`hfa-d>%@$3xNz9JhOt^N(-nvOk=FKRh5clI*G zHEy*l9@y_d2JksR4xcN?o=47GX703WVzwHM=D=LkMK(Q5Em@_3@L(-=MA<+UaPa?Z z2fHLJ*rf$rccH=2aFe9cWaTpvt*}JHJ&_p3Ulq;heUgmcC&|c7O?qDM@jF?)Pl9@e zF_4#-R&iwL3^Wq>G$S=$Pf3|G6L9Vx1mR>q*UG(23dK_G(g3qc0 zk6D(@wIo;LY9#EpVBae3Ek0nSNj6+k&AC+Sr12K~{7SAF|786d?#gBCQ8}(Z4xdA+ z2PS3r1s4oqXC{raZ!>Jo@KQf?TexN;$r~!sAw`QzuOY(`xrFSk=p^-znEc`~{6s)M ze~j-4j=Ku^)C$DMIa3-WjVqWCBO*#W3pOgyQ&%QlLp_!ikADG}vJ14wc}Tr9Ns8Ky ze!M##d6aulLYPQ^Ph3h?uk)EgKD**Jv{(@)xD9Cs$;0=Sy;= zOuQZ^caVI6kV%<%BTnul`9dL+f?uwsq8Km)ih4TWCabhvqXXayk`~oQ<;9L!xOCQm zpEEzZ48fNpkt4a}mRKM(f|uNnIcS2$M!2^*GOp!fVVR%zq=wGIz&IDJiQ4+w_EYif zbTK=6wTYB)wP|%OnkP>JTNqQN5XUddO>uGEp*T{a;u6@J!yqb>ql}h=j;bbF=B_gMsYn81z?{{;)Y;6Awf7+e>MFKN9!@$5YvUfSymJ1j229wykTh>%=95Mt| zuce5Q-HzD$^+pbP`MF7s9pLDkT4V5l8JU11Ep|E;_UK;qz|Zc;aNt`xtQxjP1>2QV zEwti#g$h5#g0UVYX2vLJqA8yLdCdRL;$@_C=ue=~5VrI3+-!d)osgtaLr^{G@=lry zP1&^P3@9M1rQr@d(dMGa(OUm)>MRDvz~jT4D{Z{Fv_uE zO`ctsS!358x=}$_cn&;gT9bdPD5f;#-kN*@TQnk_HM1p^#_t#(3DcT24lVRDC6+r6 zGi%cAL=<6-gDe4n$odEYfM_N{ z>O#tR05;r}ebF*xhWiE%h}}sm5ft&e&MkMCqcI>uN&h(=i5iX2nzN7_8M=a+x(Cg(|{qq{F-q>X}zr{q4z_f#N z8f&$r#={!q(c23CVT}mJAB4Q=VGZ)5YCVUN^{aM7>7|!wJuvFn4vdjeM@#?SX0F8_ zb@YMgWiB%62y}^zI(RE0^5dnq+ z6k6Wwq=pO!S}R*+^k4w~5vZyMbFee}FwTCw;|#xy9%s<}{*ewp=bSy6su!8@dyQFe z3Tf@JRe}Kkj;Z^d5Gj$?o}C6p%z+lBDrqs&Y0Qp`SsIEVB_amnDCsoxIf{20OU~2h z91hVH0LS3^5f`oEAOcpk7Q~mTCIAqvK0<)ODkj_ZB(<0IopVv=Fkr!&2i?8##yPXb z>ZLP5FNkizY=$P=6IlymK5Q@Q#WLI5h`?@*)L^s58tm^To?!BJ;p{-O$-ASo?qzJZ z1jY8Cdx>da&4<4+$U*;}=yBc4!I8CWcRkrR;9r^kSaZC(dJSTh%=$(KRvm}OvQzfQ@vP$HSXNz!hi=ak^81h|IH$TJT#s#bk*;Rf z7`UG#_t)5#PuV+xUcDX&z&jI`sRma2Dmbg;-bj)A<10ag7QPK+M69q?@F`g+DtNh> z+ES~Cfct9=p^9bdaj3r*uI1up^;uW)%LHi`HBS{aB zHz&-L+6O7CU7@5%vh+^~PN55u6^72GKR1P1Dn;q;7m!5xgw2y={c<4Cm+Db7Dl4=4 zG5_U@z~Do*P-T8X*8zj#JZmQd|2*p`XBkg>BNZ}8;~)SU2eJx60Hiz9dDd6qFf*QK zeFw7tCg)k7^$xNAD~ONtn0wP?3!r_UrCy5?-WCwNkJ#|ua8PwMP_cumdoj*J2=lIk zy9JrFuI! z%QF!^Mi+Wn{ToH5UdO}xNmI1xO!kISQH!~u)S)Hapx(wB@&@@Y_uOwDIN3+dXUO58 z0DGD0-N=Ghzb0{gwvW+2LU{px1_6=aGl}w#%-}u&iR|@)*zDXFsnyBD-#~Nk!zBoH zNe*So@*P2lhJ@>b`)a@51)3TEFC}E6&+-m*u@_S&?W>mD~rw znHhHbHjwNL4qnX!b=}gS-G~ph0rvSIcn&4Nh5{ZYr#-*y)Y^$5^S3v1?lS zERI}*V`Z}Jfzv04!s2oQ#52HjRp#Jy$Pl>lHg=iDaXf-#MkDqrrx3sxNt2dsT@K}+=qz{zRYLPol$iLK&_ zoy>^rpGuRYgiEk(c3X;fK4NjoNp=iB1gEI312emByN)4Bf~Q4r1kJ);qShCigdPyn zw*p>Fju~ajK7;9r)=qlLK9g@$+nGu4REPe(VSgR|l_Azobp#^a5LGXc@-tUL8WF3X zLh(9tq|BH(c7n%%Z#7nrafPQ>&)$O&MLL7eS=BDws)Mmw0fGA?=q~3TJg?twSltcO zxc)I%xN-qSTIsekCt=0V?M4(F40I9+^&TYIBD2lZwoj%}?=lA3LIb|!RL=s9J~#-S zeIM+L=gei!v=5RJ@xcK`s_{9obv(|gjH7*!l$Z~a-}k|}t@hjv{TQW{3KoXGx=69X z>;ciT=5<@5Eh!Zv@ErQhVD$uunOq3@<$~2dWtETf zz1NbK7p`kbqk98>ofY1NzgLD(?n#~-^Y?suO=&&sjU~%QGb?R1AvCpa*is7*n(GI+ zzno-T?qgx@!LT?t1pgDs+tnyK%<*4X^Wt4Egf*@leWz%#^+`Ih>#F`DlX(~xfxPz*mqqrv)%CdSyG_4ix| zXZ_t4bW^ILS17E|VWBh!)r>Ptsa+}G$5Xy1d#+tf`Bq5zR!GIHfNGZVEt&EynTlBw z)htXX5a¬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

TD`rsrTS&rqmoqhe;f zViFP$j3z=}*1bk~cTeYidz@D>$-K*w64+~%&P!m+lM>kLRpv~(%y-0PDkf28B!R62 zZv4yw@UxvlfCT`o3IP@XuyY8ofadAZ9&OQimnmfXs3#DgY^*V{rDYf@#u8HyZ9`EN z550ymSJ>Q(xF=`Ki=WG6u@t$EQtf2Yqd4n?EIc~%*GnRMW1SEH+(|64xP|-zTp)4c zqG2_)*P93|RC}%Kyajkqb4RP!EBOeQsdo|X?n%Ua@uSL{)N;L3Q&($4KEo{q`xotg z-!))T1!VtT%Guui@hmmly!K7_n3~|{wPFU5{ri0B5nXO;QZ>@0e>^T-F@s9Kg(O}N zP|mzH>T{%kws{q4>+=Ehp!Ha9E)r+^uPq}6I4d`0f$QGOi6uJ?8!?$;cz9)Dc zS^e-Ba*{6>Qm>F?)cZjKgQ)i-zsU2f=<0vY(yY@={p_6cg5tW)?PTt$GPUAX zl@y42UnJb!%Ubabf~i(KP_3A?cNCXV6V^YqEH&BUAJ_B(DppM4 zzNMOIKK=b+e@*Y!Y~^te;6|q5i@)!docTiPUbzE&spS4s6Fhx{7##T}j%thUJtUL0 zsq7~zf%$|iXuN`O+V&moH%dqlQcdPhTTl3X?LM?GNBg`TZ0OHB;-OYe!b->cHkzEz zA$PM_+=#Ge49+mULiLDido6~0CCqKAjWxgDpw$cRHp;CPrrK{&qBH{( z_y!fATx?afZ%!|s8G&T>CGAG8PP)MEEaWq2qT%RYmI=rrvn z-5Uh+a@;}S_9oV#-0_A3cMSP#lNVU5#kOj>9JXqj;6-mJdm}-!F)LAbPtDNcl;a~D z?yB0i-r6_O-@ecI;Z~C5aGT8wCrmqN^YU3r>mS>I)HMs^*?DhsaPjH1u2Z9}J#~j+ z7$O{YbCPiPVC&}21XE1tbL!@Avu-2w)qX1&>(uo}yV1D~WC_IQLGf<6>Ja^F521he zTFiECZSP0LCS&_XuU4bIjIEfY6uflp;w|$!qUesluwWyZlvtMm>>iS?ZjGw*(yn4+ ziPgkqDW`-O6Id-EJE&6TCG>yC?4WK3_1ht@*z%;s-iSovsTyq)rF&m%xoMgc>yw~; z>(eT-^n^`Kfhj(0+|IXAOT5+ad731%kuTWqGWSLO_6{Ro^j5={f+SxKl6=LI9Ih%& zv$89NcaP+AzSty~BDSxR78a@`eRHamIi59d^$ze*J!wPMeJg6fbk2QSAK%fRr~!>#@v9J}SsJAI zZYoXIZH-b)<=mU0P!EYpK~?>|1xXB&O!ECG3H4Yh28omSb>JcNLF)ka%0D1Sn)~Bs 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�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 B){6l_jV0>~ z!^dG@g@lBTVdu4H1`TIuFzV%l2e-pRzYwaP8Y#I&{AEziWX zwK`C-HGVv%bxTa^Yups}V>F+-b(k2f*kU(*MEU4%7U z>ywv&U=7#0jkqo2XPw)EiSe_}ZOg>?`P}Wy#Q6C<5aD{a7inT54c=72*4MjznY;l6 zTVL-EV&as8-+RKhkv6!)nB)h7e*<)bJBCTo@>=tSJBdkIAgKAmoynwf1+CfWe#oQ_ z5Y%i8M7YVX#*c9Nz}7AK4G3Coau<`IENL{G-BnDCW^=&vm%isSAHbRI`B2D`%Ro|z zY+ye|v&GG1Vl-Ra-9+pg$Xk8S%iqv3Te1ZR#%zfhQJKD#8Bvxb!%mI8^OdhD3j}-T zEB64$W7^v0{=~$zwav|9V%pm7{>j9&wcWkK#I&`;y~)J1wZj$bah|4!>O$*y_v!0E zRd@Ok?&n|QTJkgh8rPD(gF>_>eB)b<1%hkBHv!MPe2vM%5|hO)_dbfyt|YtNnoNvl zcfj+vzUTik^(?T&{YuXQOV&NA=kj;H)mK1pE`R6N=eCTWJ?^7SjGsMjYbM6e|J;sD zjGzAnBHZitAdTH&_qu6J%pSMbeVGaFDepo*?Q`E?f_nH+z9jFlzE%925l6V9d|eX9{ba5nwuF38sUVRw19)(^Yum>54t+%K6JKS$hM zMAAbSABCA)7@o)nV*c50-NbB(iP;jfs{i6!nN=OghQ!_Ts4JKlKS$kLnHWFE+&h>U zKgR+Q{_3}7BDBPK{?)xZTkF5M<+8Q@Tfp=2fM-jL=i~1E**yR5*3Rbn_kiat-}C)& zrwh*;medD=Yl|hxa1Dne;e>Bh76^_6OHA%3eT|9Gl2_~K8TW^;i2=bGXGzJ8dM`NT zYwiPrd%-EUA?Ib{Iqf!QV&XaNw#inFGwxH_s&U4BhKY&itos5J6VF-q6(%O0Ki#2B zOgw)Es(Q{HO`4c6XMl6=L?-48aL%2<#GC=nyB{zyXMpqWA|~bxaKT;4#GC;x1X};g zuh=g?!pXJ@{FM`*oCUIr$a?aVC5`5yyOoL2Tnu==aWo&QpDG^0D>!0#A}c(3&(4gEepp>Wn%oe zUMD8Tj~mFs^V>?QqtBU^lmLRQdtOiS6B8y2;XTj9WFfqPOjec9>!I|9Fj)r#*F)*O z#iSLS8s3H4DeoO7ZGoUhdDEH1dgy9Iy}3-@0fO;F16kzp7P7`fn8#be#6+0K`@| zG5FgkUaL5Q_ZV;UJ|trAYZdZ-(!{^7b%%GHHRit79bUsP6C*4ds76t*6>01}tD;`^ zUvn4r%-2?5jOs7C6!qE#Jf{<}xfk``BVuC?wqD#@sx^KV#l5v`WwI#lb=;De#od7{ z?)G|-#%6K1_d>wx9U?ZuyS;QGF@aAiu;1_Y-e*z?2=@Ek-h3wJWM0x+#>AY=OL}WH zp&rE5uavhvj-a1X-qARMeR_}Ad@JT<>vONSL=(RnWxds`G1VyREyzr)Muk8%DtN0& zW2;fY+Yqq2PQ+HDf|vU%^c)j^!PRKbexXnWFUlkWPv~ACQcx2=(~4e&ID&aq^hOb} zc~$a?Zlg^7yzcW#Y2rU|zRyb~qVKq_hqh9@OeXleK$D`|(T~<7y@;C4I})pr5~xOs zw~I8k8kV5v&amgE1jc-d_Xeyo<{mYERWilfA84!O*VwwPVTxCdh<&!6Q#|pjC{`@R zOVL*0MZ@5G-H=x`uf|TQnE$P+>fR$n>}pdhkZCQi4QXtqwfvRM{M}NYIHs*y-c#8; z*YSoBv3b?;-XvoCw2rr$i2Wtv`3Q#Kb3u^!i-Sdx*(qAh5a_&9`(K1=>m^I5rx2 zg~`fRzOh$U6Ti-ncvVgq-|jAJ5Ib z@m0YVq|4w zPW7f~;>Y}?HJ&1nHU+%;2 zAL5Q?HRj9q9lQ$KioR^$pR5)$F<-Xt=&d4R$6+ULKM~tIodTIA5}XB{yu)N=d*>BDShIdCoph)4UyIWh?f)_k$*W#rk zNn^9mIA^T^GTi%ttu7_&=bj_I<3#LVe;(;o`2(}ir>`wZ(7WD7BKogCZwEgky`4<( zuRkMs)7wwP{`Kd#yn?6D&$f{H>(6g_6^LZfUw=LVR-?V)MD$;F{td_&Zw`}-@Em08 zE1}SMZx<0A50VMqlCw6#W}utkEx3q8pB$bf5$9wIjP30|WL zAc1derrZ?{VeS*WcBIj{_W{rEcs-b4?nowigV@iuw)%>GiZ_;t$$g49T@%W^KUhum z#~99_*MPjsBTD~0&0zt8S)_ZPk{>;n@jgG^g`*g3$-&CKF$$h%_8WElQM2KgG7h{6CBbnvRBx3vhJ#QTollyz# zb|P6c5-|7oy*-*xHD&^tbK5nGK6Z@Tv5S0lswnuxB(7ts1V?*J3529l4x zKiH2M2@5=N1+%cTU_qc73%x?5(eq+E_*vvVq^+nL-vU|eH6fz^KGA+6orvga90sz) zdqxwg#yKFLc!P=9YAo|cYmFEHUy;RY;bq=LCPRT>HI{iZn9OM!rjfba`+&(pAXmWi za&HL{Td@`1RU(;w#a4JNu43-GV&PZeck5nzCRi~ftG(xm*zxnJm%+r0pHBl7`^;NS z8eOph;AgED`iJUF6}uD2I!_SM6-y>kmWZxcX&|3_wKbuNH3G81dz^@^*hcRutr0~} z!WjuP8@--PN&;y^?5jY=nlr(QZ6wl$NsDrNjD6=l#iT6|tk`$n zGfWP%W{>v*liyjh#~Vb%R`q{gCJ|fJ|9SPU+p2yGt?%`kGr_7N+3$5FVyk-4Tg${$ z^)4NUNkkS0CC zWEH|UQ8kI=(gd%GG->E*g4aalAlP%>JSH!~ol<;X{hZfIXblqli*o0@BTVqS@wj)N z^NLE;*fS&$Xv3V$QS+B~f;9F@>Mu_yw6f>tzr1`zVj>;ZmJG7GoylAvnEPK|vL-a5 zkX-aC#}T|Lx#YDcV$axrdqauX)~^O4yy}f3jXghK<&#Wi-Yd2B`Nxu4{9M?QQ!rLB z=BwUR@{=i}pur~*SG^@np7cp3lVqP9A)-%%!(KAvamM}>M@-2}yOezEU35YAcVDd1K(?qsu z5}LXio+k{3=T>4rlSx3z0ukakk*sjBpF(u?C&le~bruzYV9ZKX&_pH|2#4@5N8}M* zSyTIV_}g&M=Xu0bCV7GM1J8NI5++ArwZT!BPc**;J;y?&LGue}lEg$Jqe90%hTQ|k zVF6J%2{ofae*nQR$rlvxf8n3~>+`pXeg#NF;~8g4VKIY<9jk>!_SsZed_)>ORv#IP zR!ieZDv{6PNDm^L<49j3U&oQ5MD`QWR~$2lq!h#mPlUSb&_+O=kxyy%nVSiZ-=2eM2 z7u8nu7h3I~fRr;N?*pIeHyCjS8`LF6QpCq~2Q22w@bUj#GVCVK!uO%=Z_GoJ7Bi5bsT z4asZ9bBa&QTIUnTtaT}(w{9!^L>s;ORWnwOS^XaHiCO(>_(Z{M!phh5iP^0zF}qbQ zUt{*B+CDLR(}Q9F#giVo)DN!9VHP|jY81t4q=&NVz>_8Di+bWSCU?LYvjLF$;y9De zFqfYI(nwrll74qMG#5x?F|!!@(Q_F`T@$gIh#hrJ#AYUD)HM+ei=&ktbxi`J&T7o4 zYa*I!D}U5A5$`ZDqpqo+yV->w@rl`mAN7gZg`4@r?7}U?bn?6{ya)E>Y9nAK7){=q zX>f3W@$(Sd*>}4_z2x{8;o=0s8g{s3j@=2dO&!nAC3cwm(AF^mKyi(Yf-FG^RGDPgY(^*s@ z5({;Mrx5Rgy0dtU$*nvxI|o+d&f-bZ*z;j$(VK{Et6RXTn;1YEyM}iYuLrDV6R{C? z6B$HeV*7c>3G(VD7Bl%7NOvNuiRiy(b-XS^&O5t~JKag)hD zSpDuT9tu4pZn+0*m=#7c{4V(YsVK%oz+JTlr9z=+MR_KTcZWjFfjlQ_G6{jE4Uja^ zgh>qi)By6lXiLOatZyLZzT#=p*oyTPeF9cviP(zu6_bd-8;KX-E-7T%SIl5i9LQ86 zA2PYMt-jmSFVK2Fu|{jCVrbP*WD>Czdr=%9VzU?!@H0RhBaO{sfH)bjlJ{brZ59JW z5|NSgo$Ynd`T$Wlj%+1Tf=Eofa}~a=S{*gnPkIAHiq=pT+NuE&o5jl_m59w^P{7Y1 z(Umkdi$S7Sz-lxRo5djUj<%vKeutO`iD_}3_r4##Nu(*XtrZCrWgT-x3%yk^J#l&344HhMt znCrN~qB0Y69XD9iW@4`628$*{vZOgD3>IlbV&Y>N3UwU`zZVumn5+TPhsY!*Gs5tc z2FM#CgUJFQOK(N;DHFK4OPV2K2b0dM86pldfmdK?Jsc{oFo6dn^bX!o5iNuDiHUZ( z^hsuzxR*(HAb9V6n5fAl6|RQ{Lp;Mp8zxiK(MWmVjPnReRW%-#1tkU0Kv9KiP@Ua_`&nWn_^iU!ISx$VlxqY=8uW1 zOw1YSEm5v4<__<-@R@&%s7_>C$eicLh=xSc#V2sBHyK(VFJ_fPD?2jB2S(<2F`qPc zWRCZDG~D%)3ZWlx0{^x-xa%RA;FGpM)3zxF0h&+ zeqmA{$oE7}YT{RHsu)!sv#{4PQ$>XeNNmO460$L^8$T3Pi!KM?bCT;d%)@>5!-|F#5p3i2j_{) zOiT~X6aO(WJvdK9s$e{s!t~%gk;KIGAVkQ-^x!;EhDb~d1Y7LEd7>5*NRoPRo@l`Y zj=j`_ABiqZP6NTU_apHVlR2#USd3z_lrVfCjNL{F6PD&T=|!aKeZqKZNnAfj{6g1ULA;ewYY~gHs;l$V!-M#A~xpLq74yy zk7%{%7e_Fj)uM2U?u&onM3e!&yhgNQlDD|Nf4D}hAd(d}_Z&VIo0yn;4xfoXn3$Dz zoyb=$F|Q4Qyf%m;q_KHz5T)V>{$1A%qG24tJ02VS`%!pz1@G-_5UGK-mJmq~b#E08 z6@L>o6&|2W{oeUPRH<$WR^tn?pNQRMHi~mh%r3J@{G*A#%X}#!HPDYeAATv86R|5& zW+3-Wv4J!;cS|rYd{;J8WCr~FPQ>ajD)_f(L znv}bk#G0?fEt>fC*(OTG5v=SuOW9zd| zWWOK2PuxbDn0RorUa|LyVoX{A!4-R-xR=Sq4O+8bRATZ05Y+4!)tS7vQELu}hnOq} zf|>)ODU;6Z=b&iCq#ye^DB3f5iR1ZR^k$L^&WE_Cd>_d4d-00a&=~s+>hryrO=JpP zwMC#*hs8W1BSSR1q4I}Cow``Vkz|E^aajCD#8&mNh&-hG!o2Z&SVW1$L}R$Cb_m)! zEDA7r0?2PfiW12Ro4Y+nL~|zQZqHBRRVL`XZ> z@;r>h#(W}BpA(`mY3xWiA(G?B_!#^qRFn<)d6bBqJ0}8HktYIIktf9CWR)q*x#dLQ zD)L0&D)L0&D)NMAM}F+ic*4Jm9KlzSC;Y3(seBcALYS+_m*HBk|44WS?O#Q{1q5gJ zN&hMmZWfZ}5C1CiLDu}?Uq$`{wZ&7)DgP?c0}Y-oPKo{$VNBG4|A!;D6LS@LPON2O zt|HHgFE#PU*!jST=)5>X8oOIv5T)wtQD=6mzXDg0mqc6A*mKk+(Sxnbo2XaBRU&$2 zTLq);s%Y6Tar9mdjNYrFBWdjDy()STu}|Bticll+L+=Az2haZo{9G4rXpR3K>~-;B zfNUjV$NY7%lSoY5*A?#Nz6HPT6nmM}22z?x_Pag*iNjh$bw?h7lmZ=fYql&Y@G|q%|vv4c0=zJl2w~0*7*)uhl#0k zQ8}H7sdG`egNXKX2>cY2KNHbU5Pk(xTxP|QQ$)^bE0MNcuj<8Rt`@pt8{ujTd#AWm zOb+n%S8-W@$xYTI%OXq)eWt6LEK3o|g2(aNPYIdE%{OsYTC<->R(MPo{mi$7%=;K-Vf(8@pubAUJ4j>u%Mx>4UTz!Vw@km zQ(9W8R=St>uG76!TIOf+2N0YWrDYK&Wx2n~$dXLz0YOa}S%HY{<+3t`iRtCCvJMgZ z4qjQALB#e>*+B17xRk@_K)|fu6Dpe}=pueZwFB=ibk|xvpWeX-I)B9yxZ6yxCo3J>$Q)Fi*e*(ci zO_9BrtO#jMHTf!&?|`7DnjFvMz7o2s56G!ZIsw6|J|N#?Qly7|ld!t{h)E3~sHrZO zGBM+@hWwO?8HY9GCMISa)|A_sm~mKB?jd5wVJ&%xiRqnMa%LqQEq0ZtC6AKEj>B4k zaac>9A&nh}mY8v9iCHBq!KeSYZq$-D18pU@NgNxsWEmoQY~ZP&mR!(2actC<%bA$5 zQCF7glsFRV%EC`s@;;2Qy7Im*M1&a|56PNL%-DEH)@L&Ai0-d?@=+!kK(N2+$<|E% zf#0U!Y{F}*Y_R~h*VA7NQ zw3SKSxG&gGTUnBcmrM8Qld?RM(m*ixCuItgv+SpxY|JD-x7ALzC!)`6AHmFRFT2H& zPl-IsR=+gX^P;^Rq)BLAYB;2=-eb-3_w>20z5IyDS3vM;y}ew@&oeRW>I-rp5xXz1fPNa(_g^R$dwGGIta#$SsB^iDu(!@gf_rQG#BAwZ4dO4^@akP4l z$+Gf>3}W&t_|uv zCbz+f5s!gGc=b0#-b2KW-XVdxGeq7;8asD}$U02Sxp#^Cr;5WEUcKml-Q(Gcn`&Z6)6|}=}Q>1jc}rD*`J8Nj!ltIGBNAe6xo%DS;wZz z-b~CoHdVez1m4o>sr&0)`6`n<&*-YYD@QOfYhAh=%fzg8>2fj?v(}}{Sxn4YH%(?} zLY4ob6#PzHX0pbtW7FlYOw2kqU4{ne+|4>RT?!^<9h)wTGBNAebon$BvyRP>FEcUg z*i1QsiCM>HCahz*-VTLk%CV%e{XSDpW-GIf&6IPPn00KXT*AbxV>9JCCT1O*DYr2( z>)1@WkBM2wX38ukW*wU;|6yX*v6(W@%ep>h9h)hOGcoJfOj(tPUB_n1hqT6D$7agr zOw2kqQ?@5!NBGRZ2%jl?lE#kkoHYI7G`Rlcq?sD0!S!dRgaHr#wmD`F&XfxS@th)e*`LW7AcKeuCZcz%aX=Q! zcbMSHzXft%EI(v|r`#Pxma(7J|G@9siG0T7J0ORMY-TIG({&oi61kr>8)4pDA@UEC zuYvqWB-a~QjhJW!ZyrS^z}FjOJ|=yDC?ds}+{v1yvK*6YtXV2+Fgf|8_OnbjViIP} zGTEBReCTDohFvbZGFcDgD%?j}E?;2sRtfkj&i(LLD&#;-sNdTYc~g_nz%KeJ!%8`g zNo$`hA(9m~EB{I(a#rhFOzS8pr0?~VJ4=(Hp<_anEu)*&uBuugR^pz z%ry$DVXL|+Fn2b|TS#N)&L&xiNK8zG@%#&nx=r#fCNG0qoEMv9iYC-n?st%k&?IE8 zMmNiJB6@z|ZwxofxvWWtF;*O`HcRm)^;c*RkY9m(DR;f4dr(!>chR@X?==ba0?h@` zY?YUoJP8EXI{XEo_VX5yo1ob)cW5FO9n~xL4tbG@S)X@EF-Es#*5@5^FcY&Lek~_5 zG3(*iax;@|kHYV6C&HUxGS^u2GhFlql1!usk(fU(cFIzkh%0cS)>fU_%Jr>YVJkCt zcFJLF^>HWIQ^@mZw%P`yB9Td&&^t>lA&#ALF>7$uN+HcECio1o7Lg5Xg=>_yI!GiI z$^y@t9B1-B_o88qL@8cbdVvW&>XOs+P2_wMK4?L35MfeKxs@$sQmN z5jn_yj`B7B0r>}$$sORgm7qDmC)liTULehhTp>+nxWh|&z8{d4C+c{RV0{kC8bs_| zJ{XwG2W3Oj=(+sPEojxA3GQf`fHU~F&FKugLk9e>gZ?S*%(uEvEqSq?zH@8I7I+;B z@Ae#&F9hOwhX}m$=6jyTT{t9fkekle`R zFc8!nlDn9^Uteo}ko%b|2ZEX(fUKAGCj5m|`IU?8YDB1;jmyVXy!g4WOqiM!QL@+1-a?$gh5%w%fIU$KwL zjd5g8GX9?SavW*d9qwt$DpSyETj6aa!%Jt3W` zx-XvpQfp4iyiA4wLCr~7h{-vAy7Y&BL6MyZ! z>|2?2^|GwY8nYT-mJOMh)%bE?rM)6w=eEphd__)V^80=IPT&=}o{2fhTnSY5irhmQ zUDacd`xSYHNKBmN{r!r(#AGFmRlK&kBE!=$_n24@1h1{G$b3vp<*&-yHSsHdRhEh) zSoy26ZX7uUt^Xst5V4j2S3b|gRQ|eror$UZe{v)fQ~CeoI3ji@`cE!mjoFEA$aR|d zy>r9&Y081bXMDJjQLA-nl8yGcmn$Qx=(_$B*fqoBsY~vbZU$ zkjBo7n{q4>eHJY=8P14uGLe`ty>nB}WMX>frd-J6%_jQ15mGCdOa^ilPUa!CpNM^f zBCJwo>Rvv(0KTXDPAC*s6PZL8!r$eF*2C&NlfOaJlE@viwAE*DD(FPy5h7Xsc_XYI zXJTp?Rvnn&->rHYta7QRnQQ}+M&vmnc8$udCdLsQhq={;I5Hc?SVUdWe*E7GdFt-j z6k+HQIAh~@R!TopfVtcao~}S!N|hr`R@n5HQYlQ#)t^%9*iR@)KhcP)T})6j1^nbu zMc%`<>=oiIsuGh5P(!S0KJ@^TOs-fyRhNhzz4=sk)|kiMeN9RGnsG?wJ=;7nzuQ=Ec-?P5e6ycd2|IVitCVEUr?B z3>SEn)CT@zvZ|vsvL{@3cO=q~NrOIyG-qP&OeU*TO~SwWR;&p}e5+2RiHRh>51Fib zu$8&uNLC}5nDseXjb&o)8z-yDn)qvPvYNrfthCAMVW{Q6hE@-mPx3#>~Nz>Xr=M7iJAF zsfrTO<7XhmQ&QDng4d@*iPR%vX8~Bje}nzh-z!V1=A^N6&=T`Br=)5Zr&&v$y9PXu zC!#&${3@wBeWYVHXTQ>_>BmTH>*Z9n`IdYSp3A9*MC@!Tubv^IcOo2h<<$$UF(azH z8py`!nWt4% z4<=?-R#hXIm|0m>jb&nHW!1o}1fn(m-d$DAVPa;b^=xL`{eFGSjJrQDluUap}8rnISqFy4BMRyo*HLj+H6R~STH8qBbSre+M$!ulj=>uvW5j#&G zP@9?HDvI;;0kwmOou>~3=IH}!KWXedeLx*0VrSC>>c2QrdMbJ@u?X{ui6s}{t7Sl{ ztFlZ!1A?0Bswxw6SGI<##l+l|t)Ut)c?DK%yyIF^HDmHN5Ion_RH;l-VGT!3E!Bxh zA0ViyrFt^Sda0>L}>wbdXZcHgO^x-O;>?vK?6RevUCjMY^!CT5J)4b-r% znn4;}Lwqx&uG&i^T^xgZ%jaAqP%ikl%`qd~Cwa}EHNumUG)QbwtWhkC74A# z=}08L^&Uj*Dq2_d`$Xq%R?+%OEY*E#uA3UEBqru$-bj^XVov6bR1-}?z4$3ZW0lGp z^PI7<>cr$O-j^Gz9!!4hrFZkjDvgQBw6Pk%q#CcHjn!Z#MSL=f$zK=s9hk;y5|g~V zLN-=QnXG0_6SbbnJ|OsNT^e+Cjvggqy0vOw9T45%n7r zv(`PL?q06zY(~_hsvHr!COoPhVU5|Bo2ho1_@|3zstXfyx@e}-n3#2}nR<==n02gq zVAX1_MzF@LTFuo&CT68=u68pqW4^gMK*Wx*=7CwzTpc5gT}hg&vqWN|*fn_O32Q=g z^*58sKo%3Z!DLoH{amkwD!4+ALwrJ)37QtFCKG%@x06VHCT4AUOtoZU)|SWAQ%wGZ zF^20#OZ6-hm)Dk-Y7mnLdHrdn-emGPYg(x(Ow8KyxSGqvtSyhLTj(oFfmn4RSz*SV8?FRevJ({#dFSOhnIayu+EQTCLWto7vq)Wf6%9 zQ?YjHPbQ{f?bH<}ref{YO(v#d?Uh)gd&g9)gGypzD%L^W!NgRoqbk9~RIH;ar-?t~ zI;na@Y^I$8)##*}lg5s*PAZj1dT8-EI2*nTSL~|krx;;+XzuT@GXUwT1{0Y=zc#H7 zdqHRvlqtzR>urYP}BI(qCvieK%TV|1PN2;Hev***&W|X)F3d;}vNAS+$sn`9kA! zY84S1Pnz1z8hqY_=Z!RVl!=KaO9B~t5QsipZ;n&6XR!qlAF-V`Wc{Z zCt~v&psFx2eg>$*n-jBmSq&hP9x68wo+LwFFRST9^xP4U?JKI(muQt9dI+A&^aAp# z>beDq)=UR7Sp7}J&gH?X>{hZ8=F1F&RTUyS=IC^^+O<>1V^*!9s{Ae@{#D5cbw3kx zRWd@=VPdXIMyiHP%vH%q)ryF%&nV^m4?V|3L-;ryK5rVO@-k@;1fN8VQiYg2e20Eo z@us?qNiQI%c~g~UQa7L0#8e8C9zakNQ}vlNf?v?!JLGSvM~xpK_zwA7DwWCpt@@Xw zqty~7e*roiQ>Bm4&Ggc)L(W@vviyWuU zv1Upcc&ZP5F-~1!asE4H@EWP)GJ)>Z|7(0=fX+1jcVlV@)=R;I0QhZ(E6tnu<2t0PPv z8D*?0{HQ(81C4IokYcdvYw|Q}=r`9hF|RZxn0rAYN8&WyDR*Oq)yPenhKFr6wAE@R z=to=Kc|>clEu0sVl<|WV(|*=0grY)K(R1Yjs42}>SZ7U)6;?IT3jJtJ6|#yS2`h=% z_cJG{&zYDj#7Sxk5%?7?>_im2b^FhldrYLUpDC(1lh@hL6jg>umVE19c*_E+I#pF+&14{rh!p*W{Dkg-_Y-hO zdsm&&MBM&3{7MNl@2X2o9stslNYYWX(lZyW(pA}GI-YYI^g5QVQkdNNgdx=dOjG5V4C8lcrl}Mn zS<>t>(^VZNW|x_+nldqW>}RMkOipjsZOu@Vn7DA?4_D(EY7vo`sP~!H%v5`s^ap~P znd-VG{<&qAO8X6Cwoeddsa(gA*z1DXDi0C8>*2lA*{W!kwlX{HTvho55`FI-_ofV0 zoe9l2*mp8iJtjE9wWcW(oIAKTWvEn5{P&15)I1_t@}J^5uMD+=NrhxX{?H_Bu01nU z@<|;J&YgKMHZoLGB3bep>@e708EU5{{(FoWY9AAGwKY#2VPdYfK2pb-n5(Ui)MX~- zKIBI#^oOpGxzF~IYRBZY?fSQhAE}Rs=riqRi0~uzNgUZmWGxe{&q*RhPoZc1^(w8Y zK*U}%ex%kiF8jV~JWq#GWdbs6#~bI#wUzS)wiwNe`8T`PYL;?z0$=?VV3l zDIzh^sdhLt7Bruz3QV2@GLc9%B6`%_HwC_prJAzlpV4|=ELClo+zK-i*NvsBJCnwB zwPu-mj!9=As9C1oWKwUe)+|?(nREbxn&oOP6Z0F)6>0&Ks}E_-3blfWeg3{ueaV_F z^|j}f>T4!@fS~7<>Nh4c#%s+gb)Lz5AgEcTLVse#be*vpt5v%=G7ZQYwSkCT{no0? zIL%zptW|^0>5*VozxC>GCV0nwF=#fb!skgNw|5SOz5=pIJxfIIGT#z;i3zTdhlmW; zR^fIv;V%Rc`Svf}mU;fZNgX6&e^b0k9cK;xm9F};VYaB-E~1tFP4Sni3K4tP@k=$H zh#fy$0&Bt+HJvo}47o)u`Twx0bO~G6b)FCLY*B4A5ew?+-pN!?FM`WM@>{dG*GF)@4hF*THkt;VrH<&UXxq_LH^#8loAQ~8|yOpo*P z`1=@h_NU~>)T%g5hyRCWcbuj>X$}*K&*C}}+o#7=aT|<)Mz3xQI6NT6KW!phk@XFctXw4R{nZ;QhmV0?4BppA||E> zPpXwf>9k;pzKI1*+MIUHxTkO-6({%v#2=sm3rF*C&{dC#@hUtKt3 zGaQ;N#4+RftgkVKP`+^QAzY|5lUZ{A>k3f2#$Whz0fZo^nMkXJYo0D{38+>tnU%s@ldR-#ESR zTvhv-^n;Zj_mqFs5hmk+;C}Is`khFYKYFjJtD5*D^O`Chf^7`e4KseOsaizrF8r@* z#l-wQ&41O~Y=z_~9az!A)9IAlivZX&|U6 z5baGw-vhxX#Ra2Nnc#TFEDA=i6R|5v!Dy0%{{Y|d_zUk;%tcMQCgRX$ZFO682@!bD ziucOfqNxh4>}qpcH2as|3PtCV#*VQQTx|J_{rRGQ1;Nk4eJ^4VlZN6%agC-Vw;_&gfsH(X*f~WN~Ly=sBw$ArN-MrYAoy+$` zlZfbe@Y>;?=yD=9KmyVm1rj-_C#GJx|xYNvsH=iU}AR9D$$}z=-F2FzCbVE7cD~? zJ9;fKXY8D;YQ$On0=eH89Zn=BI>Wcz|0Obp$#Xz*e~6mNOa`&0YIG)(w^&m(I!_ZC zW39mI{^d;=@MgRq<7nEyZ4-aO97>i_@0CfjSA zbDe7{L@2V?2&J-S8@m{?6(Lb#vXeAo!i$h48l#Xcdq~Q@#w27Z3dt5@Et92`rSEe) zuj}H~`}X_%@pHR%tL`4p=Q-zj_H&)rbyZaJg*+D_*NLP$8s^hUAgZYP=JEY}4y1~D z>;WQ?H(ghaida?k3~4xGm%+*>7%?XGNfQp`dzPPRR#i=f6as?1yQ+FoNO8FHpJfi* zOj8|&lmik+q#KjSuC1CH5+I47siuw-f$#L~hL&3Z-oB_R|)yljz*2BQq)kB zNyDWGgP;G>tPN!#{luD3vj+Utu-fXFkPbkw=hjwdg)BbCeXx$o6tWfwM!t^v zTS!Z2r`S*Hs+b2U^-w1usHv-R3ONlebHf~XXQR4L$PFMnh~yWtUNrSp5h43TQ(wgk z`2~K*f$#rmpehQv38W+Bxq+%HWVUD;s^&sAiKe0IM1;Ss{0pSsNKFZl{GTG(79gdF z{K|eJ?Wd8t86frMqE(}UP+*5We+s0T8uE}&cE%&wN`%+OUz4W5!@lN)d8ips$R}%v zOnSs8`-yBP!hUkhN2`P)zNRLT0Y!b%lSr;&J{iZF07-3#ewGQrJ~)dsS&REte-Tk7 zeUf7VS``S8f?Zz)WROZpyZwmyo4TR8UIW-9G5 zB!16*UJZ*UO{ncDZkf$hCK10EG^hTRMf_Zb_G3wU%+dC6M`mG=90Kz89b_wzQ31mF ziS{$?;k*4z3|OVdpr08;Za$8A_Gg*qQKL6t{9txRSPvq2<~@S^LfDYOQiWDK)Mof%5t7Dtvd;(#pLe& zU<(xzE8I!pXxt(y8ZA_EK!e}3ZK2)^r1d_f9_=}rqy_wNxuP{c1~fDNhv$rdhVyeJ zDnC|(WxrE{asFRtWTgH|1Mt(l_bR8ook_vmq$%X zWWU@({X^tLEatiJV)SEg_hFuKXXk6MZQ#Be(t3*1!sni)$*R2&yorHd{cfqc5J`1D zs081P22CrK_i41^n^zryyr7x~$Uq`PgkXzeGC836h%}!F!925u$Cin7dxXixfFHIx z74Wly{3JZ%=jR-e#0p4woWJKY%;DAmxfe(qwW*?S)eFc=>Qp5psm@_I$NrKC{I3%n zf7(F{M#AGyI%s@?H-me zFY`*&xbdngR26f`R<|InS5+Az{@sJuR4XR2_SdgnRC^)z*RNev7xoj{^CavUm%y*x zR8Jv40YT5Nt1)a9)4E}dQxG&=)we?IsajX{s}Q>f>8dU;iTqNstGX>3`y17+D(|yc zij0`7Fe^R*tMjg^f{?QC+yS4cc2g^f_~%I7)IQPJbEG77Tu8NUyvj{d1*@TFKk`XY zF-%gWNaOE!l2rL9s}@B3y=RhYON1kj=SWHFdm?^)byv5Tz+30xTiFn?UMgF4Dk;2U z9`2tqf_{^L&u^Rt4EA@|B7{syGqmH@FT~bYU)53wo|xg+Tl%RUMEuD2kBWSM z^)_kz$p4pSSU__a%GF;@kMg{ch+jMXRXP!lA)XBMS58eXg+1jPs45X*4gS7+kg6{l zTZ(s74C=8Y#s75@(2-Bv$tJQHt72#6R~-QB`W)8Rrz0 zD8$A&MU50XA_(TB`$@x zlBxtE@QzKG<2nNwsu~F~a2KKnkrqPo!x;#kiVRaP35l0ekzwjpB3yR7i7{NgB?RX| zJbxapQUaP{GmwlDg7YA2J_uN`=3^l^o3mziz=}1Ch1j$1;c7*|iZ$zraN8INY6DBilGtPsk;CYBpXa3b9Yk#z&QFf_i~9k+E)q>PW;N>n5nK0fJ-Q1l3nO+x|5{ zEn^M;t_0R26I6%BSWXmWir` z5W8-fq}mFx>y}BXlaQt9Frw#yJ9es@kR3p#L#z8x^&yfG`4vE_dRvJ76+o&QCdA&) zoUFzOvG+44s}G5AEw_MHm!_r(!T7Wx@~K$OxM0a=qQQvaEz>mhWx&sCL^co!(>G~n zL!Q&rb|K?lgIi8So@~l(({U^Co+ymN(jdmJR|x@Ef#`1JDfc~ zQai-z0q~4zeWdmaiI=oKQY)HKT9Ff&k5!)LochUT@T?N7K2{G2$pL*Q`{zhX5b^uz zR8^KW*^?Azhysw5%KCXV4;_3+D>pOg@e z#&~~qt|}n}ql))e=c=+q!l55GTC1KyE&##E&sFn;T-nZdLFcKZLSnv!T|ey6=BZUe z3J+&L^VKFH6@Z|h`RZFCO+>Rm9TIYFJzFhMSB2;eY_&k$5|Z`;yoVCvvruL0$Z=i) zWfq-Ce9_%ELNvPvv((3EmjwWoCJbai{skjjHOLRP z%+FLoAx$NRpQ*A!zN*HWC8~mu9YD~}5>-P;-chVssu~N42ZEZVsx6VBA-V$$WSJV@ z3I62_4dGrGQ(vaGc4mUVN?;QADw32C{wm=K=uOL1ULjb^__p3KU7(|P)S2gfZ#8GRw_*-Bjz2^tWvp% zq=fLd9%!{n6%c}vN2^t;B>QnXMXZLg#;HHdTBW^CHR#~)LD|OzghRbIS@JXyJ|k-Dq2>i4I4?69Cj@&XlWjt9u4HnP2>0%KkorcI*o)F~niX=K z)lia+YD;ge{yHW1v=Z&3}1_`CJ5)k~ro)(XDK1%AF(orQb=}`4ass2>5}^e?XQC z!F3Cs>TgwRi0~f22^elw`vU~azExclD_q-r2%2r`mJqCWTvcvUp+P(**q*yh6-Yti z-;3L(<_WRq0O{(45IgUDqpk|E=Lz4a?eC%=f2{jPoh0JlSKqGwAmWb++oQ&W?dle3 zcueU070j2)9m=f*V>l4Vw<@;~tP9lah-fhKsM#6id6!BMD=a&nfk#^u8N>;%moRh~#VazkLRsv@L(9p2sS zRS81g=nu2vICxu)YD6R@Gzkcfy?a#)(X?I7Gvi+Ml4yDY!MS^{dQ~*@)>zFPAw_cX zt&hEGu~?M@!d9z@aP3@$JnvO;!?6^w-WUqIKlq*DUX__1GzOj#Bqq!YTEK z5Ze+?sego2l0Eflb>|oTKz~QB~(GimecB(XnuioIPzyi^DmJ3R2P||c_L&r*F{qs2y0^A z;~Jb$+-l;4oR5&aL{dVxfv{C!(X>uSK~&GH6;nAsbKwh#zZ01;gUR3zIENQh-kD53kC5>~ zs==OVHss@i3e7?d-|2d!Ig&g=aO`DLDxfI|{rQ4wPsCrdU5HxATu|Le!>a`yzM!@Xv2)x-wU@}y z$Q*Z39TJV5<1VTbqOo(_MRi^@`QiQx_U?=7vS^+Mf^*!(sFrzA-6Tz_GX_w|w4Z8y5PgP)n;F6Fb)ZrH%_Z4kJk;(EO#^ zE@BOiEl94b{X*hkYSo6);zYEQ@^QZ5b?*2TT!)hE7F&7rH4J&C$@L{#P;t0 z^0S!I;$De8<(9I<_9ma$-t=F7RtNlGPr0QmvAxMBwm1EkpKk(waJ2a^&4K@e=4?QN zqw#?4A=8MvFrI;>MHq3 zrT&GZ%`J69NHbWyyX@3Qw_s{;Rex zM=Ngg6V^IT4xM$CPm00WaSq*S9TL9lSd++yMEtgzLoX&Wl-?VL>!=)hMS$R0N)EkV z2$mFwnH+jsK!cqxhu%#jOmC!TO(qjsc{Zff3$4fea1FjhWcUUoVM-m>EjjcDOvvh0 z(rhQfRs)Ij-AH~&vzSO|v+wyAB5_-Ml6^gT?y%J-MTt1+NP^M0d)~>RHEH}F=M&rG zd}4cC4t>8^;rx#M)F*fvb|=BJFD4HL(n_ElT7qdYDIpq6>rR4c-AOPlCeh_8A4sbq zr4_Ad6{Q(SBsDZ_6SvhIIz`9~AlO!O=rKh66TFZ<6(HE6LOS6aj6Ba)EgVULe(ET=9aWYK6#o)BVpZ8>!%B10p)ww$__Xx@SO zi~Ted%}gNk$#Zkj6wYonZADWX2x~fv#_sHL>Nl)Lc6K>+f6>f@QgT}Fh-NL2`IOcO z(YzVaj1$e6h$f9S&WFXVpLt?scZfOlQn9i-#GHDS5FC*>^-TdXpHlx;i0$1u^}YaM z&0!(f>e$c80AbAqBH_>nuyVk@oKs&Rk`meg1ZSC?`le|9DPa9%{T4C-wX6%;Xt+e+ zUO_~YTQp~Za9R(EW~=P=a_ZuuxdwzaWkmA^jF+6}XGAj!2y3dd#+kSuZqh-lbLzHx zF+btZ^N=4bMV#(LBqj775G+NUeuFj6QP@|dfmNIyF6092PqC)&)$a?r2_rU+tGV@u zOhOyQb8bD2NJ{9mc+RcoGokxYcovsi9}+*kq~3Gu6GDE9kl%$Y2J$7Oo?G8y63T!X z2FspDXWPed&hj~zJ&!g-;06v5*5nb*l!)eG(G<+Eni8UU3JAt9k1i{k#gVish~`@$ ztf?WI-m*W|#Roz7J|Jk52fW+u^;iQfAMMh@^yS0%6asS>wzC@-taYCBmzMi$EUG zi9e7ZrzxE6#K66i2lRL%tSJm6zrHG(BhccWCX%q9t%|2XUThZ*7x5yUJ`$Y4nyhXN%J|dbW32+-6%3ef2c>t0OtO|fQF+{o(QjCCmGBS zBm{rb-5C{Z+puIl5N|M|@dXx}* z7qpC?NQBpQxE?F3_Yv`LKbF%6Srd6LRyloK$j_blzE(MXG2jPpGC!dQ9Kw?NHzdpJ z{)d?yh38fWA)?RdnM`6&!DJUx;nJRrL`ew)Ixkr-j(o`>eh!#J1jNwR4o>9BX@JH60RSdu26!uMpcS ztLuD1Y_F`Y9}!}EWexqP5Zfzj=qH8PURhID7Gis4O`SjlzDEzwq@05Ad{nm*(h5jF z=wG#TFCq7wg~|p^f*vL$76@t*^mHb)(`*8=+Im%hbc5Qdt#cm3virTDj=qjJ=-?lL=P2WTX>VG7Vc~8z2zo)G+Fs$RAN*MPt=o1YV4cx{8ojM_W=~NcV{5O(B~`S(@%R|>KHt4CD->Y;at#`dosQT@HA z-cK6%3WK~OsHa|Wp2`)n?+EItpT2;ES4~eq?ex-}h=fB+VE)1y?4`#M;gfcpWqRr5 zMEt(oE2=N|(i=$Q_hp~p`mh}&+e>ec_Hz;Q!}IBWO6y%Be(&z3M+vdLyO*9Q#Li#6 z^~XYN@9wSV5DAA4!cBvt;JJ@pEMzdu=J-2=K6-_a9ucxm{Mb>nkKQ4gv$AUHqYnzX z9U&P)+R5otAALhevb69%I`kXYMZbt9zmSO$O-UxydT&07IlM^3Z>#l;Gs4ANg`{hiW^%ph;-6@MV{+w)tx=rty`^(N~XM0gc9coRJF(lzgLa_ZH z8LkW6V9&OHjnGL%xcyuQ%?Le1G`2U5i0Vxv^g7b`>#-5~>TUF#>QsLURs}EujL;_? z=nR21_K2u9KSKXb8o$l^#J2enQK!T{K@Fbnj?jMv{FL8}#EHSw*)u*V210+*vrU23 z>9eHKr15*@2t9yEYG~`jFcy;LOCedH_Ly82Qlpq9W$wYWQbX5bElCp6AVL-h*?*ta zWC+Pq+L9t!*w6lmRR`-Q{6_Nv50%}I;(n2AgX0+}gq#V>T=6Q_nBBUY^ z)Qr)+gy0GmN9_0YC?R%UeqS#WV&~PCvJV(siXQ)ddXv*%3RPNT-}akHXgI7@dWjXx&L(tV?>P7(3vxLNw55Ie`s($|F8 zIc~PTCB)8gvvqbC^AiqbtIIcI=V(JDCG-%G>-nJ#=?6qJ2Ie@N2j}RAMe_-e2@vNw zx+D`iW5m789Q~eHEti>bj-EhdXy_XtpODo@qGIsqw6WDybn%wdjR zEmlL*xlZTkZ-h*WkON|6cl2}gA4L2&Vb0Ni3&Arh>=$$NJqDw}Z=S@yGe_qXf+H#(=YS^A$C6fQXeN0cKQ{8(FVr)uXN^vXccx^z$nol z()vor6hy)^<6t1G^&r)^b zbOjXd=@yo<^O3BjLq*RBsY+IiWvZ8bu&**f)!jfPKb zE&IgQ@@DHfn~lbn2(b~{qLV0x+@7)LZqb7SePNiAXqBPj@2k+0s-{&6EeTBrr$iEddhod|n)m4jQ+5HjV=znPHlZHot-@(s+X_^Hz zf0L#!kyOf0k*#QzwFJkxKD5J%K#plG~#N^cWl^L$G07Gm>!TK_1-=J~Wf&LooO44qJlbNCtL8B2ObZxZs9 zo+ z;XA?3>rL_K*`M)$(}|^#_+O^W)UAaKhBtTNdowb12O+r|z!Q5YMW*h;gvJESVWyr+ z#Q!!^rgk6awCt~^Gj(nu_BU&p`tIL%XX?9u-~ER!C|0fEt~I89Sr;SXm;G{7onF@E zNaN4Km$m)1DX!4I+J=5Q9)he(oJ$l%a(A3B>nZ_1lOFkRO|yVzFL}P(&lQ~<&@2Ey zS0b~gE!P!&iZtmlA1Q7LS9G2-7(>6LSE6!wML$9sE@`3hLC^Q?gazzsl% zp`Uu;*Y6^3WiQ6TkH$na?(+}9JKTaKo9{WEQcrbuJ`bY=jGI?<66c3@*%g6Y)qREF z`iDufkiigzJRhKDm=Juv%w!CaaL7Ilys9S&vAdG1dYX{K&@$^lTG#Za;^$W&4T&sc zO{A?})3*bp3u*2zi*e?j(gVn!x+oK889cDV7JglCWfD3HC&^ff>pE19tU|M424T{O ziE{|vgn;k3xvsklIa)Ht*-vCV5k6}=OQa_reZp$_r9xISi3n@r;au;!p8q6kmP6`^ zL=F;R&3GbNpJGkk%J6G=B7KSYza;%zZzq!Oe-R_H?zO%0hCaZW$lIQ8=!-;BLsh%- z4bmI>Dv@xgz&xB?VJ)SbKaHvLS?&Qy{f3@TB-JSeno~rM5DACY+~POz+|s9nYy*-F z#;9BRHzEBx!kg{4!<|xnO-Krmd_?Zs18iOXQ zJBWy%pX}~k58{jA8ZV*xm$eTp&PCeHBhBcHrYGU0V z#j}k@PWK!Uf4<1+W{PLq<8r#!h1edK(~YS>Z7gJaoN{A{3=P>Hr`-EQb2}DhJxE=- z4+@C|@&%EiY(;x~oMn_dpEZ$ws@xv}1pBFSRYgjjG!5WCwOchnu;;pNA`#wc-h#9| z_aJMWE6@ksZ;@OLXz~GxbCWBPXQv1B!6%4JCBl9Zf!yor%B=Ye{B$Eyk_c=}EvvjfQrA&GGM^dyknZuw_@tGYlQ za7R{SE9~$6iDU}N3hTO&K=QdotFz{619;03ko<0IBAogXAO+oFHCWRE=8Ho_HVNqj z#O#FkeYo}(ft}3@yARi7tH$t)%ZETy*exjp+jDs!kGPG9q&i4i0x9OM5X~=eN2nW+ zlJ0&X*yg7IdDLxI3qAX5q|$B@k+3sVemPazZJvOdp&^`8aQrFlu3$o6?`6`ZHfp$} zm%(#sH=z#a`SM(N!^|!ur!0Z{8%WBy{{+Y$Sm~B?c|2=+Xw=og__xM%Z4n)Gv-l;tARB@{} z;?z$>NTKJL;M;7fdyw^tGYdfT!X0M2vF61ONd>a zKI^6k842rEoI##-M=_yMVk3C2=FTAE&x1AGqD`<|{S-7f?FVw+D53|71-ayI)p5@f@p~m$HRHB{wTwNbj(eR5uL1IspYG42Ce^tB>!`dHjp;%M@0N~*v4HO(8NMNZR73;knDTl36p!6h(DXR zb58{{_#~p8TfQ}>o*uck)7}jefpgLB+*&%ivxPiTf`5VD(OpC&?34n6sdseO1PG@7 zin~LsR=`U50<^l$?)O59U1QIk-Qz;Gp5dpro!zfr!2I|n?Hn~~b$0iV#^1+vc7KYp zx=w^+h->xEZk`wY+G+9%l4eBGBPH$P_G68c9nK0=AsAoWkBMZ&+Wz&rJ6nkDU$481 znZ(%mbal50v1RY-9us2A-qpP&em3Ocvy`rGwlO z1bcTk_hBJRN3tf#jTf>W2x^ktNkYRdlNehU-Q5%-e*5X} zjwHfS#rD(P&D9q3?6;pD?oc9r4fc+z!QSpT()cyl+npR`wTg&egT39|0kRirr?-2F zh+l(!-5f7re!^6Px8Ve)uUnXiUxWSJQbKGE_H&Tmph69pXMJNzXLTs-b?*1#p*6DD!LPzwI5o7CgxI0&ft&8FA5h8w6het(qxOR*XTy2$Ey#0(xVF{##EvatYvtM&QWuwsG!GB4H;D)}pvR9Oq^VX?l_8?(uG;PSgjTI@2uqNXRp=E5WqJyX%E~ zdWm-~eG@%Lzx-G4=6-w&DQnl5PN*I-&y4W_vd zlE$yWG`CoQbcKC&np;{3)W zwkhsZB7VR4*j+8eM(ksEGh0R0ejmGg0|fm{b&rdcjp}swtPtA^rn}dL*f>vje|{Zf z=-2Xe_Y@I--kI)}?}{3~mOpXBMEtVPii-R!_XE=Sk)P#$6lJxRh##?8?x6s|^# z>4vF`2G)>s+zLeeh|P0f7Gfhd&mAblMq{2kNr;WcJa;(}e=RZ3T_ePf{PWzeh1ijQ zzPnS19r@?G`-Rw%e}Q{Kh#mPCxR-?3k$<84mk>MhFLa$GEUCXHS>!%V#IK!2ZgnDl z?JRP45%Fthv0M2K^yAmg(x}>5>eeNVUpq_PCQ(*BiTJg%)EyKcg&~op?wA0fUYiND=KJ=Y0+;yU{^|iwNR*0>y74FYMY<;b8e`7zPvH5sKy~4dFBn=4W zXN7xPtZWPa(k;*(qv6N!OScFSKZakr4T<`-W>xwveoWUA+d03v;d;9+C3v=_H90wSmRz2vK$DWIjnK73%Lkm6uwt~ zt?Tr_a)m?oOlGYc%Y;^FE5P$Qm!Io}>D&+BM!V7F=Xznso@{S&%aN7;#Bj4)QHWh# zY<3fb*fq&!cR3M18k?h{vDw`~8ji*l$j@dsb}eMtVS?vTo89fC;giXmq;YyueNhgx z?}N9Jx)q3oL&YA9ah?OR&8;rvUpUiiL!_RNxj?!QNfdGvNIxR2ghf~Ls()YiIQO{i^1S7T*$hYnpB7WI-x%_?MROfB@5-#2o-sKkR%YOP6jB)mX z)h@S#kU>BW1NqMVkVrVxwtkHBW=S}^aiAm@LYzu5&e(gA9AZMzaDIRrCT?s$EJa34 zisbM|w*V3TE^uDZ{OFDm(gVs~9>_sAlZi9xRS3p@xWC~x9e{rL1o%E6N8My5kzcwU zjcPwf-I1i>*76ZqjSrB|h@=I`8X(8qvqEq-PbZQY&>R4AJSwf@?)89XeeVC(xNl)8 zI6wFu!~gP=H=rpB`>W$_=0M--5|9&7sh@N+lYI@o8Th1Ib`X+qXkjh*4eO6cDhOE( zB%VkOBD~Ig8pyA1Bi1RWogQwjOm{2X_+V6B!eoniel7>q<8~mKMdl2^r z7~}Ip)-odGJP;gvGu#bil^#1!G-urXLe`7sjC(=IN5k09SvTe#ENOb|XF$-;*@$O* z8|qwy*xOJ(S+Jb_oR4T$0zp3!l5HSF47XwztR`ElI&g{uXO25-CdNW(SwEm-*k z`vsH4faZJBybvHq@36uf0(bhs8v=LwLC<&kLBf7Il4owK5B`k#=^7w~i1ZPHR=7{O z?Yp)A|(kmhjjVjiTG&HOH8Aduxm{t}V}-dnfP+B0V_tKw5Ib(t>P`*e5MxcXzWNk_z@)Uiw4_9)nDM7^=3}M zst%F6JwIp`2Q;nzhbHT2EIX&ZpEPX)=D19tUN&WGa8j z%O|$2mNB=v{1X@O*F*=Esr|H{comM@WW~ReEf`3%q0X zHFn(ai5)k5@=qE+ttcDud|}hwBs>1*1|sik{(hJ>5t&+(Qf};f1 zX(e+>2)>~RTT~_US3pynh?9mBW=wJB3on1!|m%Wka}C=&A@V{ zhMs8!&r`t9OD4aN$Aq*uWr?Ia=`DFL^Rj6$6RrH;6TNI&GofF$UIjlL&CFS(iHQN_ z4Iry0^yBw;p1)%g(a$%KG(GM^LiNA(_2<4+H>o;2L%3zUR!0vY>lChSf4 zZKfXPd(xyju?OG@Ie6}2&IZVEAU(|!b13!DUKkIdBRIWHB_Tfp!L@O3lfZ=XjHHhl z7a$YBPhaziSoQ1#s}yk5-^>$YPj~y9r9w_YIPf-0f3s2uzD|hACMJ{?J_qS<;y&g0 z)Pqv=fqpT-&KKE^m5rg1?JY}O+g5#oZFLsp&?g`Fgd9TK7#Ojd2V?{Rz`g`5G>05UStOcqib`i=`$@0m}8v;lHIk@-Rj ziJwtsnUH71&nUB6$OUKx_-l*NW~-3fKoq>AZM507n4%GD>wS#bFT~dS7}NJN*4TP~ z-y{pM_5Qv&w}dsePRE)*gxESAYyJ^p+r~JPbtzlfwlU7AWk~#+mg7w>Ce)sx2|43U z5|NBp+cw6VzCvu<7;iG!%BeRFS`|c09LAPE!Ouif_6sI;;hqeh`%N-QLOKG$J~+utBH}+mm}JVXKr8>ACs+xw z&mBHAbA{MFNUB*P#O^p!%~l~bWgbk8?2>F>PBjmF$!Xc&!lar)M0j6-w+K?r+d^<{ z!(@gKT-y|KQL|kLu5FlH6oM<6Jf~1&zxQX?NU0|D6{ha@%G9W_H`U}KjlcHu3HrhP z1>`xPsZD9cM|n;m5)MuH2UaPhc~8hPAbp5@AmnQp>)rt}*-RC(56G89VpmecV!vv_ zr&wv`ULxFD-uwWbQ=5DNvJR}$%p*cD&$y#cGmi!|_>?NmJV}Jdp9YXfnyDEeUxS}1 zrgebq1oE-zO~fCgrkR04F2ikbyhA?2OcFBXWtf{FhcnF0RagptKAmBnUCqSKxid|3 zA{nvvcP=x{;5De>ws9F!pJ~#F_%%2)ss?A8Ii&Gx&?mMAXPPgg{9Gi$(a3We(~4h< zsrx0JZFUmj$S;L{I@kOVAZv&m5rS#W2K%{Y**Yo({k99^Jl8z6o(Z;R_EVJzr~c|` z)VvWO{ea9jlh}&B{D>pKLZdg3ANoBAj+qNh-pxodV*YvJB_tVclO zlN{xEe)q}9-moILL(?-8=G!~S*zqt^-9cW0HQW1lkZ<6r(ZnFhwrVc4Wg?-im}idj zZXyE$JBc;xOf?}FyIE3Khyxn5T4xf4 zBvs>?dcA2aBn$*+>hW`~f^ zBbuLt*xkfNb4&>CCh+&U8_iiE_KRSfOs0_P@I4^R&nEM?5c{pM%_b(DV>m{>xVPEl z6p{;mr-`eSEvA5wgh%Uewf6K5!_JpYE)vdt_LvITyj zkKZCmH#ddkf&WADjcNQ1N25+9o`tuYmO@?yf_II!oAyGoi{@MNnvmk6`PTFla%nUB z*60#6hDd>5p zxgun%q`uQQ+qqm{OX@p~D`a@Ys*sQc{Ww26O=l*~MIZ$sKRZpbXfCbdb;~YuK*-(* zxhiDFYHlsN%v0ZT>dm2C`QblznQlbhQiz?Kj+skB?0j*|+!PX$esRord$<&~?;JCa3fUmN>6oc1 z#E!sRa&;%n!f~i6wU<-3-+n!2o)*$J zl6oy6_A9Q(Orj9`71v{?gAn|V21XUq67n&m#pJpW{ALG}3i~+qEW<4sAf&=rOZGBx z#t(vDDvdzT&i7)MD zuT-2g%Y@)JJ1}A=&F@0&*CkFGv!Bzl-;y|K$_l|RN3c}~A^4pLCewx3uR@$O>xAGp zAXxK{5c|c4lcvA{P7A;9z?!x~sxGnQBO&(N4JXYiA@)lRC(S`2g}<;?d4FWj-6MV$ z3uzi5oql3X;R)7itB@PxEh&1CHQzoUOAOvqel7i@J%$b%7$`kDRgmp*vXG!lZ}j^P-N5z@8<_tTT+xR8Vhsd0q; zbc87ed-qAxLC8O+te+V|XqQQ?<+zXwr>&;YFYIS&gme({fXn0INi$W*k_0$O-hgQx z5Hi-ael7~>A4xsyQTALpQqm4WvU}EQhL9=7lH)?~Y>}f;=otHH6d@g$I4gmSgMUt% zBSPYZ{AyYsXRD5nv!7EYO-P*N@RT_y*y@(#`IIRsq;-T;67mbwDMtR3 zX+*?d$(%AT2(jyyQ|48+imY2snLeVitDRG3h>$ICI(G&}q*G=qTZQbYT8247gx|SW z?R}V8%@xsX@5gJl3==v@rEtFc1Q8GgM>8;MT4F_vRWPRgKOGr#(q@|t?=!* z*NoL5VT~o|=T3rWdQ5hRXCz#TyPv3DGe-ickIjK;ohOnSYS$HRfn`DRhmgc>mRu(i ztP7Jtt&Uo62`X1nCZR=eQt=d!zf8Q4l|U*Jc}mF4r{VW{K(3prLY4z*M5GRr$SLvP zrg4BIf#z>BAVARbEwfDg*!POuHmii#`#-nMW+79cT-a0oHQx%E2L#WW{x#nVDO5Vf z=?|VA@34?kK$404D&+bE_7me>5aNEoeqy|xSGtkR`Wb=jzIRNBGBJT?s0^|&k?B0h$CIh)l zWI7Xy^KBqGycGd*-*wn&dpnpoS>A!$0YH>@Q^+T<3#bJ|dwI`txsW^y#D%%#&by#S z2;T+m1e&-A!MmVIK<%ooxPYUdh|yxwsk z?+VH1mjMz{Gh9+H(`| zSkU`K$g_L-Zec-hF%kdnK|yZ?5q^sZ-aRPjeIpv|%Xs&optnbey?ap5J4qxQdTkG^ zrVFFyhG_7_zBc5rpqJ%5MLuLt0t84U!_tRC`S6Ossi9=!+dKY2Zb3<7dJKawz!ln~y0=mcpM^2Q3mZ!>izk}6g| z7l!vF6PYgL5|I8x<_Y-;#@#_c3VTb16s!PaJCT(_>`7^1ZzGYRA^hsod!+e>NJ*m)erXKV>2 zyir0fU9cpb2+u^XkyWPn$#EaYxrA5YH%_bmF!)vgY3dLOJKbQ_Fpx+GAv@qX_6{H= zy=Q-?Ji~ipVw|6VJnHo&k`kH&p7D-v881@^=D8%1@|P$rDtj3seT5W+6)cvbjCWl~ zb9lbWBq5X2`stV@&SfTp=US4Nh<~50jMtNhf1j_n7S|#u9 zxw4WMx`HL;8mxU2?&NsE-}p2p@^C=Yg2aDmZ`yF|%>g^R`^IX-tCK*e_&1;{7^Mf(OI<4+?A>#M18s0V{{*8_r-Yz1XXZ+1|4R2E{`thG3CU{qK zB4G{2r><915eZeF$}>@2uYr&@KyW6i>pd@I&(Ex>=d}@X5eRDPd7Z4Eo~)_wB?)-} z2x{tk{e-+4%RQxmH%Q0;AgF2Jg@v4l(HMJELvO5*e}SN;p*LB`fdiaYBkvO-*MXp> zkvCt+C%swooVQHKHXx{Z&Rb1{Pt|aKZ|rRj5S-r|dppGHw+DEZY3zM3Bqxk~IGZ>2 zeipI`P7iPg-NZX9fMtUi9hEy^=cCF=iFvqQzD%DqfU&|%zKTk zVrfi(0kxUehc)z$yBjBvye$MZPmt9xAy{^7EzP_!0nKPAZ8I;8h=0P+%sWM7E6qE2 zx3HP_Og_vrpDMEtvj&AiD%>K|XBI3uel~*&rAHy|d)mR9|kVz*ZehgcA z=|XG_TY3ALPz(=&pVnUO0vtnZy~lyP;5|o#W0*nYEg~Gl-+;X6O=LnbjDx$KFL?`y z_@`Lyy)Ri4ntcf7u9a|?+FLJV1&{~9s=b#kq;r87rznsP-fkg%fjmm&AQ3-4FMCA` zVxIj|te3rZM7WKW2dj==S0NZ5B%Qo>i1_h&)!QJ%#^+UU7ZYw{VD*|;>>-X1o?^8C z(#0!HMA{gU=ZNqrR!1POd+nJ}d5c{2l=Nu*gQ1lt%sPwD0@4``;7W*refhTXi-!yH3Q3;Ss|?^Plk!}(;@TL{LG z$w(r847+*fh1eK&^R6?Y814W+N#5&){5G}^$QxcSA{@h?h)g5GZR{wJ?%ql!6vLZ9 zdU@Xw@nhJ_JH#4}A$)(Rmv=%4mP->kF9c&a)xeI+yByHuA;rJ9HtFb~bK1^m2@#E9WJ1NA*rgyK^P{PgzfKf>|B8ms}NkJpq4$EPll zUPL%Pje+#_hBBe}ObbE#@D>u`w=a$d%>eHVYa(Bc7~owZk`l6Cju_xw7ma-aKEQK| zV180U_6hg^FO~?eK-QAydqsos*-Yd?(ctWfqW$0OS~1emUznx zzRP{*S8!|E8^meR41!;F9vC55(mM&3>rR5DU~>1mWuP}Q;JG4{VxV_lQH(sV6L3HH zc7$MBOyWg@}thu`s z$zJ*5ep>j9BRMLn$zGj+X2v4av?LM^wRw(j-6wnPg!BV~d)Q>}H6fo4fYVDT=^(F% zkjZ)RP4Y5$4QzGqdgY0PL!Uv-TzL;k6(Q?^Oea!X zND91Dr6G78>OCi9E|6A4S_)Zpo_7kvymmr<268<=yuZ%t!o-=70MST+d+**=(b$vH zuoqtva~KZUlhP61%S@b=aCVAkDI>iBqPZXT?szUb%3CI+w2;x>X|d`8G2V62 zyz`yoY=S($@0BgZX-yC^*6Yl~nFnMSXvTR1MAH&}fqqXmc;@6S6Vg@41n;z1r2rXJ z5bhs%*F`gfd)nE;slVF`r^m>ct`-oyU4`3 zw-i4wnB_hDB$m`~3A3U~I?Jm=nsDfodVG6rme*Lw0w6dZ&hlCbIaZd>WM+Hqg`5R~ zr>V2OE<%23#ADqYub+^cKya*^a`Gm+N(d0M^_qBn{i)eBK!8v7~cT+SY!D=={YQ9&#JVq=W zx(R2MOco32k~_xf+!HnVpCS$QrUWQESTPB;tio0cz2~1sjlZs2=)FoL9KxG~_#|SX z*PY1F5Z)xjClL$1H%0S1&|4}5 zZzSSOw9wnagi7%uc|Itb1-1FP!(uP)8IH!+LO%2A329lEHA}o9LXw0m^;QX~0dv7d z@Vv~+6!LhK5E1`H{%eqPbR&Tjp}_S0IIgyN*&&xxQtoCXN*&}||cnyWz5EnyFFwxkv=Qx^e~Xz&wJUuL`kmcHQOOB9alid^5i{ z<2x@~bu3p#>{=lBZjJAv%C*}wq~TLF)a>>O67f&A_jpAE8a&zF_BTYDzJcvi*gI--BVIa7hIOruZq4tC1kk^4os?!_t`!L)QKMX4a z{F9!|{?hGdZ?5>U_k@4;mI(2t^IP41j>_{9Z)G4YeDm88FFintLt4Lhhlymw*tCv% zCyDs+IZF8nzN^X-eujwm+K-Ed-&Iu}$cYHSXNaQ~!rd@0OD&9ZIJ6tySu_|lr#;QY zX;%`)Fd}V5W2W)Da5KD4M0n-79W)tUk`RnMlfFW*7vM9O3@=#-ws~ByW_ZH_ey+oM zHNzWEBpf;pv%@L!yj{pOA!j@%f%9Bh$XTy~kj6sJc|C=65^~;~FJz#Q3*K=deG_0b zhPB;AFK=!3oFe2mFVPa%7qkG)@7_ou6NFsyHVLu&i%jpj5WBzl!z){dJ%3V{{ap6C z2w5WJiZ?^Z+_7BttKLB&>x5kM;_9NG)X*GA{bk6{pI(BHHA4RK-Xs!szTC&V(d*t2 zAzOgp>f*YWzaHhsDG4(XJfw5}@rnw05(sMk@uo5fEqRCQ>!vqH$TlEYUpKvFL{c2w zQ#S!Wx4cv0=Rx>AV>0CMmUmsO@=01wT*3Mr4f7;FZ*t;_2`K;sJv(uaGjSf1)6|%_ z3PLIZ83mqW;?@bNE1E2ETZOa~O_sQ%29y@{Zd`e0i_6-OQ(qoMb7j6aedn`vCo%* zv_%qjrogHaQ@=kh`6VU`fZ!S_S6t0@L_(v0d}iP~g>emt_|JfH$Mq!Q?=SMiy+y>I zsq@6$eQuK{ZX{`VF39S|IC9=rA4&-Gqwz4zMt zwcq>fv(LUH6>%rWp4syHr%0{>v0IwgzvMo*rSci%62CY}UVJLCcNi}5D>-7acQK|o zV$SD}3W&SsSqUV+|Dz+pv0=}d`F+#I_B=G$%l7!m@2?2R2J`A}`@N`bWm2rq2GjU} zBbWL$NlG3^W`s{6|1pwD10A{Ce~V-&KJ|BiPZ9q($+}s1@&TlnU+I3=^E(*pF_02| z2a@I(%aT(5%z#ARYFozt*MqK={MFqn{HpCOS#Rvy!tK#=gmB)qBmraDYwU{t_axmgmLtEA%*Fg%8gG66Ao&c}ea`1JNuEpGJCG~-2_5ZLq$V~i z@2=h>G5T*6U$BcMk$qa#FHR!+w5nf@M7F&ua*O@9AzqGzYD%P4 zgh;Du{<5H-$a$l>e=s1aiAQd8pQ)?+M@Yg=++R1Y?&t0r%&K|wE_bf0;Wu(5aSTY3 zA2K!ky8<#KaRErqfZR);6Cn8m@*s)d4C)TZ!;SB&=SRQ$F+%K_*1iq$#ti-3%Agg*9u-S`_$NrN0QH@DI>Ow!MXa{Uh$^mHBDq4-80THd<$xjn@9i zz$Y>rt^MaSw0bWfk(gWiTLR+tVA+fD&A$J8Kq4{U=jZ9==I7QLcq#@y_xpuN?geQS zkdh>Cbi}t&I9@wR9C z3!{hqe7)@)Mk4I)Ulowl#A!Gu*qqYcuR}5yq)0#-IHE^g5C74CMD}10e{dQftHB=r zwtz(TV9yNm+}l4wAKB90{$C_A8-0AgPx_eqWtdfvz$Y@R{rut?TJ;J@(&L^0k=Ws+l=D!q>$ovfSSETW=^E1%@Eg+Hk8I)mu z9`~z0>NF^`@wh*XL}qNb|2l~rtEv850g3G8)C@7F`db2@$c#mZ%?|dSOsenR#{c*I z>rp6dVVi2hCF5&oYf@;8x3_+DS9_nMd1ve>|3>yR0?M`dVwBFRybpG?-`KSZP3GvM{bnTJo^o#3A!X^CUUk+}ZB90o_-mcS=Z8uA&)B)^IyiS?Se>)t8;)g*U; z*t@$^{5whdV6208j_r)~-selYklzlPHA0Lp&dxWO>*&nkJ zMxINV?q3#=$c#lyPmaK6 zOd4YM&I~_kK>EEi$A2mysXAlx{bxyJ#^(Dkk;sfK@K=(^j4kkYk;sfK^!ElNGGhz< z!vTrR*h0U?!1Ocrg5Mw@kr{g-!;HP)Hw%0sGxmc2KtSAa*cjXXfN$t1Nw+6H7ciEP(P{);4XB)sG=4~YA0Zr{MX#9xz!JdA#p z`0E3*KP0MLBH1cgB2*He!6#mH8u5{LJ1a?+w{k^@yuC_E{3G~A_30oU9H{nKjhDAG zMSRAn&k47s!4dUp&?^5RyT2mOA1?Jv1O!>8X~=Aa&r-iU$yXp>2BbR4oSL|o39`(; zR$77l9*~$eHWbH=_a?O8-Wzn}WfFUD(2-3f_DOh0_K?`$o;Y%nWb0rd`G&ig z?Qc(hmSZJ-D~yeEuN$ zB)5>9sV>4|Q-xF@IbA?V10neK#P#za$wJ)sa^!K6Tksv3BhQoEh1Q`d?(3zWlO*q5AwKy=xR~E;C_Yz`>?$ihjY+<3Ekp}n`*f($q?1)eIy;~ zN~``Pm#I#lBl%giyp&{(`fMS&YKZjnJxO!bsrQtNu+bCZQ;5V<4b~)?s9L^*WU=~m zCHYLXJd&io>U6%eQZ2tjGCIGE{uRke)$(zYR;trnqg>3>XGyDyB!8;Utt3e+#iu>V z;md_QPSSj(+J4x25&u=6*{~$ieqg{lpRHtP~UQ#XJND{9aY(tXs zu=LZPWVZTDB-xMWU)(XaoTQoR^dpkgQsVO?$r1I5f7(U(wraTu$u!mJH6$HXr_D)v zm6iy5lH85E)-Il>NiJ8NzCiLUp7wD*>q)AsPQM`;(^!1|O;W#{jFsmZ7jxwn;!}xa zfa>&Cl6zI%?Ma?eojy)dT6Ow7$#BiNt4NxuPCq3ntUCRbq(m)=FnNrNaJ%}HA(^c@ zy^*Aw>NJI9hvwV?B+07NNhG&v&Rs$BqWWwjDW*C-MAA}qnmE=)I7)R|jO3L1Tt||k zI=zP^Ij?MKZ;~>q)3GG+s=>uV@V%bf?;A;$sLu~1jWy?H8|NatRda4xlFv2gHY8cE zIk$`WXwH3_q=V}8Ws>hT=WZjpSatd<$^EL+oX@&=mZ;B_B-?(L?YfiXZq;col0BMp zCz51W4Xz@&NptQOBn#E&1W9kz>1E?xJh!V(uP4c+I=!DHzNADrjO3*H%p+N$Id=m| zUd_4Rlf185PMqLI|6Fr!8IrG6%MD0&YtHRV@|o&%6v@jKB*K?S_Nh*{l8jcJ{vt&4 zssEgdr|*^0Pi2x}s==lto$HEEPm&_4!SN)&s!msuys17rNoo&~e*Pf2M>UvlqKl`A z=F_W4;#FTQNv5by`;)w^KGR6PP@TR((opm1*Cel~PEV7J(R^BXl8fhc)oC4)`&5Gu zkj$JV+ck{jg!;@Qxk&Tr`y@v+pB^B&XRGv+b+Q{hziRLblEHh#=T?$;)aN0R2AWSt zlia5oTtf1S>U0}PqH6G0l01iHtXxxEJoD72DoF)Ajp)u%cagME4fZA(q4{(o$?xj( zI>~y~=@%q3RHr9M9#Rb!n(E?tRP*VzBrP?c-bYeYH8_~$InAfDNv={2t|xg`^XWd4 zhMG^aOmm}G)qGltWU%V=7LpXrryWV2R-KL{DXThNO!B1W)2$>eG@l+ODW*ETc)E+H zbS>FmSCZ^hpF2tBsZM*7^i-WrBKb`7>1q;Rb-IhB=`b1V6v<2KbNTZwo|3B5IwY-C zr}vXQqdFZ*5>lPcBWbHTeV@eFe0qSSoa!{&3^#hBYOpNHGn!8uk}Or9t|Yf>J{?2S zSo7&pl3kilKOuQv^XU=s(R`YFri-Vu>a-fkkD5>KCdsWj?Mu>5bvlJ)srsxX+5WTa zi?2vps!mUl?ALr+c$SMNhib46NqxuBW+KpthYI!WlF3qRQNxoAp?;zQy`Scjcm#Wjeb6h;jDoBJi zNPbYAHYXXQI_*m`R`cl;lE+)I*z-vPOEc>FxhhWeBw`AT(qGs$hL(+(udRi`6J zp4EK%BFXi7AL#><`&EO7NaoCvc#`M4cuuQN1(KYaPj4gnUGr%-lCGLh$C4CO4K5=Y zx<|&^PV%1m93^R_`83Z07tj5w!RjQ-Ri}58WLFJ7N|I0W>12|H>a&`pFy24!_Qfue zR;t01B+uj7X6JMHLKn}U>Qjg0ebwm$B(qhg!$=-hoz5reulaN%Nhj6mk0d2kgGn#A z(I;y@tw3^(YOo2(EIhO1V(vlGMDyu*=|}VFt0Y5Jr~e{ptNHX#lCi4O0x!CFZd9Gt zB6&*lX)BUenokFilvJHQPg1s)92@IMK3AV_Nfv584J~q`_g0-2CHX@0XRGcdDj3>#i z8hn*xoaWPik*rXkf0Nv)`Ly6mE}q*ppI%GyjpoxfB%3v#J}y3*Pv?+yRh_;^@{{J% z?@2CEon~F)M(?0Hy@F(g`ZOfjsrj@kNo&>V7?N69F1>0y$ls?(gyT|BR7yj=RD)AU=FgH=Ye_uS;MXL1G@qIk zZuI`D!J;JHHJ{caxm-2)AW7;T8S6=sjq39vNfXVdTS(fe27e}bRdwpGbn)a+4OSs3 zqWSa=l11v%i=;cA(|37iBFTNK!Br&lHJ^S-azcGhl5AF;UjC|!XP)Y`4oMHy=>sGK zHJ=VA>7qJaKvG6ExQS$%=F@{D*Q*ATUvr}`*L+%$q^IW7CM44|pY|Y0Rh>Rd(q8lF z3X<`v)14%@s80VNd0O*nzSmtm_h~-8nxu^Cv=vE(T5@a*Alaop&yy_DeEJqiU)AYu zlCLzM#;tOr=T)7SAZb2K#=4ngx%zY@DW~~#B*_D+(?ui`RHs`=5>%%@lXOy@`l}g_ z=F=)9Ri;Wjcar2#o%SY~p!swX$!qGfn&fWHr@Kh*R4tz**{%8X@-;4=4^_)`NOo&J zy`QAJ>U1c{Va=y=NeZY=-y`X)I{lvHHT6kc>qh@v^Jy89HmcJGB-d&_?M#weH8_go zHqECmkt|i8tt5j~r-w;es!lI{!^Kldb$TU9j*_x>?jlK2o%SYqL-Xk*lFK!pt|Hl{ zTKmHJ?6C@|)^(4#{(>)Ab}%G@tGxS*ZCm z%Q`puXw_gTlJDxvY}6;YLN(Z##A_`+qex$?NLVn`DpbbP~y3s?*gZt5m1ENOEdEJwRa$92T}U!eHMognz2?&&Ns6illiqQokJuygQ-S0I^=U$qd{BJ4lXOrGK1WoewUb))t}~yqBcG72-3PU2Lzs_Haxy&HXq=F=-kCa6vulH8^m>`Kz%R*7c}$%CrFWh8lS7oY7Ulgr6$93`2d z`84l)+&ik%nk1bxpSC2Ks5}dX)Hc%Ngh+3rjmTC`E(&ke%0w_l6!_pKL<%(RiEVdT|5;vpH?7wP<7gbWRmK% zJ4rUx={S-us?!xD`8A*JB&jx4;yF%ovFfzIMi&6jGgbCF!d9bPUOA^;t%;OSQa%AStV_80MqhF*t zEk*K{=F|ElMKzyxCfTl99!;`O^XbbZKdP2LCizYC=@F9eRi}BjxOhIVAQ9FeIi@;o zK{8o&+Mi^)=F{mUi!`6EBN?L_{ElR==2P!OH+p&1U~!THnon;c*{nVtNJ6T?ktFR^ zgNsR4YChdca1vW&HJ|Px z>8u(&MPg>lz9{^WiziVvcmqji&8KZihNuRIlf1uG`dL6yLN&OFBw?@k939?RsYudUHF!J8BdWokB)L_C<4N{vK3z$&RDE`mw9|b0hY;0Z{*PTepK3n6n#5BL z-b1oYb@~{|BK3KmWQ6MUEs|lHPj{0{Qk}+q;zn<(8Z1fDS@Y>FBpp?Qok;R&J{?6e zP4npzlG&P1w~>reo&HABMe}Ly?Jk}vs?+Kuja8?2lZ@AV+LxrA=F_Pp6;-EikW{TD z`~4e|-RcwC;YMHDSbU0-3{sueBiW<*^g)t>s?#S)?o}!s zL()>Ud>_dH&8I_1wyT!sh|g|`=RJ}>s?+aDe%E}O^)okmVb$psB;7Ti-b(U@`aDGP zjcR!`$%CrXmr3erKK+=afa>%J$z7UHbN|c5^P2ipBN?tby_=+s>a;IOdDZC@lH4U_ zHrA5lRGofJ@~-An^SK+ngyz$tBs*2hbx96rK5a+xlWO@1l4F`rUm*EWb@~Cxt_l+2 zPb9}xr#ZfG@qDN{twb_Y^Xcs*OEjPMB(Z;!(|zI?Px8Iy(^p9QmrL7f+mOur^62)!@A(uWLRXOp;qQIGd!4=F{~gZ>rCJk{?v3iM!nB_oz;C^&HI&$XP9cR2FaGK(oYML(yGD! zB-!?g&vcTH)n^?^u7l$99Z6T!VEAh{dLPwb36e`xgEy0Wulcki$qMy(isTvmg2o*! zi%B}D2Dg&@OY`Yrl6ci%&Tm{i+f}DkNtUQjGm@uOr;n06q4{(&$yC+pYLdHDgS$w& zYCb(h@{nq<@V73WOEsU?A(^51^Z}B2nooz5Jfk{YK+;X~=_Zots?#4yZdaXV|IUp* zQS)gzk`7g5pEe??qB?z;q(&|A8AGy9eU_1|Xe>TENFG<6{!X%A^J%`_E}qL(r&p7t zsFquitW}=@B-J#Z&LDY6b^12R^QzN5B);l2evccyr|Ps6$>o|)>yy-)D%;hW`JO?$O)*#ubT5cgeyCt6fB>hyU(@Fl+e7cUL znCkR9l1DV3hWEMA-%_6vB)e71HrB!yI`FOf9YeEJc|YW4Y*sG`sZNKH?5-dY&LjCtb^1QZHr43?k~x}BvmJ2pEY*Bkj^sJjU?Y+rHJ^4R zxl%Rw49VjAB%Y-t+tg<}NrGzdC`lL9V4fdbJZm(cRwubcHF!5kH_fMylDw@xlSvM# zPS=p!t2*69@{a2CBuPEZr2)OCRfBCvvdorkA3~BtH8_W4i00GxNS;s) z?kD+ZtMrq2(2ZVJHFyO{@?P<2NU}qHx{~BQC_ZCIx~m44k@Qmy?jR|k8vLE)N6n{~ z9CGozrao7ZjMIF24@qa$-~f_4%1X|iL6WE%e4Ava>U0muQuT@d$&Ef%by|vKq~_E5 zB+si(JCih54UQ)1uKDz3l804;ACuJ7e0qdrw&v43Kf8DqYCf$&GEQ~cf~2SB)BYqg zRj1QQ?o^$wBblQ4^gEKynoq;OxY2J_ot7XOQ(N}?%_IlZrz6R0jm76FlHsb;mq>ol zeEJbdQPt^TlD4Ylix0ba)~QbwlA4-N?0|LWo?pgO&QWR~XBwj}SW&v23lG@s5VX`@=+Nbtv)WhC#a&vuf1s^z0352;S`9C7h9(0p2*q_FC=Imtbm zPy3O)p*~Ydo>HB@LGqyL^c#{ZRj1}C_eDvWjiMy^RHyYwHfcV6kff~U(V;;F70yq4r;&8PQ~Y*(KlB-vDhb4a?W2Hzto_q2@lJxKx8VAem} z=sh)`mL*xQK8;9zQJp?alA<~tOY)xTbUDe*nomC^xl{A$?<9|?2J;ecPQM}k&4ysT7 zlP;dsjb)$KB6(7E+KS|m=FI+CP>=F>$abu^!TNK#03`U}Zi&8Plp7taRusZ8>q=F_Gm52%(OA^B7D z>2oA|RLifE9N#VT`~}Hi)#+a(r!}7zGzrGO55J7+^jeaBnorx1Y*3#eBnMQ>vq>IS zoxV%bNb~7Fl47dUgpeEkUd^YaN#0VQ`Xo=QPCJuyRGp3@sjfO*LQ<%t%*Hm7OI4@8 zl5Ej@n$vUfRM31{mE;@Max;=&Rm*)yepf9|COM_~bPdT7)#+Cx2P#N}r%6Jp!NOq| z&mPt34J0pUK5a|VM)PSZ$u!mALX!Nq%2=C7u2KyiBw42UG&#{Kv{1Z@r>*MrT9S>b(>5dxG@m|Ba<}Hw zxg>p5gYS{_oi8zePm)_Tm^F(VeU0YRvLvHbgAGaU(tO&Lq_S%88ItY$Wvo|7zEGb} zNRkeT&ry;-s=+)7E}p@v!5SomRfEk*7HK~1NAiaHOeJZg`ScBv?yA9WNSbIqHHmKY z9IC-0B)e3nH;}xhJ`a#gRGkhd8Ke1hKFM6w=|+-!Rf9j0)Kd*+&+6jor5Y?xa;@gm z+ej9clUeOfvPARgvm}#Lrz=SMYCipxWWMIp-$`1kPA|#k;+d&hu1V5e^Jxo`+f}Fi zNuJYuI*sIK^?8HjjmEMSUz0qgIyKqd=)Y(_ElN^aby}CClWMsw$$RRPN^-5{(*-1t zsZKYNEKr^PK$2f|nk~u2^O)+i97$=-r;SMJX+C|Jq_FCAEXe}Rr^`q-sm~6Qj+#$@ zCwWk{oG;nMb7G6k;Z-F2Rm&|&{?dHfpJb@&bUI1$0qJKQNjcT&cO(NepN4a|(Ko42 zagu|o<(o))s7^bO+@tw)BuPot=^~O8&8HudysJJxlZ;iJ`WLx)9#WlFA-PI*dIw2i z&8NLcE>oROB>715=_-=SnoqwV*{xdsi{z+kxsdPT`BSxg9Z5)annLos>hy7vgB4_7 z%q59a4Q?RWuR8snWU=PctQWh{AJBYSmSl!%upvpoTV<@SB(+t8V@P&uK3zugx%zA; z@l}JzNP4RV^X7E%RC!v)szFj%HQ0irujbSKB%9S|8p$!$>6;{TRj1#Qe4sk@a=FnP zX+AAZ(o*y3O(gwPgB?g7(|kIT0KmWsZSr0iw?;gPA2K68eBs%R5kb&Nio&nX_6(HPmAPn@w}xzbxHbZK5a+xh-xsE zR*qB^ZaGFUa(lw^VG^bwL2)!=g^H>(C;BY9Lc z_&G@(&8L5nEGj3nTIdoN&r;RtbtF?&rzs?lX+C|Na-}yy_!$!k(5!Lwj*h)`81VegZeBW8Lv9sMDnoe^dL!X z)oF4e7f&(Grxi(xs7`Mu`9!tclccKV)A1zxRLd(#{!lG{Msh;6{3l7A>h#jfTs(iO zPOl;Pxq|G|`$!U0gM&$aP@T>qd0F%6J0uTkKHW<)TQwMexf{Ka=F?In*Qo~UlT_*? z@pLBHr9PucE>jJ@Oww01_%TVfr=_1GBxO{CxeL2^9@BhUo#aFHX-;xnb=r?)f$DTB z$yU|r8zfCMpMFEqTJxzX;zl2!8Z1ikf#%bCBn4E150bpC`SeMWXH|nQlH8;DbPGuh z)!@%0pKCt#i@JEeRiDZvISWw>sLy*O(^aS6lMGc2W-abUe^GT>mZYs} zupvnU)nHeW{;I(-B#&x7T}rZ~oXqNWk`=1cqa@F(PV<&<@eI;@T9ah4=F^rWZB(cI zN#?7Tr<2U9BBQS(xm$Jm9mzD!r{R)r^rPxig5=%C($7sKV^yaeNRDYf9Z6C_b-IY8 zn`-$(k`L797m|9KPcJUz;(1(kT7~2#)#;rim#a>DODomsM3SDGPgjvN(0uwONlDe| zNs^Z|pI%9L^^>q*~rcl53Cn{6I27b(*b=8$Fli z({dzLRHuzehH5_TM)HyRj3fC~wY;3D45g)Tb56 zMAhj)k{+tlnIzY#PTwIZsrhs-NpaO_ma=a2PgTpMNor_5Z9sBBwfqptzg5dmlblv9 zze19rI{k#?gzEGt$)y!#f8{Ob;>o5OtU*#*HQ1bFndZ}eBpo%MP9vG88hn$aiRRO9 zNp4ULdga~dy}C#|#Yw(VpPNXEs0KTbJf<2PNphp+)5Rp^RD)Yd25CM$OtMXVa#nEh z{G~drO7f!Wv>D0As?$eFR%GsxFXiHx=FJg;aw@NuGOKeCi2N z4L(S6ujbPyNv>86zDTl5^XV3nJ?irl$*r1CFRJ9?8LS$tOfo_>cn3)t)!-u}D>R=z zN3ubEUMG1fzvRjhyk+x724C$xPMhe3Dev;6{>{ zRHr|Zv{wygui{2;q#7(wGEg;mn-I;X-AR^eJ{?E$n(A}~$t>0BPLjvV%YHvj^0MaB z{8zeo9;hrnwMbr2Ew?6Fs9GLG(o%Igi)4o8(|1Y!P@jDy8#JG0sp>`_uR1MFa$NIi z1Cq+B(}zfUs+ON7*{VLTkld{K^b?Zds?(z+uc%J*R&((bRh`x#8Lm2QLDF0EX+M%i znop;alu@0&LGp^`({D&VQ6E#?jox&H?295K5382zlEi-~KJ7?;Q7xyET&MYT0m&%U z=_Zo=nokdsR8yTM*KqNqYCf$<@`?J~PI6SW+>@lg>U2CwTg|5{Nh+#NKO^a+`Seec zE$VY=O&8A;)oE>#UaHf3Np4V`4kjt1`E)i(Db?w_B>z$^?<2Wd^J&6WZuEnyqal98mvh2nnNj9lZPm<#J`^#?cOduJc8hni;`<3GJIY|N4;9n#MRHp^6bMd^Z zKG%}GqdL8hWQ1yPFv%;b(^({)RD( zWUlJ;X_DcZPhTckrulRm$%C3tea-cjY|W>SlKfkJCX;Mx zEXT$gl8LI*uSo2lx_0~YG)Yy}X^|UTJiS%RbxA%}pLQe-G@m{}@}%nY1(M~e(+@~W zs7`;9R;tsB>blYUYCf$@(nRxVQ<8G3(?>{_Yd)Po@~Qf~Msn8*+4j##dZ?EFBB`zU zv`{@4&u^;b>qu_Ue40Y?jOuhKNo~!i^GIr{PTwaPq51R&l26qq`;Bh&KUB-*Nd~G; z8*?KA)0ISDpS&@~G-G-%T!_8&#)Qla$kZ+KS`~)#*Tz zFICGkNv_d+`VPs@s^z^TrjeXmvfS)Ok5`?RB1u-A-a_K320M{d(0n?I#8(Y25g*my zHj>qvPk$r1P4j8)TU8mI>ECb>m5*q3B?S2+%+knB^RwIrofgI|+8t{OD; z-ROUgmwt+nR8bAqB^j>yv@OX_^+_cOsRkF4yrMeYEIz8iLnQBLKF!g<#WPg%X+@G$ z)!^+UpDdJ^dy*7W4Nf3=_FeILjbxf?@N<&H-Qx2X$@QwiLbtkjc56Ppj^qdRNg)|` zNctH{lBybkL6s?#e-7HB?gNb*z#*%w_&R;rfAkaX01x{Tyy)$$IKC937$N!qAR^WEm+ znWy>mYLb)c(~4w^YIz{Z6xHcWlCb8}cSvfePWJ{R@|P$#VFdiW`++9SzyIs?G(!hw z$c%0rN&`K{CvioW(e=_ax}R7)y8ZuJ{~>Ytmk>+OyxPw4uxW#%J+dF8 z#Nx+-xI9zmVjD-;YzoRab36VDrZMqmc(9(uBnRsWWzAl^$-K==$h&@xKMW9fxzC9Y@A@$4|!NM(SU~-_HEIxT436 zwLY+=8&^u{KeO>OtN*9sixv0(H6LEf?dLyN+oLSmP8!M_EVBe<+Wl83I37dhWn3Lu z-v2jOW}9W(*}iP)u?(|}V;RrV_3Ig%b?m>8$$E(`JyR;5TbKRye?1?u#;aY;9hXwt z_^j?X-QnWR&GVm~N4p*4YC8XJ__UXHz4VW6{q~`@40F5VO!q)<@#fEaEze>;4dx?c zJ_-Ch^H9((Y=#779NWdST^2JQSC9tt`QmN1Of;Js*zvQPFF&{I+05FCc0Id!F6b}G z^xkE8vKiIFmN`srywN%Be*Rz4!F9!5T(|D9afZy5`EBW$)Zh@xc>a>(rW@W^V*Q%n zm)5pj^m>zDZ9f@#v|rle+#cU{e0zMy8efi|>N9Qso>{TVmXY(Hi%;@snE5l#6fNrF z{QG&AcITddC9eOgQqGgn^XFzo&JSlkA9%dPGcqAN}vFYyFVlgY$-G<}uGpzfzvh@oD>&^RVsT9;dc{-*?v=_IzcpH|%wa z{p-zHe2qkI{L+#_?@4ciudLJ5!PI<+wh3J;*${^RWbxetg@% z_(hkobQbL=>#aAOIo`~4EBT@zKAGG37#JK6A=3=|#jdyI`r9*Iy{t>w^GY{vbScMs zX4@g-uMhG<$VeRasRBDc(WSkUe(rJFzU;q{`8pWKGbMN(Sew^@xA8jg@9X2u7ujq- zSdptl3fmIrp9Z#HcfPZ6%K6Fdw{WKC{U$AJzn=Ld$Y)_Q zuDB9}DK{s%<9Ss!TgrTAe*Ka9zTFPbxb|Tq?K3-H z$+%KxwtWrOx^dc!vSnoZ-g+qgy7V__lJkFmr>o!m&6)kgKf3%1-%i-=%JZ`=!{$^O zr$^Ucys63S4cD({E}iWBj{M7((f=ax$~ZPYo2Mndhl4!nnY<`%-WDD!?m4qu`zyEF zu`>1_U0>is=O>?&B@QY7tmNuz;ai8a{ki>`vHwQYm9&@gD%_n-+kW!Lu3xE_vgI|T)*K9-d`>+du9!fCmBb|^y5kVb{o_F%Q%nHKC|+V zU>-ele?!|}*lg`$%Q$mnrY+-5u|S7e7+-?a&{zf!;!<2IG9-RvTB?lUoe<~_d7nYq+U zdAOF-UG#Bax$SqG-8^jBTfs*gIqtCi!ROO>?W3m{GS|j?X*%JS}lMe=qR2_0A9HRUVJFAIsDF+4HUKH4=eTmubrKz zF!#rq=OxxW{x{}bjteQ**S7l~_t`4h<0))52KNI(=B}=GyF#W#b$5J3UnjcnKiqu+ zdmPGrkEJ)ccISG%Bk@StbDQfY*8+EbvFmmm_b+4~X=yFbY$)P%A>Tj5x}OmabRqXM z*v)^e2$?MS+-u`&-o(Y{bQfnHO|?8@{mH48$5Eg0G5j*N`-9(SxbbjbCODsa{G1YI zf01$1*N4nI&)RW4bMq6n%(y-@nCFmrCHVfwGxdYxCB*ZIXYS$lxbui-D&=*@i>yn( zvVKKWeZyefuz5K6oM2-(n}2dWe(v{AKJ9G#_sp}oU7S+Nakr13I~!i@_M1DtB6;Id zd;@OhDVAR>F8xdC=Fu}xR>-gl7kL>Ia5a&defTsOy=0nB%D9H;k_<340I zWwqPwnW4e;a@Z7k+x8R9V}DMQ{nI+#{7F8y}J^_um+(0(L7DQ%qgd}H&Ty-sZvTwjIE zEkFI|#dN;j`Qg8{^|WC z{Y(7rx-iVR<1}vBe{x;Kgzh7jh9(_=|}W?uKuz1Ppr7)dR)dk*Y^Ld zcCvr}Q{&6=7Hi)AQ{(<$k9VQld7`O)?l>-d)ad8T;&6Yb7C zjy;!T{C76j#hJw~^|7}9%<;(QB+s-8?!Si3O~LnI!b3*RAMW}_{G{Gf|5)QnT(QQN z`dIDH+)n23{H}wf^@Z&B^Nag`=lI-T!`%;%?Kty1pYQyhUpxDKiTihc?a$_X5^FnS z9e(r1J6pYH3+}Ud z{5+QNez4?&4!oZ(&-?Vj^Kw>yQtwLib8|*+^WFZ@j@JtA z8~6P4fLyo!ztSDQG7rbsr(YNTzfztGo}O5B7igg}~ z-VeQk^ZtdOFU~i9Y3IH_ll#)K&(CM;C;iIyrfnzpgU{vjbgcQ5an5x=oL@V845j_| z-`j8Ud!+N*j>z-9?s_L|>fzaao6n_Rd2Tnl-hHp?nJRbNc?g?p@3m#-=e^p2zh`cx zfAsHgqSvE;SK_{3b>rImCNggRu#MX@fAII77xI0s-43^Xk?lF({_OAO?C*)BKcBxJ z6Fpo=zcxIrzTbGnMg|9?!Ht{;BcoI99hZj(y{Y-O{&$@3$lK_D^r89mkF< zZ$1rUJViQvUt; zG9Kokn`@WW-+pfU=_&U)rfu;1fXI1!9k(l1{)mpNOz`^^=sGAP_YvFjIZ#(dxVt|Y z;(f{p|ND8j+mQBO$V@q5*QNB#XE(X^wA*Qqgy?u>Jysm)+yDJM+VRu-N5*qJvM%Gr z<#*@jOAotv)2~PF+d7Ung#`ZAH|@XZab-O+UiA3#+;%fQuP^fuD}Je$@&U%1zVyrk zZ`ruQW?AsNggEo=n|3|kJRYpazHX9!ulm*c$M!ql-;K%dzU233XFFbI@nlvn<6LMd zdXVGBl@Yzf(&vrAe)7!K++Tmc9yZk)q|cA%JMP(Tuk;@){Mebw#ud#3zrZXTlh&xz;GZN2N~pN~_XQ$O2yqvJc<^|RX_k>lcQ z`~CmBU)s;BHou?maU}asj;G&N+T#ho3k;qEKKpr%9$$Vh6YDt6Z2s-l^L;3IZr022zK#rW1n-r}*njl)OS_rD??W<?@eJef7(L$E>Q3_f61?x>Ovj}hA2PngCtOO2>wM#o zd6WJ!D`UkY+avKvKiP5L^6$1!{G^oalyS~?yQIJ9Qu>u~qT`MB&um@#k$x}q{P%^G zF?76{zx#a^m&W$@O%Dh6MNt|2bOg`ovp)E<2RN_&#CCn2ck?al!)ChmuUY>w+kI2P z^348aJb&2t0oeVS%J1uAmF_)ap850#8*;|y_8axK{Xl2EY>D3=C)ofqUgyYh6-&RF z?Vo?9-o|ME;XYj!7w13IZ)ARDJJ0uck3J5g*JH&S?N@K1+s;`2nel$X`vLJ@pBrpH zp6Pw9EyG55^!5plwST2P`g&OOCjD)_-i{NQ&scGazZ*}k6EeRZlsIHuId9nh?EUgP z@D^!%oOcPzI8*F}^zmHixUxMme)|4mUnfZ1(mvKaM*GQn`f&?|+r|!%l0QwjbHOPrMn0GVOhyqt*>%Kk|{)%{}kC($X{O*u8%*WZZlDLdN}m+vEF3!uo!uSaF{% zpTW-qEI;JUYh3nLaMd&h#&2mIisl3)i zJfB7DF|+I2YE|t-hxGGq^gOuj2^rDL+1^)@eunM0TM~&=`jdQ?zQ40S4&}O3`jPRZ zlyT(#hHxp1^F6iK@O%~P{E$Ar*yji7S4tT_R(#@ju4VN8P5*f!^1g^z=ih%ip6K`& zR&@JY%INyc)}!}BX8u*0Se=B-rG;&Y_v)dv$D16l(e2%SkChK>+Y9*@InJZUjb3-} z)Ajg1-7w#$8)q7|w&S0DKXv&$O5@;rc)T}#wrwA0*0!{|j_3I`V}I$-OL&gXCkHw%@ekkV)}z}Oc*pVQSGdw%*W3Q0`<3g*=u-TpbnhQ_pAT%l*f-Sm zC+#F2Dc$kr8CM?;K3CXz*pBxU+w-PvZ+|!OXfVGCrsP|;zeLmGXV$Yairf6*F)xD59=Rk=e8@(JQm!y$8!e3`-eh|H)JXY_n%_>N5>J} zUuN|(PiI@Y>vGS$&g=7G*W2yEd%%J+GGEdCeTh7sc0SXeuVSA+vjoo(;khb#?+TwQ znpxlFr|5Amblt@j*^cv#vj*e*PoGz1dnN7;!F@Jd7oxP!%l{SZr;w?|O7x1^o zi)Ws?-fnN$Bw=1MUQc=jObBRK<=EXNq*QWxP2S?3XO& zCtiP#sARckdIlxV1I(N9J)|omdXUdQ@_u|d4r1l`SnAYqk5tXJh=CLN$HvF*v>$C`$IK%qgm*Xh?c85%?<3RRnk%=yzUxN3AhRolu zVo0mVeWk}zL zCVppIW;U)I7kw{t`f~nqJtOxuV&_Nsyc%nN#p0R8mHvBQe7-x+?}0NL$A157=l4zi zF5uhdb{(H-H#sgM&!H|D_;ng{UPUrLd-w)54rxFU)Yr3 z=T_m)Kf)^q@5#gGwV?FO#6oVnW5w&TJQ;lMjW<8uVdKqWJ`c7(LF2i*wB`7O&g)}|&y}7z8ob9dY@A=n ztgGO*Tjs0jUv`|>`jYzS?UHqOAI&p%UhVl%=E|i_NxS!(L zK8v<@+mGiuIUjC*;^-&uO~rc_`JAvj57@r#zYzbPkLV|IJ~`L>ezKisTZ(Q(FY@`; z-fv5LT*-MWx?kBZ(Z{Xi^;qY3_kL@+j}tk5rT?tKe)i0de7?fn-}TJYNj9#q>GrcN z<4ngfwv0DpZ?k2{TolBOE9XE@VRPH_j&}%3&)gW4c;7JFUmYB$@g{%pey}X2Wzb)O zNnL2$C7M$~zgf+%dF^^Old{W}+09VuTH^hu%k%wRk^FwkZm<13Y`52b{n*o;!%N%WVG6_c+U}-wUmm?R576@%_%1ZhND36+Mo8{%;a|-jMeVNA&M_ z?DL#_9+i0!-Nw?J__ez{az3?rV((ZNuZ)+z^i1_Dod1xW)(>$$WJ~-W>^fWGep8^E zcs{q0g@3Oj!MOM0C-U#aWi@V|vYFSfw(YW;<3X8Z-tA-8WxLP*c!-|QSnIN1+I|um-Dsb_&X56{k^bp$0xq03XaRj^^05wd_Uce z6XNzouIIkvyetfk5fJ{R%lB%Y9qP z!`92{!Tme8zkh1`-x}!FGmqkaiCvfRrMytR+Wu{P(*N0PN80=8XX9_e_UpqSNHc;GxCnS&W!HQem=8$a{uu6QiA6gJ^lMt z>DR-?-JcJcUcvnx@r&?$-`bw=Jatfp&6?hJ9p@81R}?+|xvslB;^}*nB_GN4+PU^8 zpHHRyi1#zydy#R3Mg1M8bM0UJ-E)`t`;^P=e1vg6bMsPmg)QSvqtdp_V&2Mc%LH>e zC=*Tfz)#K>^1ZCbd>b}<@3sDMrfhKipK-s-b0~5hC7*XPJKxB4nLH;VpR;6pq>RpU z@_eoE==>vG;)(US`Og@6SH}JCmYykh#Lm0Scl3J5ydHcnjQgOs*z;dF%0JRB=Wprz zvFr9eeL3FevFm60e(47O-uv`L++&376`^nbt`77P|S^Q5;_G^c~DH8wL z^#6D9PYdS3GwyrAuvw7e=0)OkOG_;G;x0uQEakCO z#?lx|Q!LG}w8V0+NkV-R>XT5Pg!&}ZC!szG^+~8tHYr%@W9e;jnDNOujGrTi$%iEo zOFOV9lXIDAIdYk~SY9x>%uJM%a$IU!nIfn!X69nCWtUJf(;dq+*u6rfz)FFY0xJW% z4D2$2J-@|5csGsTL^)ubEv@?%k8HD9=EW=GfZ#c>) zusjL-Nt7ea_1?&!>=haXdlc+Zn5(B@KMnh7*ke#WYYuqNnqA&_^DP!z?!`xcyX?Yp z$a~JbiKUEr&b))NKFSm`5xx^qKM{VD(0&r^Nw6oQoQ!e`%BfhU!=8@vc`P%`Q7pT> znJ8zXoP}jJmN{7F!f$R+9`fd4ym=UJ9>$x8@#bN?`KX_d`uT`w0qPf^egWzipnd`B z7ovV4>K7uG7ht~t`vr5@d(rH~QpUV!zCc+YWr|sZ`bDT;guWJ|uf?cejJ_75elhA_ zLj6mqe+hlPjPeyMOR+2iUlx=HP#*V|2g@#R1-54e_^W0&mNMp5vma%Blqu$Q@Ksn= zV_Ab`EtWU1yoqI_Ipu9Ke)t2^JoEwf!^h^@@W*KXvAF?deUvHY6Z3rd6R=OrY?Sp; zrkL$!et0|BcJm_2`Y2P(4)bbw2iOj?8fATyDdtnKPr*I~`xNX`u$^eT6Kp5i?gZNj z_J#R(_zSQv%qf)hQKpzL&6D9T%`hzO%y(FJ!`_W@56V3#e?Z)a%nflrn-k%mv3}Sz zh&zlv4x7d(>!VCDzoPC})EzW-uCIOQ15VG`JT!5%xk*YN$b69L^YVp~fidqf9aJsEbEk z0_qY_mw>ti)FoKuqb?D3*-)1ab=gpt4RzU2mmMrSSaz`NVA;Wvz>>g{z>>g{z>?8N zGWxg(br+%TBGg@kx{FZfqs~WNPSoW@T~5^HL|snQ^Fq*ri~Xf?W!B8Q5iDmw{atc3IeEVV8$p z9(H-y6=7F|T@iK_*i~Rxfn5!DHQ3c)Uj_Rr*jK^62KF_uuYr9X?CW4(2m40YH^ROV z_RX+whJ7>a2Cy5zZUDO>?1r!#!fpb)3G61Yo5F4iyD99uVBZD%F4)asH;3IEc1zeT zVYh_c3U({ltzh2=`##wB!M-2%{jl$c-4=FR*ll4y2>U_U55n#My94YFusgx-1iKUL zF0i}6?gG0T>~65T!R`sWC+wcEd%^AnyBF*}u=~L71G_KmzOehk?hm^^?EbI^z#ag5 z0PI1q2f-c$dkE|yu!q1N3VSH*p|FR;9u9jr>?dG90s9HqBVdn!Jp%Squ%Ckc6ztKk zN5dWs`x)5Jz=m$AztFT{%{W|Q|VZRQ0HSE=}SHoTldoAp>u-Au@5;lZ#Cu|HAO!y#F zI$=wwZNi74N?6(^d=#pgup`tkVQ1*hgfFnZEA&vp*P%xez70K=usbv?VP9xW!hz7V zgdan56ApzIC;S{*k#IP)HsMHUW5OwnaSCIc!WhPTGHkqISa6Pl?ZNh7$H9(+9S1v$ zS2!^X%0w(#VP{2|g!&}ZC&A7EI|u9>uzlD*Y#(+`@6~Wl59btbHA+%!l=SSkH&`f?kKjLf)yk%e@@&g}t2dMZCQ6MZE&?#k`{N#l0)y zOL$e{%fROfZxSlXFp@M#9S8SLgLo1<)rvSm;nO>7OjHSE^j@x(UhzYW&gV7(36wZWX< zk2!n*>;bR`u-*=KJJ{`DxA)d(Z4bM>*Co{6>lNzgZOqyc>m9LXD?1{3c_g2=PsP7r9cM11In_l3(yu4X@!R~{)K3MOAdMx37 z-eSKW*86+;vi0{ChWdNsllyyq4y81y{`{ft3BW6*vK z+K)l|F=#*5tDS8u`WTBo#-fk0=wmGU7>hohMcuQgdlq%iqV8GLJ&U?$Q8&T69!nc6 zN0TRDj0qTH0>+qtF(zP)2^eDn#+ZOHCU`~SCSd_uhhC9^Cem z0-y0%pM>SpFnq!@(Dw}VJp+BuK;JXa_YCws1AWgx-!stn4D<~xxv!T%!U74w3~}Q=AzHJ7;7&21Vi0; ze=g#gi$3Nerup!j5C8e_n-9PF@LPbfUi7kgFXEi`qL%|DK98X7BCthZi@+9vEdpEY zt;n_n%gb1nqTN!&wA?$CV>$X=j((S;-{t6cIks;(`d*HhmSY>1!xuhr%ds6;!pptl z*;inDSHNcl{8ym;3bcRSE1u(Z*slk6Vc0&Fd{`2(Bw;z4{5smN_DW}8?UloVJPO~{ z0V@)>+S`z2E!bMbx)yAmS1|iJtgnO5Ivh{y0#-cxdbD4U_Ulo%9(C)%*Q0*D_gj_? z;2XdjTTr(J>szqCC0Ngvuoc_1 z73(O?$6mhdAH(Nk_cc6X;#@zv*9hkE(ytm`N z!}7D&BjIQ4o1eYjDC?t4F-JU;bOddVV4jb7!?Co$GCgzzbB-l^#QO>BzhXIt#rhXP zSuO4u+8sl?V`z5_?T(?{F|<2|c38s4yyW=f@Hq~je*VHX z{)Kq|!a8ho5^YYR%}KO5i8d$E<|NvjL>nyOlV0KMC(*YF<9Z~V5@*80v9!Q4J!EjT ziX|Kh@68bk=ZO!6kHv+;N0US0M6Bn-lH!HJm9Z3t?PE#8k{e4qgF5(5^F!fDSjJ%K z5&{Fa{dI@k7xhK3j0gJ_<&9W|$0ecvB=nzz{*%yu68cX<8`vgSc&51|+&n2?xLSO^ z@Kso>Jt34Yd=2ck<7#8v+Tp6nwZk>BbPv_WnAd_`3wABowP4qW4<}s@c0JhjVAlt% zOXvph8^CV>zXALP@Eg#+9#}oFdSLay>V;dx-xBVccnkO~;e5%rgkOkj0J{O|8^Est zd>UcB5!M^QZVbC=xJP1Zl&vvOtuarnv2Crfjjb_Xt;0_yx5hTN#@4#(HP0KZHIX3d$7I z4Rzg6*DD;CqgS{b7UchMBdnLs(I;%MoJj72x<07ugStMb>w~(!;C;dSg7*dQ3*HyJ zf4Cr)a#(OJ0M;LD0LC4F@djY50T^o_+6{!yK==%V&mgQ1!ulYr55oFj^gS4CFxX(Q z!2v6sV+huVV0{SIA4h+nJ%x6o5%XyDGaBoogZ0ump27MvSbqlV&)`@a2cL0Z^ZRKz$Rh*Nf>_;#-D`oCt>{O!`;2-!_BfjA8wg-et2$<`QaDL z0+b6-E=0Ky+UJ1>u zL_5^McbdNvnp+9Yt;F#Q2HqvS635~y^tTHAtwMjR(BCTbw+j8OLVv5!-zxOC3jM7@ zf2+_R>fk%gUxofwp}$q=4-C9Zcoq6vjs8}nzt!k#HTqhEzSf|xHRxweuwEEtB92gZ z{vGzhr^1!vPT_oe3jU|UMY5d2`4`MPg?WmLOY*bCrFdE5Dr3PtDXeFWE9Ym!k`#x} zf^p4Jw!v4G`1}Xkhn*94PS`nN=SG$wBFb(Xxa^TIBGvHE{9JMEXBY|psqwvei|-`vJ}=!1!ZNgblhUUbex}~bX-0x zi8;!kZ5gyHAGaZU#kjZpide4*UJ><`U{``&3HHVKTIEuM_e-I)Uln!7_eLdX+jqOz z$K0}Fu|D=ulp<;D+^|0^A2K~qT6+L~1JWO5!8F|3!mZDSX2v{2AF*x!@8P-7IVdrt z=~*g-d&0)l!D7d?k6zTLZDXj4We|e3aa!BHo5sdz?d-lWZ_+kb8S@V8+E^q`YfC)! z(r{}Fw>}b^s}eHyQABHhjGc1@`B*%c zP=R*aJqGs}4DJRSlW(QLJp_ymTaG2mi-6aoPtU=wAIopYdm?O~)*e>ZmLij$#`TR9F;xhy9o{>J+4T3-0URg3^?u0!JZS1zRfL#Z+jpu&Yb79MNErxAl z?g_pk4Y#($W^Ef=yO8sd*etiP^<`T-4})micr0HFAL-xPb{?J}x7%VhV!7QG;S&EA z@EZ#n^ECW-z?PV;Eqz*BVz9QvU~TDt7wqlm%pQAtvDkUA+k(T+Bn`y)=zkTt)t&WO zUDWwQu4V|HwYB^D5bYc3vkTAuZvwYIpW=Nuc0XGC;xg_W@;2<2IBD2EKgUuH&ww0& z&kwL|48OrX3fs=@9VkzbTmL_?j4B&4mxb}YDq_u6DP)Snz8Ln&ig^A8c2?N7pKH?C z^+>$K`DQc3%{MJqy1RS^yt}Xv*T*jxS+bp6z=RaBDw|V{#w3eFWY1 zZ;vJW+A(X}*ivBEK-<#s&hC!Mu0q?kwRT7P*Q1?l7LHrkSmS~0$N`|s=mM9%y~M$4}YZRo2S3?oabEToHJ); zH(-t*UL#%j`TKRrd`12b*1?4c>jCgVZa$=+k%K+&Rrq09O}OCp-Z$}2o(zs-z}Pqx zyb>DrJKKSIAI3!!z|J;d9S4wh!_M)4HSA4jU-nlC+ygsfW}8pO&l`B>s~`3?Z?iuJ z`+s0(xzD402GO2%IA?#`^S%wuPS~xj*d_-C z*f*ekXt(;ZENch0`73AQT{q+{!u|&8)q#B^HL5qCY=0YLWE*4TD^QoU$h!)>z7u1` zaR=i619&CMV%t6oUhDWj;0=y56Hs@@@!TbR5BLv@aP30V1pjMr{qmZ60QM;;i}MEU zXMY^~DrkH#>&X2>P5kVF-TLlF6O z=lkB}uul+sMtG)htK)-^&T$;i+hXUKWNfsvE=y3y4^8sC*P*fcvYr3imW*@Sspncr z`?MnxJDK)RAn#IWmi;9ehYP^gk7VoL5c>V+CS#I&FKZv>-5Y^$4ErdfHaGE4`|i^d zpXA@=@wcV+OXl!8=FAJhi($92$hJpfS@)sMFN20_u$4tS*R?OfPUc*6H+aR{G_(&p z|8I}~DcHM2-z_{D@v|)6kK`Pm>G)C9<@>ldpq;#ljJ*5wLjarEAB24k>~=pww*7XW z*vV#JCw8*gd5v(d@(O%Xzh@6G9DsvgdfwM2C+jBLkbA22up2)EKX+g~{W&z8$LRA< zV76fy*WFHVKlIiY^f~thj3L;`O+DBrHKSj_)}BLPwiVY(vaOF~TQ`qEyBv+Z#0KOg zcUx*M!v(xZ8;@tHOjPnPPcSP(QR}cI;9b^BRmyE+jD2uVN z@3un2wfIZ8zuE@oJV`D>^M|vO{RyTdZ}w@P_oB1E;_Mhk-q+BWi=o|#yw;~=>m#!D z%Pz3B;cl?CRU`5nv(2A-B^lcr;J*Xw?-QA%FSx!u4W8iQXWcWxtnXnnlRD0X-PTI( zk8Q1_|HH9%@Y>;C*~*;o14mt%v@`2s`UQ^t zX{ZNyBd*Q;!L)PiO#`#-Oi#9Jd?n)KUg$Y!7?1TA{TtJ6YY^?mv|GJyf&GfBv3^a* z8sYdJF!gMo2f)j~);?srX9>Y;FUL9w%|`Gx>|0&~)6V-i+UfI%3o*~mNa}UxIoRJi zW;`Erd=^3&K!B$p}%gb@KMz~LSov>YZ!v`d52j`8Waqh4lnqMsQy;E`4(C_q& zllI@kz5@0^@FBR4cpfnXw%B%n55P6P3^CBoIBU>s0yEC1z?;E8#(rZV>kj6+b}HEN za<5|iSLluZF8qdYeE)?!Y&SB?vNqoew(&;3e;t0GiFpH@!Fk;o6BiI>dJMPiWJ_zjr zjg8@%U>n1&E-%|Zg#LKUOZP%Q=WX`S;d*=;_MG#%8@xy~ONHk&10PwCv>ScC59`iP(H^+`yvr-759-YL55=DRcH~_Qeyfzsv1HblW1ei+0^?tR z`o24x*zFpprhEa)fPEEWSb%%F%fYL`mY2--;dxydYE@85Y=!1dZYC%OOf;gkFAYoK53^sM7D;T4Wq$1Y)P zRb&6$|96YN2h97^cOHVa1l#;Ww)uzs%kv`M?~@s44zY24-1~-PY#al={XL%dEc{S2 z0zJ>r`dnELz-D<_#|ilT5199kYQep>(^!8Ug#C6q?CW7?A6*RY2U{Pp4S5Z&c6RHd zXJF@krVRUJ_&>DQ^X>!>ivN4Shrnm16@BmQ2ZD#dPmNFJ+f88W$IW2t>kYu|Sf^O8 zt+3k|+a|nScnoY~Y$w>_-vu`Rv|IeVrhJ?~^O_>lKhGt1Lt|yJ4Vm`@#M%g**-iia zp=sWx!_dx7!|{+2J;$e=*-~TI;0lywG0%kEV&+(~cHp&U*9bKhf2;VPBfP`K&lsKn zb8Ih|jr9wBEbd7g8xm$+9>e(Lee1r+&;0;3wihK&UF65t5xE7-xrKa;*xx7iX`{(? zM@K5+VUDFcFd=L~%w~T9Ogm%yKQQ+t))$L~ske5c|8hHi+Av3f zH-9EM>!U{Pcf6XMA=7TW3~bjX*{;nMV3vF4;aLB`+aFKPfyu>uvX}6kCf*N#e{_oP zZHK-K%(2900UTF6qu|*c+16ZYZ0=>hY{C4`dFec8{scbqh=l*@nCoowmy$Vw%=_OP zq2YYNIJ4MicY_yT{hEcQX@j4KZ^2xGa(P|9itkCe$Z7ap-PH7mo^19uaBvdVE$pQk z5BF(|hw<~??J@YF|J9YG{B_XVIcFc(#`YR8$NYJScRkqd zyMAb_-x)vG^dBCHIR|#@FS7L)=gjM$OxlP1G$ulxA<$<#;^kh2_N`0(_}+6q^72}E zVJ`M>NG;|eu*J;0yubU)QHh`2zmqXf`@hgH2OgdHT-k~HC@}4_(Egkk$&CLzXCKDB z3Fn{9_+eXdEn_^(M$(wK;=3mqGuxJ9rWq9{vwgTXScJS2U^@{%Y(x6z{qk0@#XkbJ z__u-C&W-QJK2!ADoqZwNbrWK+excobT3%|%rWtb@t|>dgEQ|Z?U0}w*{Wk43kI`=P z*i!Jfzm}Y#k!@~i#QJy7yreGY!QS!&uFqr9hG34pyTGV&y#Kk+@mIfs{gUHnPfO18 zskeEIZ2nmm>s5uG+{k+(_+weL{{i+8?a1|!=cUxBpGy(XE@d*(W}VpAi@hIg?Kvns1h#m{7SATp>_8cR!}GqUC*T?s`-t#X;cbq&uHAw* z*^T|fXHQ6Y0oH<>z}unWJpVoLnCN$kopbf+zwzR^nq%N-oX>Ecr+;fJ&i{?@$>&N> zpkMgx>9e@u*@fTjTHXz|He7|VMa^B%G(mqGp6}cXZp2(~*W(1RU5^>C&6#AIGpVt@ z;C%HAzU$-o`RG&Fd9HF6;@#-R#w_eXSx4*BInY=W4Te-Av#q$o9wM_Jj!RB*~aGz)% zKppvvY&q`D$gKNE!9Aksmb_hv&DQR9u-lkiFWfIY=$O~_kk~hYZJ#g?Y(6)?&3+C# zB0jf={YF#yrM9{?En_?WVDqkAQ}DdxwGR zl=b^6@TalPzA`?&UQU5Ng8p1Q<6aKteeT|0^Sn;*>nt~$yjQ?$@Hh<4%VFQ{V&)n; z=9u&FPOx1gWV?3g^B!vOO??62bcSBJoFqAa%gz2L@iN&E0zVmJI)eRqLv zOme=m>t%w|bG^t2Q$s!H(wVTEAF_>q&I5}-j=A9dhyiun|I%cQV}1FK0ng{@$L5?? zQ!$@p^EnU9*ltHW3mkJk>;SWloc9(xJKJrUFvlnJa@?*EeV1q$gK4@QbKW3Z zoE(Sy-G=A-9k?EyhV4U*#lHq@@l#{_E849tYzLkROjwwV4VIg6%yBXk%yW-#VO_fw zT3`Bw+_v5G-UAK!<(sgUJAU#MJio-AhxdI}7mne(Zb8h@tV0ZT_C>a{FS4C?QO`N& zYad9)JnPPPIdaY?+k|}E0m=CQ`8v%1uN;!>Gw(V)Jwx~f_UU$>@DJ>J$<*_`o#Q{4 z_-CA)&)1^9aXVm5EJDM*7T-nTp8upUxd-XS@6_-@1gTXSp*)Pd0r#4l!XKvJB%EWA~f?i*X62#`?5X{7`=%>cV>~ z+UFqdhY&y6%4M8f-*>@}@mpZV!*=67hcVl@VqP-mZI)|x&i`bteVi-o?2-F1p1tr~ zg>B1caC0W6d$S#Q#>08674z8gbJMly6W}(~k@NNd^38E&alEn3KZSW_Z z`wFtHzpNM6bl!8(ZfBcp&sVS?JNLth&x1KIj_0oeM5Y~!Ir>}0iD zpVEFjetv;in3r{D-_gJI5!;RD!xyhWKREld&@2Yq_+JLL>vRR!;v`#~U0{ooZ1Iq- zToYgkh+OxKqjY%F&Q)<;`Y246~Ipq)O??8I3y{8$|aolmwu z?N(pft-fTdFEv)jA;*kolQ4!(JTEP|1mhfI`}S3yckoK|uZv+8cr)}C1KG+Q0b99b zE0@f287K7?1IP2NaLo4ri}262crWZJ`HX9<2)IJkL0J4l@tB{oFkf`4j}kJ<=+~@xm#|86cU@k@;@eYB1l2 z{3A4sneV!P`D*+>;xRkdvT7IV2m1myZ*vY`k8TUl_=JkbT+@r?E?HJhB+?`;%PIrOLPvbk% zeH7XDQDoaktwmc|eQ$Bhxteq4a7E6}V5bIc5Z`@tMD zr=l2^#Wjm#n|2#-EX(o^f-Ub5*z&Sm%S*fE-2}E6HiOv?wqA37;Cej*yN%(kU>n2R zzhGO(NfnWAqM{T#5xGf(sjM9+6L z%|G?#fAQPc{IIQToU9RM`g+%3#`+x+yvZt;*U2Ku+>%bY*C zKjB=x1{$-IEe5jnZ#VpNPB`eZm_KnXug4gh4PFP0-AAlfhF`Py3)?t9y*C->=AUh1 z%<*P*X+&OS)6i~llI? zFR|P6cWUe!84*9cf8@Q=kw;+dfZbvyTV2Rj$8C-o!*;O6KL)n=cY>{d$=1IdW9EMs z?8;Ua?N-)q$1JN6_r2C`6Tnt3-wC#IXM(L8?hv13E9-UmdG3A5^QOg87WXRKaKCo;7jPycc~^j~j$L4@ zBlFsL=oWnudw}1}_q^;O*xO*dT`>jEp4KJ&Eau*m!F;aCc32KRfEvu_1@L_ELwM(k zpOYeg70>l9hCS!>-QYIItHHeg?Zp{mNto*q^Iq@r7T=~H_g>8FPEWoAd<$Z>XWy%! zH(o7V7Veplw&$B@&wDX{v%l6t6P)gQEjM8ugnd>&?nA-1z`k^6qM`k{@8K)}Dfs}* z56t@j>he?c?=jGCaDIM`z6gbL?ixA4`8;+b+TgH6Z*9)Hux*!61O6P=m*tL4^91bi zXHsBaBXxNIWijvTu=l}EW^B*Ee&ie2>whUJYtQGZU_T9e)OW%@AM5xW#PeaN$zuOg z0I!1|+hdb$kNvtU>rD7(eSd-jv@b!=`m)@wg4aWDdo9kT$K9OFrPMr(`&pj3QN!`c zdz^l-jn5s>oQ1kS1V7}Rp?miLydPrw73_oJpLuP)W?$caG3FI$CSz}0UX<*y8Rx&c zlF!bN87IdZdFW5cHO1JheeMxv{4b3r@l!tu`*WV#khj6U40WTPJ}+>5KJ4cmo2(;y zq4T+pJOIrxs4t%vlTQNkIW>6_;w7{1?3x{tHrWErtG#L7A7gR59c8@<`yiP2bQ{3m z#C`dhXj}R@8Rrs=GlzDtdeMHztBIz~-8(!EKg|1I`2Rh9qP{1)m_$=HT&ipd&$558d)%U>Oh->QIus;Ak9&156cr}>uu+8a{ zd^YT>95Xhye-`s4)|V?&;WfWNSl~W$}+l z%v+_cR-p~;eW5MT+p|z z@Us}ySe&fOac#-iuyXlc(-STRUcb+PPec2R!KdAi{}qg8isN|$yj{wQT;4Nq|HiSm z7;_`Xp^Yn^rHnyuXDK_u)~CCi{pl>`CHP^R?}Q(Y)%rEbxi|U3F5DAgf;$iX|ATdk z*EQ{IlgD8%g84oP-}5Bzc6q6%=C|;_8)ezMJ!E@V$NX^Zpq+Z2)iduy)6(nZzL(N? zs9E_{(W7nX=LBf3hMml30bHBNyl311yWfC$Ad9~t1#ZOorp@PM`ea*??LK;fXvn4^ ztH!Qbw*Qw-$GqeGo1H#wUC4lKU7#Pc&lEe^=70K}usW$bx$i#2f&Qf*(=0+A`I!!W zj*Mr{M|Wba#Tgmx+{f}A^;YQPwnbZ!8QWRlInK_pJx_Rn@Dunye&&nkZXIG@EWAuO zM7cT4)jV$}KZSX$KbAZTpr5Mvu{~|K)3Yu;;Gcgc zxnCx;j=Xnfn>>qs;5lDU&yj+CG5=%CpN+O1K;GBEUNu>d{3g7Qf$QLZq38HvyK&6F z>8=sZKWpIMuA@E|1KY3(dHES1&I#+Co#VOR7{%~2Ce{}==Wu^UyNwyz`3}__*vb6t z6t$oNACpFe4JHd>B{*OVN zWX|Ec#J*dYWBAAraeWi>%%n8$1Yv6ac{Sc0g@)~B{Q`{7!MM+~KCOHU>ooG(xg6Qf z$6CcsHv2so$3s|5-c!Ne!o}PU4jglw&w<|R#W{z32{au4w$5_>HD;XDa2=oL^746l zzpFd%$ITDlTPAa!{1JRI@3jkXw%m}caeT+D4Q)hw$9t1!Mi0Oj&phWjJIi8Uv#pNB zSu{V}Mg0=!+5Q#}#~7K{$mz(t0I`wzc{kd5ebF8>uBnT_9njck;ueE>-BG{7)r)<- z5_uT|%i{b%KQAEuE~nub?grZ$LFW9%@3kP?_@Umo2TY&LOFPFQ-%DHr<~ZbgiG5(3 z_sBMvGOx|&)Z18PS>}^$a{~3|e;wHTuLqldvia|K`qKt5KZ<@x^kmahV=>Ub@g^|i zVH>jVK5-R3_lGrt=QB%3@ho;G=4-TVKi*XvLRs_CzU=oG!5FgMNAV8uPVi>uhhtzw ze9~_1x%F-K@8QB(Ihf4J_AWH%XL}cVo9HKFe17pYtas3F7yB5P?RFmG-wC$);Q+)O zVLUUQT~0IcJD6`p(}*!@?L)S9z6E*tY~?uUnV0QDKdg)O7kPgSH1ltLT|^sB#hC-| zzj#d@>-K&d;PXX{=ZW9N-T`G<%o(u7%yP@^p7%j$82>+UANtdSF`q!AeZ+k%KRe9+ z;(LH(>b(#;^iQkmVQ1dm@EL-+SFz7(S)8;pPTI-r3uE?$>F46%^-;L)<~aYnF6KEt z3t4El_90up_oJ3)$jdEO~7V@Z5}S^;#wx_C@IA7GtwF;8=B>lE`gZcOfB*TUz20=M6T{nWj2 zRtEiK@ZNZyGY`!BvWG8C_J?Z_&z}7r*xH$UDtniJ_j=}^ZOA?FDE#EaKld%S;=X3e z50f_GUhzOM?f1`3;^BVM%HsZteZlu7xSm>DasB;!XL2vL4*zHIP=Dagi-u!^pN0PwG$Uf?=L^oq{XRdNuvP4Ab9+acY-{T_r#TZblWqKL zm%K||{CC}paU=Gf!pAtx^dI3K3jUkEjky5KIRA}#@_)dLjqfM%S!#rKUVa+-5p8Ja z17{)z@&Py>xDNL7oKM=xKi{169eGMM;i72BrXi1DF6G{gZ2HX@4_3!rh~LJ{ZmG*H zi18Hk@3%H#Z0?`-?*!qD@JwOe7aWQ)_8XMlD)u>!Sr@X!K;~M*^Urx;TWiR+2cYJT zSCh4}h--xJfL--tKC4e-<63qFCN0i0)O;J~X0JfQ`}cVtNamllXou=B-c$Su+8Fwu z{W`Jdpy&8pGKeuHJ}029Y!5)qlaFIBj{U~sw`rJ{`_*M)XJ2!^U4B2VL$QbOLp$fm zWv<+K|0bGlVb;ZBBU=nyYwUA3J+2J9a`_F%F%eim~hzXyr?LnZ zbGOs5-N@D^jg!;9Ak$9$2K2j+&+LDC1oH{()~BXt+mbnkxd)yAwlSOm+rF1<`{8a} zKjwci^4lCTQ}U8+4x!%4C9^Ipmu%&>LQgx#^Bm#VQ3pP6`qjgzFPP*1=`7CE(9ZTw z#XQk(LA!C@cpmx%&d##PwpZy8`zp-0EO*5tIKzPdou}d*elRtRjrVkm!E6)W(=7vA zJJ4=*j8N{&{diZ<<)u&V3F*h4n=`Mq=L)br*Cw+)S0hd`^PY)Vc;0L843I5;GBvCh z+4`c(`MC&fL$)?2+n$+hdC4}P>_Ggq^O_>tdH(B&!|ZH-+gEoZudQDbP@a|5gL%L{ z58mU-;`~guak2(%V~lKVNIxu#eL+9Qv_FRS=V#2>KIh}2jD135_CDvIpD|x2{>kQ_ zpNY18HJSd|hRka|$+WZm8MEoFF0`+gd5`h1UMzP#*y=@%^(pOpVgUdAGihI2yY<7) zaykCTTweAg*)(M9N3zAwy09$j2gMJ^hV|Ew*f$Ap79IhcAF}x;TikG2Q&)94(+J$l%=g=C=S763@Dx_qKhjT?E%C)(I_x1cN z`NjsEVdK8J%j^k&+ z^BnX2bL!vxXtF0+Aes)x9Aj*&*Ik<|hTX;t?H=mIHl*F!ifr=?*~T!L@$gzE-|=di zmv-}G*Wfaz=QXlIn0ak{c7d%;$kyiFqVI7WuaCHP>^m;jh`mqrL+)Cmev@Oyw$5qD z>xDOqhI*T~>F06uJ=>7XcaK_sm++&oFLXXlPyaUN`@uHm2f;Sx$u{PxxAn0PV}||0 zHHCSt9T=PWXUxWY=EAeAwTxY781XBO=>5(s|JHz3ZvJPwLC>K|Kge4fC?EcY>{*cR4#_eiMCl-O>0g z5Ay&}KU;HSvjI3;Zd?&0|zaZkd|cChP(pKZ53njrcN zcoq8hlBcj20^7Aiw!ZTb$Ms#wdB{x3OZzL`c;^GY$*qoCMKed(?x{PTPV^UJj=C8< z&&oO+`zx@G)ef+Y)x}_IL$Zz4Wnilp^)^1~hw*b=UI8|rU10Os4K_cF;l0>n&q9BZ zpUV3&Q)A`Qr>!IOV`b65wH5Q)*)rMAoHG_^U4$m6+EOjNuH0_Lko6Bo#eYahFjtNt5 z?ZA14-)GD3FWL#a#ZQgx-^ezGcY!UQ-Hy+KJLa|e+B`Y2j5Mn2!0N0F4u*e zYqyi3A%7ERj|(05-IkmwwPBt)_d!;JS<6LXG<9A_h;CmXT`6%ps zH|dx7Ove|TW>4Q?@4@)L3j2JNYxa9Em-eqrKGzwz*!bL#ejdIR=NDhXUJvo_d8P@r z_y1ePPB!}-v6Ia{PwZr~FAzJ~>>Xk!n|-m^$!1?BcCy)5h@EWqnP7Vk%lM5MvoYf| zW^Bfc$Cxn~vs`1AW!&V(Gq0Bbefoafv zy+!E9zi!2~HHvHB>3N^K&gprdyB=&~o@`^78uQcR)>-b~`eC;?2f-ZAoR@~cHa5ss zU+xFUd^i3H_?e6Mdyjen;~4d4{Jfvq1ii&iwsKcP&-L-6PH)#E_vCi3ZTEMKjcn^F z_tJJxO}p(kHp4&TXB(0^SMYiyTYHXxEgrJP!+n&^y<450`~PiDe=2;EP0uqED~oJp zjX`5=$aUZ5B7WYA_UDepxfsUAyPw20{8GX@_rY@(oT>8r9nB|(PW=5OZ$h&ZKJWf> z^4(Co#Q$z#&UHK&UGXyJqN!;N6NEVr+<^NMe!e>cyTvvWY;zawHXribX(9Tt1#?r` z#m0M(wG!toVD?MzKQW(x`I*@p!J)JBEN%{bu123706Y2F64oBa)6njl9RCpQeUjtf zpMZUU0%+&A0H*!^w`njLXIXpL%`F`BJ+Rxpg5SSn{ksNs<36y} zYaN)^2=7VPgY6nAqO8Ba3+Fli#x)N958C-cFxPk6WAsbjLCG6IZ~htc(DS%%k#`6h zvu_gKEIcC2x}32A@Ax5a8|rcg-c{iDjO}p#xz8m30Po#({0H~7&VCyBP1As>+4xKM z9yoZzJbZT(>|5b~Eyh9xybXMx+mCIR7{(kw0uAfVyib7-fFJH>o(1m|{Vvh(7JDP& zwz{)i@^rNO1hKQeX72*`T$jvaZ{k`S@5U1A_?hn{UGwJ=yeKVkeuuTkK@BGq3ri z-k2KWHDGHWvgPd)JK5~iSYFzVIZm#`Sh^0MMX~GUj<;}siaxUOwhnq5Z+zBPIMtmA zi)OuOI0hbjIqCO)*zH;#1l#&PB=$|h)Z5tG47T-d1k7un>)lo`uYIm}=b&Ksiws_jG$KYpC`Td_OF}B+UIf9F>#2Vqs;{3q%@$kQ4ZiSyQ__sX+ z+1BpuU~5m>ZNEXbXWwM2JNG}A?@sQ`cf!tku`Jqoc53^g!#|IAey};D#>%1}({p~X za=UT1X=fc|JL}-P3e@wRe=EP{)H$!+bQ}kK1j^g_!HWOVK9ue;E!% z?OlaWfH{^vfc2X9yt@$(HNCJmPEX2WpLV%*iuIb{?8@Am(Qa)*w!KycZ0iWw#?MSJ z>%zSBZ+U6AyseU#Yyyv7$I8_%Hl&dJP4Nq^b72lf0c4E5CTU9z*F zA@iLU@&ahs{&s!cwaCYNj>(vL0rL-;XC{0<@Koeuds5Gs+hBj@;N+Z*_TOX8XWp&E5~+3k>^PMLfp`(|*RwiJf^5#a`?JXIH-M(}|rLW9IGs46bdb z|9Oaa7##lsWvy|%9RA7di*}3$j#a+P#AjiHux~^>=AcCy*~ zz$}a7dA(@JkDP;Z3E2C^PB#0X*vV#RUh_}AF*U~LVLWWWnEd3IF~-3oh<^pR&)rY4 ze`{!$&*8m-$8b+eyY(a4`eF+-r}bjK#Z4=@jx}v2_z7@3uGu4z3`3c&rZfW30|pj z--DRmw|D=6OdoLR&*F3vz5(xrEcO51yEVuBr|gsXU%XG^f5|@dH_ltO&+OSum+y0A zoZjsIf4%$v*Ic^G+23$}ynPdYjr%74#_gN<%QPkS8BK|OW>aF%Hofw0mNVP^{~Y)K zN4x)@7yo~=_r>`CoAHJQ{WN>ucj?dKbdtAt{P*7l+9`9oO0CwVtd{tnW;@Rk6_^(629$qO-$O!78QJ|j-IPhQo@ z-;Zui?DLuvdw27nK2H0U&F5aqw5Pc{POoWR9j9xWZ;aEv=D)`2y5^)mZ*NZG4Vzhy zNnW-2|GJruH2)XrUfwg!yj~`G_2ze6#&oQCYMj2@d~}@dY(6PYUu)*Oo){lf5`PP( ztcmUUDdjlrm~wrbE}8O$I9)cSKTa>1l9bmyFmst zlDQ{Nmu2pc)8(1rI9-wXRh$+wPsC|ghTmm3$-5-;r#S7- zycnlfX8sbVJ(*o`dQIl7I9-$3>k8^inWi}H%j_SgH)N*A>AK88ae8xRR-E3JnG>h| znPcO0F!P=`{az-B)1k~Mak?pUW}M!iIVVo5nUBQjNTw@JAI)4Er&}{u#p!P|tK)QA zrWB`7XFeaN^~_CiI+nRLPG8IP$LX%j_v7@9%>8k?JF_KD_n-O<(uuh9`*ZyJ%&Gfb z$@(pxI=YJU=aQ+1ToupTQx8Kr$tz5KBu=}g{yI+YpZfUK{Qt43fBpp1m#4lOr>{-r ze2nXMD#zy zpO(z;E2bs$dtn;alSy9pv_F1|>6O!7h|`{FyW;ekX-(JCzGm7qq!YaxrX3om>!uxr zbey+o+Kt$gj`K3plX7QFKR;d%XHIwP$n+^?{(tNA8F4y$`hjseXL^$F=;?>VzxPbf zVjnTiyJq^VI9)US@Hj0^KPpc9rq7Gh8>Y{X({8Hf$ZLYk2SKi&z zd-~!yr>~CF`=@_8PB%~QjnnG%8{%|i`WNGL>-2#*{q6Mc#p$-`-;dL$r{5c=+o%5| zPV3W?{u-OUIsSd|jHLccW+e4rHY2J3@)=3JR?JB1RhW^~t7}G5uS;em_3ECH)a%L_ zNxgbzB=x#xMpCaeGm>^J%}Cm@&;5SGjBj4g`mJ;Jn`aEfzuz`vBu@KhY>Cs#jK|}2 za7NPaLo=E`&wO{!m>#E_XSBy@b;c=3vA;Qh^=bBAh|`JQ;5&bL6ZP}nmDKaZcO~^) z@UEnu>kdrpHy@bT*B_YJZ#$6VYofROpf6XLt~lr$NXL2o2fY~b_sT)9ARXsTI5^3- z|G}5u$=@>v)89mIVfICw$xQSXWs~uCe>U0wY|bYBcV?4vU&|)>-*CV0cE8`2Oa8w< zm;8U`kjhW!zur3Z5Yw^Nd*bxv)?{4nY)$r6ueJU-wojOqly~#2#LxO!iJ#kMCFS?e zO4_sHbc3@N)p)(^nDs)I>(gImCHuL?LzDdD4o&h;I5f$>|DlQh%%MrSGY(D4oq1?x znC<^?oUa*AK$*YUo9fbqaXQgkdsxywwK&DRGy4ZmvHT^oAB@vwvmcGq<+GoN(-pH{ zjMKvGz5hU6*X-GGddci$J?@_U!T9$pXI~PhJ+oKG={2)&i_+@xKvoSXRXak^`qZq3}p zf63|l=Cc3Bc{j{W=BIUYJKo{r_nV!c^>Z(Yf4^;RPn`D8EyrnP?ib^9aPHUR^m}u^ z7pFsWH^u4QbCZ7EG&dP{_s>nn-R8O5#6rL#^w~saKFs{(n)N;{GYNkMkbLvwu-VZ#;gE!p~v&IpTD@^Xm9m za0AX#=i>J-G$eNNV~cU?iu*_Mli<%g{$KFk6L5YC`zZMP&i)GcFOL5Xo`ADdYTg1L z;J5*0ebDiE@OZr6K+P2JI~~6Zyu@*f;{Y0qza4xnei(lTey|Pj?#E97KS$t)_9A{v z-w8H-32d6OXnIA1WoeJk3fS}^*nAFv&1Y3KHPH-g(gY!0OllwlUcVw!Asfw2D0swmS0M()@IYrXZT4Xu3pG5=~h&yalyjE_5a3k2-IV<{{Xj(;+7fripIz&?xdzaYDV(%61 z6HNtd^$JBZD4MEhYN8ntOao?w$(YyQ zljD-LmCQJg#Tj<5XaxD9NYKXj)X^r{bq?rI1nxh zmxV*&jlwnIVPSs$!rCel`wp=65!u?upOSJ;I1pY0eh_1^ihI#svF9Zt_w%P{>(I|?&W7T3}F_{j+e!bRb-a41|89u;mlDD@u*w+k1AJB7=_6|mJY6#Ia1 zRWvoRN5Z4RV`R7H`Uj_RHVC&1_X-aSw`9}2ox;7s!@{G&xm=pJMK};{7cL5S3YUd@ zg+B-8y7r4a-jfvju<*m885O&CNZRHtU>hgx!o9)+!lS}|OPaSqI49g9+$r2EToDe1 ztHL$mNO)AZp*4*sE1VZ@7cPQ%A9p$Wyd?Hs;fioocv!eD9D&WJH!F>&K{zX%7j73W z2=@vP3pX5^`fm{qgp0zR!e!xJ;ZV3HJS-duj|%&TrSUWf=Y#{{cHyFMr*Ic}-((&u ziM=e`D_ju{g=@mY!jZ5)TjCea2?xUM!bRb-aIbJhI25i5*Mx_K8`{#?vcfsAjkgxD z=Y>0kE5ZZ9RpFX&T{sdR74{BKWAlY`!Y#s`!e!xJ;ZV3HJSxHedCMeOS0I>>ZuP)*ze}&I`8-7lcc~y}}jYs_?LIUD!J&jmH;m5N-uqTeXY5 zC|nZm6|M*m3pczwEw@FuQ@B@nSU3{)k4^nF26dn++3fF||!lT082~scNtZ+`aMYt7wwU?aL=fz$S?i4Nw zSA++ItHO1#Ju4ww`+Fy*cCy*C&d%pkWV7eRPBwc%xF}o_J=yeS;fiR;rU`|sPIEun zh-{jga9ubO_U5O0UpOZm2>U0c`mAtHI4>Ls7lez#CE>DgMK~0$3fF||!jZ7IAdNW? zE(jNeOTuO0P`D;s7mkFz_on6g!a3nUxFB2-t_yo7r#`d7dEtU^Nw^|h6|M=_g(G3_ zeQCMAa8@`kTo5h^*M&!gJ)A*Yi}8CtezL+X!g=9>aHnudxGY=|4uuDVtHL$mx^N^s zDm(_ZIm!#ty0i-q2#*Tq-k<7QgahGr;i7O^xK}t7t_erNqrxriX$%A4tFuX8jDl@$ zB(siuj@;0Z+R0|mgRLJ6!X@E~a8Yqrrg=-kW#Le`CL9U-r=)%wgmc2}!UeF62eS2b zNw`|~3l;_UJJU1A>)u8M|id27OT;YfH?*gG|e zjb)L|k1w1R4cRm~;TGY%)87x5WYY)21>vG_r*K)gA{+`22v>z`!gb+DcvRRsEse89 zI1nxhcM6w7dxfjQ z!@_l8?~F8ttZ-hqAY2me6|M+Zg@=Xf!rqx_xedZu;TGY%a6!0NctChq*jplH31@}d zg*$~y!o9*3;i_<5xM68pZY$WvNe9@*NvCKoa(1q3pA)W#WNq9iG;q0`mcHx3> zr*OkL>AinD*y=bSTooP`t_!!ED}KOihtKrmeID>0pTfhUA9ecUzKMO;@>Jg*hAp~;hONUa3t)XFYycK zgj<9I;i7P-a7nl<+$&rWt_s(L>%x(+w<3)>E1VO~3kSjl;i7O!xGY=|9uVFrJS@CL zcvQIIBWcV{U>l$0YccnrdR|VrMK};{7hVK5KVaB4up%sonT%si++H2>cqYlY(B~6 zbHM30Lq9C`QQ?M5Z_%0w!H0Ni@#Uw15Us2ZsZgDsBlXm@wxvd%nxAmSrG0O zt_TkZSA~a#>%ybLUNJ4JK{zYiBAgd)7cK~Q3J(j93VRnyxx!iD7U8^byKq6cr8D)} zF5D^HD?A`PEIcaQ-j(_+2zLsXgnNZ6!UMup;bGyr@ThRZMQIEz!tKHZ;ZEU_a2d?& z`j3k|uOjxUaKpt?mT0>++t`%%+L5J8o!RC|S17ey!(F}@x7;J4jBAPML zG+dEt8o{>Cwt~%nyJ$K@!|&QKO|NJw!d2nAuyJuIi&7jyv-o_kbF9o<4h8sKNUf}^S_i6h*hg9s5@Tjo=$ux!r;dby5`DBe45c{z3sBrr=sh?1|b9HJT z5UvT23VWYQ^$lPf4_UG2g$u$Z;a)JGe_Z!}Sfj;0EL;~J73M&-vDyW&z7EA+6K+_O z>T|*^!g=99xLvp)+$mfV?iH>G4+vL<>%ybL-gRlrS>c>;UbrA!5-tl@ghSz~a80-_ zJSyycI*qMCI4j&DoEL5v?f~1mP!M|;*!r|2_Fk}!w~E+9;hONUa3q}nOd5X&cux#s z?*!Yvq6=*C42WhBYXZs<#WHi9j-R0;bE}#X|LTSiM>zs6|oPBzAE;*aQ5?Q%z5EJxDRac41z7@z8l02 zHhToNaqF#3IV;=;HlG!-hr)wk^H~*pUD&%Z_1_3KpINcDg3V7}>;>VXa7nl#910JD zt*olpN5EEAUF=<7NcDYS)AW5Y*+;EehVR~W{GGG${SRXIZ%XT!1>4xm3m1e-!WH4F za9x;RI%__&!g=9>a7nl#oWD7Zvmjg&&fb!0YQohor}nzA_m$M170wG6giGsFeMLBT zYibXKi^65$P`D;s7mkFzuZn-+qHtL_6s`$J!YjXqG4t+Z-$S2WCR`WxzMhsF2p5HG!ga8X z`AF>EH&VL~wsy`5hr%`CNZ9X}yux|mK)4`W6fO&g!ZqPY*uP!M6%K@p!d2m#a9ubO z_P&|=_l2{=UYPP)uwAoc(^o}P7xuoL=FJM{g$u$vz~-N9{=Gr*Bb*m5D1Rr_mxSxW-gi?? zRyZ&0eJ|Dc!dc&B6DriM|3p z!u4rY*t;{eXN7ZM8v}W<7lcc~7139P>%!h$sn5EwHe2J>kpHC%ONZ9U3S6+u(e5-v%dgMN$fS@NZ7kO&Fc$ig+t+*a3t*CllsXC z2f_v6qHsyLEF20~g=@lf;Yhe}ZyHZYIQyg2o)<0%mxL?ARpGj@w<-1M3+KTc^GD7_ ze}Q>+cj8CUFJK$;8Gvy#luSR)xKvr1q?EUbrA!60U$P{;F_Y*tS>e2JLAWGb0bBf`a8?0}Xg!94$;gWDgI25i5*M$9F zN?F2za8bA{>_3|3%?js)^TGw;qHsyLEF22ggzLhQu(u_R#}^KSi^65$P`D->3H!fF z{pW-O;i7O^xFQ@1SA}cBb>T?Zdn}E?7tRXjg!96Ia8bA{ToDe1b6eAL1L2}@SvVA~ z3Fm$-euRs{W#LeG3;1f!eP^K9BQVdw_#Gf)V6N}yejL~G<7rtH;i_;=xGo$Cd%sEj z_`*fu5_mX+zcVxse^*NEp>Rz&683+a`mckzUhH!`{`TGzsXZqg2p5G*!e!x#a41|A zt_jzLBVq4%X*|AgBbaT@GsCRdbHaJyK)4`W6fOyug)71};YfG~_-}vryt7}#dxKA= zF$cm$;j(ZjToaCjy=_S!bbvqu9x2uY!+& zZ~EUN8nS8XqS+xDvT3|Orhb~h7Bks2S<&QZcjdN$*@oAn4fCQ|H`V)Kt5*}4?Q;_JWYcHC=08WfwI`VRi=l6$-Np>q^a1TozX(iy1$wgS3t-c) zbegB3A)BTonzc^zFKEc7sfcEy(;V;$+EX-Joc%=D$(A=FyEu0^&2nhSrt!9?ar$7> zH-TBNPeD&MeOB~2(YJ{vFPcC!i@@}`0Y1s*vmpAS=vO-Z-O!UwUlM&;^lP2|*U*zq zUlDyM`i)NiXXweMuZq4V`YlfX7W8D(N22kch26Dz6PWd#z7uUoyBkYc@DVoN#GV&> zK)a1GF#Q}2KZ`_P5PeCwOpVK15ql{1s@Q8{uZukr`wlQ;I2|#NtuFp^X<1EVSI0Kt zJlN{HNbCi%7io7fm&9Hc`&uw#_%dQ3TUiy+Z*-c?(2z}26-|wHSJoD%-wi$4^pR+G zIL*m_LES~;|0(s;1ZHgA(2&hfPBd*!GXxFUG=XRqIn6(zA)BTEwtLm0=vO-Z{J-KF z5q(MYWzny7`T^+4=D#BPjZQP^RkWdKs-oHAG{-|jHa~UIM6|nh-r@AOLQgimS5NEJ z1ZEq)0S(zSS<&QZ_uQHervAOJp*?B0xf*P370~V_`bA*sFNdCN`U2SWMcTbYzY&EDqhUxl4)_C?PAE7-|q zFMw@MSm`uA+Kz0Rl4$y9-`BOX)1M6eTG4NG_EoTx&CeERzY}({+3R47VTaQ^2MyUY z-e{_60<(X|??TD!$BC$N*vzR20@ zu#?Tc(%C2eAL=Xi64}MS)@c?(L$|qaKK7HYwa3EX&@A)i` z*o(p?;j(Z=I27IpW}N>;oK>-JarSBB5Wm>Hzos!aftmMMXtH9@3FpBUGui4}5IfoI zC1>a7jL2rMh@EWqP`D~w6Rv|91AUS$uZMk%*~w=2g|kk>If`tWoN!*aARJ(yu}6>})(7#ow8S0>`&gSTZ%()bKElnt72&$DhyF25RyZ#lfX#nF>_xGcg+t*; z*u$E~x~w?`XK`TjSro2-EuN}y7VC}Kb70Gx7keP~g4nyjSG#qjB=(AM70lTFjo9*7 zpRBBca2agnhQf8xc>hfEW`$e97DHa_1>q2E{%gXKu=hq1=aHwP4Z)_bgDqz7&6FF# zd&(7i0OlO{r#rEZi-v4I3!*OxSA?s=t#3(LyTy-i6&&wx5x@8EG|sGWE7)Q#h`l6S z5e~r?b5-m$vDd{OiM{-vG;b(e6VClN)da#d;Yir`{5|nx!L08Ei}|-HQ+ps>6t04; zAM3)tpXSYiO_LLQUhIL`3t}$`SA;{+*MuYC{9Z|2?m%4vu(f$nxGWqB*MuWsuOY3A z4>q4!vFF4d2p2?C6njbRWwBSpUKOs1rY?5BF^#7vTmrLCm!6JuL&rnlP&8F%-}ekW zBM|!-*!CX&-l_jau#Neg*aP9Ba9KDMu7YiB)P-~Vq-6!d1+eLhVlRokEcS}ntHO0* z4|@gknH4SwmxL?ARpGj@hdsm|pTY&?N_6#U2XRgd<^Z|1=(7I42wk7lez#W#I~#W8>3HJg+A9 zNZ6m8mYWj}gp0yu;ZV2=wtlIJy)O1h?0$1vZWe5Lb7IenJrH|A>_xGc#9kJAMeL#2 zvs2O-^1@Xx+wEIRF^2Isn=Q72a8n?5U?7xwV?oA-=8Fw5HeL!OrtdmvmC zE(=$|R#sg&kH1%K_JVLpxFTE?&dx|<%L@m>MPdJ)sXiwh9Gu#V!X@Fda78#2t_s(L z>%x(+pH0in2?xSO;j(Zj90~h5@hKb%N5cLgq8Dx@yYtLI>_y?Sa41|8j)c9Iv@BmZ zE1VO~3kSjl;i7O^xR31O55-;+&b6lT1j0q(vT!I|6CNSEvI?_OpC#drLsLzi?Cx8= z!&1%)=Yur#MR<_x#!pr3bz$$w)PGhu zFI*5V3YUb-!WH3AxGG!|j)eWWX*_{&QMfD|3fF`qVgIPqXHGZ}t_hETZBHAC-9JYB z2nWIi;i7O!xGY=|4uz}2HQ`9ue|H*BS-1kWv%yg8HQ`9uJ2v&>3+IFb;ev2cxFlQ_ zt_W9!Yr=KmNZ6Yvu?c5|^TNgBQhixC6s`$J!v67T-kfkCTof(~SA;|1s&HL66826= z%k_n`!a3o*a3EYfG4)dx4uxyNk+45M&6^Vr-jmvk!e!x_a3q{NDa{)Q7lk8Xe?h9x zy*K4RxF{S7N5cNeY2KW0C|nbcg#GtPUg1EvC|ni}h5fuAzb_hW^SnSf3R3_6`&0JX zQ_c#vlHDBce<0Q5gp0ymWT!8SJru49`yWj1Re4WZJtg&D7tSq8?SXJnxGWqB*MuYC z;MCM-QMfEz5v~dcr%7JnV6oVR%fc1mP`D->3Hzs~K6Ao>a0l4VLyBVW0^2%L7JHxQ zL$MEvzAE;ba9ubO_Ro+wg#+QD@|mf=EF22ggh$A3Tt#B9ElK@E!r{`?UK5Ul$H082 zdc_9M^FNg8bHZiens6lSpOxnABHQ>EdngRz&686te{g;J9 z;hJzH?5{}k=7a;`vT!I|6OM%akEA{W;i7O^I25jSrFkP^|Dx2M6Apxn!e!x5xF#G4 z2N$RQi^65$P`D->3Hu*Q{p5rL;i7O^I25i4N5cLk;$JurE(({0L*bfmBK67}?hJ%ToV2;Xt@3Tow+6Yr>JR zf4TS<4ul8EE}q;KsXh=c3YUdL;hOLW+13lO`&Xv^bHageZdIxYgp0yu;ZV3H90~hZ zr9L~z*8W$g_MC7T{QO?N_qQhB3mv}!t~vJK;d_zecYyt#MBfa~IX)B|IGzhGIzACx zcDxAO2ex=ZXa5lFHOH5MBgd=3{wI>Mt_SBFe;NG$)V&MX4psaAeXcdv=H6V_jf7Mf zAqgRgii~8JL`l+i>`Ekwl7x{>iIRjQj1Z*~(oSWB>{1~`Dq~k9q#dGqzcX{MS?BM0 z?#KW6{h#M}-{b8#zF(itS!>OjHEY(anQLb5CWSl$+_{in1rICacfd0Xc{zA_A+H1P zEacC@;(@6Ao#2Xv{42N#SlwUh%(%$_7H2$+@l3|c8FzkA=N-m)CgbIdcQO_Ob>0M6 z&A}>z)$!YerMZ%&>CEEYSo&csK7ys6$>OtFd^wA+WbvIWzK6w|Jf!Q~nQ@arEY5kb zjt^tJ92{(KFmK<Ji4r6&4cV@hkv3P`~ zXFQDYOvcL@?_?~7>vAeGZo;@T<6(^Vj7HwVF=5XWnw_U~nJ#0GvCo*s>+~jLo3X># zW$ZDgr&&3SEygxum$Ap#XG{}xna(qsUB(_`pD|6;=}pEiV~?>jNvC%idyIX?=474T zVr(;Z7`u!;#y(?uR+s58b{U&fbQ+8Eb2@G_b{M;iJ;pv`^Lbs4#h9k)xXIXJY%_Kl zdyIX?G+mc@C0LDtG(*Qt#uj6nvFYmc7Gs;S!`Pmw(>sh^#vWtq1)bhzyfWazW6)=D znx)e_vo((hxG=rT;vQq4@gA0*=IC-v#+3suEYo6foAC&i#$|DjvCo)ZWb0yVG4>ey zjP1EPufy1yr{gwbhq24pd`YLbIKQmpHe-je%h+S=bDpoup;t7Uj4j3~HpBoyKA8GWHl- zOLTgh@yfSYneXT{4&#+e_5H~`j1%wacxA@3!D>8lKZt&>Z;pVyO#jaAF!mXfr_-2> zEygxu`cT)|WL$ZLuEUj#yRFjOOCPbkj4j4CV~4TJ*j%m4u^8Ko9mXzWkFn2~*61=l z#y(?OtJ9cZ^&EA;YVK{Zc)%)dGj>>-fK?io#RFDxkFn3#TBp<4j2*@9R`m~9 zt&7&{c)%)dGPYQnfK?is#RFDxhs6U{aW{yY(R)AvtGLJ5XKa2P)h&E39jww@jBUo< z!0Nbg!0LCmfK^_X#RFDxuP`1wKOeA)`z#)?iqi(oCRnv?z$%T!;sL9;&Ef&8xKkJp zwm0O$whCCKaT$Az=@Y%Z0ju;TV~erP*kSB~Rl5bO%JEn{U={ZZ@xPis@(!s z<@hWfu!_@0);?erH(5Mj6}K4MEKR^Fjl<#rtGLVJ0js!I7!TSl*JYW@f8G9^Ez$%T; z;sL8Tea`kBSjEl4csO1KT-csLT&1xX+l<{HJ>K65`!I`pjD5zmMVDzZw!o^KfYo|! z77tj(ox*s~ZUL*f%i;m6xX0LMX#!Sh=nK|9U==r6JYW^K3gf}Hhg{fh0jo4NV~4T5 zRi|+n+uK>3vCG(F>@%jXb>1t#)#nu2q2nfFi?Pkv@}s%g-l2FWYnPsP(QeHaW1F$V z*k$Z7PJE~Dv(fj_x;hU-8-msImREw+y*Qi2yRrBPusUzLEX{0|#$)l7EWOX-dsuqf zr|XaatMW}2AMt~ZS3aQG1*`q;F-{!RX=XF_z$(4ZxZ5F}-aM?+R0gXyu~_^{a8S?S zSm?&s`AO$>8T-HMI33kI`wy_Xj`&;09mbT9ah*-Z7Gs;Slho;5#vWszv6s^6?X+fx zvCG(F>@%huo!4Y+F&+U{`*${DCs*fn89T*UoH3oI<0fP0bRBmYdyIX?R7R&a8QYAz zfmNLy7IztYjLkE2nHFQ4vBNk~7UdU?W8RrMug{py(s7e9m1l9r7Gs;S$Jl2~6<9fp zEygxuhq24ptEkKI8PhpBZZftQ+l(E?E@O|e&zLH)@)=u#W$ZEb8PkI@eDAOSL?W}0U9b&S*OCrnkFn2~2I}-CV~erP*kSB3_8HSd ztW3rhV;dZw*BHBuJ;pv`8l>~ugJt}!9(#z6JB(e%9%CA+)0>Pf#x`S*vCr6YbU8L- zhq24pXH3I%UX!uK*k|lKqSL#KJ;pv`8m`luj4j6IqdJYn*kSB4rpI)8ld&~g$8E+A zV~?@Vm>$=8O~%d`9d{XfjD5!L6FR-e*dC|j4r7n8&zPRl=}pEKW1I7Mo!$Yf??-to z?sI-xr>6;;-Dfm=jQvSEPLnm8j4j6Y6jleYI@Wx~&T~5Ma-OE+9%FYVi!(M~&~b~g zGfT(q*_vI(9%G*|&C%&i#uj65u1@1KcIN50%h-BJ$8E+AW0$cxU#GVi+l(E?v_Pjf z8QZVxxWm|G>@l_$>GU>Zhq24~4V~U&>@%h%I*rZPVeB&Y7`tyq=b9_#;9RpzkL?y? zm$Ap#XH1^XYjR$$`>L}-*VAR}G4?sH)ahxJW@oi#m$A7<$1TPVW0&(fo!(>YGp6-A zjr}p(7O*<*T*e+_pRu_?r?(i}j2*@@xNk`;6&xRz72kvCY_F>@xNk(-*8v#vWszvG=7;?=!Zx>bT9=VeB$Cx9Rj2 z=dX0!W^8WPaf`9T*kw##>+~jLi?PkvVeB&Y82gOr8&*DJo3X>#W9%~~pOwSdVr(;Z z7`u#VCo6}sy<5i}#x7%zvCo+H=)5Lli?Pkv-KW!gjA_4)n~W{SHe-je%h+S=Go~L{ z`HU^bE@O}LL7mrUOow#bWNb0E8M}-<#&npK!`NbMGjlYoj89R*WSDnUUY%}&4`;6%~o!4Y+F}4}Ij6KFa zWBQ$y$=G6SGjpZeCjhMq2nfFi?PkvVeB%ta&$R1 zV~4TJ*v{4I9mXzWkFk~2>21b7V=7>27(0wz#vWszF%{G0n2asPHe-je%h+Q~#aWq* zEygxuhq24pW9&1g60Cg27Gs;S!`Nl)G4>hLX{>z4He-h|m1OA|dyIX?bUI7V*kWum zb{M;iJ;pv`D#glYY%#VOJB(e%9%G*|m1gBLwiw%t9mXzWpD~ruW%`Wi3>`NaTa0bS z4r7#x`SzvCFx#F2`f+pR40kRkO+1Vr(;Z82gOrJXQ{4i?PkvVeB&Y82gN=8Y`c% z#n`W*(|9#C`;6%V9XAod0N>A1t#W$ZEb8Pml&ugTbAY%_KkyNo@? zbSW#7vBlVC>@ap2dyIX?=4HBki?PkvVQe;J=^5LM9mZxOmY%U=8S(u$`wE@LVeB&Y z7*kW07p$(|9mXzWkFk9vOV8M4>@lWhI=#u*Vr(;Z7`u!;#y(@Sxh~&g?6lBvm$Ap# zXG|@1dXuro*k??wSbD}5W1BHu#nLmj7~6~;#x7&8wJyhJOjql;*H-UeAFTE-wbN`e zwiw%t9mXzWkFnccm+3L~8PoMTjmy|$>@%hgI=#o(XYAad)3}U1#y(@}sMDK_o!fNW zW$ZEb89TSL^o%{mK4Y?VdXurm*k1{Nj6KFQP^U2&Ta0bS9%G*|J#W$ZEb8Cyg3 zzOWfPV0Emyj6KFaV{&wQ3#@)mu^H1aoyKHrF}4{yj9tbaW1q1%LYMC|rja`Cjn?cl zrpI;MWb88zHcGXL#n@)-Fm@T6V|8A7O0&t>Vr(;Z7`u!;#y(>j&&p@)Owe(9MzhJ- zVeB%di7Y*1dyhLbX|_g*kWumb{M;iJ;pv`n!(CvY%#VOJB(e%9%G*|xw?D{9KXxJ;x>y1tlG^f zj9(tS%fR9;iwCUIdyIXSCSa9@W=3@g$_!Y=&BA#2t_O=-jBUo&3p%gO*kkN7rdc|@ z$=IHw;|^n=F}@%iUbvf2+j2CFO8GDTV*Y!Dq7HT#byNh%=9%EXp<0fN^vCY_eL#MYHJB(e% z9%G-eyF{1cG4>hLn>vlj*kbH4_8HS#EH7h+vCG(gSEqLvyNo@?K4V&{^O}q;#x`Sz zvCG(FOz*KWIe(zz7GuvtylM3JnrXRCV>0$vvovcoTWgK*??x@%M-*^e&N^L=1&+rz z7PlEYj9tbaV;`)_30RF$v|h&pR&ld19*k)LtGLDD0js#p*kNe`R%u)o4_L*$!gw%F z2CU*fWBORf-A^=ojLlDV++u7qb{NxVI=#u*Vr(;Z7`u!;#y(?vqb}cJ>@xNk`;2K5 z%ez^#%h+S=Gp5gVdXurk*kf#N(dj+LK4a?(oyKPDFm@SxjD5!Rr7p*0Y%z8jdyJi} zM)>^Uqko{E6!Iakxh;yfIsyJlmv1q)89QGa@$-r#W$ZCF_vkV$#x`SzvCG(F>@%jlx=fd`$Jl2~-|6%wV~erU$e>B z2CH*Zz$(4N*k$Z7_8HR;Irb9Z7$=G6SGj_nLtpZl% zyDT2CihG6epsfN{ai7HlR&hG4*#rmc3i1Z5(pW4Wu!`G-@t~~&R&j^1%h+e>16Jwj zC(R~fi?Pkv0mp5^;x3B^tjhNa<6)byxX@xNk`;6%qRz72kvCY_F>~j8Hm*X+^8Pidn#$;?Uwi!E&UB(_` zpD`WNe~CE`A8O3fByo3X>#GIV;IvBTJ9>@oHkQ$m+x zGIo+W?lSfm`-~~2)0>Pf#x`SzvCG(F>@%h`E1$8&*k(+*EInh3vCY`Z*XeD>E_jR) zeV@u_amwiQR#vma*k$Z7_8C)w&TBHZ7~6~;#x7%zvCo)_vGN&PjBUmaW0$eV*k??| zS^11D#x`Rr!O}B!8GDS)k~+P`*eu23r8V1(opL(vGWHnzjLma&dW*5m*kNo}*6AI_ zE@O}LxjMbi*ga3jJ;wg|I!@I!n~W{SE@O|eUqk1mnwm|<7Gv`QoyKBp)?#tawRPNP zY}H|L#tvhbvB%hFOc&~MOvY~AL_8-6Sj`7K#y(@ZNT)FwTa0bS4mh6ku(-?O0mtht zjE8d`7WY{^V3nTgX*R*}oQK6N77tkEwF~3noQK67#x7$I9FJp+>0%u>!K!?VvCY_F zoI@$Pr8K@rPG?{?dSOCPZTwpo|E{`~s9wUx|KU%E(0&M~Q>p=70=0#DLH(geph?hb z2%kwJysAPu7;inOVUp-RXb02)-_H338iKjP`SP6VP3)%}+JB_Fg)Ee4VlBfmF@x!6YrHF2VMnTU)JD|%;6Lp3LLeD^NL!U## z%Mfja^02v;pr@gE&=#m{S)y{#jnElq5-ovNLnomIXQ3?UwzI+I@posTuFzPh4!#fG z2$~GN26@o=CeiKCQ0StHC=*%&{R-uugLPFR>RuW3fr?i_J)o)366g!)`g4hTLN4?Q zv<)g=7265D3T=VDhALFU_sJm_y5fBNy#;77vs?-$w5PBZk z0@b^c=q~7eXb<#!GomM&qb;Bf&<{|t7Wf;g(52AzP+w>e^f|N#%5O>347wXy27LiF zXoWP;F{tWQn2SJDprz1dt+7v_`=O_xMbIYb2$YY%XFdb^61oU~$GbJu@EYtRXb?0B zdLDWadIfq9`VA_Bzh`_EG#1(km1{?IG1LM28|rf{)(;(m{)QS|hdM(x^bGV+d*r_! zZ3}%3oza1)2Q&zJA36$Ex&eI{x*K{DS`7UJ{Rx%ni1MIb(96&+=r~mUMxw`{m!Q?q zH&EG5*dFK(Xb?0L`W7m=f%-!0pl_k-o$)u5pr@f9p>kcYF6as9Md)p) za#!SqUVz?!zJv}ye?Yan5sil4hK@n$?x-(x6XZg#K_5eB-+}gn=0U5V?a&FR^qoWx zK=Ywp&><+l2aY#rIATzZd#G^gi?zl)W3r8Po%M3Yr6b z2p#W@v9}M7!+VJ?fQCb_LmQxKeTlk2BcU4i;aG&efFAFMIzwxqEl~OX*k))5^eHs; zevEa{Jr7|0(5C}%+&_phaUk+Qk359^49$aX8iery8U;;)>OPGA2=#;>gbqXL!9;6^ z;`npWzoDwb(0`#fpykkNX!LNR-Ov%}mk~s#kHkKLE`n}@hChFDNq#b$~WQ zhoK7|B^m(Dg_c6gA46Htn$g&f$I%DJ5RHdgjU{>%`U*M@b$SBpg-Se$F%KFE6^tV~ z7fL+^hE9i?K#xI7p;gccC_Ns>1GEy_4pn{{V*)f7sx$%p6}lH%30?FI`Z6>S`T*Jp z6`P22A@m-!3pxUcN!T{18e~B(v>7^oGLG#)&mt}KBXq_TtP{HWIrK&7K4=8=6f_;$ z0G&S-Z4K>)Zh0Pgp+3{lhoFz43esp%)> z2W^CoK;|OsW2h6<7y1M$SWMI&dJLKZ&4boJkH3Mkpi)b4*WgXm8JZ2PehY03eGUBr zm3bTE9@HIr7#asngdPhMs^XK+~b`p%YNfGVD{R0@N7l4t)Zp zJ^Vj33fc`Ff#h-=OHi2)iJC+0ARC$vy$*TM%`0%Mti-$mx&v~d^eT)k(5+ApXf%}k z2z>)u3>}5!YV>jFR_G;Y4fGlGE%d<}{GI`ww-#dxWJ9B%sZjBC_&Rv z9&;(^LFjEL=VKg?P+Mpr^b?e~0mlrq7Wx%Re1b6nY70FGje%xE8=+30;&_MFKz~DJ zKf^kpaT{@*Z9-p!)tE=h}j{`U3Uciv0rh-$s=C74mM!b5PK)&}Cnv zEudA<;BT<+Amdx4gX%&pp)t^6sQV7I3slp`HbXB#Pwm9IccD-1#@q+G9BK7G}x&aytje(9pHNL}s_#Wp?XcqJ%G-@A?b7&E?6FLIzK8AjO9Qzjf z9$Ned)_nqVA7~gf25Ni~V>Pr5ItUf}6UPqpEL7qzoEM;*{zko_s)is7>J5#6isQc?E)Qg?@)h787(C)Djv6eFhzbY8Mw|Lr+1! zL&Zu6nhx!R%AY3a0ccoBL6e{tArIU5jUnk5-2eN-$fZ;wLl}XYqxJJJ`qo6Pi{WgC zo`M%lX?bhRZ1Q!ySIa2=GJ5O{h>y5I&`tPvT{G<6B+e`?qJQlxF=8No67gy&q$~V) zSmD2qVfjN?z8d8X!N029CCDHA|B5H0e9Ob-1th2h<dX|KkLWX#bl42^Q#Wczh(cYd7^Kz;wKBNo8YPw9Ur6yuM zH4|S_JF%Uv72neJVh7zSe7aNYq@H3AuCDh|Z?TX1i2c-89Ke7tUDEvkqYMO86RR1>d=>f$v~Q!Em-#1e6#cvsXD%kbxl*N8^qW6@Y_7EQ!f(Nt^` z&BRxth4@-rCB79`3m<)4ZWl*H7xAm;CVm%p zh~uJ%I3aq9KSggr@?IfjKar64i$BA>~)1tDRD9)9W#d&gyIA2Z`HRLpLft(@g$eH3IIZIqD=ZFS! zuDDdr7njQg!jcQc74i*nrF>H~mv4)f@?Ftdz9-tq4@6tJOk5{DalKqFZjc{}8|4ad zi(Dygm#ah<`H|=)M%1=c<`I&e?ZWIIL zX7Ql>Tnv<3#6$86@v!_-43S%fBe#iR@+&c1ZWklv*Wyw6jTkMz6=UQM@r3lnlX9mR zCwGab+)BzNd6`k%iqOY@~C)69ux1%Kg9d;FY$rI$yiFcLMG&DnUd>d zj{I2W$_+9jKbHma3t3!ll_lj@vXuN~GvD zA29BcgN)vCsL@A0V%#f-8~x-6<9<2T7$9FU2FWGHP`S()CRZ4b$_>V7xx;u|es7GG zhmG;_FJppCB__&DVzMlrm?BFho|okk(`5O?3|TEPQ`S$+k_{8HrImP5wn@yD*C$?) zoe~S>&56bGuEg7NaN=D#Jn^0!n^-0%Bv#5vi8XRcV!eDW@v)qm_(ZyijdEsUvwS7- zxm=X^Qofn^O1_==R=%6qDVHXGkt-6v$+d}Nazo;T+?e=N;tXYMO=Jw2ENLW?ryH4M zDWiC@j8QsyhEXPI8ZDC*jjNJ1jCRSo#&yYt#)HYrjUh?P7@54nn2@~En3rs6yp_Dl z_$=AR_&V9v_%?Z+u`Ai$*ps~8_%7MO_#xTJIFP)__$hg_@mum%<5;r0aWdJ%_$zsr zkx2D4QmI}>PU>zWH+8R3km_p`Pu*{nNewX0NDVZ~rv@44q=p*jrW~VcYOGN`^@LF) zHO{D+dfKR!dd8@onq<^VJ!{lYO*Jk}O*a~+W*bdYFB(^-<{B+h^Ng0M1xBmX5~FSE z9pkptQlneyJ>%|_XY@`jH||NTG6tnSG9FH?HJsEsV`S=MV?t`9F*&u#cs8}!n34M2 zSdrRdR84O+&QEVMYNWq1E=X@T>ZZRjE>3@ET#?>qT%F!;v`PP9T$4Uvv`znLT$es* zv`-&0u227B+>kzMbV(mGx~GpDebav!1JWmrf$6`DVQG;VkxnE=rc;Sg>72xq>DAb}BbS5z?T|6;2eOltB^y!IL(q$40(q|@KPoJGwlrEoGlCF?=CtWeIEL|zFGF>^b zI$bTXCS5bJE?q0}NgA`Xp17-&z=@dhFT~k6q{??;RuodF9*Ry(3huE6>3+hzr$IqAzGo_WF{TS+s*t0WolANCaF-)mS`KXx zk>TJ9BCJ(QP}GOkpmj=yv1z!Di|EufC~Cc%;`-^W+%g>3B4Nq825qWfZeJp3m*VvW zB})eM)WwQEiK$vyRr_->?~Q8zSQ$nAvWi;7u?yo^aNj@5aR=5OQTcdJ4_>EYGNv)7 ztJrCA-o0^o)Ap#P4_~0@{5W=fT=LSmy#Md}K@!(^O~clGv#Ka;@w#!Fj>2&nwM$JG zM+&wccXQuSu{uR;$EmkyYtK{l@ltWCeHkAC)26Dm>7HFwuRC>b*L_^~`!ex9-H(a68QwW6u# zqd%V$j4}hqJ~d;nJ13 zE{@hatRC)mgt0?7j#`HFYb8Z`9~E_;x%?{Joe6WK4yd+2VJW(AjH0GxMB(VYqOKy{ z2LJ8t-Q8Vn@2PA5DekYV#Hfxt1YhC0HY8oEqV|k#wg05fMYW`^scuspn{pNISezHs z^omZnmlx8<=i?4VNL5>@rITW+f@3wxaal|wu=JTQhb~#unVawnAbK9|t6Z%}FSY-~ z{mF2tj=ix=?Oz?M@`*Zk-*JuVYhDHS;}b7MFV%CnqGDfR zPv0NrEww?l>seRLJN42aN7NcR_C3}X&DXBKTG7JZioSCd6&Cr;fExt5S-h9e1l95%iaN7|U^g zHQqBt?T?~rrME-Z#fkTM-3@A=&uOf-BmKCd=Q|3jgFS&higQo>ke+I&M!hcaKELh- zjP2pl;n(8#q>$cisCvZBwefd}E(%InHd*Dh?m^p!F?|ePcB!Cgmj>x}9mB6(A(d=^ z`EY^ zd%D4Sf*uWXeBV-?A&S~^J!|QYE3{~|s5V5=?zq3`J+n66AOHK<5= z66Rd3gEr84HU01F^54#@_n@xJOGohwC5}Gci;GHERP1;a?DKGb^%0KU*RKmo`7ovi z7l^`GQF;H}*egG)J-t1qe>ZRUXVpA$ZO|vfniiF}>s+;tqL%7XO5@j$sFb$5{=FOv zPggmvch!h_>UHQGm*9>=w6?sME{;i$2f9{8m8@f*#(5`VJEGZ_?gzJ_t*T;t$8T$K ztGyn#+P}ND_eZLBDXJ7*7rox1sHk-RNldS!s8aM+7Pa(0iJiLSQ!g!Qy<<<=Pm9V? zR4h0yH{2ZT>7thY|1tIj`ssCDf-MTR?Y5Bq|F|9h?K%goG5L;vwWoun@BYiB|4Ci` z=l;0n&VN;d|70EiZr)%k9n6FOZ+iRG_;`B;zuiY8=0e=9jpiVFsh-i^b&*=yI;OjR zQe)!nIM+sbufR+-n)w>Ia*ayv+*lOe{m@q(zu+n%%25$xb3|8{Rr98Qcd1UNuhoL< zx2U|LVheFi5-lx_tLno0X1Lyr$f}{JHm;eXn5I8w;#Ygb@#J1i9}QONbX}U@7yf7+ zr(RmQv^ozy`5>ND3ulbF6iu~PsXDK{N}X$qis}6p?3t+T-<^PGvcfvgZLad_l8cJz zrN@vj+KyAlbc^eBMaA^eqG&pK8vKK3&+RPWq~5ii&?HOl@>L^T^L{4=ssCgx*Qxc zXZ8I*k9tMr)v=XZRqcaO^yRR;UvSh$R40yo6UX$n=~DhXv909zcL zHR8L2>-wmry8RZSN4)+IwQr8S)qF&-MLM0{-v4CV(3uLiXd@`vqVh2Xx6z_wM%Ov0 z-?L#|{yQ~5hbXK8Zde!AU{Or%;u@TfHjP?W*JUiuTTv{i)#`t!mELc6^lg>N(EKyiL-Lr%BzJlvwykX<1wwm*vqBlNJ)IW|r5T{GUXGFb@8_p5b zYgAC4j{PV5SGU2lao-&i_gLKOE8HSHE?U@<*TjAIs{gCL`_4bq{@TvCa(ncDZqY$J z({WR<tZ^vS+!r)&lTx*8N6E6d0RX-o%z;3r!(GFvET{ws6TJ6A*kl) zpa#`3mydpz)FtcK&qCE|GbyqwsvHfwsrh74>nN(cxnHXsB{AQP)>|R2{nIgBv_&ml z@|~)4QR^6zQMGy}rd8OP(N>Pzr1DmXThflH0`_l|?zKJfQq`bzymWVSwMA>Esr{DzQpK#82E?S>Z|lYQmE-YXZ|%XX?_@}?Hd3Vffu0wi zY^=89(zq_V{dCFtOst=4Ssed1TX3bS-yaw^ej5|i;B#ElMZaDji>atzRZGmn+eBl7 z9F3k+qe`lkD(}=aD1L{^@!zS7{$+V{4^{h7e<`XN({q#5b6*erhIjIw2x{Lij;+D( z`%&y$oEV-CmoC_;+WE#67{|ld>o_W+QM6TUy!8>r&grgVV=RUGk~(Rzqtq`PGW8ltwXn33ghe0aB1g`s-1soqDt9;ej6Ri1`y>9< z(pjlux~+71WtOU?k1SV|jz{XZ;!#ECt=%5?Wx`r*j(b>9bsiA6!ASI>s7IVShfX)C zg=&pjFQKnJ9qf-{pjjau$1(U)NULwc@8BWnwmKd4TN1_|#J>C?q)wR8M}2n|YBh2~ zP+n1E#KibG>Wh68jR*QT`YS$WirU`xm*6>vuw=b9owulx+s5U65mV3x@|mE1t>WYI zSbWqLRp(RJCGj)*WLTa)0>;PvzBjfq>UI6&qpaX>TrY$_b*hW+g|U%XAh|U+&MlA>Ao>Ej#WO1YZsi^@P7HV_ z^6#q}G>nhQX9X3jZ7TZfSw%y!e_Kus>e65y zM&*!9)Gz9>gq|HyYmBishD+;!ZVRc;W%w2T`5j`0~{9BL5NO6Mqs^IJbRC{O2|6SvTnajSjznA+aD z@zV1w6?;5xgKL(mSoLL!^xD4mRP6X+ybC%rSnoA)DX+(+48U8Sz$SMF3b z?SWFGKK?gK>F{!pV@phQjiAn9Y-Jlo_8yg^)_XYjWP%*mqF?>vv)%d}brMf6HhnEf zr;i!EmBF_U7X8E0(ch_c=ybX~eGb*-orYtfv3wH38RpL~RO zZWjk77d7h5j>nt{cj8^&FkMbO7pNV_^4sH!3gJ>+t2sCy?FwUGoKVO4avV+j!q}@Z z>6+>@L>W)D(BZfzCfBN~lZKdcMSHb~vU8IMhy z(Zizc(DxqX#dtP8+|!dVW32gRP@eAD4VtT#eD(pnOM&qiv(I-_Df8b|bVWROd}KJz zs9`$&l)NtQlWlloKU_Ko$I*QuU2-elKo05JN~*lmYbyHjMs*BYjZ~~{6GfNdt=MRb zKF7J|xv&(yw!UlB9(*7^E@#JM)84qeqMnRPG*&Zs{Vd(@@!D3!&*oLY*mNOU1m~TY zZdssW)zF`#ClHI_u3vPebmoWZnn_=;HjLZUNU3dWm7{3lxr$^}MMEA{bng9XZB_d# za$-6OifXVaruH!nzD|{LW=x0Tl7sK8M0eGyV?>GCx$;6q{o`7F71K|zsv0yzpNiUL zGiDx9-jgw{M+-%@dJ-iUQXETQjEwRIUqpzOZUaU0oW60%&HLcJ@UZRQ-mgX#z4wdS zGaciSb>BEtUac*NMPt*q=-JT-Jlj*GbBvGs--7u3q4(gN3Tk^>6|paOyswr9UoD8* zMeo%QQI}|Yi_{!@pvyh86SC1AYGJWe@y9kA5Dv?-FK>#4QRh;z0bw1+dWR_ zyrP!Yz`l&qm5O64(07MuKC+4RyrOh&)BO<*%6=Va^kvdjFuRh0u}G>|2KTO`bd74MrA6&az2!yCm5bUR z=d@5WfLYiJ(Vkf!?~fj+OVmsBo_X{mb-XC#N%!fiMDqY9;?5yA2tP{ru$21SUy+K&Y(=qKtJAW3&y5o%a&B|bHoi?gAeH?ox zYUgY4&PBB47sl!C8G`Sdtom0u7RGOBToR`Xo}BLz=6D3x22ov>VeVZxp7vDluj=db z`I!AjcbW7%Iz`=e*88#;>ij#77R-)uOrHp8F0O1MY7(#Gg1Km29837_(qHPze_|JW zNhyr=yB=4}Asx8|SIi;RtdHlwL(+S-sP#(B4%=-AO3vaPj+;X&YKw}>d*)txG{_!b+A?@*=!`DH{)vrgt52-Dv_%}gJ=hgjB-T1P>WTd@dPMiG8^-kSUWfMkQT5`Sztug}UvV@>cUN^?iYianPv51}_vZB7 zJiTrDzL~z~R@D79-9n{@;tN%Nu)X>jmLAh_?Gv^^vzYEYgtv4tKf^siwEZ<9l|5aJ za5p`rwsO=wd_^l<`d3^0wiD8k(&{+sj6HQ{7#ogW5{<0-Hx~WIQvYsv7AH)n`}1L( zVWaDsb z98FciSWz|5>(zD9$D6Lp8-L&{d6+Mw$JP;)ACi7f-G=|jwCwv_&q^Gez-V5oW8}M#NNb5hx_rIcaI3}YnA^dr_qC`xOH&(47a4k4QgbsISFKT%&5$aJzadPrt*adr8kr zRX;dCre846i~7coZzy_kfa<$N_3YQisdQ`NysP89qvNH)w*&AOBc7pJ(!R#GX*^q(y#HI&)_}q=!s{kGktIIr$G`mIp?KBsQ`v+;yMbS7M?Zq9ja5`mkO@7qdG4`-iU%bED;6Qs}VJP zQc?F?@%$S`0^HpzukH}EtDtE9tBUkBdoiRdEG4G9V$#>=!L@yq?q6N0M@xe%^@#rG zm3kEWpI7QptjTLCM^RVmRd81^N_StJu0u>!#;c`&V?2n`ZH(!KnBG{cw)}cf)OY8^ zJ$qyv+kvAtT3SAiZH@O}aL*%JhYgDMZ_AkOn5bgG{evi7aQ`5p;Qm2j{ohEvp@&0f; z9_TY?uY7gZ7>IL9^lNjMo@&m2eJ@2zF?x4A8uY|BFUCwOBt2J|k91Mq;92__;nEUM zt60~V7C($Hm4-{V)yHqe$Aa>vf;xp1{0h1pb0?x&+wh&dkn}Sr`mAy1PTZFdm+G_l zxTR`u4fEBR{TDnNwKYt){dauXGNg(P@Z3&F`pl%yu(v<2^8U14(XIC?dKgy@(fr;x zPtnOOYUx^>)uN>ZXQ;aD#NLnkRY`1hX~Kknis8B^`bvv97jMFq2)0-64}Ev~!LtS3 zgC~~oYjK?8^=c}IzUI`U@<5E#(aij%2k`}2{HBN2#gn(~L)vu{#@&z_AYJs{`>L)) z-NM*r%tL#I^fInK?+t0k4{D2MR}%Da7<)UW7t7=QfH1ZY?K~D&v`CF7lcJ|xm$XuO zgD01xS_SWhNAIHGgN21PNX2v})^;!~MQ`~sjDNp`v2i=l4k5L>P4z2^&lMGML*`Z1>S;vD+gO8@$$dt$XAYAf}5a8pS^?-vBMI&B(eMj@?5x~SKc zyISpi6IW^fP&>EkFdG%abx64=PInh4S`{S}HYCD2&V?^`p;M*7x z9l%qk5#?iP)CT>rG@^M!)d;-(ITb5gMqTmUgwY~Ocj#HQwB~BH9Yw7zxB`zxbX_Z1 zN6o#{@jKP4I$#!wUrez_Z$Mjxq+54WoKD9YAzhS1&p`E3OKuB#*2UN#VP0LHURu=bUyo)xufzNM=(T8B{8Bg|q`yb0=fnPa z%X4Vw*^-LWF1Vx_WKa%0Up|4zG`OS}D2a$$K846kxTIN>Mr0X2WmFu0Lm~%}*_4aO z+6sAytbedWDK1{wh3&HdQE& z_-44I*YHJFK?~qHbf$S4;%C7nzM@(Zk+aRy5h(|kw2(?6Qr;|$NCmj0_wWT*9KG-y zy3afV@qTbgA5dAum%($Wzj-F&_roPE$Jbu*&ICM%9x%^Fd;nb13Vi)l&`Nj?J!qCk zd>~xXDtr-E&`0nbddM^p9|V`Qnkpi`2A)F?o97@t7%pioz8ouP9XyAIn3WM93YWAV z-V@S-7NfqBXcYT;dC}ZNMg6;!Cq_!RNpwzBYR;xC&h2tF!IF zRpAm}pX~sy2AB8(ZAWl*xWw0IJHcy-n-QrEmsAgbIziIK;&ymL(HZeZa7mYouHeRS ziSN{Q2RDaHY9a0fw}eY-CGG-W1((!X^a5WEm()h|244f0_)9T;!0q4?-?;4yw?#kr zo#KAPd%z{#B?f?d!X>_YI}m&~T;lt;gTVK|CBB0@7^%KLu{o#`C z7sJ61z$Fb3Bf$^CB@Gmhf**oQ8YD)8ABIaBEXII`z$Fb8Pk=K2x1#P@Z_ zgGaz6jT95Wqu`Pr6%)aa!6iK|Cd0?z>%o$y;M>81o`Xx8if;%DdLAxmnwSBe4##L9 zW`bR~q?!1xu%H*<7y-l__-rv3kvVWlFXAi1ctQp)X&$~dEa)XTj#GSf7<~`l9TxNz zT+()Ydsxuda7o|b`@@31g-iTJo+V%(E@`KD3%m<1X*a%4ENBm0(q6F?{2g4<_u_r< zKDea)_;xYAZUUEdKr9FU2$ytFtN2I+SOmZVw$l$F2372HZE#L%PQc`{iPQfLmK@hfDgw=nFmom-M62 z4}1_V>5y?h_%K}3PsRZ75xAt^je+2!a7o9ELEz(Xi7(0z2A_cA7)%U>XA;8@$-*TS zB!+{F!EwAKM#5_*9)(|!7!9wL7z3}JcmiH0F%EuVVm!QVVgmf4#6)<##ANuzi7D{< ziK*~Q64T(9CT75!CuYK1CT3wRt>9??#2omf#9Txs!_o4Im%vltlAcS<2Tz4ddOqhe|io{a*%EbHdb%|y0 z4T%m9h7y}aac5*+wPVxZ!!sJ1C-Q;1Uxd@K^k~{)#0LR`* z{sO)fF3C#%25thEbVc$gxG5YXTk<%#860~sc>>%5j{TVY6Wj`pQ7-v6_y#yexgPL=_Wg-d!eSr$AFj!`Ii7Wf%Bj`3tU_|#+tM4pG^ z7*AFNPlsbhovZ|Y6^gwF0N%5`RUvH8>ZJ z(IC|ZoP}dFNVNqQgQI7rt_7EbORAb`4?Yhrsd}mdxCR_!MXDqCf>bAP?bOZST5$Bk z)UDtP;pm5{+rbyXF;=8HgD-}oPo}zp8^F;gQ{BOr!f}R8-3e|8m((bA7x;2G&L*i| zU<)p(Nvb#a3OLTisXpK<;h58=`huIoajr@A1Gj|ZT$8#Vd=(u1HZ=f#Luw$rV`>om z#?)YVr_@mRO{rn<{;A>c`%@#4>j5}so~cK{55h6?OpS&QPmO_(O+A756L9ps)Hv`s zIL^b&Zz^jq+Y)9=6=q?e+E zOW1FUn>E-at(<|VO)2rZCdNsUBdM*5l^m=&H^al8q=}+O!(i`E;)0^Qf z(_7%J(_g}`PH%&^O>f6q+QB96HGBiU4le2D^bYtf>7DS~(z_AA9gb^<^j>ghxTG%W z@4;Q+7$wsC;XTp^;JwlZ;diGGV`*D;68B7h|<4+`@$uSPX7iUlRgTcmOc)j zkv;)`Km8|sS^97IXK8`Ix3V#9z&E8aRMEC{8va!}7rs5658s*2!gr;M;rXK7a9q=+ zOTd3hmxTY7E(NEYGVo$KW#J`q&VpCWDF?5VQvu#8ry{&{P9^v)IaT1dYy4j+uFG zM|fUtCwM{b&G1sWx5CfJy&Y-F!X=%V+ZlWo9Q`x5EBw6N?(pilcOqT`j{cc@7yP2! zUhw+4!C&%e0LPJ@+Xs9p96d0%FSsEbeJ{5kyjAY~@T+qNAl?Qp>6+Yu;I?o{?Q#c! zuZ2r$pF0?STkcSJ=iFh4cY#alnmZia4URKT?nv+*aP+0zN5MVdxH8Qh4ekj?zsem0 zz8jAHlKTYs9yrcHx#QrE<&K9xo;v|PCU+v1j)hBlB6l+QNjUae?iBd5xl`d&bEhHx zJRE&5cLsPm96d01CfJ2bnwdKb`~n;^mfSh;MY(g~OLAXA{7tx|w{qu$--b(iC-+tG zyKvm4$z1?nox2eJS?*%^w%jG~Z*t#)@5y}!zAtwv{7~-u@Sk&+!H?xGho8({0hf8J z;CXqg;RShX;iu=Vho6zR0c$A>$NtUx6n;+LM)tcb z=N*ARnD-0(;k@7AkK`SNkIFj^ADedq{$$>t@Ns#6!{_GVkIm5hJOjQgF9~0fmxh0q zmka+qFCYF@UKajsUNQLhc_rWn@=C&g%_{{zmRAP;S6*4T%s&gB%`XQpkzWB`Hoqdg zTz(~Z<@_q}bMvdhtL9gOpPyeHUN^rcyncQy_~rR^;8*0=g}2JD2XB*KAAWuQCGZ>b zFN1fG{{f-Te0O zdHEgSujF@xFV61-e=GlH_y_s7!k6XW4qu+%8NNQhD||zKclamycfz;k-v$3VzZZO0 zesB19`F-FA^ZUY&@UEE&@H;XS;rC=F!|%&Xfe*|~g%8e5gOA9} zz&kY~;n@3`nczp^Xqn6`@Mt)W$IKk?SU8Ty%v|u3aGZHFFM-Fyapuj;2Ty=YnwWVN zJPD3tHnRZyEF2?kW+8lPW-SUIK=fbgfGAqC@!O=f6tH7_oCH}(LYVd1tjOUrP;DvCE0GajR#c)Y)WHx}8 zz$Lwz`4s#X9OFP{Blumoq@|hQ@1VU0$9XNY1^fXV`#tj|*n>;@FtZK30**OqW;=Kl z9HU3(8}J%9&J>v);B|0GA7^%gH^9+PGP}W_!f`ZZ_JTLUaZbs658e#N@s-&R-U7#2 zCUXG%B^*aw<{)@G9DOWv82k+!bK1-iun)(%HS-I27aXHj<~Q(OIQn7cDENCg#<9$C z@P0V1$TBCu2jJ+XnLojY;F1n!{s#X9$5@vUNrAsNEs{98GY0rKIIfE`N$^oPdUYlZ zJ`P9U&g6nmz;V5n$p`-h$NV{y1yeQ)7TIE83CEc+TLPSb<33fkBsd2yDK}dRoClYb zpDhE|pqa>`+8T!ZG8`4ug-+4u?OJ9SMIf`zU;Bb~MsF567669Rr>Y#~rQg6Y!U^ zE`T4(E`}1yag{-@D99q!BUi50*>RN z;C=Wx1NtX6s!W*g`;N{tOnPEV`fsY7T&yIJ^Z?Y4e<5_pJM6t zaO~59jqol7n-S>>$N9Hl3%qZ^mx$c=|4?==@J&?d|9;P;1!+ptByH2QP1>p~A|m&j zh?=Htnzm_ya(A(owm_jbdI1U|A|i_}BBCN9R#Zd2Wa^Uh>0=bSlnCYeC)JH)(?Z-Cq{i1`p+AM+8BS&)4mvkN~P za%PFy4Hw4jA#yw9{1Wpy{!YmGCFTqKU68wbF?-=dG5d(DfSes-zQ#WSX{BTK!%Z;< zh`bEh!!ZZp8!?CAmYBov&6p!_Ys^vjR?IQ@Va##z{|)K;#VGFle++43V=VYjAmjfr zk??R#YxqM<8{$VG?Ou!(e-zT^v9*QiHXA(OW+&bbvd?W!e0xY+VT*?yZ7vwFxrygM zu4`<`_$h4oBI}BYqX6cWrA2t8MLx)Ij#Xtpl85>jA}C z&hSQCS9pu9JDhLp32(Lah6`+c;cd2laG|X~yxn#=yu;>$ciQ|cc@d;HZp*?ihSUXH z0KWusezyhjOCjfXTOPg{a(=gk@XH|QcUvL;0m%8?HW0rYas+Kf_!W?Tmu(1q+%^n8 zZ5shwZ2G$-&p^(|wo&k9TQPjaRs#QND}}Gx%Hh9kW8r371$@mm0lsdlV%|3(N8DC} ze-m=VZ4>ctL28+;9{&!cmf0Hd??U==w#o1#TNC`)HVy8wO^2V@X29LHnebEFEV#!u z8-8Y+!@QqE&bGF>_%9$e)OIs|FXU`%n}^>A8F{wN$A1l}zqSSV{gA6*+d}*S$aSUd z4)~*O5j<*JO#CNkNJQ)s*gAG8k#itd8L`bUHFg>B)Kkg}sq0Dc9e<%vCr ze+1I<#~#A3g!DgS55wnTkHF_+j}rd}q$I~4!@mG&d18;l9kGf}Iqig$y;uwWeMm`* zjl_QnDQU5-@t;A;QfwRezgR1g1CaJVwk`f3q@NaR!ykh5(_-!T!;tnW)`>p?DOa)a z_@j_(*jN|-7-S67?uIe;WFj`m8N}|v+abLydn(=uxx%%lqv2e~%42l4$OJu!P8{&Gl9%pSt~Aa%iB2(#@2i3A|yc=jTE5E_zeAA-+= z)D-(LdvW6{KF+N8zuA)C+qtel(F{Cu400ZUlymz`xY9n0$SO!_x6g(z*yj-002x)Y&&6+qoRRG}<2OOtaQi&?ihVwj ze?r=D`vSPxz7W1yAxMp|uf`vS)Cl_;{1Hfvu&>1*h13Z9I{Y!n6}r6ze;hJ0 z>39~eAZK~U^Dx4(9!5Jh5N`_^<#24oJ0Nw$u?Zg!sUwb8@GeLlalDFmL+XfQGd>wo zM;x!?J&-!$*aF)*w!#Y>ZxinTDf5nP_>Pb=@7Rv-1S#{5o%qg>GVgdF-xX5k9UtPm zL(074BYaOt*>>!L{T#cY&#?z)IX;KkjxWdwKuWJ;FFpto%k#&MMRSjfF~$1(h5NbkjQ9Nz>f z!w!C?S*AhCu)~6%4k^QqNc;@Q2#=#RekP=E>1czW1!>hCR=Cj7mdNdpUX8-VERZ(b>BF~yj7d8Ecq`>P+sfs`d@5$xt10=qkh!5+>Lu&47%*vmNz_I4JN-v?5zoF({vkT%m< ziti6;C!OVZALNSFITr7S^c8!#Jg_IU&4gP9KOX!@49}Q^W2TD)*FJ$c6xeR|FWbE4c0RDc+Ritw{{z1q!j&lY6A;=h)^AY%jb0v{AkoMO37=A5e zbj!IKzYfxKcCNv1=@qozD{a4$|9nK9Bz%(keRF z1sU6k+lr5djP1m|jgNthfy8Ztm&9#{{o;1QOXJ>WYJbT2H||6H<&bg}_YvL)DOYj3 z@P0^Z7PlLp4Qa>X_TYn%k{0(l48?r`3*z!$KbVb$BE2F+P!32C+BZ1}q%Wh~B)Ujiv(aZdbF$dy-I zJbWZ{r;QF|Ba7$c!_-0%O za<)Q7DdRfgw?oGN<2u2w;yS~xzDW|@qdM!%i>4juY$Br z@x}1!_!3wWUrKy5w(4BSfx;?8AhW_!}Ujb_tKcn-f;UyAswAUks@!32X67AT=dn z9eyd~$}U0wx??kB-zGeZUk0f=3D3h73G0bG4B4v*8}N@p_GH3F{Ns=|Ibjoi4Wvy@ zcm+P4@G6lOXvi}Oo8hwwufyjOw!r5Tw!(iTybaeUY=bW*Y$tysq@SFy6Tb=4PfmCr z{|aQRBjH2%YQjfE{srkRC+xz%1{v!}*o}V!as(6h;I~4qE)zb-zYQ5nO!xx74N`v- z_Tslg`V|TL@Vg;n8VO(H_dv!p687Uihm2_?9Ke488PiBOh~Eq8lP4U4`w|Wl`3h3& zT}SW=axQQk#akff0@pEoB;+$QuH*RDke;(kMbRd>EHKLz$@3brA+^=j8Xts=Zn@gP z8kZH;y4n(-2sx*_Z1{S}*sseD8(mH!lOTOaS3JH6a+Y_w@Y5hIv&)UY7IKz%CF8Gy zlqi=6e?6o`xl-{rKt8?fO2_{VQo3B{;ctSJF;_eIcUOBN^B^s`s{?*Mq$l9&h+hC{ zy*zD>J?{oEq%Uu27{jUD-0oUd5L6;9MclqH% zt}K?b0&-pE3g91s^i*9z{7T4pnkx@J<_f{bU4?M9Yao2WRYcAjNQrd~!LNn%B3#4p z>mX&=H3GJ{t|amdqzt=8;h%$)TURlB!Bqk`xJuzhS2=viH5P7iRlt{B6W}YZD)>)V z4Sdx#5&p|n4>!9S;cKqR@O4)ceA6`zZgowEZ@Ff`w_P*gJFZ!9n`<_F*EI)jcg=-6 zTsOm=u6gi1*L)a}xBx~bE`+TT?_h0PL;Aysi|}nA{o%yLcq^prB`(3Yg^X+@E``p- zW|)zfuM^kfZ-$h;#0~g) zkg}J!5kDVN_7XSY7eIOuiLc;qhqQ-@ui_U&%3I=Qd^4oHCBBYd1}SfeTksD+%3I=A z{BlTnOMDx@0#e=*x8Wawl()p~_?3|ImberD7^J)rGDQ}4%;@3dRTjEFfwUF|b zxC_4yQqmH4;@pJr3kaCsy1^#77xk}uN|0kqeCGNxj3sSBUzsA1? zDOZX6;hw|;L_ULz-X|W!{|C}DV*vqhtu3+;dFNeywxdlCK_NW1M`jDHSNYuroV zX7^I~n!B0!>yY-=y$t_0q`h@NfZqmbZ{5rB+ac|(dj)t`esD*na{@;*M z3-@F2WA|#f%e@AE;$92?>s|-xsugt^$%a;2n_GIB6q3 z4s!1@X%jvHGCGl@e_tX6@;RcUSMgrR=L3^A1N!=*`W zc$UV!kaC-3#oq@hrAck^4?#+4k`4bbq&-iv<5xpUU6K<%l@w289i+FAU>9E4@bd9W@yM0_Ho%}FlA zH$d8)J9*f@!=|?43z)zAV5ZMhmCni_HFOzGC?1NmtCr`wG4H;2S zuE+0(9I50+cr1A`{5iP^9#5VIC1pB1CuIhiZ6H0Xl$m%dq-T{f3*Q!U)=QaQYQ z#*{^HWXfV9S3>SKrYymaf*h%orSO`RW_Vr7GU78K<1i@?;AcU`ic^;3XG8k@DJ$UL zQXYYGQ&z&8QXXUK&5+uZvKl`R((g)HgP#xSccrX_3sTm>+frKK!jxy>gDKCGvm8=) zQr5$#QZ~SKDI4L_DVtzR$}8}hlvm;NDVyOxQeKDaQ?|etQns>$4UntFl(*r=lx;*_ zg7k}0w!@cGcEVRv-iIHgdUlr!4ru;7t+pq^sj!L4{7H; zZSa4AwDTS-?C5Dr7dF=QukQUzK#CL;?X?x=FJs_h@9v8kBq+jH5 z?4dcs>gz2SUMUwEshA6($+5AX0?&T{UAj0$>u z@Gg&^$YMx4@5#b1fwUo>0DdW?ui^>9W=|fx&l7^nJcaOn&p>h>fRtEI5q>$O$Kn}+ zUjgZ{c!t48JR{(vo-5%>&nURcQw$&Tl#uy2q{reZ#XkY*v3SbyPeMw&XDq%2QrbNg z_-7$4n`Z)i-ctqt;i)0M9#Zl>6X6C=J$%vA2se5r!q@ zcJChO@O}=R-Y;OBcQ1_h?t=;5uc6DkA0~PaK)3fGO!6Lr$=<^-#d`#Lyhowedkm&} zkHa*tilKIUE%01#Bs|aC8lLZM1KWA6@GsuBu)Ws?FYwx72d@)e=#7URy)Jl>*9|*) zli|f)5A5tsgr`t?*Ximq6MFZw^$=}Nr=?}e1E)J6C-NU2C& z4Ev=nfqAJ*;i%MRcvb2$a*84CbLs>5638crQkTOSsVm^EsgDp}06C|puEZ~doV!yW z!#@q#y42P1nbbA#+0?bfpM$h!sq66nfSkuuTktPH+OE`R@tYuRSL*ZlS0F7|s(#MT ztB^6S)D3V)>PEOTbrU?4`U+FOhqMN%ui}4zv<9i0;jz@$iTn(y`>9*-lC}k}(zfCa zNZn6+8%CsUgOO?5iMN8>mr2`+KL>Jj(%#2MLGI0^eF&q|K7wu2c0pU(ZfH;2LyiM- zjM6^G$3c!!+7~b(Z7+1C?SqMFU&FMt{p6%W>Ui1#{CSW%n|2W22~ua%4&ggP>TKF! zd{;=FO*?|`4ym(gNAW!&bvEr7zBi=KrX9!kh1A(JW#bMJ; z)*6mXYeVEp$W>LE6@N8klrOCBabNkfWAfg6|D!W7A8aKfRntCZy#|AB)e1j1;9;z+veV zhzy7H@YAdCBOzDB={5MjLh5q*MEq5dyZ`C+_;HZW2c|c|@#&LcReBTgYRJfK`ZRnk zq~Dc39bX4&b<=0Ssp&J}wdu2n&w#YL>9g@OA+2uu9Q-UuZ!LW;{$@zoNWU3B57Jvp zpNF3h>HnwChl|n|z`N2H!lmhVzLfRv*2rT8ZyWhuQG z{}hapIw_VYX^;{)NlM`qDTh;KEWAc4;I&c(uag>hy-b8RNIkq!8sXn$GQ3He;NN8$ zyhWzNTV)2kO=iN|Wj4H1=D@pTF1%ZAhWE%kc(2Td_sIfyzbu3g${p|_Sp*-J#qd#C z0$0gW__#Fl9Hu8(b1Od_Qv#o6&8_kbYi^b2SaU1SN~(Y_u;x~Iku|r&H>`OyKi^dhzhlj#<$KmVT7F>7 zqvc1|JX(HY&7^GR4z-q9uZ-_e4u8p4$^G=kUayXo=!kJ<&Y5Xc~;+ z`8+(8iYN0#i$l$XaXf)1S`v8nPP8QQ)SYNa;(0sKlERaAqItT}e3-`5b)w~5o~sir z=kr9JXr5)X2wuPwb)w}$o~08l7x5IGXr5ox%rmaKsTSBnJqvrO^{|iH054G+c|Ox^ z5wnb*a(l#V<4(CJY9q({-l+BPzNobkcgp=y8}JWCwZMm>))9F)s#umwu5}~Kx2}f; z*0mAKWq@@9evq{V4z{i%GSpfuE2NUl6;e&+3ci=OHe!X;k-36z=e58|WUi1YWIihQ zkohRz#aj>Wv%bv_vD{DQqw*k`kIF;VZA2a>bCtYH<|^4i<|@8(w>Dyxd_d+ZzIoRI zKW3S$tJ-mtU zp}Z}BZ@U41OWPKBE8kLiTW)JxObNS_%y;B2GT-4lAkRm>!?!;+;O`^z9l5{ldLj>! zxlJA>a~t0TSq~p?yE$^3JVE9*d6LX+@>JW`i9Ai_yYd{F@ABP{_3*{E+auqVm&kmV z?}@a)f41F8cN=Nlp$;hSV`=er@>Be%=DWNw!oWNw%D$lT8NM2ac>ACtL5J|S}l z-xk>%xkLU#<_^9y(gMHa-FL`WWPTtQ#B78Y#;k`I$MkOX0pAMQfbSO50(->tCDJRV zSpLU%7B<3*Z0q60w$-ivCtYkC@ZD@Ju!n68kzTf9Imq`HHo^ij56U1i56WON56Vz7 z56W;d56Va~56KuZ56L((5AiLA)vXTk{e=zqIx-JQ1DS_p5}7~nZH0~SHZp(U8w#si z{lIq#Gr}~SjpE0o; zVQlPr=-_kj5h^Zr13n?P1t#+8_Xw2~TP&?rH!@qR9%Qywy~u2>`jFXLT|#DSbt##x z)n#NxsjJA0Qdg51rN)pMrN)sNrN)yPr7FpcQq^QyRUMgD)j+0IO(N5(rjTh>Q^~Zd zYsj>!YsrjO*OM8oZXh#S-AHD%`WuLxOy)!)gCR=1F8QxB7AQ;(8qQ>)0dsmIB* zsVB&^sVB*_si(+vsMpAJs5i)Ts5i-UsJF;;sCUS8sCUV9s2ya+tFOq6SKp8sul`47 zy!w{Rc=a8b@#=drXXbq$#g zZ zV|karFXeOVEan9GXg&WA)U<#~}j zP*`T6`_KyXPxJ#ij`X81d62)jPzJgRHKBQEIeHI$h4!QG(J{mqScRJ);zD<#73gua z4!wkaKyen{6WxoVB7|q%2v4`+w;a%BZ=NSDREkr+~E>Xfa^7*9+vq3(KK``T8TbIU!rf(^E?l_kS9iu zMK_>lQDUs{-5j28i?*Q;(QdSY=L#Q2@ebYx-GosXBmah74nP4 zXgT@@9Y#IkITolKRiPizISC9Up-nE~a|rypC{MP%23?Pqq7~?Al#wjlE#df~XVDh) zDcXmeDJ&a}NB1E8JMV6uM}9RLhnAy>UXCex7`=v;rt$k0XfwJYonwO@M61yA$Z;+? z=m6?_9#5!7wP-!M>wI$2YV;iH+m2&`hM+3ch^|E|(JQD&d$t=*K+mDQXx#-o6Cbtf z!1Ghl`zYr^kv-_I7qKm9K3as{Lyk_AGxQ$n)tO_2mUrPdm3ThvE$Aq+cB6cu*U;N2 z(4F7NMMHY9ztDE{5&9OL(~|*o)CpyvL1-*mf!3jKP*DGLwBOb(I%vS zz5Z)7m8aM?qt&PdE$Kr!M=zr-Xea95mzz76uv}Ewk6&83l;7V$ccc5!X7oQ~>rdT4 zIcNZKUnY`;iclGkxN4wFN=vyRy zp2>{ts1!{_g_-PAbQgLti*kl~=CJ-~V32kI)#Q?wN4ZDmgs2y2TOm&d9>DP#$a*9F zYfJjq2=^C>{Dfi$vkX)+oZl!ONgHw{hoYv^ z9-%F$VH&?eaSinwHKS+HE9f1>#gR-yx1;;eD)bcEiT;a@pjOxNt5&EZ>WxOC3FsO$ z7u}B@N6(?8>-bG1)C=XKH&CaUZ143v6B#WMz z;~b`=bNd1}@^ff}TVh&<^w+ioc8BlR>3u z9r_6c7qcJk=K1bRn1&{x7m(*3>L`j@%Kk!=&`oG1dI!bc%XXkfbSqkp{*AsytD8B# z=nGVIAM>CO(U<5jN?b;phWz)_cA=k<^#ST0YL9v%KN^OL(M;rhkaG_jh4!I0mh*IV zbQD=0Vtr9Z)OiKv4?TgtK)W7hozNwZupIO_`Ua&vN;yHft3)auV?RI6aYsL|W}iL5 z@j(67P`6M6x&vMIB<%#6hnms5=oor&Ep6vhoRijZu0(gEjpze(5FJI2K21GoVVzL$ z8R`K#j_l8}ZO>7s(8Z`1Dtw;pM6=PAFYrshsM7|KI`l1Sevw~t-pDp=V%^bwDEVdD za`Xz?hFq^ur_p@$K63n%a)Fkh6=)aw+pC=W{w1;%?L_;~clz~a+TGWvS7^oSY#-W= zzC;(i!Fr%;&}(Q1+PQ@?jGlUv-@!q<(Owk0mE(dsqGEJCT8Xx!FH!7Uw9hC5-Hu*D zG4D_g(1oZM`V1XJf89piM3c}$^cH&HUE1{RoOjVe^eW2VLET5r_gGid8(H6{e}vMJ z{&j}_Xf4`^-asXu5Bvi^r- zivnNJFGA=3m;H;fQ4P|+B^JAvI*aCfPhCFDcK^V3qrxL1524pkn;)t3Xd_y6ly(1! z^8;FioqKo$I&^*IhUgIQHn7Bi7L^{NI&P-P~2fg z*{A_MiJn6*p>NQI2BWKJl!Z??qmDegWe!?}zCm3g85>9X*&#pZ?KZTkeXZI>y#5JV`$b6{0cdPE<>W{0nqGPl>+<-Gvf))_Z%@ zT|e_(b?#hT#Xq*7Yv*ScXeX+BXKSCZi|o>?ChS^wd6<2!r_Shda*ml@PR=o_%ZWL7 zz`iFs5qhI@U}|*4b+lm2cbA<0W01=Hi#i?BOO~Fj$;rQ8PRmW!8R0*@yxAvT@PF$| zr(gVXzL8x|&v)iD?E~MQo=-1x-szWeDM#t#-hz0W&gUKY`|Fu=%kR(EQD5Gj z_&al%PGZSt9HU5%`pLf(%z2!}PyU@bpI+Lv6(^_sdi(ZM!%zPGa=s0e`jdZWPSgGo ze(CDu-Nnl=wj4`r}1}1-K87P-|xlK_xo^t-H&JP_mj)e<;W*j zNCwK5ED4|-6hwKFEBPpd3eW&4l!0gv8Z1RJ1pQU6lu_s^RE(}hqostA@e(ORV;CJD z$Jlr+;| zqU~r0dXL{FcprU${>^U@e1!hP?+Sc@_A}=HKlH5}V65^0qmbXpVMhIbKtIY6M*EL4 zipaCbl_-lcR0L|JB2{bDMxCRgkQGIv7(UEoLv|Ib94JmXRXlR31eJ)~C|M<`6qKsG zDh-{h($)FuJoOjVPF@jX7u8vHMcq|5)dTfXJymbi2VJ82s($EF zbeZa}u27e&4CPaq%CE9jmda596-0R|SA|r*DpUn(pc99S68Z$ zYLxn`x(Z#bid6|JRijn8DpOcDs9EYpHCz2n%~3b0x$5ugW_632r*2jA)dI9o-KK6wcd9$oU22iK zTP;@is3q!NwN%}wn$`VknR-w?pdM1o)x(Ns{G(NBrFvXFrk+r%)st$CTBn{;E$V6Y zta?U0ubxxu)j!m6^|MlZ^u=NrMx+s8v^H89QAQi1tr2b5j2Odi#2OA1XE==nBi?W! zw~=UcG%hqc85bFyjf;&gsGo6(afNZYkzx3ZOv7(v8(Bt<5ioL%pb;|ijY6Zq7-$SI zii|sy3>O2BY4X zWHcI6jLAk5y2hAhOh?zE>x>!3^~OwN7PsFh=Ku4?bH;k(AI6Ku z24f?732j2J7%v-Jj5my}#+$}l=pEy2W4rOLu>-wl>@?m-9~vJR|3;r0yNx~QGxRz7 z5BdWA7wtt~qJ8Kq^fmeh{mlg4&}C zPzQ7&>WDg7F0x#VI-@SAE9!=NSh`z!qF$&s>Vx{C%Pp5#e3mOLeoKZW%aUmcT5>FT zmR!qF%Mi;j^jFK3ma8nIEXC+*RDwz^qb*gIN=r4WL6a&mfI|MSZ=p0vfOD|Y`M$QY`NERA6ka)M-QOomIp1XEGsRKp~uk^merOu z=t;B|J%ygOth2PBXV7}fKP)ex4QQj~MaxU*b<1m(EtWSdTP<%|wp-q{>_9uw$Ci&Q zyU-_SH~JLqL7$<|(HEBgSoT`}YxxrGLtmk<(Kl#6`X4%gzD3_#4q1*`ezY93{A4+9 z`PtGsqE$rOi0FtIWJC6d*a&BYBO*Q`E+RQ1DZ&$x5|I{>8gXt!dPKK~t`Xf)&xjro z`kWad6Rl=15_fJ_9bs(aRIHU5GtAhGXx(qrQwMa@S@gkA<(+dX?;O#2`Y-C#)TmQa zqs*y#DN(1E5^d(`Ibu%D5p!x?Vo$|lPsJRkVvbWwcAQ$W!(6i7IEPqc^>VoyJM|t3 zr(EJGmvqWKe9Ap8_n#l0cS5U^uIiMlIpHGY>DF&{3FozKtM{b-+j+&wIVSs0?%m1$ zlY6)6RIJI29gx4$WmW2BXjK=t;@ZjdA=3|3FSOQEw?eCW4-PpI>2!{c^oB~kX7XoP zqhi}|<;0VTHML);E}*-m)Fser&b!!Tv&m&94@d=5SD1da$vw*5mMcJ&3zaH2ImhHZ z(5jZ3z6IKhO))xWm`%s^JEj}gnqIS=@d)f_MwXdVI~zJjsq;BDO69^4hTis3X1v5? zsmUfoze|&$w{fmYNgprV_mlj^n@LadJ_4+S@Z7rJPTP;auT*z`Ko#o0_Z^BZem4{Imi(da4mF{Jr z(4slhatN+4BTFs%2(Gp~m!{WwOuA;J$vWt_+zmOJX5^N08K1HYJC8`joto-xXjPxW z=@x%GonHc#nhW>O;lDt?V-S`{?1B|0{g&Jgx;(6g za}CV{GO?rPrJXc~nXG|IJqR~O=&d*)pWwGd=&4&G^tK<6Ft<_WzcwS|Tj`tw(yqH^ zN7z2{8)!2$l`8I`xff2i`~M(-W^~)lCbyb#eFR4tnuU>Ld+Fmc2P*ZP$*m?oGkFBgjMVEk%jC>R zy*{%{7DgWFt>00zF!H$RH47snxhfxJXck6Z1KXP{jGSwF&BDm}rq?WtyuE_-u50`4b`YG;Q=`U3nQJE>G#!C>H=t0Jz!zv zZzKe3|&tbn%jPP>siBf3DL``HC>H&$KqIug? z>hd|(Ycx~goO9+**L>Av+_l>0np_0^mh-RE%z)G#IK>}#J>!@rcb}ur5p&M*+@PoG z?VWDX`((~J-w>%c{T?-GwvP06T~4T*f!s=={EIoHsFE-R5H0w@q)@ zzs;3!u2FcizK1&oDmBIAL$F4LOSO)-M6UWfQzLZdT%%&1X0^!%s3NACyv~f=2uB$! z<_m4Rrd4SkkeA^oLvxRMo-wimGVeCMcLj} zJas5ab6-@(V#K>D8V6z!nX0pl}p86l+^;Uh(_ms@qoUuKr)xkmV19w*M(=K=2XnNyYO|Db-~0IauYwu!baXYW})fh*M4FgaSE zi#wR?Y_eyx-n!le$b24E^L%+)b(QH=5 zkLmq$7+TF^x;DE1<2v&ZSRbWJ%Z6xu#Cw`lD(VS+6!dZ5qh7}cBFl}3*tdG+9^-~)7Z^hiUntN2~3wjA3z#6sN^w(_AnYy;tnDcIKtLI%|)^vWUZj;V$GWj^% z({}O8n!0Sz-*`pu8GRP;Tc+ccS^}F5T?ef(x;{1=x?f~fn!z@j&8A;!#t&QWdrjBz zgHWl+*EQFee8c2!ctCWkvOPwhWmYJie?Y?2k(Nk3m6m*~=J&8hg(Lmm((kL=2c_P` zw>QsdJFXbFP4Ct4S>{Ikm9|Y#ssF+i>X_+s+j1AorZbgVzFjZpDcEdsnaLS89kHtK zcIuva>U+YIfwf<4Mn)Oh`z_-?)JwR_WWm4ju}^%Y%WcNTx=p?cDs>HX#cDsw(A*cb z4em0Q?qX`hwof(Rhb@u2;9TQ#ll$Nvbqp#sagSaTy|=AOx6IQmD?ZcPtJ!4T2MqHy_rN9p)%itmL$oIAV|sl|5651zSFg$bA2csMB9d<31ox;N@PI5n zs^@*^Cr$mnqYO=YzsK}Z_yAH?;U4AsS+BX7Z{LrfZqa3Ir~M}G-0U)XaG%CzOoO|O zbtd%_`xh!*r`kI7nv61!m)oJ&d6#h$_iuI?Pr(DC+lsZ(`Y8}T$3sx5RnV$*UvZc5 zF@Bd}<9^OABNr}k=S$)HyV<1QQpcSg#it1Q)`Rh$$rriD(`4Nb=NgIJ z<7u*91lv3H@;f;H!kB$W=cTZd$#eM?LAlglSyNqp+4(ZIyrI}PrJ_Dm*1cPoE?uPl z7q9hnruFQ4V%kY>#%oVSO?Sq!x^zE#S?23g(`$R2In{g>=t(GmLg;j2*DhVpSSQ|v zm#3zdb?vNoY&*TTzZ$C zj-1M=>v~o~_+@~3LfucVcX+;TJx*`f>Bt#NIxC^Bt9}{K>Vx`*msV8Ny-SbcL0zP( zba>O$lF_Bwp)OJvP6(AWbdl0Z^Iv)O*pjj3Rpr%$CWR*tuIS~f>@l?1SJ_Ze-B40b z3FvC>qLALxW?2Zk0IxzQ&@DXOT;cA$dxUdNzY6cd(-Z1U8z3*x2leeL!RpG2>T+LQ zT}e~7tIvAbotHl3M_DLatFgM2fB7X-oAN8FCzO}vSJXEY)RdJI98^+0R{t+(tgI{< zU8!v_tGcnOyzbay}F871|9O=raPYWOCX zR5X|wXD)GA-HBkZx}kh*d0k$4Q)Y#^LM3%9p?XqzU3jLV@`(dVD)f7w+>s46`qfZY z-!ud2YHCSt@|BjB*VpSjB4g{qe(<c@p$Q15giXCFoaMNQQw zCIwIKmy@rvE6b;xUdx;sa{-j&x{4{xc(S}}$67R$S5dlpcCYO!btejNNkdmTUE;gS zBoexGqY!s9j}*J2dp8+e6aF9Q(T&+rpKcVvZjy=2qSsA^mQ*&D4{ofbe07sxpsuE| zwxW70{=@<9ChSf#$=r3_q^O3yX_iwx!|6@nRd~`_q0@!wtnjJbaaOddlqIsQtY~?I zzp;U%mQhp2A*`WJjrFnni>sJuwjqZ4s(&!HO6{Qo(>vBr!%Bm?T#RX-0CG{%&<^*3uNi`eTt55BT zEupMY14?vtDy}N456`Mg;Mq}gtIvx5PO=%+*`bmtXD{Z|48J{PQh0^T){e7PcXJy~ zztW2wPEN|U)@tIUn&xRLL?MkSF z^&|#;Wn~q5Z=4kjHPVLHRyLg()N7PkUR_T^Q9QP+v?{#DXGhM?`Be%5UE;#)>mOH9 zJG7>fCYEv*Uf3@}zgXI@7k6SwnRQKr8mos@RF`o|8c;L2yv|=!K4wfsX$5UwaqY0O zy4sWT{+}}S`*P57%j+hvYGw7|l{-7a+nll6IVe3iD5z%-PD%~EaJ^9<)VGI}T-`%P zqcf^MY3vCm_vl{RgV}pBYtL|H^Y!l1o0okMV~S;0hr=h&&b249DtmS5)pc+$&eta+ zr#cZ`y7W5L^D;{m9jjj9W$PSzB4;LqUxo+;dZON_&x!04@4@QzmOxk36ZPrM>pte< zg4Lz;`zm{P?Zaf$4fRC5P~ULMkipq~$nQ%+Uzymwdtb@uGOB(+BLhEuQy479;jzu8C=&CK4}Gd5$J>Z_LWORHD!&J<(El`&nFo^ z@%tpxCs{tp_6eUd&hb&ICD$i;KFRk<$R`CpDfGzzpA7WLAfFWZWUx<$_++S0hWTW; zPe%A;q%XXO!h4QI%V;0x1D}+U-BerdlQCrYWSmbbd@|mrKg(Q6hEJ+}Qsa|apG*ud zVsKqab^Vx{I{FSib7^M<0_6>7y{`93gHIZLGRY^C!wWEb6ugb@ScD^-6~c=$%~T(& zmtn3h=P;aZ{=zOJL;M+%nITyjlAR%e49UrmV20#oNM45IXGkbR3NoZHLk48Xzzi9b zAw?N7I75bH$j}TKmLbD4WJHFH3@<*s=nN^zkkJ|JjSMLxo4t`CW5~#maT!vPA>%V- zLWWe5ks;L?Qj;OI88R`vh%+`eytK0dXYUOXGNd6x8Z%^4hD;7GAl$zS?~QPToe*A> zX{NGzKEGu6#qXC)zhwC(+b;pXNv>b={F3jNkY5V?Qs|cfei`VOL4GOn%V56@ z@yk%Zxig3PWw>8P_+@1Hbw)|)gt45XtIGzLSD9^QV_kW%-`w55H%+%4!)od#)K-+2 zmKQbFjp3B{>$(3pLoXwILjK(a{J~^BcM;tRdV0Tp2B0-%yg=Yb@sHATXFV298ybx%g|+yZuN;Wr?>Tw zvr7Cj+D|?8OBrRGdg_-klx4q+^Gk(a#`|T0Unt8J{T=GNm$8sxqZIQ))7$Hd7{M zN*(W+DGiy@m?@JoWpbuW$&{u{;l59aFH17A#GfUZS(23{*?eA(kIV6Cxh%=$^Kw~| zpCzFzDaew-EE$j`1G8jMmK0^l;4B%EB}21hSe6XWk`Y-lGD}LbWOSC4W=UC=lxNA9 zEE$_64!DN812$&@T<%95!p z&6h11+2YTZOg_k$E!o);$d;UJ31&-fw&Z0?ezt_Nr65}hvt>ZG49u26*;14(gR^Bw zwhYadVc9Y~TSjEd$ZRRemeJW#nk{A7Ql2eivSnd-EmN|kDO;wpG+#h60^$!yCZ8}2NOnL10m%t)sUx`o z$qPt+Ktcg22uNW-1_WeaKn4Y*C?JCaG9(~F12QZi!viuRAR_}(5|GgWDGf+jK*|F$ zCLm)2GA-8gisDM<(USB(&5(r98&|EcNkv|xe+@RzIB|j*kpcDk9Fen3p`nynrf>IQe!9f`kl%YWx7L?&Z z84;9`K`9B!=%ADar7S4rK^ep1f-){B6+syvlnFtp3`$i{s)JG!l-i(73`$*4>Vwh{ zl*XV;3d-c5ObJR;P^PjpU#?{2ia%E}b0sTRvU4SnD>=Cm%$3|+$>Woye6WSbY5%8nKe_UMwmhA8#yRhIS5N1a`0^wpPyBh3nI~C!lAR}kJjuzE zARjW$le|315AU%PCyA^n3~%Wx(lhsKSt$I5f0k2_r@!hqAWsJ7$)G$b%9Fu)G9*ui z=E<-;8J;I2@?>P5G@S0bb@3OUc>B{aB6{o2JSB&7e!GJg&i=h=qkpr*7+&6~j>>QJ z>B39>;|#Nim|ck9UBK^l3d3vg8{NC`8~^5n+Pd=JjO+FIo&I2WX}>@5*PYVviv31M zF}$eXoIvRgZ|HCKAj3=iWnVG8xL-$qv8-R0f)lml>pvXiaZ&gClm6d@{Cz)s>>R6Bdj-o7Wa(V ze>LUQ+x=q7AI!w0YTB!Ynmnn^lZkm!7k=v#ZBJ&!m@$p@;WuZPv8txe3_Illk;UtzBJ{_RF>uoNk&NgA;}C$ zR!Fi#5(r67NP>L(BP4kt$qz{=Bn2TU49S3y3=GMjkQ9Yva7c!PWN1i+g=Bb0MucQ! zNJ>I7IwYkbDGNz?NXCR@Y)Hn1q#`8aLoy*Gl_9ALNp(nSLQ)%&i6N;ANqtBfLedzL zNgC@<>(9(OJEC*+@b1|;XGg}IScgEk-J*`0%c~z;Gng}eVfCqIpSGr~qMF-6 ztni5i>pL>#`s!M@cqiv9tkyF!;#sXH)YR0SnoDm6Z~p%|*NOKs*XmD~{U=#^S?nS+ zYxv16{JqsZGkL`SPx8qBpX5Kw)jRFvD*suoUgI+l#i@h%N1OPI8BQJV!fNw=S4q`b z$1w1#V)7?5oY;$lO3ErqD$N}~pu8@-vaz8&yfr6^Kb!bRDS9adCEtoKz`>KB3X zYW*)*f5w#RCjDY`fs}@m>BH4@Fpf1(4UJW0e-wIFttzdb9jA2y@WL$w%6v+4jnNT2=1yWTY)df;hAhiWDu|Vo*1q!60KpOua zYj4`zIM1sI;}@l7&UwyT@7L^cXR+fw{?g?|wiU0D>@5B3=ehurqGTm^-&0f79g_gK ziVFw=;FG*R$;Xp?KFQaU{CUE{)0B&*TsGyZDc4Q8Y07O=?wYt!%n!-ttkINTO}TH% zLsK4`^3;@OQ(CZ+gOMDFU?$g;UQ_x_88l_sl$WNAnlf(6q$$&;%$kxkW!{uUQrhGQ#t0{kw+j&baT5{QvtCn21 z*+0wMvt-YbKg;1+j?eP`EFaJE`7B@0@&~z{x8v-L~}F(r?S4EyK3Fv}M%RUTkYGwq@LwNn56E znYHO+WDaawmTgJf^4gYFTh?vav}N0tU0e2Td236Cv~4-G<=B?@wtTeZvn^k3`Geff zJ95#H%Z^-i`%IJJRV$7Z#fx>33w% zkzq$(Ix_0WxFeH}Ogl2`NYascM;0Afb|me{Ye!ZcS$Aa9k!?qI9ocu}ts_}S@{Sxj za_q=^M?O08*^#e~{6Si-g4mgG_rvq*EXjX2|Er5ScjclhmtDE)%5_(6x^mlx-#j?v@5f&Bwd+z zWzm&oSJJM$c4gI-byqfB*>+{um3>#7d^S` z$yHCTdvep0+n(I@q|uXKJ-P46Lr)%i^3;=NPg*^B?nxV_uRZDZq}P*vPX;|1_T;4} zqn?a=GU>^*C$pX;J(>4p(UWCQ(w@BbWYv>(Pc}W-_GH(SeNWzclJz9-$)P95p1k+u zqbHv|`Rd6Zq(z51?HN?GFBg5e?8{YOuKRM+m)pMF^`+65Uwygn%R^rt`|{M6W?x!; zdG1TQFP*-0`_k)6zb}Kn4EyrZmr-BFeVO!S+Lu{hlD^FQvgpgQFKJ(1`?BiGx-Xl) zZ2Pk7%f2sfeaZTg_vO%+V_)9;^3j*izI^rN57O3s`2p%Ykc)v_4&-Ve*8{m3$n8Mx z2GSVFuYueT19=)qb0DpOJP)Kjkj_B51L+Nr0H2c-#@2LoN9 z{+2fV%RE`($8`JG<^L`1<}dRc4`ecs=|E-!Nd_{>Q2*-cX!;&q z-#wjulFYP^aGE{rj#*wP#{5S4zo*nuxypa9tn2=tWW@f8zk&NyT9@w5zG|i1e?h(; z$Yvnhf$RpdAIRH4GSqz_hk+ai@;;D{fqV|+Yao9(U59cpl*^%94dr?$H$%A{%H2>J zL-{q7`=LAx<#8xaLun4BHI(O}w1?6eN_Qx|q4b9`7|L)cFGCp(b?(?-NI5whhC1Lv z1dg>PLtIJ?WoBgOn|*5ug*l@uV&edxgK#Lzp`=539m;AbYveGL?ND|@*$?H-a*A%G zEVB~ewsd6$0!!4xRp(HSLwO&{$51|p@->t{=#m$?e37dcxqgwG7rA|ryBBG^$gdZ< zf02h5d3=$l7iqpo>qVYlr2QhD7wNu8??w7AGI+6`c#)SE8Ck^sx}JE6yX8g3FEV*S zx4g*A$b3f_T@mx$@*;B(zR2=L(ieGsk=2W=k;98@Uu5?p`xkk$oT6T^%u0ZAw}8MB zv0Gl`_#*Ew^6?^{FY@&we_rHbB$p$(8p-uYZbouDlDm;KM)GSU_ak{2$>T_#M$#Nf zYb4JjX^*5clI}=)Bk7N1Fp}X&UPdw+Y5&+?*CnI4OGYvt$z+5sK`F_>i8=dF5rpdG z8cLo}xtU#j-K0=en^`u#lPsSi=DTbpa}bVXIg)fFuOnHFWQ`I=vK`58B>R!PSx!+8 zS!N|bxywLciP&W$IgaFgBp)OB)OxoszDDxL)z53`$U8Ove*cznw)icZbWI&Q9vXj3 zcHAD)O>&#;HoqnRND`_9>K*{<^RZlv<#H@nW4Rv7%~)>7(1n!7SbmM=ehe*0c^u2r zSej$)-s|-^M}Mh?%rXCc+Zt;Z*MJw8sa@)Gt&^8DSzWM zOgW&#uOY@%eVU zgJv(TH1e~~beU}Msi>T*dUwckJC>c5cfYqU!{0Xqvnh|ilBcso1Gks~2tV3TQBVW0 zhaKhuX6-C9h8lW%VeEe>)mm&)Y4d`D7r5&6K%E;L6V*M%2D#HVQ5AzpOVAb6ScY1X?_Of zZ_u5u7s&)Y&Vuf9_c8F><#!Ynpo}y~0u8VZ8aSUG^mj%|qMy)IEK$&|yMi{%SdL>% zc=;I1=UBeR@&|+Hd?FVUxtvHlK|b!Y;D&ksa9mK8{%RuE6S15C9vdqx>%OZ4^Wbx$m>K_6Iok+=lRAm)W9W_ z%{9P|cpRr&jWBx+WV@XO#!R)H$ZjJ0iM*jGWHOP%M2-`ApUB5VJ}2@ukw0k1`BW~Z zaygZ&sa#LxW-7N+xtmI3D!-<3Kb426Y%%LD$65A;_408lEr><&a|6vMh;rZ4-7!ZL z)xh75{(YKC6LeE~o=O|QsdT5(n@WEwgQ*Os@-meXavy^(qwc6qWafH4(VU_^fsniO z>}mR#OqXY7FQEV%WaG7mX|Fhg3jGR?K0+n+5GhyN<;PA86b)^J!+@Jo6AhV8Wi}OV zAitrVZB@dk&!Mb+c9rZQeoMB~FDyo1P~e`*d@75nEb$i~>tVM@E!2WWyv6R(eOF)G z@dg-epU(`sb{`Nm=VuTKavBwjpf^Y;P^E-%EqvO?1fvQ)jlyUMfneil+QDjxtq?ie zMWM3B0eG34;lwqPctUQVmrGi11Q51|-70xVH|gPWnM_v!;nQCvi*y^H__P@|OD@;} zrpr1MuPWfjsjV9o@a4J|{5YO2vCI^rT~76=2)*ks;;wN4@HD+j$BQjK3;N@ADyyli zr{Iiy-&`E0E2z$4w_DGkc8bs#|1qIyc%UEK$(r${IiMBH^{fWGrxnI{ z6I1FSw%vnkbdq&&YMLe?7q^_9;Fu0$81-51aNVLi;f!Z8THS=yKT{x&AJVUF_4Li; zlGR!64p_{R^$qq&k6<-a{W>nS0HBcHy5wV%2oxp2oDy}9B{}9xXTAG?8n+!UH5u54 zdAi`Y4h37~L#9!5tli=X{V!N6ti}y0|As^r(6mg!+Msz)yY2IlGwARY64ro0U8Qsx z)TJ)LKv#;-Ik<2Ub)J7Au-;9@4FtW0;MlUUXOjWTwCVe|lg$qNu%ZKsTQ#kgLZbWq zRM$)XuJHd2xpTJaXue!urWp-M5a%$C}I{O=h=hRGB^x7app{ZTVB19o=-X#wmf4wI!wq!qz$T#)63 z5)mMGbG}`ylmBP|v`ll%GFA$}*cfsRs`<>*45S*il7ImNp3V9Rubp8Dy1No#k=|uk zi$|lw{;V6fB?I_!mv_=_7ka5}$DA8#Z>5cr3|FzG60t;Tomr=w^z#6{@6Z~O8}_5N zwFMqU8{znTCKofg#0Q$m^-ONigEP6aK5N*|rC9+!j<;Y2XJ-Be)RgzT_*F|nPa5ug z0npJO17c31*nU9Cp0Gkn;2xCd_ItH6sn7djY@ox?#vJ!8(^jZ4}d z@6#E?ktJZXFFz%EK^VyODtU6( zX41s)p2;(&%}hEo>CU7#lm1KwGa1h0WhNs4aV&A40^&cM9$er02-!8k0RuVM@z1^y zR<$z=$-@pvoQfZ(m%lRvaXQ$(3`1~aL3Z2yc)uSjf}gL5am0|>R1`YAh-?B_3o!0a z$vi8l5oT`Jyx9NJWUdpIyFn=Idn~F9nR{J2=6a=Bg+huLTTsN3X%S|!YZ%dO$?O$i zCa3{NRmW;tCU=!C!CiGrFy^5$d@hgWENZ}G-Z7LZH3Qw2%W!KXxtKECw(v5Hc{mof zT!j-LDO=+l*XOk;vbx3!7x^%Wv9MJPt5}bjD9c-=XHL<_E(S<3aKhI<88iiTbeF5*n*?^_D!97BwYM*+Eo0EO~^0>YG?WjY5x8CRlNw1+*csukS9~9d^70vwPB#)dm-g zQ%HPmv+4xyx4F|)TFVmst;v}#kGTouOGuV&OE9i)LUYOx(r7^iYZEBz;G~Bh#~3E2 zb!hg$4``-l^Kf|{YGbu%Z+)bmLT z_WgNtJKU_f^|=iHFOrRCGoE^!8W0U*(Hvx#@t^>UyBZXefFmf;g?Mid$z1X@ZSD{F zhwgtI?;GEkk7l6-pBhcpwK@1EPo{gyb_xbBL1Rkb}0;X>HQS@yUau1{pKOvf@)|^12khb8Ki72Sk9E1mR)*Y8K9onWeAE%Fu`4q~ zm=UJNHM_RRA%c7>t}{k=kTMzA&i4+S1|V4TIn@6N5PP^W0XrisGaT(r^u^g-6km_j z&%YhR#SEoqSZ_*6A!(>bxE6Nc#33#NO$;ECn5Z#^y52lRaJ;Ce6Mk%T9EV#A_XurB zvk~!wYnpxS8TZ4>$D=cqqrC*Dn839RSEF|Fc1&{1ln1EuYy2sq7v<=sk6tCXpjtNO zKHkWE=n|J$hlC6M6}}bSt9)U(+Z{aq9LA(uDm!n+ygPMOa(qVm2asFtSiHl~m^BZx zVYu5W2(*4^!Qodcp9 z>s#yzS}Xo;r~IoeW`OmgoM8kNJc>L$X%&WsaDOM76QH?u0ss$mfha{>9bW2iX=^o~}vO=rUvn%3UIjM1Cc5pU6WZkBK}b(oCe4$a8{;i4iK@M0yGQRmmWcVInVyj6gq5 zpw+H@==XViF{iAe6|Dn1jv%6JC;K&gLr}RMhQZBjuuKoIxHC``F`lGFcM<|IJNOd| z^CJeCrIuU7&?%<>5AF(^Xn_b4OSumI+dAu%S!dHLT$&;@32$Fm6)*=`A!JSWUj=~m{5|t{)~5qKAI^|K}vrkJ3mfhg8ehz{5r_<7~+)&In7$!pHy=e^wdQm>FSfP3Zre(&8^&=E+-f=-Y zUdM3lsv0Wv%-oS#(=c#riY?Fu}=%iz8+s-{F|fJaQzw7_HpnL>c@e5p&XN z`b1=nT$mht0-2xg0Aj1Li)b?UX?;rOR0hG2<}h74JZ9Z0!O`4BZ@J^@q=Qu9;;TS3 zz;ienV+U@s-Npf0>HDs@RdGPp#b1p&5c{qIDki;h4UUlW`Vy6NJ}0YAU~__X#BaR@K=im*HAa>8u_*E?9z(``5%3gl9Rvq`&*oTVj?qU`G^ z3LZeubrFaS@duv>%!D;yELhlz;at%UPf-F+oc0*n6%nkpMs=e&%Ytf1cNf7}P!&cx zt7?Vt1jyAVqG7^f;6@0RQj5Tjp)xRkRUM_F2R!uXdA5L>&K3(~juX)o`cD9&SUQ>1 zFbmaTtFbBBUJXU(I(7~ZbAkREg9DD|kP~ZG#Bc?;EMoof6f9;DPeLk|iCzmi_%Q0_ zgCwD@p)J`AkONc*QJv*@Z!!JUA*Sq@?v-E$lv)+dOAw}SWAOpg=4hBl8A2L&8(Kz? zv=+e>4W0>kAAFkT8!9 zc^tuTn%-zSSX?9-mwS~VxybWbXQPvHg)7Gy*P=<{4 zM6Ag8GB@Oo>sxvX38~}wG{UhgjEU{)5qC`I(A8aRb=3P2^d0UtToh{&Ln`aUyr;%% zgg^>MVryJ1t@9XL9A`L|UgJ{mE9X|DI4CDjLHbv|+q!sB-vFH2c}WSt@?{WNpkf>T z+47I=1G7ZuGG;x+y5wh*@fK^s{u2BY2DE;>F;cnf?umbx#Had1ab zc+t$kxf4UeB1XC*#^s@i4KiH#CbI$%danSX22VQ*-1Y0n#K2%s9z(wtX;_26e-~g@ zr3Q?AObDx6bwS>smRcRgCA4Z*38I5l zQ8jIgQ$#7CFrC3A5=3DIhy{Z#M^Ea)UB$E0e!{DuwVG%a27^h93%A9By#mJ<9V9V# z?bLm336Gd;58u?lSap{NS07L6bl>D03)y(#ih^=H!_iLl=s=na9lLhN3lC$XRarZN zZM^W+6PXy;$CynAS@K%N<;+|vAoL^@;hg1_r(;sx`aFOMO90&tJ@$HrhMdo!O9CFm zrYjB$7Q5w~NcJI8&|u%rAiiS~rv@70CJp3}=p+j+g%rmHENh2_*piYxg(&^{6PrJ? zg7`bW@zJ$J@<>tDAiCH45Mn|rN2m^a#5tRq2ML-x zgzEJM$KDC;RUKNd z?QmO~8BkUGDzGAT1;Ms!hB&q1lUfcO&nG~Y9jIlT5rvehcu+|g!Q6JHjbIwv(L%RH zQEoPV+lau9lg2iviKeoL>%k1KlQ5K7O`zk;Sd5JD9z!W!X4zfAax*W;yDO9k1;Y>4&s(C zos?X2=;HqZ!do{BDbtp-TvgjJlp0a=CdONRtOFcQei5YIj; zTCWI0(!eEQtl?+@Z!Eq#^%&Mqzv~J8DU`I1U$5kS3gzga5}D| z!$SNMT40JEYudDow>TV!2Gk;0CsRbkE}CuwaTP|oAc!fG)__TE3}VPIiV|zfM!-f< z=y^cX7sC-7d;YEz)J&n#C&ncAIIDyhp*pSld?HisufASrT*Z9wYGa}aG+iZ@qim!o~eZ9hU5 zF;_FoBT8W7I0CSjOF&<{5-=E}ZgbqG;Jy}95u?!VMzki>DZ!!v&jxUNpz2^&LB2zx zA!T{NI6%7qoTBRO9R{+i0=9h7_mAJvJ;#M*hJkfFd(obXi@L9o-&6Mi@j8ln|)} z7qJlf47BdBtnsb?I9wk!tp?Zwc<1D}IbyxA+Z#nzVdDx7)8UMvd4NM!tpyu}m>B4| zqLe6Zg&puZQ9wg<|iLSyhQnrvGol6@+o|Cz_+rq5lI)E1es5jP-)kIY z@uPQn$}Dru<*o}g1Dsf)(fyUf*xW!XfUSqnfq6pC+}|AQ%_YtE9&o+waXL_xs*(FU z>E>Jk7u1f_knIBTJ(_}9PJvPo`>q1g(`*%%RRE7OGToYm(udgNJ_K7?2%-^6drW^P zd~WRbf$e;Q&P3*#uMQ?UZ%0U0WB|_%Dp%2-v2#Fce9V*P_6Ge2lPg_VY7tOMUfw|G zjYMoOWE4EZ;&u=6Eds&11*F@{H8&q-qWj!^P5k2Bp8fxB{cj#u8P;D+Gss4;=&DNr zsJA#dfg+)Djl(E4!8MA@TBs-JJwYc?SDjE%L0;NzE^{+ZGH_M{qfryURkA3q-yW+d z7;MeP9XwUy;bFK8r-5PO<7}zvn6Dc!D9&Iqk9rNxov$73z7XL+2@$5$(HS5_mm#FV z(x0qLG-ZgTC=rc)=_}MFUf&l1D0kKpdb<&DMv$(5C>kF~sypjOmNQ03e0B5!@mdpwLgce?bcoOiZALn&R+!t*<)0?T`Lol@jVF+Ms`?tZhC=DOdn9>`@i)y^t^N8XUtH6b-&{ z&x<>-cjRDth}he{BU^CbC2v2WQK18L0luZ-sQU+!{KwQ>RiPUJvyu9?PyYeWHu(J( zGQRJ!;T-!5vI*4}(RDxMgcjG1M#p7EpN&;}guzOUV_(kJ+V2?#s|xmm=-S3s^{f6w ztl#WA0$p+VS-vOu0SSib28J;iC#N2TeS{6R{TXI9frN#fLY>^#O<9$d>W*xoD`-M5 z@S5la6l_%dYhb$ptN^u}^^U6KUW2t`(eb9J3yNjMR8LdRwIp+QRfcf>JSe=?yJAQ? z8B|eokrWm~v>itg`qwk*`kmBYGH&Xj!0F;HqFkzipp0*|(?EkKEDd#V>FdJ{Y~2Sc zMk~0gIfNE-afrb_twRI18iE|yp^|4#WOK_w|Np9BTMHIEc zsVp=E*W*tOMR?yWSac=PdtK>66 z*hz>_P8V5He<$=5jSKDd<^opK5!cGwh}fO~*?2VAq|HS#JCCV&SUh7d7hm`sjzQMN zMTe-aeHOw{e4K`0#FWhp$X@ZQb&<9V;YAp90t`(J91ET2MHbMOvj~`06lq~BXaxnB z7>nQ%KYo6x|* z0pKBF1oz004k5tSH}ZS)v&e&;9Gmuxvp>R{aO`N$LSk3ekg4-(*rt z^^wSDB47R^;xrG}39wI7FLte63gaEd7VsSH!>!%Eh!iGo*g2iKn{u9uLSD5#5L zWjMPS1or^?HmvwMB*d5`f zHB!g#?mU<)R}nkM-Z7U9q&L(+G#TOr7OuIjTTWC`g6qm*N@FGXrUu5jh=W3jj_Io~ z%!evyqLqMXL@UBe9}Qp=u<%@#b4lm&I+xX)T3Z(hI23m3TsCvr&Sf{3{aoJAyt(9a zIn3oam-o4R%;j?~Uvv30$JATM#X>F@ah{~?3A>%E;N`2g%z}U}V4X~-G z>e|@aatdX7Y~8jlIXh~p|mRqd(;y&$-Y7E*Rny$@k9xKk(C6ySp3 zfp`w=ryWC-$y*48cmS3&?~2ibbhn9ttmpYB(GW1fm=pm8eTC2;hTyIUVsw2NLThKP)Xpq}m^N}CC=U;+bG9L2ZNiBxj5wQ#boUh6qI1(jmY9~FGYpBei}Wm_ z2HhcP9h~hran$6?szqc~e^0(8uC8$6F|tv9_A?xrnGD7mud(pp0u|0FQ}ht~?#>p(19>5t9ej+nw>txV~kpFLO$iR=I|=Y>yXE z^mgHUx`Ke81QHK7wq+iLbpQtpStw6c+`W2;wcW=!a;WrOo;cd_8nBha9QHl~)C!B2 zJrQO$TY8b}g75$@`-Qw=Z^;(2$#HsH$Z;X>3;9^c=R&>~@(0NCrCcoKaw%6!xn9c6 zQf`-Wx0J?Gel6vGDGy6|T*}i@noDUd<#{RXrF53kT}p2${iUvH5L$SxOE(m*ah18i zft1>SdWnMv%a$@+%F9wlOBpX^f}(I@JFc&>p9p4&{+c5($d1+fl!+9?Y~x&n!e(4q zV5Ph|ZZ^EGV0y@kU5LvqYy`OO*b5j4DF6a^t1bNvxuESWVd|VR3O^>M&ZK3bh~MzGe~D_D+Y26m_37C(GlT_pop-@2h~$FZi!bM zE)E7G+rj-!0U>c|h#C*oP4_NI9*^HD@)k;;R+4iDMV>*p;H2B5y7L2nMLvpP+*)Uc zT!S+h#VzHyl=r24Eah`4UrYIe34fl#d6!(KP=J-|6vIGnQ_M_hr1C4pYb%h*Va1lG zRGO)@Qh83LokF%J-Bfz1^ivt6GEC(ql~F3=6kfn&nnKPdNhz`Kv5mW%(-UtGvF->Q&aSvU!y) z;Ao5OU8U*+pn{vh@FN-kD% zxst1uT(9J2CATZNTS;RjzgBX;l82Q%uHGF-{a zN=7TK92}&Fyl935no*szp4G{{THfMYd2Rhin{LtWy*QsW!53 z!c#asSiyx78f_tXADeP+^Z1Du)LdZh1J~GwAn!lU=joJ>CtZIgQoih$m&Q2}Bdz?s0c zK?O$d3I*tVy}qWJJFoGv0-_TD_)MWg>Eent6?CGBD`Hv*nFySdl3Y!)H50;_Ly{?N zrogS8)MbWGo+K-oqoY=`TuHi;*OjbRvR=ss!$y~5y>W1-VqWV*VXCtP7rm0*O7<&x zTLB5@#Mug0NU*ozHqMnzArs!|YKS$7@7r)4VLg2U>`>ebByB|@n&zLC99Qzbl8=>q zuH=e4v^ z#kF*i$y)kr8LVZvmY21RkPyrbX9r)Obn^|TUg$fdvYbobIR45C2L@po7OR`oO?!4Ima$;`NP7 zAh!}|E_Ya9AZ+*5){5C3Skw?5qk+c8ZHV4-JUQZx4=^9hu-(TMTm`@dtrlGZjAJax z?ebm;UC<8(7v=0Q=j#}IICh~_4h)CY5-ErGiLpDW06xN-WsCzTV}dm;fky|b4T#yn zxCmP1LO6kAk^v8U0F3_!+ycP|5wry0kc#pIgmJHWqz^whBtvYs2eXmqU36nJGf+Rx zc=M(suC48WcvhQQ#Ml6TnA8cp zA|X>q({u&I=wn5CFjU2Snl7KF8tmZw>4L^|DAdhe4R`s%k%b^rQE7q3VhM<$V^26n z0^T$7n4&OqiJ?Jq)gi#O))Lv>d!!Yk;Go*CvEp7bPGez{Wf_?s;x(vBgpS~_)ByQr z!>Q+I?A~@d;g+rN>Xze@=Z1A1(6$%36sNtTH{=?H^}8i;O(G-5{^w$>fs&Gkk$T~! z+IkxZUn|_4IwI_+CVsPQuwxaPAqwiJ6T7yz1ggiPL3m{W3yijEjAsoEz;SJ3ry=g; z8VE8|?hXpkC$D&8Y=j&bA!dFD9l}*7$uw>YnFhgaK>yK#(4~Mt%qS>;(~#<&n>LAq z=+f#W2})yNTq$)5RzP@oZdKZL+Gwih>G>M5P6vVU4bq)n7oY_y3QEXe+H~8 z=KD~=>&iu3}tZR_^hTs(21@yT59mgfsD!5k6lCv2C zCYsP7-q2JI7Z1Y#!R0EBt1gpYBr)!VPnPnRbBMpnxG{i~HqCOzsO9qjOPJ}`6Wnya z6GVUA8sKWCxBWiZSBPzGt?PVkCOcbBU65(GB1V`fx-2jxQXLQa$=%(owV|$^8Fvl`vzm~VPWZ)AaD^TJ3#TOpWwX_HOHO){s&|q&t zs$PPsiX9gs!Vm6OjlB_PrVz`?`&vHM^0}6;wfw<=JKxB~MlLsUwUO(M+-&4_BX=8V zY~LjHYkqnKzD6qb=HuwIaokh3Ab^WWPEY%XZJEd<%$d7$hv^ScI zr=#r0JfezxQ-vtQ@~84W$Ag!Ri)iSEp;ZUFz`0p3cO#_hLdcRUIB2dJ?#D*jIe7{z zsolosN}ac&a^Fl;ULG)k?Lq${LDX|m&FYrIQW3Vw{ACK)#edQMXesf0@buZnajqp@Y56P`e9 zBlH8XT(&I?KKJi%r`0N_E7z*PF&&J^pk)k3AEF7@Uuu59>d_GAxB7{`%6%RF4L$Sc zB%{?|P#O03d9DEh=aEuM?X{J z)BYu8b0e*dJa44Ek0mJ>B(k2&3n62ebhhGZo?2aMXWQa>mQFShuk-=LVP zg*zS^=8erI4^|>*4J1C{_t;X2JNTriqzpw?a7;&qO1wCvZZ&;-q1;*pyK!9w-{KCx zE(5rMsDL$tQ}E^#q&)$JM4H!97^R(XksP222ZIEN;2|1ytH2ZPltTCXyCf_Hn}KOp z(X}!z*4-t=H>?f|LVN#xA{GTVA#mXfRhqvkg?;s}61c|vZT{AZzopj9VG>!Rt zqDu=v#O%6Rge9N58wNMK+phXC^7NDXkN8hCtP5q2SOQd|!KbUjNM|K@iX!IPgDeWz zS``m`bKKa)s&`m=STQF8xI8BU_!eU%OrRKAn{62XfwDYP0+`vJ60d;L21A1LkKjvr_8#D>_y;O#9KN_z+o+*^s_5hYz0*ragi?LTJd=ucZ&VS77IUf&z znYSM>6}(+tyeDR%O12_8f!HP=YO1#!|47P8o2C+O%a)LiZZRr-9<>Ojph3t9^$C!a zz3udPIKi-I>M^%EsngAIQ;%n!VC8UWa8iB^nAH4a$IzrAM%*2oMHLX%sth4b)WdD8 zWo7bjky=lB^(xb=qpt!4737$LiD+2aPjfO(rHa?VNq>W9{0d5~Ft%>E0gGF$FUk}k zrBXWz|E29#hp}7rw6t~$K_GHq%j1OF#$y3y0iL5!iz8po32^54jzGnvcuEos$INo| zNl$>J)J?5SR{?=v9j`CfsS0umN+#BiQGodQD;L!r|NmeAYm1wN^o(Z}MQDJP4v=pTKw(R*C3OobF8zTM2u~6rC zwzs3)3Gf!(ZWli)mr+6%d5is4mxB{5d*gd7(}HuWO;rbv31Qc*<%4nNh4k+X?-u7U zP6?ILD(YhbQG;;wDnKm$3hp_NTW{2<*3*&8k>8ua%=gCMQNG!n>B5V)9)~r6)!o2Q znJ};h%uj>{(X&mc?eEjX`JvF`x1z4Tw&P7Yy}?UVb0&u>Bskd+Wh27GdYp#Aq@~v) zP?q|baXe_9mAN?rfnOwS&zETx{xXUqR{adJ6#T z`9n4h6S@?D8%$nUp%j3UZb)sh&eSC2=?V-l5MUVVZF2$e1HOP9>??4ke4)$-nm;!B z0T_9}VF@|W%%dC+imTa&9UKK8VA@0!$MrWTeh_=4!{>p%RsSg1)zSSM4C_66(4$_Q_hLu5`#fhWNyn64OMi$a8LXyCyQ zs&f(v9Z|ZZz&M7AnNO-2a)=V3nfeHmo2@b5QKY7@PvcCDV{n2OX^?vi+MYm|qrcaS zDOu|}xcfGBsEqFUcy^1b_7z9|#E}C8@3wWLaW)+&WHS{~vR*z2**LXIbv$`DW-e-M zE|IKm5o4nuJnlHMe;LiA-$CV*oa1*qzwzJjG&Ro^%Av60V>d~M_p*2eR#Tx{iX zD_2{XNyyDsZntu`#XHup`&%Sy83q$mCR^FBcgMx@ zdWvp^>RZOZOuIk}!cyXw6pcUGL!ziK5OA~r*W{*T+J*JV7G^6|$U)(2;O6LXSUk!S z-&oHY&?nVAahTLH_=^_1!xkd`og5-m@t=W`8W{oQ7wibZ^@K``?VL^sgr06c(kuXZ z#4|49^zu}XR;yzAbry$JE9LhI-ND1s%7BH+p2ZzM6_b!_h~uA8a*jnif?4uH70=?t z2l=9b_;D*BmQVqKpI1+$c-EqV3H+Sb*z*;4DwZK?Vl|6S`QVgVXiUN2K?;?h!4&fY zFaPCd*w@{Ie`Nwp+tlf@eow^Q$O-7w`JN2B0u;$#dIK92(~{o$x$3n!y`IOM+ODmDfC?5j4RSXEtq1~B1s8=n}-6+Drn~!F+LGw zK=yPA7o8$PLbuVugsI573fqT=LW=sBSSplYfr&N~1(I(wo#x;ipPpN08}tII@Dn=o z-tVesTnQwGvc2L&q6zUq`WZqu$+85y3@(tG2{~N5P z9m953Z?dX6|ANOB>;(9O(Qu!v;mlrMx3b#GdMlf)Y;~#!`vLAqo|zYSj@G+!z4qm~ zL^KLt)UdWGfcW@_G3>UK0;8E1FX#KzL#zc;xP{>YV2a_g@vD*t6z)w}jouam8h+07 z=%I|&IG8o)#5TLe!W4#;V`tRCZ{r7pNXQ!LVcNDZc``YGi@BD^1SUj?Ax#2E*(uJ};1YSkUX;M-2`77te5rC2kNgQ+he3$If4)0qOT&%6 z0I;DKqAUkj2O*yMgz7TF@7cwbtKV=7i2n??>)nKYd99-hha+KL=V!`$c?#pd&ghl( zjHW?n9ksIbX!a@vtGJBtAP$NO2(mC9lJJDQNd?@K+gB5G8E3~ds8idr%O!=c7Qx%T z5wMusY!Ancxylk8m_^lqAs+hOODnXFi$8&5*@3AGX0eq-0oSIiDg$Tj6#%P)M0rTX zij)Ao?Pk0k<6KjM=5ZS5D?*ugyR$Zn827rJExMeT9zZ*sIF6AONArl(eKp6^`UQyQ z6A?&XM0O>!Mb1#28-s(gS*K8}*;F(PRFCx45yfw_-4PDd0v@bn6k|!j!>KMlMNIqE zWakA?`?dGCRoMR5L-c`1^zj8o_%Ub?GNqLB6&R!2C$xiSgA~7<(@KZgbxd*2xRMuI;#7=})MX{CcNDNyi+M`8j zY7v-%bj@6*W;RwmT^BoeS1FWS2S?}NBpt{eXBcgGmJEkPOh!wp^Xn9h$DU3}A!@HC zM+tN#7_#eB;=q@j{{=!;4Nb%X6hKH@1z|b0`v#S+7Y?t50+!M%qQf6sfHvWtLD%|I z6ka=NPP)HpKr4Od{mU*f4d=y<}P8*Os)yug9e0IycWeQgSe zyY4;1Rj5<=vHiS=^6N*~?KFy<&t8u?7-ZZ>@I&LSq(EN4)Uk-g>qr5$%Y(?-QCMpt z8XVbIxE`CrMS7`@Hd(#%b~|hrGKGkkE%<9<4pGy)igGAq99CR}B7G27oM2h>_gHjlZx1vIsvoxm8h@$?Z<=cG7_7zV_~;v6Ejrx!*zXr>%ws@(!-|;6vd*|8nrn)1Ap_72W$bSWQa@Bj(fAy+j7__z&zdOHXmWw4XsPF{90+R1n) zlO6a`ne8M&HK_vws{qt8Z@v*?_9tC;<{ zf~+nY+=98*0QPB2+XTI*(Zx=d*77c1_k^PiRl89UzjneYR1fNo35wh$U`4T1>@VoZ zsuMKT+fH{8#wFy!g25Q2FN*vJ66TLasK+f|4YhqKa`*ww)R4}6ldvA6J&OsTo-wc^ z7wv?9MO;(i9YmD)Zp>Iwi*J#v15B)POuvG<1VD)#XHfj)zN(|O(k4}qC{llqEjPH5 ztY~k9U^`7nT;K6i{x=UrJhy{U;-~CGgpS(-iyTF;WDk= z>rPfXS?^#LB-@?rF!Rmj;Tex4CRe5cf<@I8mAqNkQfOT6rnpUzQ>}gCGkvW&K`U$$g7gfgY0gCu@W|sF6oU9bRPH`3H}cg-ZMb ziSKr!XE)99<@U0)@8_npHZoFD_Gdb;6^U67$AmNi;`*}%I>xZ3QDUdL;*8lUNl%eX zZ9F_lgKKzxLW%{j`SC>*I*})+w_R<)6KRx#LIauwz82itfhWPIrMQoFN&JKaPTlY8 z9z36{t?dvk<4H~2_fxwKf0>J}g7B*f#!-iL9G?=n#k}4bEgxxfep!!Gyq-)uB}-M0 zaSI+Fc#{2I-u9AVk+KJ3@XISMIbe$VH*X$xyVViv3w=~!9jSmDU=$CykE?)H*jRy? zvv?;lsKap-*llkGtD+}aPyog5z~A@1d|-|J+{@Qq{_L^zzRAU#T)xTGn_R!i&70i5 z$=#bY-sIPt+`q}gn>@bB)0;Hkr1d7xZ_<8~&YN`Kr1vKMHyOOi@J(LcWb`KEH<`T2 z^i5`Ow!S29w!Gk%-v`TzgIH*zasB@0Jq7QF!u2bC?0Z783-(ZYgqYR=nT`8Ms-rQS z{_&aAfcO4_5pIASCH(fYx^FT^ZQo@1Ch42JzRBuM)^D;wv(3dByzQJ}X$^4=@7`qp zCU0+&A&)mXyvgxR-rwZoO+Me`>rMWkd(Jbt$e@oPSD9RA@a=;~h2$=iMkc>9yksvA znLK9ll;QCKY(VmyNjsBHrk&SPT?JiWsZ*6{&z=C;3-CZR&MJgeSTB=)1`(?aGkHN_ z@H90-y)Y#8#n6i}s*0DpXKtg5*k2yVkw4T5?3kt#m4HV6IOUdupnlS|i*T{N^bt(@ z5XK#vBf;IVYb2(NYng_~$RcNdA&{usCLH->nh7OP+yu2WsLJ8(1nmo8y-{2 zF&^J>__XTQfE)OD*wX_UQ}c-z6VcM6ahyRt1_Rv6u&<;a6D3agQC)>pZj05~p6$@S ztAJQA??SRNRRx6iOhTS6$Zzg~mtX62JIi+I%mKJwxu91`c2O2bmdQn#NfcdLDPSbo z0M-G4nPm@vzSn{F!MY0526BcYSP@t!kKxJGPhG4g#hbMdKSVK4+1;@Zm;B+WP%ZA%0hlX7pZOg_Gc56U!*)i6{-Azxi(!5k|{Mi^YC7+={G2* z3NlA)P03MwHJiVs)!JZ!d{dcP3{|2a1m_)0Tr57!bQJ??>Wqbi{&0Cziz(UBl^TCT z$vmz3HfgK5e1|L2IqtFcbDiRt4kx#2F%{4u%56v%f(I2_g?SmAOd(;`*V=Uk=$=r5 zsHedaq)_}Sft|O(05f-?E^n}axTUsoaJ{IEOjN9~xl{KzlAasw41_(>k-0-r0buj( zID(^20fz5~l0(Dh2bdz2oTpS%( zz4H%vLqw33fDU=O(U@D!3IOa194f~S3Whnu5^R2{nG2toR$ucDWZS5Z6fBl)pbpOM z)dg*Pb&(Hvs6dU}6UEo~v{pUyu&Xu2)2&eqOumbCu$lV{f-s!)fYjaDsP&Za?6}Zt zAvc0TjMJpRb?`~n2|1bqRt%d0*4Sc0gogyzO9i5K;f7XQXjDZpfN)j;SC|EY0X zK}O3az;T0F1M}DfF6L>v!&@!aDBK3l@O6Bioj4wa`RzluIryW&R3b~ZQ4XOmV)D0$$;w;Fmx>5dRh#l4OX^ic_o83M$ybj=k%*Qc(q>A!7g_1V3 z0MnGGI1ZO6(GO@XNreZfQShA_r45t2iVW?jBA8`~1&ng5gHK{c($PZi+`dofVayH= z1$RHI6Ui218*zGT$JyLXAXkP$v_rc7axqrT-V&qQTa^9;=yJM%Qimh+5cOmbz18z|2C<$MHEL%%@AIt_NhyjugT-#xPo*mffr*A zi(Bfh(Z1;7i(bkdw6q?|;|>_mnh6o!kWf!>K91)jCW?hZKrX!FmlG1F8(w8$XUSU;NZn<2{p)Og=OD%H&T5k$5f_ zxm@PDj$h^at?{FsV%n-|O5%NXD&7fkDu_Dj>s)Sfxy|J+hjE_bQrJu{dQnZ%%z(Y&s!>l4Mp&ZmgFF6igW)nQ(%l0EnuKobw zoelaWze{Z^Bk+Y>)5>s`#8VH_@>9E@b`fsAFzyx+RxM%+5UDs=BZ??m%|iu{&@gl* z#d*c3sMH9o)dYXD#EIJ*J|Lr8RV=MSNo=kSc!!P;1Qm#ghrp{aC-?6)L^ap(*1yV+ z*J9a&-(y)VyHl}hX`Areme!FGE?0V&Vj$*L0g=jPVukJm2>VIyJeJd~DN%s^IwoM| zrBjJB+sh?{_tZ1cUUe^1Lr>X2V@1r&_XjdCQHnbOVW8tRm#5_5-<{IlbZnW<3R86S z5H_p~ajJ|-abKay?7$jBne-HjMHc!3a6_U6KLyju4xl(h1MDgccWH|)MB@Y%jouM!n8xrdC$rWF{)90-UVzAY4*cz3CTRgaA>kiHEa{dY3w$g5T_C z3iP`@$9krsA*`2KvWFt!xgKL2j0KfUB(2jbAf>{7naov{Mvtmkv1~o3iJ>lYaD(>) z1@qvUsGN>auY5(*Ld&TPfgm)Ul|f8av81$=C&1gXait9vFrMZ7Yz9<-^T^T@JDwX0 zW;4m*pw(qfv>(jnP-sFGM!K2~ij5y#-O{b=rZP^e_zez?M8j*7v0OB_7Ux=Bi({7G zBx9CcSa7Xj*#pZA?AXvf@nJ&>V8{8Qc%y20$iPMC2G1slb2528a0 zi$Sv)I$g?u7{HNJ@x=isfHDD*O9EL9)^LmHJ7O?B$D1cC*e&XX#T*rdv6QoG=@}`< z3$QsvT3-o*Xd$`)D&c3&&MN0+Cb2iL+d0CG>TCfr2ZNX-+Z%+#q)o#LYpDyW6oDmp zgL=GwCAa_cA9SyV)TtFpQ^ie=I*OFk_qC%S)1)GeDBjOwNVtU#`$vh?oqesmst2p0 z8bNHbKIhnA<*LL1!KNzx(2=+VoPBlhIYlxRTINA1%(?<+9(C|>4Q;5$%Qy9?z_lI~ zSg1z@9_mqnYdtEkP><0!^{BwL9u-)qM+F}0QGshcDzIDZ3|{&LjS6*ER(xUGC1bg) z%}*}~uyI?&-eLH_*9~w)*^Or$hY(O6sOOL4ifXcS4quFD)nUE&1Rt}?09ZhK1sA)3 z>A%b_1Z0r+5v+cP*snd+@oJpWjdQ9^ek`AlX70BadGFDhjj0nQ)Duvq=v z^-GQ?!*OU*%mXffAb7FbQebZH*OFh++du|xO0TpTn5|HT*e_--!X`aJwgOf;myHhu zwFp=T(+dw5pf%1Byo`k0Lu+C>oZui2NKF`-Z&-voC9~Q2Ct-T%Rjo4vpn5bmrh5sX zbM@bW0ISDE51i0ERZJByjj<%x;!5;o2x%ayh3*gQRU)hblNwvfDeVbxU&@Z@%xvRg z$9m7LEpYf?!$kum;=t1g8jpB@-+YGPV-dXhDxgL1=1&1Ff^eDT3bW8{HlA3B<-*Kt zjm-g;q@Jn_!ItOl4b(VVspk6kzy!>qoglz1(_Z(naJ+qGTMw3cJNFt$qyACucOD zM5FnRto9Fw7)+Qg;`V6&Jg5=`n9*Gv*ZK&k;+%U69EaEXzGs{O%9IpwE2#JgRJ}6} z19H$Bd^iExd?p8Ee#!$axAHS`HUSdS6z9iql^Td#Gobh$K#u3~ycaKs?ZXbn88{^s zIHF6jZNqOEOl8o01&vNk8z(M^^PSrMj@J&rL1Rl-L|g{wNj@UyAc%;gC^N(4k02bu zWr#bt71wT!L$W!Q4=A%rXJ|n=!Vi2Hi|Bw>1lMl7Ht5_-8t6dv8`~04%{*qq&m6N| z#+KYC)l$IZT1Ay~isT8nY(uffs&xmE0p%dw4?>iabOz=)Y{AwP_lF0k7N<-b7Y-i7 zykUL>wCA)VK+MEqUE$NAl);;Rj1{JL&y*`sa<8E9!Ym}5DJ-I$<#Cv77;5o8b-vv? zHx}Pf(7-vS`bT#aXOJV|Q|M(vl&NpA>m}v4i+(5;EpJ9(A6ti%(?X{t6%IPFxtXDN zU{`&VXfi+agOSjTTRX+B%GDs=gGhL_n_@+Td9)+b2{8qe5FqID)S_5IHPYXcQD%8k-GE_!Bp*frhNK=j`L`6@UqXd&ZMl3w4yJ&={zxV*pE8V{b?@Yp;&D zt3+?bC{|a|rple+CLtGS%Pn`a-6zg@=A=n))=HmMxdHA=H~_jK$xRBkuO2q_0c^vx ziR5`ZH&UlAp(6?!Ql>nCqZ-xpd<>I+LnjPK64_+*^E-Hr;;SB-*v5#iH*krVZtGv# z&{6-Fr0ir}@q7_a(?U)k5FDSih;1D;^K=uZl*1{^^iZj)%;K#>LXy3Q^J`{15OAPV zu_T?6pPwGAQ_MulhK3Jo6?n^jI*yPntipo-+4D6VrqcI*j$*FC z@#4pGeAwu``v7<-;9Eyj;xF5aO24N&L@vi!_T{ED zg@6HZ1q(qg%V6lKvj@_54n8~_vHP$=R$OA4OV96_+A;=Az#(RND_HDdEc3)o=ozK5 z7;_HuQ>rqqaC}yq6ke?N<`SS5%`GFU506M#w>)XMLhEeDdyWy0C~Y?p`>wqYS-VX* z4e)z(=~Z483Jnp*ElYfa1-(IF<;%V>L{sy`>wG3f0Hs+@xxm@G?i2K=9(n{Z9eD94H z6bjGH_Io~YLH3q=DuEdE1b;gA!(3F;S)YX=;sz2tKc*=!APgsN{l$F3iG_oOGWD}A ztksY}jn9O<4`Q%ar#wm~=rF9M`t|tBxyxUy!&Cmke+pP8N1%d(^Z=Da^2&zIU1&Pq zI(CYT4`#CQuF=Lt^Fn(hE83zWV6vrXGy#N=yp>RMbXy+bDlerol%0tcCyH> ziaw}QW(NZ-7vYve%taaR9Uw450k{#OmPdAU&27x|Gw@SH+yf4y_$UN6=s?2k{0Zsq zu-Gmg?uj32vU41W14g;n^(s=qYXfzYA?vVAaU48yv0@a-;%Mub(*@lwyZC~Qhi!J+ zzxcG%#Kmy~rg{*?)we^S!Y42kZ~}vFkH0jJim)pW2S8=1cO9X1MDWm^ag;g)nxKwS z%+NPNpqnXZE>oi}5lPh6yWD5E_@Dnk>VSI`SHMn9JhclRlDUl#4YVK-CxH9D2G)#m zJgG{S@dWfYt{;DldpLueM4oV-3k=4u&u?Ne|4A$cHF0bvno+KQ7gkCeAK$8DA=JkL ztdNDs3oBb`#`jP#Dtv=FkZzU6tzLXVG6AzAHQe>DOJRa9me@{FRHlEi1{CWL*!BAq z3uOM@*y8CHhLtz>4y_3o!19MaY4zrFYGD+#P8s&r1I_Fz#d{}++pnJVIsS{=Yq?zF zS=Q)eOSJj8eYXQL$8s3}3T&7v!&jD;6lDOe93Y4TPX-+;y}5*}z(^YoiUD(2253xQ z#w<7z^++3t^HY#MBS4Kr*UN#H$sK!ClS@5DO)Rj#`uq8iSp)vqj9=nmO$Q}Jx`o9_ zfKtqbsSNOSMIrZ_!lp5G#w zu?i5}IIX1n2F2y+8`PQ>GN+j(+r@aHeiqRwJfOfsM&b`6^cEDt$XdU!>b*H`P7?Fc z$W?$$ixaPCH&XngQUnjwxmyMLtIQMXX_XS?m$KvYjF2Kja7GSTU|FiHFuXX7C%EJ) zTtPvx>^;qPTP0(^hMNZc1Vs!b_zrqIrhBC?d7-{(WdVt;P=#`t*h#o;S6nJCK)1YTVMzXt$%ze~_h$eu4w?`;-Z1F0^IV_tF zCq%62KN3M{WdFZgm#~cT&0t7Pa6E{7Fr*WF@yUYh#6WJKaQ<=tn;;OXFF2=RCFL(h z*m1LEhzaiT%Rb_-o+`0LD#C(#7&F!9BO+`Zzf{#Chs5EAiVl~# zi@#wlhY${@(G2z1S84^52p^Wpoj83`To<{p>SDq2pv!fLHNIPiowr#y*+Dki{MZu?%h`(Afn+h9ny(>% zkjHzWaW~i#8yma3-Q5rG_WfhF-G9KWKuVs79;`qLD|o_EA_XZ=n`jw{*(FkX!i3xr|Nfq*EVEk+teQd#kgS)Ohk@*7=4TFF zs$`B~K{=lpw#$fONx04{?zc6N$aVqf4r!Y@RPCl0OC`oILAd*1?nbL!Iz4Rm86)qX zjU?QqHycl8#dks!#}!%j-KC9TS=>v9h=(p6;w6r1D+~2kWq0pOK4!)FeJvJ4@m+5- zg*#_F%QEZvH}^E%#C!?)R=t= z5x}k=T~nXDx9$HC&2k`lm5mnsl3%3D`xS0xfqaAxfXB#TqOBZ;ib7NiR7ve1Fxb%x z{ECx1HEWBiS)DE!z{y>;v3TJJhqH1v`xS_$pJeGT0+Pnt+m8{pV=K3KMy?GUy)c%L z&Gba;CRz~56?ftKh6Ryz=hQ!kv@IXxGHCk~sv1UEVz4+O>vvsDBWoWq(F7qNb%s`nH(g6@nq!`YKR6} zngEZo)2;-|#2j36t;2m0Xsa4=qpN|~t#<^?*xX9oF<*>{E(JZ{26-1v7O&$Jqe0pi zt=q&nE5kcWmU+(WY-J&PRSTnz=3C(?mn?_74pJUZokORAZ{w0)j0YC$?y*rhB{ZUQ zoJ4T|8kxYqMPbdv?+E6V3$S%?Z@Kd z^0|0pc~36qd$?ja%NZMpjSv~Y59?n9mO@~0?uZjq^K2KBXGv}K!+a0v;6?`Lb0}<& zM)W4^I{?Bg6DAhrVJ6{N%Tnc41|vfxkLx5^R(Y?jv1Acdg;Zd2gM4z1Dr^#d9>s({ z#?^1^nF(9Q!q%~H`&hVRENmMK+sDGU$HI5U!j7?U=NQ{i!`)+H=UDje80+KMf5Yyv zaPL_7-dOnlSh#O2+&>n6FcyZ!xRZ>mpU z#=@gx;ow*}G!`Bk3x~(Tk+Cp37RJWH_*ghP7AD5Rz4|~VMzVYz4wjT}OJ{rDrH0(GU?mQaq zIvVai8g?EH-#r@cIm#8UVfWE+@6qtRqv88U!+l4?{YS$ONK41RM>cN5k0BFn%-~ zJsKvChRLI03c^f;%@bkE1U9X3`$V{7B5a!o+b6=eC&G6o!j6e>=R~+`BHTR@c20!v zPK0|V!mf$1dm`LB5xzGOzCRJ}n+W$$gda>8793469Q1}nZl07U-QFp;8O!Bxp`~G# ziJSlze1s9m*3OSG0ue#nTB{TX_%C|eywV3i_ixyA=-Rx0aDIZ<48*c$m*&6-_a}TWA5RANCenn zppJ%2o0MV%wNCCROoZyoM_UfZ;Z}$4QvSZl*lf=cbQ>Sm;IMfvl8o?X30E%pfZMom zCCjQ!CSQRvB`e5`%|#ihJnM_--ew$)1&#&hlYjIr<7bp4@g zeKUG$oERcSYKSjd^_{TY7>NcS|z;|p!(A_h-=TMC1`%tioM1LX) zC)y&!Dm|8b&RH%}*hs`S!Wb z5b^-2%aNW4VzA(b4s8WW0Nq{@-H~D1fQKf+o{2E*gSh2v`h&af)M}(V*|P2qZNhMu zL}ohE=@4l@oe+yNs!a~L7&*U*T~27VL$#*S&R@N%9oF`3PfH)|sGSg@(g~3Xq!aRR zJR0VCJj}U^SQarikL=s;aQiN=JMGJQ_Nh1bU%X(EO?W(ls%P3(`Vgywh1?~;Os;ej z+IX%6zhozELp7ri_das5FDzhsR%WZTW^4PXf-TbfM-AHXeLkJ6pqA(Y&_iOUc18>~ zHpy#4j%2A5IkWXA>70zy2Yu~IKA%?0;^sKSH81xN9@oM&=~k6?T?E-@aN9Q@IddOs z?LPDlnW@p0$wceNdDz3yW+Lo$3bA;@nKnxsotfp)?6(mpv6A=aC83?!j`1F$?F<{K z01@W)3bm-Df69;!Xq$4pe5FGe#6WRC+c%!UeP_3?WW=a;(-X6>!&KsLC&G^=!hY25 ziSVdbk8^Lv2=}lxOQr<2@gor&#v=O#P>7W+JdN;0dzu>UK=BVvgvTbrVF)!5Mkm79 zL>Qk4M<>F>M3|fiQ%pqmalaG`gxtZ;`|iVBUCo<00ME^nd|^0joeZ}VV=`=;4BIEe zw>dnTE9gx!iQ#5en3ejXA%_Y-X-J(1d}ycOHmh{V+D4JV=SPU8TKV zd_>1Lnb1*^GWpCvrMzf|YiHWe2~PVnV@YCXKXBqD`!+!Fo7M^)#=a{7wm<4#Z4z@A zUp+B&g^?Mu+$-#J-XV+g5Y2-@=bjN3KDE~!-r2W@w#(Za!)Cs~&OSaa4@l>hv{Ozt zc)x8u2hR=&f#2+t|^VDWk9;bj^*rJ<=w| z+s&mZfFMeoPUpyPEQAEq@`e1=(cZi4o&!NJkl5r-?le=9dpFA{_Len*?O;r7Bx(eT zpDUGf2cOv9qmP*G)|C)!3*|JN9O7{uFOxgz7jheZW?hr-)?rQ**e+BPs^1-BZwEUc z9ipfSqR6UB-p~0;i)|Sl-eYT!ZDm7H*Md7?KLY+Rct|2JtQ_Eo39Lw=*KD@?=$Hy0 z+B+HcO@_an3_o&&QKvW%v)?_Ea6`j)KZ_DP<+2X}vzR`V$2--4s-~jb| zlwyqf+>k#R4o-$cli@K0mIe^!b%(h7frc@mh&n}EAc1XXwa$m-H7yoPv-mo*gk+35 zm@e}5qAE4cIZv`kTsKBF7eZXVg}Xt=WB)- zqjbG-E{tW<&k7o{-Iy0AAvYTZZ-dDm&Smuo?QP19UB#-cv_p^Ng2fJ>6TC-TIPaiN zBb&jW!^gR#$~j`0whQM%mGNhXDlN3!&F7EzOVDWSfQ8gGF3980$D-yINs7+Jd9XUt zra4jXv@1y3V<{U3vnGM;%EXL=qwFBe0)%eD^q}F&9tSmkE{-bv=i(?IFX1yXp)2$8 zpd;hCe8nf7kX^d7pcAACxzvu4!&==jv7O68#dcn9U}E3`kUHcAAUjQV0Zc_*00KjG zEKEN%M6O(`O%gUaIG<@b$fqFqVxL`UVB(B3l_QVvT@k}9^Dv-gcX4GvyAy6C^X^G0 zqbTyTvwZkWleP9GM3L|}ckqXQ@wZ39G3ZM|$mbopZ2 z#}FUCQn3{St@Iz|4{N)L-hmv#{-F;a`lhORUi?mp2hT1__( z9U6Lw8*+)G(k}t^d&_e1EVVRZCCc-}t^_>NcCf|5cG7bOlQ|Fx)PwY)0R(;qQ^{@K z$iOTs#;tW3=upb$f{`w4*R_?(KdvHge|YPGLn`iwKA3#>VfP7jw$XZs9o03)8xucV zH|*`o*vcU)B{dBggU^L!mg>X zdn(*J6}~qWzCRW2n+o?&g&$0Xp{ei?Ij}|A4Om|5i9J)dO)~pnPG(;ZlC_-AUgSND*R|F?4Jq;roy9B;UEP} zg~z7C;i+(BDvVBrv8gaV6^>4Y39qtUk7}IgE;X3nppLP{;BBA6G~ZuZyzctzZ@Yf;*3Dawg_~h`KF&9ieSzHcRF0isPdoBA z|H4c{_{O%dFWebM!k(}%aZ! zf3@|${my&m-(UFe$3ywGZ~gGU?t8oYugY)zhZX<)+pEugxBTkslQ(|t+<$(seC_{m z@;jT@KmaGVi2MdM1O1Yp+_ybfZud0=cE5eFG*I-x?^e8ME429BQv0zZe?JgBk ztR<^zs|YBE;11#`b#OSD6pH@rLQtqPHLBrmk+uSMOZEOl`OSS{*aRqI{k87>`M z6f@~j771J~#c;}AnWeT;+Fr6>O=8iGiYvLiT_yQe)%vZ5Mj>|s8*IbeN%gv_t7>Z( zr|PZfQr)^LgNw<{?P=cukMz z^>{;}`wF$E)-4s+JyxvN#w^w9QuHkfp}_y@G7<2xV&5bwmu9ZTp-?+kEe#fG)5mMa z%J_Is9~aiVsz!=q{pLM3&|e;0Bxtp`78M-W=>GCw_-lE zt_OA_F=+6EA*L7bKEF7G+Vs+#URf$}l z9RU9@P+K^!oSrPh@{bi&?Cfxl&`h31AF-C^Pkp}T-PaA9^|@c zN$uv|!NvVX66*1jLjOQN1g+E_SQ4P$1C_-~25QqU7!uPjK;(jXm3sPx;*yHm?tbX} z5?oh-y9yN}pMjiw=DcRGRH($5|AN<|b)jO&TjH)IebcYPDbuIA0;od?{2~!ABk(Dw z*C{9FDI((H$*)o>6>B^Crhj4luMSaA2DRzemux5$3TpyPkEaaxJozF&a^hL3iOKIR z(5I(=Q>YG9%hf83rG8nhF18m>!pnojfoipH`tRY7>E9Ns)z!VlqQci$%*RMEXshHqWL{6M6(L;q-V53Q6OR4JE$`~sk`uXdHi zJnO_f))7v@{5!?J)^KWYC_=^i>V-nJht`&3ML_aZdJD9wytE{OmNrwT|1AYquIeoq zQPm$*r8UZ*-+)C}6Ds8{IBdr<^D0tpOS!w~4ux!46}pTRTbv-Cx@-f^{pxHlWvu;DU+AiB>&TmW-?!B3O$B<~5Dv!I@`Wdf{qBBL*{Z;>O@K9%B>}Ef@Nxa> zMc&~+%-rzE#@>P>X3{400Y^_A!eXlPs3a26FV;wbfI3^~?tS%Z7t;;{RakR4u_k;% z3@TWzEOUoZvOBq{7S0SC#YyPExaHb5Iw~Sy(4@!?c+Ta8Bs?TRvUx2~4CJU3my}(z zsclrOxXCbi zy|4aF@lO3#C93k4)T?i@=S|2|81$yaWr37=Uwu1TJ!+i9qo6mb+f}Q#6vFj!HlEBi zN3PK{jEmXW5yz?0$=#EOMut;h{PJvR<24)fPs(|10-;-*5LWg3`Q2X#-)Y}w_Pu>a zuv_fncHn&nui46NdEC8&iQ6x0g0 z1EI88=W+MrKu|r8p=KZk|3~>1A*gw@1EWbb-BrDC*<3!=&x$ z6eK1|@n7;v&u5y^>9%HcdNI;5upakzaY_ zUm4^7YFWt#_vtfqKPTlGqs|!`q&EFrZTgwYe<=NRZTjbx+I&|TNQLH`uORsEcP$a` zJCfgOg){c5ACvT0dJZtc&^7dwo188%{QGzzhsuNW+ST zf?~zSahOcXkrXL^GG;-m-YD$qz2(Xk7wLE=(aO$`6hvR5uubT~E{Flu$kkvO_g17; zq(at&uZC)E`jv8Rw!ik|2eqem)av!xT&p(!7PM&53wZsix6-SDw$N*p#_idwxtuxW z=oR}Kcl#@2Nm|#rRSt_K@}7>7p;`Sn{#Ta3K{Uf<(%AWH)74xs&KK(og-X;bE6dz( zVPfU_)35?hrY(9c@)z^bLJ=?R4+Ffy558DMX|F@`RYs>(*6A4572|d3=SnjDit*Pg zc!b*kNQnsc&&ur0J&pTbSD$z-jvSRr8ZBsotOJNjnMcGRcQ~at^?}o=4`>c)0oF;G zAEL{ai-bC^8lEdrnU}H*;dmil6fPGUlC!w6n5EKUxS!5hLLZ^O^bIayUcJM( zX!ecTQy*2nRl0&c2Q$6meGb>W=_0Oz=by>|;?VUgwT0B*P><2zA+KJQBr5C2YW1I@ z{TPSW>c^7EK3%!Ix6mafmtst))Rllxe<8(qsq)pqD%JRv(0pn~r3RYt|7?Fb>j2LG z#gZnoFs9n~*Qr^jPiHL*n%0i7InhszXWlds`liXtHRm>$=hh>3WSnK+_n`nf8KguoGQZ2p|GJZp7($LjWu0PiKV z-^b`9Re@5<^i}J#<*pK{ly|WAk(k!?FzN{3_YJxC9h>(J?Xsa=U#XD#%Dz&mHhrGX z(1T8d2(S0LWUu$c_p$iyHF4Q9FxYLK1O_!>1x=q*^T8aHwxqWZq|IL-Y9)%+$moVV zg^iQ+?5Sv+ulH2G06QBG*aHD-Z+|Wq>%(Ev?|b-x4nol023i$lJffG74}T!hi?h2# zU$bzHRP-lHV6l2bS4vQ>D6R>CPnH2Dxyo3%TtxY!sfk9Cm6RcEG1XM@pdbCStk(G` zaV;o7X=MVq-h+9lva(W?dZ(eQ{$G$XdjAF$$i3LGu)mc{F_yB#hd3%@k5e3?E;o^) z#O{w;Q2p3IX&E}~XO$qtKB$Te?WA2&G%>irI;C1&U7tp;_x2!tZD1Aw7nc?>lvW3A zsHaGJCc`Mz>CyuOB{5f0F=3+$C9GgL&{lf%@?T)9D3>-AiZr{KW$Hb~g7uyrET=|f zwN|Q1Pjd81Q&+b3rt&ItwI2ORO`&b0oFqB6urDC&N60<5veOU}JqMcB~}p(%WU;QdEBiIUR3GAyQj zRVlY^payv_-H;R@t4Su9)>oFRXXR>PA}FhdG$Ykd-Bi`0iM_HsmnOIM#&vxqNT*K4 z6ZWI=HHOr;kt`cSzC=Y+i?kalL2Rg4R$7dl@%HIQ0Ci9$KLCg!wnPCjeMY{UmzJb+ zo1EbF07AwD0je3R7^Z%qQJIu5P#>ySgvRJsmCWE?rsewT|5)_*hk94a-HVDUKP6aV3AC^Ai@B&4E+)0tDFhN?Ku@GMlA|52eu!;j6ZGe_=&k9Cd`7Ad}0CHH!>$`<9g3DC2a{0@> zixBK+tc5jE8MOd-6;w=#TT@)zy@*EjVk@!g5Y{qU5&C4ulM-BOs0}_wR`c2krjSev zSiq@Yxx9K1d^A)K(|@q9*PeQ-_SE~>h;6cK4P(lQn=?=KAY~;~Sq!8`G#e;vj|!sPtbnk+xVy2ea*fJE{+8qG+Id zG`>QiUz5CEG1x`fvcI8T#}UPmd|F5%G-^++W~xRV`bvm`$Axf0RkGnwCi0#s+TutX zt7YC=w3juNuti81!Z?+9zcs5=7|Jq9$kG(cbSC&lHAahyTAZ-evs0`?)aug!mH2TU z3-9T1R+df}ob|dzOIVtqkr&R(jG0#T#DEL$83Qi7XCAR8ZEU>#qz{u%_KT5XK1={H zT9(Ub5SeYE3}GZSr9rL?k|nGMndFSmIBZvI+iQ(YwIL}ljc;o0$D>vUN=pZ-T6MIP z{?OpBsqOUBar|p+D$2%@wYs;r7_+g7ZtB(4;tJ_}@^gx|EwDCjvy^J_Z~kq#JN&!w zZ^IAlx!ImadHyvp54qo9_u2C{d+xI5D9=KnLJw_Y*h8}~*z#<(EJ3;mYr0nQ)Q>F| zp%t~uydyU|EL=bp+OxV>OwEC9BJE7Galm)7HnUxacYjv$h(nx{{r& zAtzTD!&B`KiT_sB+E2`84nfYDbZ}2l}0cCH3i<^b#iyHW(f8~XdHMK3@D+f!a zOia!7%wW`FwXbpSO4Ht`TD3P$!sFz8VYGr`s{l%ZHr=Ys@!AOc3y`cd)x!CUIbh+F z3pjvw6xV&C%08dy57H}<1@xmFJ&9zE0-xD92#JiujUi|!>Mwkfi|rEeStR1KYA&O) zIiAfyp7jj|?>T3|ODyd_sqwk~a~@A3>u9X~E9p*8uD{?%PiTz5*KCA%%@ieZ)WY-b zwAieUdo%xB3|Y4)SxVAL1lG@F^Rb0DBf;MDH-j1l*UxzJGv?Xvp8e~j^1o55|1#TE zL8Y0RExgH3*q8Y)+Q;^PGN7!`p+oGtPg0|tn{knDY(NBj?8tA%8Qa2}u{t30j8uQ( z;Xra2TQAoX?oDSic)2|URxIQ#4_SCG3&AOC1}_^vo)r}`a~6muz1+~rdFszt!&5g} z(gNkEKckxXkYR`=?y-?mD!K-&>1PvIrAu>Pcu%9$!h8N(icN#YK`Br(Cn!?He?6Er zJeU}0P4bXu=3=-duNb+i9L`dL|L^wbz34kN&n8-L&4$a0n^X}o@eOG!AS3>8HP3@U=wvGs0aYXW^R}`tQGK#ShS@yU7*}E~ za?m9m)|}_rBU68`s|zi&OB$&#k?d@YVQNFEtiu09 zP%mioYhe-(F2dR4#gx;O3`L;NHC(S~^qXhQXxN9|h|1A*>&vxX@u z6Qo!$Bv6RwU>hS9Zc33H;AmySd$mSSRr9?FCec#NgP;SAn6N1-FfhX?fOeW+a9D!j zsMa`uir6?oryRt-DnBWR=tn5!uku9c1x?X-?M7HZ2AsJ zwgaJWa^`vKcK4a?mU2D0&e~_4x6eB5iSqqpuR06SQdRNj$#n_dXWE!bN)T(xb=Fkt zEOKWM+aZyhBPxLx#px+oIYJVistodqZKJM5V_$YH9qknCqjFa5uXabJ9w$3$*ia3*m{0C;n{IiqE?X&C_;?)i!8f?Lm@)J&^>HnkcA zsca~OuV0c2?%ZRC1^kwe90#b;PRh*2ORZwUqVbGKnRtVIVd!fMVf|<1%ocmt>XKRi zn2t%-KlW^&vrabsY;3w5;<6xDN{qVLILo8~73Q(2^Zgvgx~34m_SxlMRCr|5pGP*8 zHrueri;mHY8u|bkxyq=vl8;Z z1pCMs^u^GVC3y+6$%QE@;^M5@BIGN**1K8ChhcRb)m zDkTqnj3<4p@q)>V8!OmZJ38uiVRKhv=)bU>*75*>c&46l2vGF%qM~r5GG9F4$?~S#-iC5%0@1Gne2*#Qmec(7O7gG?m~J)a2Sz zJJk=HjMRP2m0dEF%C)+eG7Wy6c8D=7qL>yplaQWJ>-_|WlkWVL^fXanQ`MMp3lpgQZ`=ZrxC01vRUDf zfWB~sR>nAI`DQcb#>+Ps!Z+?cGBU_5xP$Ami!Ij=?&0qIc#*;S!H3z6r<=0AHn=B! zC+FbdYovQxk8b?LCPutaoZJRo?GD=cuFm0ujqR6iysYL}mnI`h$B;#oXr-PxOL%KE z`39q-*-DP{>K4t7bRV|1HP7>A7S=qU3@ z)IpCr*p5We%(OAbG}A1w*|JE@RxZ-{6e(E?n&&;zdF_n#QM~pwYn1=OQ3>Qxwi9DO z{6ee!MxirtM?|wFU-OK(?Oj!n26HzWx8m8e702}d!e(hY1ICMH%YOTjQqkYVP+l}C zLQ~Ap^ISl+KXi8R;nBPHa3+>5m|tgIVX0Qf?p0J5RrWUjSJ0oEH(OwHzteq2I5Dm@ zXVBXX(HX;gzo%{LP1@%ENMGVvxTRCQW?}=*xR`$(h&Avnk+w5up_FKAjszS`Ksh3i zntM!hB;ff3l*6b1yUd);*dL~#8@AjO*c#1Z47OtoCSbFb0pSG=>Bf3(;Q7lKc20~! z`UXugb2h#Qy^b?yrP4uM?P4l3FV*_a-`UV&kdz8;=*4;%6Ah-^2DMG6xqbzDP>PxI zUsGDfX*s6xwVBhknYS20up{7k&84&Pi|s6(c}wmST_!9Rp4nF#tdgbGL-ajG;@Zq7 zs0K6dneQWNQ=9o6apcvHjc)o`tD1`u^0+K6UX+4NC=(fnrpU_mmxjV8OBf}py%qDA z6=CKh!)KJb!ko6j7H*k7?hzTET~$ZPIBto42fHyGkf-Ln$o}Z^axBU(HK+^U_%(6pE(CJC!#t*5y+ZayEN7Q1mqU2D#|xs zyv+T{n`&o*dFHIY2JO|9$c4ksXK5i>N>?_iKzpnRHG^8qWTBAJ<(V8N!$eqiaDfto=j%SQW<@`(7+12 z&y-hi$PEr$FN|hz?B{7+%9Ik^8hE!@4K2QRT67FcZv%VdW$pWA`5oPB`kYW66o9j6 zETk2YO7J*(mgTf9Mxo6Y9sTBu!uCaRNbHMFmgd^t(qa{|HuaD=EH>B1gli=s z8s}^|k_w*FcoIw7nM(8AO^2a^uv>=sOszQ|@s5dP{&?ywJ>HK^Qy>0*X=SYFjkTHc zP*r^;aYpUL%G!zk$c~MdV~}wkc)u7W1+g8Zh%PYLn;=c%yjGoZePJ0VrBdGA+JEU? zL~&27q|%&VZH=0*pY`8;HlU?QZ7eL$1m^8UV%~_^C6Je3p*{IpC69$z+ue6LqiYmh zak%k82i{i$EZ3?TI`i9%X=|a8cBG`}wXisa5ygU0R3k_WxNVW>&B+P^%DeLN)x^fz z8cP~)^IMEU#jzu_TRc}Vur$s&9{AtI{HiU@@L_xKYMf(pVxh=RJSLeQZaEtoJy<*~ zi9j|XLpakjtJO|Z^ts|P+9Fz=&s`8!?MZec5dzeN>I#wTL+_l9VbS$KSP+zA05b&D z-i!Xw$AO|#v`m=Mpd#&3)lvm3*i#vJ2YM@%1LPbg7ml;a+`S2+@#M^D<5SI9nE8-< zuXd%ALc#KxfME37pks3=1m>67qOnPqn+oxZ1g|U5qA-_i`Rs3Dk34o0+X2(1JC_#Q z6;eIi0oJ~HKdhAbIG4b(UQ-BHXi9#8#%mMu+ia1eIedYI{ao=vK-DHzH2;U0wf!7s zC0|ulx6hm2&%wNHEb!c$)j_h%Yr~nT?K)S?hDSC^sPaZVwoDlHm>d3+HN&4|>GmW# zLpfwqeD_om)} z9R(+9K>(>kr;Fb;a=Zdfj&~VNUeWV-*UETGsyUORjFtb2p2xes5LGq}1TKWzZK9Sa z_(`3rvTGJfD2NbK$J9-(SFb27qZ?~RF9N-$@m2eKs%-E{Aeq1{Fm~;#*huo!*x@x& ziT=&kun_@Ph%^LeMfDsi?lHd*u#d#xn5B&(ie$4=E2UrRdW@Ay%%Xj@)Mx0@qm%o*V2-=D>_cC`CL@Sgktd? zwNc}3MPrDuSL1D)*COc+&d5|ygCcKl4a58!;s0%6GJLtTB(=ZMGT)lUC$KqVtF|dN zUvqO3xZ55?6QV#xXYD`~w&82VY0l7!<9w2m2=-v!Wg81{#4 zRBK;&gbQodgrNRo7nRn{1*vRzjr2aO}eqQCcabA~3 zUR*hKus5R)+&Fug>C7tnLzyR3ILh8xE9tF4onJ9T)k?LfZ4!Z)%|Rk_Db3K@JX}RI-d-)GS4LR%aV_Hd zR15yFt2Kc2+EgbO@@0;!OrL@)U}#~MOK%`O2HF4CctvHI>_94H8GGqa2GNGXHjNNC z_1A@P!)GweMK_51&7uc%QSKhG4>`5$U|g#=tqxzJvG_X2;XM~ii7!bvOqva9aORHa zBB^Zo6@^?uD}pQMF`6sq$wMoq^x8DlT8+?&T}O3xLeTR>_*Vbt2(>%oD)zL{_C@5CiD4OKl}eX>xVSXa7h#YBD>Py&(=!a8E3~~Br&)Jn~-X; z9#?A(Udf#zW!|czMh;R-CDIC@k#gNqozIcfwf&5(^$bvD=$wr#7Hh+Gg>dy}@L0ze zgi>#YwW>%aRw`YPG+xMLQR4*=5pFkL=S`eqbiDIjFPDp9bMp;_aP4Pd!>t*7x^>@y zeWU)#m>fnbbjuBK7@hgZCx>P!mmMKGm}qkl%%p)oQ6Bg$m!#8FFGizN=6r_MwzPBO z5f6xk4x$16D0~O)j_WS*9hSD(o-#7c zw}rCm%0Zij)5Ng28Mfi*OSIi1`YsW7^CWI7WV86H+s@YM1 z@_if)R!W4|YI^0JH2*N_{C*VtA!>3MmXLK~4B-Y*sztv}%=gLbnWlTJ?QnSt6MUP* zwpO8Xn@q4dpxWeZelnplAHqB6EZsZq3u=3zBq8PX~{d7h4bC2XtAND(@EFRF4 z&z`LkR*YFf{%Fsi^<7ko4d%+K&rPYZP(jG8jg9TD5mbdov#Z4ws@ULw^2?|A3%A^L zw{KVN;&$}|l{7xubVY)~2ouOX-(lkSrJnW5m;yY*Sz351Qn~ z7*A_j1Si=d9uxFcQfb z%5=I&#fJPb`kzl3laYoM{*;XD^rHnXVv{dqn73IXC0oKqboQudy)~M}%ko=p=aNZW ztx)A~UE|$yq)E2aOOV!$S|@olZdy}X$_j>JW3{oin|UK~1O34G_zgw>an~*3mas&R zfA6MwE@z3d<(w=+%*APyP5inCyO`(LKc#%0^&J&}iA#+Gn=Qq@-46em9|*$=WM-=x zdWmA2$@atAb_`)=*OD>7A}G(-Z02uB+XkFXTpI}Zm#hD6xHVkO(X=6+Q{jgkID3GR z^y`5O5a7F1M)k|3K1V5*)3#x$DxyVgNEyD-nXY)5_Fbte8G0TS>$?^Olu*fj$6?uA zaaOR`&hFy@jZLMRGFnw@USa3+L^#;tCf#6Zu1$$p$##d0NrxpQq|1J@5lJsND&^N# z`atv!W*?f`33E2d_p-J-X|1r<`Y6@}gOKXeALjD7U4;FDI%+*@!y|Ql3WLEX} zOs439oTy}Ff{{U0m0|On921mDlQ)MwbCve`5}&5#)T-B(VZZsBnfHjV!v4tPcmM^? zZ#A#dnuh>oJ$lXbV{M#hA@FK$5K(4MB`5gtwHZ(hNRVQ#@7)~kXS~`G2E&%HHQXM! zkHV9}FIGWL)TlAN=EpZG)y;ZrDelmm>G;m>og}|C+(q(?<*<=)##jg_$^&`~*LHLE z@op<>Gx2xuZ)JvOt_c-+|CL*avOC<%wbO%P7g_J--*yVQgL!@&u0>y~cHEBku2N21 z)|qk}sct8&!dlB^DT6l?u{8cSZqn+L`kJE5Yhj7SANM`8wX~W9{49k_N#!75bFH?V z#6MYl)ODH2{v!LOVv_XI=toKxZ=y>jK6e`|`{&E}+ya!(i)M@e*^S-} zZoaLsrsV+P^%c7c?Q$crL6Jo!ORaLutsGU&oSK7X-2a&he`Q_V2AWlkct)iQ5gClD zkNJqy-^>LAbg{uzaqQX5XI@J2(;p#RURoSQxM7v0UKLj^GXUidRCQ+9)PLPb!G=+h zBP-*}COt2%oD;#H(mkwA^t8GzGdqTdeo=c@BdHW2>Pm5@ms+({Y*v(10-UE&oaSKnB94SH0~S5eDHIok31w(cMrvwYinM0cQuY-8 zA(a^PP)vNWLL;oS4ULMJCuK=J=l21ZxZF!|bDdv4w%YcrGf8K8jL@;kRf9B*)=R`iImeYKOM5VgggySVrcA%uI zVVoDEl2}e(#xiZu>}bbjB|ZNBmoV@d>5QGtf^4fEu%u%q!=p0>Qx8{MQ|8=|?`f-C zmCm+_XZgWw#LDzpOfv(e9*cDjRz{I?T`p7Sgv3X8m9F%RY{lj2s!~OHmnW573gP^r z=ytx?!r?kELVOs{j9R6f7ZWS$BKYHfyuEa}7iLL~uIiZ9IguhWZ;IFL?{meusg!SW ziyqyzQVC@`#fLE+#XJ$pJB`ivh9b)dC>Yv?gDS!@ER#_iNzL!WcNW~;4zVMLG1Zk= zy=-;QqPr6UX$iUH7oTx$ue=tnLFS3B9!Qr9g{E~GY)9gf9?OtMy z)neHL%9z?p(;@6gixw<;rtyfgq&~69Wx)VZ^$i)OozP>K`G!2pKm*bfU7}Gr-Gq_Q z8uWs}Eh#C}r&g%bw8e>9SpEMA)GFyu@dqz7-rioi%v&JOH13XEBbJG4cm|O-7g>BH z@$)oG$BJm#3u&t0LY3=Sq%A$M+BmCS`WH%e&6^2VFUzx)pzlU!=Owvo)8&}2XQ<2u zH*7}?9z@rY;mmC%pD!-kbvJ2A&NfSunD%m|1Q0|8Y+zI=GMxfo^kE@54ok(Q)`dk> zMcJ?+_EmaA+{YI4yNHTR+NDV;)s4H5(obw5Z|MeW2RtMb0nuMhZx0p^B{@RMVid@+ zIBwx4<6EvNEw4SXQ?-ylkcL41E>SyF9?!Ch{7zY3Tu6kt{udRJY^lO(ze9thHF?n_ z&1LQEL`!1~o-4zWyso0S&J*`(6-Hc>25#Wl{9kvmJn`Vx(q&$PVe>h%=W|65Hg*#_ zMx?!bJ3x6NwSA=%!L70mnG_hk-ut(z?Zq)o$Q6FE8^Y#B9vy5qMOf294fkKO?)aHG z#6e#S)t62FrASM>uE<#|7TXu@wIHZ5q!Xu(v5cUak7Xt}Mpd^7tJ~u~u~Krw2h1(X z(>xk25wLuFBr>!ffwF;~X2Kh+;{#b;-Ch|D-JUvf;$aC9YG$J9f?v z0|Mav}dzq zGpCoL>6f{GQ))g_mlQ%13|zWwuQJ!Y>H;S(T^o&R)6dd!T4le8PT*B!iYQ%%?^~?k zWxsPe=lD^Cr!c}dFl5*EOCrQ+Ie!b;iG6Q!EFBYB=!9OUcH?Q1{MSnk&j<)GP z?M(WzNuw0oI6bYPp%;B99r;|G-btXD{gh2d&Z4$=73qtToIu231h9b%dw1IQw3!W0 z+7a~#Q=gs$+|H6fuk?U?Xn8kLv}NjR*f-luf*{65txh13?2d%AZDwYDP=UI2+Z+iW z*N06~kcEvCr`IG5?xv))2GZVtbzPq=Bb6Q@|}?I2;ob7cB^yz)&fhVjhjnH^vw~iF&w$nF6?u*-S1r2ec1ZC ze!%)t*ZtUkdv6U7k)JlpjajLeZ3nqMATdJWzFsATvAhG%!^G&m2Lyaaoh^=i=(&Gr zxqsNB55$dHJMRf)&uVWd-@!b31OFHnOz>&xXo;rR8-l&A_1AU&x?ZpA!i{=u3fBiF z;(BQ!4rC)vdu{aBP5!c+Hl`?+(@mcJO%A+?l%%_fyewbyZA!iy9QX}?#iA|iO`t-8 z8^8xd^tvWNEc`|<tWXopK|b{a_!6rGK(FQFG~B8kdvw(<#i7CITyN!XZl^^bMW*b*aL?ypO|~4cMR6^G>)Vn0S$et}+%zP*klS7HTKo=VZLf8LO2;qBa zNy;dpj`*+a$3}%qcH-gHoGdY{XvU7ZbzMdAHswxmi$>wFHAfg|i)E;GF>y61Qx!~` zx@6hm7$(GJ=$C3b*6$thN>Q3OAbyMht5R$hauttk;~gYgRZKcrW$=48sP5zW5E5|2 zWT0TO%SkfccpJjdrw|1}pHHY!{1Gxtik<6{2Pk=zBKC%VqX^m( zw%4Ml%sqynAI{jz3amC*NlbJ2idw?XFxAb7=$Yx-42N}RYBTe-nUl4dXPkD#iE4M` zDggdt-aGRg0s+3nF<9yus8q`YdAjnVOftFy{<;Z1dz`np_HoU{D}Bv76CTfq>Dko` z<#i#Oollv0+~!8Y@o_pad+8sS%4#0vk)lm|G-@#I(WWh$JVe7&(9O~@PtIsD#Hp?= zk8HPCnTN=Dh^#aEIv_JMBXRe*&XuU=(>Ltu?t~Y_(#fw?!o~BNv4Us3;29m*fq4j( za^1#vo-@reKUOF&g>s{e{FXZ|rvLIAp0viil>x-dn71U@kUTT8E5qs~S!I4DynW=TI-zu34SY<)V=F8L38)Fy*IJ0?SX^AZDHi6}Sss z^Pe~`vWR&%>ZZ`sDN){wzF4Yo)t5zri)})u1S|nLQ+BbjY7v#zu=O~eMT?lJCAFuz zi|&&qQAff`KZ~S;R*%~BT)mqUPCC>ioo9~}?IHH!452=YZC)uOyF!@xUv6>7Gw<3> zbh_1EH+u2*K`rm$Y91FuWey(2aPN4!&MHfy@2&7%Cp-D4ff|3ITEQIMnIv{a?etZt zv^%7h%XYD6x%nkxnYSa5d(LAbLzcTn^u;@dT>q>pyD{yEw}yJMw>aD^n_%Sx;}%4H z`oM&@E`kCJ^)dDb<*FqX65Q6cn)liTm-?zpv1lEzZ|2OE65Y*zmnfHW$3*vAB6i|8 z?@y7Go6_jIOfBYSsq?YQ`4HyYT!_S_?$&-h?CUO!jvOjwjpn$mN{Ng|FwFTJ#0GcM zF+T*J=_0W?Jk*Jkg;gPksRtRvV`C`+oZOj$?_f42LHl^gAG_$&C4V>}sQJ9%JzjXcvQXl z=lQD=A@>T+Qd2{C;VyWgQc?SC}7U#c|QWku4*KMjjm= zd34WYexLo8q0zAeyN4dyKcb0=uWcyLlD@{lJFa%nZD|w;8s9%s&i(yC90TOj@*hz1Zs)Pj)$Ay58*2iQAdC`2VNES zOLj0Yfc#Q}hK%wvzqWmi7#-MNSTwm?X43$oscU2`*aJne|r}qwtc-rr{(GWAH^g`17>ie&pchg9i@}?|XD;bmZ3I;lm?Gj@&tP zNCy(N+kn6BAffFAi2^DfyGmJRJ9}7NKG<4XfjrgMrICw6>B%k*7u5drkboa;#WEy}mvWga%fF=s!xO7@I7El= za?^azI1gG8%gDp*kY78MG8^prKe;uq>%1Oky2KF}W4hMqF|Wr@t33WYY$IKBE3ndF zz3LcJ*A&e3rJ*nl*$6D}&&&f+7EegsEby{RkR`@s?K!bFO0`V95u1w#PdqLw&1#a*9oka1sz8FF`!<$Pn?;z7gjA>=m>N-K+>-wo4r+9q9Hc-hjk{5pN zwox(~a4V|4e_|cw#iu)72XRE5^yLPsEV_ z2Mn3?e^-vjv zLAln;p;~==ZB22_qBUJ>7Oz>dlr@$jCY>VRt6s9CBM?PRQm0b6th?ln&Qf}MySlOj zOS(;i5sA)x3Cci~&e)wk-@}N4qv_ompMkb(+!@!~-i`&Ic+c7%Q!`C8-&KPJtljlM z67h%(P)Q6>i3){J3Wy*K-;wCV`pmaGIQv^W@rer5x0bAnad>}0A2h1fThl06>POO$y}AKtTZZjuU^R)Tm>VKPoP< z&0%8Qi*m8@&7*i)+RAL;QyPTK|x6lgEm zG-=$H_lXbOfOg^o4N%SFnAipuqd*6qS}HhEYcAB9PuH6Ijsl;tX#T|FEeM0=3o>BU znlIt%YrgEbzT~f0b<0XSwUm3+I+)VZ{Dlte(XB;A@FW*0*QlZc{mU5#6_oteLqDKC zvtbQc&i0^^n24kX7c?1kp5JVzP>d3QF17_*^wGkW(8+p`!YWO|5o+{S3!XNVL zB7Xu6zOYfA>37UC{f;~_Mg6B7R;_l5XE#`s4blK& zA~Z-UWS+j+z4GwVc2hnSKf3`W{Aas4n#b&l>E_?lp!$HK%zhR@?e6hsPXZ~C%RsGh ztr)1W9e}Ni7`Cbbg`vjI?)9}*nvfaS?B2`Seq=3v!IP5vx!Y2j|Lppx`Oiu&H-9V8 zuw1{_;}7Nk_!IrT{w?{=sV_I*h1dQeBS?Rw0vB}aGXQhCD)Q+}>A)|$T|g2>(cm~U<} zm*N<2mI5F)OZN7OgO^_rXf4wGC*N>}EwlNl#}k7zKcx-^V_5VeRR$ktBe1dEs!DLH z;L%zI!{E1knS#Qz5-aLHna|7ntu7i@{fs&K^@JPAdv@4aWZ1I$y~qB&dH&#@Kh#J{ z-86n8-c>&4LnMv4oV4cb8+46F!y^?31Iy-|XLGJcrbGl_^B?$80do?Dx{dvW{JgDP z=*70xkZ18EGvUG3D$nfW%Llts0)Q1b!V6X1+qBod15&}ojUjDg!fhPub%BQ^yV`VZ zY-fZ59kTi@qa)b&wXRTsyi}FefSxCRoH4vz4L|G8VKIO6_x3zz;@9h--q5;2%q(#; zyG@UsdOWDiW*?LqV?&Q!{6BkN9291UNu@!-99EIxTI;G>^MFd2eUM%SQp_HR#q6PV z1rbwLCPZ2{QAqP+9<6Wcu}Y6y)8u-q)rWIVmDUSx0MG0nN8+hb($S`7=QLJb=A{w?vkaiZf zRkdoqZgm@B=VagJNp5x+K74TB@Zh$C`-evk+gxOJBH6}Nn0+Mqn40Zc4!`o{sGn-I zdCHFQx32ZluC?s1)t+4K$Q|fkDx;!p9C4*rPAm4>m4&eU_QNA14|4#&qfkw;W_^ij z*4C?L=e3=5cE-B+!YBG`jcAhq~pH+tX8_@SuR;{QresP&Ggg$i9K`r zPJtot1fFce?&uGS;H8{>PMgL1`h$ z7wrmy=mWryqbOG!Uh={k9@l!cVM~StuyU2l=V_Di9@E-G#j3zwjSI5L(U+9-c3acR z04qe=%vY<|YftS!n-E7@g6vIV`g#`Ahe*ul;3A=a>MD-OM8TY5rR z?CS6^8bvEFcH8K3YYpK!5JLqA5)!eOELC ztg?ZS+J2a!MuD|x@lVkJfv`qQ8&)ge7+tH{CXief%cEH$rC+I4N+f_^8bdystEv&& zrP@tzZIWOtpe5V>bV=y+ONfR@kBEyQ21$!jPK;q*N(4g_gzi{a`5TBA^;uhKGjy(S zB55Y~k{0K*`@!m2`!D9%VI&`kp!n+;^O> z6n55$Tj~LKRFl%5d{4UiS>Yjz$25I@!R`}%@;ws~Prj#vd<$<>n1yTRMz=zRLQ9%G zt8iXOYkx8$(%{K>!t+VpdB+6F2LH3%Doy&h0rv%fPr^gD?K;%fR}NW29mtz#DU zmLV|vmh_2PZa~D!OAqS-iPo`IwXKpIir3O`IeR8eB$UDYhHQL!t3AHF6~~vilxp55 zPTW;so6Z=nYO`;FiN~4mvN&DYaPpRkFMEEA-Rt#-;&35p&>vbVch)Q-qJm-=+xW5brQUI-WRW z_M?nLaHfVLg_C9WqrNCCXFp01V{t=UI;xb#)KY`H4-ZXRbIsW|gdIhSq;6#CO{2W6 z1I+cdt2(zMRu%qNJMM@cc#9BrV-w?<37U~UKIwsgCM4-~W@WbTdY)ufS(<|PEK zW-YsXnQ6pnQ~@UScnymTkzwa{q{`0ixUvvdWt#Ct{5iKWXE&SMkvxWW&O?Wc@)|T` zo^U*@OIuZ)SOlt}#FNyaESwqttXt{6HvS?BvF}7vxA%<-JWnO{GA@wOXB9cAt5Egi z-C%Z`xeeYo<}~M=GXv6`+k)oSN&XJOx%T^}cLkpawZ0j{ep+k2P;32Ew??4G=mX32 zP3hF8+0WhFZmq_4wJz0ZY|r`!V}knTIz#goRhNNcZig_j$IWFH_4xbax1!^kTfl-q zt-fn|@Nf&WlL>aWTRk#^u|y_7tX$0tnu zp0G_@tyj4(dsUxawiGT0A1-4nGhKltb}b54xY%yMHdv5WGEkUFKq5WuCwD4Z!qR}; zuMnZOfYjonOLPzwjc8CF-q&Y8!W>eY<61)NZfPe5aWt|K2MW%9r0U=M=sugVMUk27 zh`UA6ogy6_uj>{lT3&timfipFRj+?b*7N%d%gip$n>H|QVA%~=ETx#2b>ho4sMaY| zn!MX&DJ`sYhMsPL%f7Lh>e7)Q9@-)k& z_&!~md!sh@>wjPBQ|=UHm`FPPqts2uD{3_!XOPPCE^1+uD$F`?Yj@B>G2CYQjq*SR~!4CL5nIMGCFP6on>1Ei5i_6%> zFX_anK-YhOUvGI?X{owBz;YSBD=*{drXz2p^O}(ZRBFz*Kz~{Q#WjPpjCt^?=EY2MpAbByIhjWZhod zUl`rKeiS_>U4C5Q*exs;VQ`WZ=7!kEllR48z`+Mc>#c z?cD!n*42%$#?`X&dO7mSf6@*6AHUdJVCy1^Cs1cw6R(mq?HNO|s%* zD?Tg7SMpVK+ULTt15L;De{fI?u6#&ziGE-FYn?8S<#cp3&z~@f8vd+C9o@BZd9Ee$ z3FBYO+YaFPX+AM>Zz6-d?4{vaJQB%8_p^=Yico!2}nvnWv&exDoC0aEYW8 zDZ7)du87g3g3%Bwoh+RNF>#D_W~wAc=fJP+rBe!huSm@%c%g=);v3FLADt1oS4m0+|6>XkLc(x8{gx@4|ASzNgNENcl}Mj)hF zXtpZaCwriD>ksSzDD|1N?wgxdUG!g5Exp_=t>*p$!TtJXptE z(D;?iDH-`HHr_p_P4lpT4;K_{_C}MQR)8`(h5aO!7F*700$ZM9NQzw>qB6$8jVf%l zrdBy}XN5{zo7<~p=(*=rKD7d*H}y2##q*)fln?Qkg~pNGc!oOVt&bK&Y8^ylB3oLD z_BhA4B^L%N0_Z{iRJFZOq`FcPEP}i}rw#P5he$ z+gu_CVv^nw2_v`lNVG$)4ihI>hzt-MWbN>JzXvPCh$7KNtl#h+)MqmDT_t9cw8l4A zl+Yp7`;+j&xtboIrE1GKU16sAy=A8_nR8tpqF|aI9uCh^(Y#vd%@CzR%HDzWD2_~Z zj$BKVIn(<&F_0+~*G9l_pBw!WHtPXN*tYT5LNcobo!?rful0|*>w)>1!ebncxaEmg zvz}#PBCYz7c;!!e{FBzT?FeG)Po`Y8{$x%3CpGbLTQfdhuz=%>E#RLRCd}|bRyLUY ziLZh%=GU65OrO{%-K_Pe-a=S*>(1SS9CFoXp?wbayJ%~Rb_dpMWYLm_nRCLq^Wx)4^l@#r2Mwe2kWjC!FZkd~(on#{=PdF(f69j_hl z%MWO*ojEX>Naz64I}D@P!TSs0^37vMMh_ks)VBp5Md9l#^}S^zF8?OtLo=^bQlhm{;(85bCkE~}|!>ao!gqxu{waYIaqnqY=F zn~>5i__LxSfn5whU~?n_+wQixkCM>zND$Q=)?Vi$b-q*x1Gn!V8yy);o7+bRFVQ5r zICu7e#1d?>>6=H^_09JHKk*ii>3JS=;??6?6Q5^Sa6w0+Fv9Y&3DDcb&vy#=ZRllCo^GT<|es{)nDmfC%PEsvnSveH{#9OMt{Ce_C3C~0u*R&jq=@tXF^?I`b=$qKINfzv(kp#Ppe@1D&ZP&1CwF*(j#ZSd!HjCt-JP zZN5J;PUkDiNVZV;jFin3P~!Mkn6qiowqL_kV<-p7oUAfai-n(=e0mHdwFDi3pD1Wf zii9;Cp5wM{gI7eK4LQ2cansa1r{}G+drRY= z>*wCKYMikSZXO%uyAmeJ=X;YF5VM}i)UGpj05WT$1Q#ixoW(UZgH>cDw01N=^J9^g zjuXX!j{vRhR-O7Wua=P&x>6685QxtvhgsW;#O@0*rtKJ^qp`?0e>UYew-lu9m|+UFEA`Bbb9T{*j@ zM6q9T1O&Kx=&5pA14hMi0O@VWfVM`5C?4iMFu~Nt-WKE(B)LL+%`Ha4IC_i5J~A55 z-D=CLj<9B_tsUq>%y%C5k*(HZNr&klA zaFVVCHMVm~|B&+n>T*3=QpBlSB6h-Ay~oQbF}c-gLMVOy?`k-nwW(!=wbFyqu$SHm zHwG7s5G%ZdtZm^GRW7@&)P`??18oyG=}%u1l1o9iztWc8SWp zAgSJ$ZsCddPX0%5{M|zy&&Mu z=Iq}G{YswZE5t3r&M%yAlY0U2=uZOC65?&lGnBFFgh;hCfWZetB(@!ZHS&q839A%c zffIKe_E(u_F4`MfWsT4BMR~Zgyxr5sdOjy?ij@wmY)O!dx(q;s!Bd2@YG(+IUw{~E zS;%ifR~c7bn94~g6~LIg+Twczw_ywhW}ImxG+~{e{b?vuw!7=J^b5dJ&DTw>arhgA z3k-q)wqvOO)b~zIY$ zGw*NQgw>b;6t!xHw2BRLZJ9I+t*UC2c7cfiDFP8Dclvsu{9Fv65N7s<+#d@TKpU{~ z3ylpMVcZ{qb=Zk96`-{YFITx&#>s#dd@R*je?B%#!$_w=FPHt+leY5A0dlCe=~q@3 zMACv>N-Iv*$|N$_ZT_Cvv#!$HK>_uJi&d8N*bgXehmSx7U+U1SkBcjUQHNsE%ky>B`&3y8>~84w8P#Z`?LN z$7Sg$vH=6|I@;k2C2$_Wn*S+0D8+)Ki#HO}|8D}+u@(4_!A-_kwHk}!AVr`s;a%

vFm@svn^tHsh`_)W-9VAZ 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Ŀ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�mHnl5sxo!Mu5Qa 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 j#nJ!f(LZiG;~MUMA9juogpbN?WQtV%|Zcf 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

9_$I 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ξ-c9Gzv0C&o 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 delta 286020 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

j+OaunHYNx57{_GI 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 diff --git a/App/HiNC-2025-win-desktop.pdb b/App/HiNC-2025-win-desktop.pdb index dc2153f6ba2b8badba894fd086c85d450062dfb5..8e26bf3ba01dde0a798c5bd772999f63cabf5870 100644 GIT binary patch delta 92213 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ⅈrO)wsfuFYJ`_SO$M#p!tbeM32zutqT}SgV-vb&3mt*DGdxgW{*bZ-T$H1L6QSD(=Hozezdx z^{cnQmuvz4Jn!3z3m|{9;%4A2ih04YRdH>U-=>&*)jNuPuFCDoL4G&HJ3_oOu4Jr( z++@4KU)v791m1&u#~krqY!b(;e_wJuIREbtB^*djkYBbq7>XZK@gAt~y-@tHVs4W6 z6?2n*5Ld=_5cAK3BQZztY51dx8UIi*D>$Z@Bm78l7x2f5d0GC6;_-?bar72YU(Ww$V8S`Y zJhYxy%=qVuIU^Sob4D&It_J=>ald5t<-2`cm0u#^TQvh;VFZpj!b{-qY@FA9UtQku2QT)j_8Wwhrw4B^IY&_h<{Sd-+yq-x*oOs z1JD2E;h2Rd6Rv={y?Gf<{t?V=RNV4U;M1^q2E2y&H83CC3$BB&Tjm=1SuyLpp_uWT zVBZzse)$Wg*l`i?Z{VM8g)f3{DdwX39Tm7ZXYdcqpyodnbISix%>3JY{qG7e;Z7*w zu42ajR?G_iQOx+iSVOKpo;yr@GV`WJL^0!Dynk;(G?Wmhm=(k;ZUIhE%eC6OKNUfOLD2-ySiL{CtPZ#3!ia)?5mt*cR{AE@0AL!sB*nDB* zXMp2R+v9U^WQ;EvxvfT!34F)$M#M8C-!WHxmJnwRakda=zn6WJ<6ei!8RA?a&K+Mh z)&ah_%%hlh$nz@ZEthw)vD0TtoCRS*ex?Fe~QTSze%S>bqo#xK~-SV0lR++;;V zTq?dstUi`6t(ZsBGKv$qZZXmbs0qVagnHRaXZae&h*{*YK=?8F0)I*Hp{_-KUuGTFLCo z$)|R*Lr%wa6tjZ5@wH+N)&bX3To7DeG53lFA#SLcm*q+EnQe!0T;zxv!4a_|;%?R$ z1svllHO47n*PFBE)uPyLp3Uconxn&x+2I!Pbt8@$Z>gATpp|0ATPtSyHj23f?pNF! z+}2kPZlZRISz&v{oS_bi>to9~<_#;JeLEr^wFBY|b_#K4#hgL^0jvR6fHT+y9A_)w zx#A%daLf*M#SA&dq?>Mv8Sk!`GtfgZ<2@B4?wel9!Gzw5SwWxp2C)us3LjR?&zv}( zjaW+?kH-KO!A`=nFY*)ZfVda+Q{0C4Eu4du^Ft=&6e!RQ%sU|Dl;A>kiXQ=|vK8_& zUvme`sS)RUklZBwk)OuqKd(4H>?UYm64D`|KWr8lfCA}lfsx>Wig}Xk< zUh{Y|^M4Y;4T@xk97mp1%=mc4ykME2nDL2<3xR#bj6bEAfiCmi)*7sYcXIF~KJTkx|Ka}mzQk=Dhz=;nZP z+x(^&&|Ks@E{OQN_@*)DCYc{F#~-|KS)dYlc3h~Ki}Gc~+{TL(Grm|c<4Y7XzEm;e z%Y^Og1|}?zZxQPuNAwCfj~x-Os9ue49pgse72v!!o&bI=zHN-lfLDR@src*h9b(M( z-XQxnfg@fMN?5Cy@pX#1AFmJb2E}aPO~ov~Q8DA2z`pAt6W$6Xysen=&5BvU7R8Kj zRm}J{#f-nBnDOoL9sJmoFyY-$!VblZ?^MhRb}43jw_?WkC}w;w4peTyT!j1LvHqNc z`|WiDR|hYL%_%(xu3;ZAm zCUR5cb4K2_+zdPp_B6{a!4-H=50dC;iv*629U`{_a~I-;B)KE_tcrJHh4{z(ZxQcI#)Gr)o#MWh zA4Hrl<%(MF0P&ku9$=R zSux``EVF&N1iPscxDbC)%>DY;_%5*qn}UA}@vZo7vG_BH{~q5n#w`DbV$RT?0ZaSx zqk?~h5^gKzvHXr=R$vm68{mN}qL}#}xSO4^r!02|r-xnNa*rs^|Lp+z@Qk8BPg{U9 z5U2P;h&NmAgM7DUnEx=i8DbCFct7w~*jyv=h(BWM=O#`_IA|Vm=YMYFL^%4}1ipAp zfdY`Mcz{0*D%C>q=kn^Tqt1%}%Wl=G6g z1!8>Tk?|3Te+ZlT`4S4@izxs+&fr-ffnQV!n5({^VxGx{6srJ;jXISNvFrTUwrk0TqN@%JO7zYuF|5 zY=H7p?0|Fd{ND&8at=1wSTRS~B%xg_&Ji|M%=~7G*}>+D8E>JO@s^6^zF{lnU_xuf z9HC~8ko>e7A$h7AVH@x>u@T~)5(ea$9cr&wemA5;LZ?^)N7zv@3v^P<4t7?|_ydX= ze^4>wT@*9^P%`_5BUBE#heMvGMo6BnM%WentQukW1pKE|mU%4cshCH<-io;{9*!}# zKOOyIj)41zcwmSJhj^%Bz7BXa#3MpH$}!J>EHK77ERPNG;~{=B#1lgN6t=OO5pIG> zin*vKCv=fG+n4kI6zd>!%AQut3Z^P%{29fJPgBhJbj6H6tC;cU0+#mW7R(Hl&<6=K z6MEtcX~BVs=j>S_o}17w7H8J{gwZkP8d#WsUtqN5xrtu}Kd*RE!ZduL&A$FGfEofv z@KbAVqX2mZ3b1e+%P)dIgk22JC5XRdE97;d<7Z&=l5QE|GgaI%-#;2^0%iXw%wJ`y%xF6~Ho z9p4uV@(+S{DP95Iqj)iRUjn~h7UXj;*sqwo;Q{nYCA&ayx$Q#0#f8LXE z4jww!;7MMCgo3aeTV4x30GkcuMtq&EklWZXN7vu-dc-HdW`17eZ?O41(mIyk4duyz zjyI9u&IS3w8&v_v?p#3Lr1A?U7LL4S^ZA0bkYXMe3M=MurHEy&Kly}w(Zphr&9;L1 z@D&en$q<(gaaqL$(4u2@_)E+%c?;@)3H&>r<-zYn?dOKKqJVYCr>I6--i`uAP?!ZO zqQFku!9(E6iU%O4YGRpKyq;oqfVX%U--YrWVb{a6I(WA`|MNTifg^$+6ToNx@T`f1 zJ+?um-(s?6dg^in#!}4jA8$_*<~KChB2VJHYclAKdNg(_xw0 zsDWa}8!BczNipM%6f@p9u~Nj<$4joJig`uV9E|Uc1|8r%nii@8PEkw6)xoV)1-y;s znD+wK+4w=!$3220Y=itmw*FrgbH?7rvu$D}Kk}YU*a1g-6mZNbbj$+p;n^8ec-ZD= z13wVr2Nm<>_d|*~LtR7MEfJp^auqV6dnlnth(m*SgPw2phDu9}wLM~C}jFg!Rh z{sDLiVw|BqJ{(8vh`xrik7ZWC-vcBcMZ7&K;1v-0L+}h+L0|AOTfTZqyxVP=7cj45 z5s*JZoHrk4TK)u_9;4+2jL(Em;ka!bs-E(`tJfY_@(R^v%|aj`hy8ypuiJwl(PI4cr|QRFcI-fw!-(|bIeW9!1C9K54ZV~ z5*tJ=+kC#ZoUE7!wx<>QJhDBb92>#Y6C1@U@UYMvS4E6JRzv;{4Lk|{#pZtx=BFV! z<#%|Jf+ zXT-T4ez5t!fZ5n6%eTPC!EA3P@_(25u>I%5F+1i6cy5Rn;B*-jz|95ZFT{b$@hR{k z#aPwycp@$T91?wz*WxB4c2NF`8g(;l&-CZ7-s1fXBt`IvcBigbP`Epf&G-oeM%SPs zPdtSX@GSLM5_vUAl{6lFmetZbk0_~~N6?$An|LM{BK^Fu4 z&&dCa!#~c`ZQH`F`7`KNX8l)#DY#d}T zL`)j&I5QfWAnImob81F2qnW751&uR9WJ-FX`233%mnUSM2aN^IP$Oms@;%cLwYlN_?8~a=N2NS-O(uCAPCRZ^ zFT{l7|4Wit37QWyc^r{@cCf&|6#352hTTFAqQj*X4mfJorNH`&vsH{&#b~=?gOG~< zT~2vk$5`E*oy2TKCF(lOW`Zai`2VUOo6kq#U`+pQGjXz367Cr{*TMhPWKbu6SK19m zcl~v)f7iSYBu}zuipuzoV9UkHNAu&&ag50|zYbAc`-v7pGweokWB-NC|4I1&RKPrd z#{Q?R`+uz`$oGS>{x^m7q6_wype$|d3$p&{ah>C*^R*2V@0eqLEcJD zG~M7&VWvP++P&Zvnf5g@A5=^)qHahWM!X!F5@d&T2cNa56W3qtHQuq8<1_cyh&eA6 zX`4s>h>JiO@OWcEWB$^Ra6kbuv#a<-W1CjYSXdYPSi3u7nEw|K^WH)%=byHJB|fWH*1|g^cr`-9oax^)}P?Jj?;U zeuoje{2=<79F8u@Dk%evGiT9QDw7j-8q)>p@`J9-jO~`Tb6Kzr*t>6K9Xu(MvvyAT z6NP;?;I<$ChogvzhsQIEvCgCN1^qa4f%V(#=3ushOkPR55wlcqZS6d);a<k2N6YD%dCzyI~7kT-GOBKwPXLv%7nqb2P>np-R4N{sOxS}XQ0Su`#oe# zf!392%r3|I^3bTcAD%cf6n4Cs0(GaEzoc7Tu?gIHFWC01!NaF&lFN33?K;F(@L%Lg z4m*MNc>;A+Xq!7Eeggtybz3y(wa(G@|CWDDnheVBQ8qh)12d~|*M{P{$D=D|lI>aviws9hF(6-+BJ$8vds!>%rXnD2$FtMSEp&1_v`bO5Mo!+2WJ8Uxkh6cyPeF0ZQGU35~!5q(Im;ESM zl7Y=55KHiRL2?!#$8Ct-7Zim*Vm^`TSanq1 z3yd?Y+MU>foS^C#rCWjiEi;-rwrSiZ;KdO>wu$PZa@fR=4zPiEsoFKnBu~O_1gy^O zX2A>v6V7f$Ob6-WQfSotf=^Sdws<&UzSaaDlfz8|dc=s2L;b%Uvl!DGhOaXM=*>+YWx=6;|L#91=g~_ht68C+$ z;?4cgM0;h&fE%kP4bbD^O+Ak9cW4}L^s`h7Xae2`VcE=3cPeizXNT6YA-US_aKy$J z|EIxV{8-;P5moQR7Tr6o{9zqU(E5QSf@WnhB!xd-%2XpS}xH7`KjAvxHOgTAwY zs9^(f(tsOZ(0rgrr8driC-t}s!4B}mODTMKkg17wa&+^-)CCm|jozefOsm&ix2|5~#J_rQe{ZAVOLisMUxU8q|u#i3c#|qSfqP%W(Il;y716Z}5 z;kh@8H<7T8J^Z2aknHBEzbrSZhhLhKp2ivuJg(CJN7i}3Q{Ddm|16FXSs}ZmP?5c5 zWbYBFY%-!EDZ(*QWX~fjn~cmHWn?7TD|;3~NC+9}e|m`|G|`Bo@G(Whu^sFP z8Vo}M<$`X4|F?!?|Jz0sXd42h{&`V{$}9{*7Q{c-GYU}wm**`Y{-5%v@X-Us2nH@{ zNZ|aWhzjU)0U3NHqY#!L84bS?gBL5H|9RH|&x7zGf_4fGzqEk2BCz^@pE)QMb@+bs z=Y{ppi_M=4)AxUuA^5Nh&I%d> z;|o5UbHaS;P*DN{1DuBW%%QU6j6(3h%zLPu2KU}`FrPnEnmtfZZz5>@7Y?OjPZT_c zAgE-A72!i2jB*K2P6X=8VFjv=gEmei0F=`(OTkeZj^OYHqTo5m|5Ugm5ORn5XP_&< ztO&>Pz7Pf1|3EVaKz~;b^-pCe9Q>pFGcy2WVFf;Dn8L|shnXlFQ3wl|Ef19? zF!z`>%r=M0!&VgH2F!Mc%GEaTX$xk@Lxs2l1$Sop(+Ut;S3Xd1x8dYFhnWJv_ZL@~ zq53N*)5;JEp28edNFFMApf2SB%pQk|!zUD6DF^Bl50!)k6g*PypA!uE{9Xo6hj6O@ zVIHDyD8wW9`h%w&1NDK22~NLJh#;7Q;rR4WHv)Avp)iNRG5kJ)lt#3z_P!*S+Nw=hG)y~e=z zR9Klm)Jx342Mn0M!g1+PuLRSOtiX)>2LEsMFhSD=jaY+u9gZ7^dieu1ViV>qIBp;6 zVc^{vdSeEI(ZF#Jj-Ufq92y>B{!beq&{pnHmwARpAd%2Npf_xABZ4a8p>sR{5{O`i z8lZruyF>j_0MT&_!b66--Q*ZGbfb)WjY!G z-M~SuD;%NLXONC_0n-E=hyMXJl>kl34ih55=S)_Zq4}Zz^cIH};4eZWPQc2^!<>OY zfm%y}ZYqaLa5);Dss!|WI8?GK&~O_A&^6^yDX9WCbEqO73|Mj~{i;U8eSkm<>l`Ygi{N<+W~lWH z`b;QM}5#n~#81XV{f_McrMa+!;L@a=wAr?f>5nn>j6Dy$? ziB-@`#H#2OVs-Q?u?BjL*ap2pY>VC`wnJ|d+oN}g9npKlU@9MMD;kAuL(^f;V~%4( zFwEF63@bJQ!;X!@aADtK&R`obJlH18S!^@rJoXKSANv}I5x`bqgs=pR2(||!hV8>h zV7o9<*j|hbb_%13{f5!Te#huy*D(6nRg49elE?~6L1cp^C%S$F~ z6p6(J6Gda662)Reh!U{s*hH)b_6#^J;M>N?pFxU=5p!cm_;!myWC1M`q+$>}fS}?N zgOCCQ6+;+=I3TET2L>Smh!ZA3K+yGtLGS~zhUpxj0GNzM!1umP7!82f1d}eH8JM&H zp;6Gn>VP<5QURn0(8djyCRCVxOUs5K)7;R`STCLchVFr@-&f+-o$3``k-(BKIjgGd9U2-6!t z)-Y883V^8+P$on)hx$$}dNc<(?X?p*@bFx^xG)-Vlg18bPb!6R-wOid=h5GGY~;0F_f zE%1ZM#tHZxf&9$DgQX};r@%v`5i}4C8sY8@3}I6A2Zk`=gMcASVc>CZ5GIirUkN zBl?F%fgwzxQ@{`=`Z-_-Q}|b42$TMIUw~TUV!pm6s8Vvhc|-B z1>CRQA;KYq!5B*MuxJDBz?Cqqup<$JFy(lREwJm73oL57$4fgwx;@SWKRCLsx6 z2vdVB@Pmoz67Yk`8{EGJVTuFysx6qF8UR0Pu>WX86u9q*QbVL_0SsZ0 zQ!Qw@w*?dLO%#Hj4)RL^^V*BTgqyqv3}JK!ZEf6PlJEnDFztbIwGyVUPk34Oo%B8 z6S)L1geg%5{FGs0Q38H2@oE7-m?FV+jDs*0*Z@D6GH}ko@Hk}X>;?>B3i1MmFr5nq zhA@4_14EcxlYk*iVc;v&AWV!|zz`ru$4h!<$gpJq7{Zh?1`J{1_zVnTA_pxw;$hnP4*Xz>-$5fd z8lX?Ly8Ga6+X&IxA(0@+pgB%(O^|2>P!6VQK)x{X9sD5@gbJW~Sc?Dzy`zDu15ldF z^+Pm@2DdMm1Th#yJxoslAwEK>p8?6iq(ubs!ITB49wsC)^bK?n%4iL~a?8P#4agU! zc|i3r@nAu|At+x6AUT+t0r|qT38)?>E)ooaV+_i-1;_%X3#8y~36m|LX_#IB;sDj? z;2Y=+Knn;FjAS4qOqPJAVaf)?0bT{Mh$%o8Fwv2Nd@yMPnuaL=5XU5xuMv<1O#4ti zn52$?d@$Vu!~qI(ENJcs@=byA4{C-2_HG&?RSK|oFa-ee{S0Z6lwgq=h=u`Kz{GzP zSi|%L&@@a_kTwhDGo=C=OpgF@fI9}LCjw*vQy-u-m<*^fIK(uJKd3>*FHlBd8jumD zAV6s_jRBg5NeoooaLhyboB&zCGz=&WCSf|T(Th;(44`_LB#(ie1Gg$H;vOJ5m>MB% z8Pag&^nZ{9F%3u#7Q-0+5DDT9AYWK}c>E8MAbJ4R!&(wF;mQhR(+)@urY%6eFtIR$ z)NfF#4Fc90LIJwU!N8FPSqFl_^ZnvY`EwM-ypan4F3$aLL zh;HDw4z&`zJPA@2()RFSByj2@;6j3w1KOh~JToa$7NP;XDJfD7P#^<7pA;z#kq!PU zDN+j)m=#!vmm)(-q5?PZ_sNjzL;{aRA78}3Cqv4@=!+*MM;ZWZdfbn zKn~@7V*BJaewQ4n0b>PT{RmPS!XOMj?*C8+KYavw304#FJQRmGgLkEX%%0c=pTpNs zAf;h+$N!>0%EL&&D^emAVf=*;p+qV`_*4nsNBJki(@;F)QRGEf?ZaO`3T^Kb+YoyE z^P@;P7)|iAN1=@jNe#)w3sE6eVO+ucQb8LTk{T+BZ>NGb2VfwcjvA=~V;A0n`cH;1 zCVau68fJ^%rbem}351n~)!>zApj80;jekl5#`w7uei=VXgH*zV$A%~4IcdQO05pNO zqXh>$JT~G4K9?3L1Cb?ufflI%Q3jrm?hh^C-RR&YBKh!Dbl^mV$40v1iH?C23g|6f z=NOzXiWDDr45>?`6J-(w&fYO_$RNzZpQT5dz&M8wrUwTHsL_h}ZhEj25C-F!7{HN+ z@FU)a0UQQ^F>Lr!2BZv(H}M+`e-?`=!b>nBO)xPVF+cI~j7TX!vAXyHMzHaKBJlLb zk(VIq!J8ciyBo6+$B558j#Pxm694Tu(g+im7gvr~WkTu`q2iCkAICpuLOviji8qb6 zjCY9li1#C$WJVGpDgLMU#^aw6gjtYD#Q)S%wFu)Uk>`p2zvi!yi6hW+BeyaC(4z9f z2u$aZng7fe^-`SBCJ2tsKl7D8B+!Z@m;SYEl^cOv2D$#Pe08n_GDTzt(b4~HpMO+6 z;t~g;S`|5u`M0XZNGR1pn*ArQb_jvZ0D0;^szE(L?+Wt8e^e7^0;w6&{XeSNZ$h{= zvhg3=RgbXgBbYiMrLoli+pfpphgy$tVj|?0|bR*UN(tBM9=t1Nv$v=-X!9zx3S!!tLM4+yB);hg8BU21WBPJ*>1IN#skQAw$KI{&T+|{U|4aK#QvQ$1fy2 zwjN14Pw-?!ogn`IzZ*zpVkYFXp*;U_)k7+KCPC;Fs_;J!r%VXnxKX|TQF$Z?UFT7C z|8d|aAtVW*4E~c>$dd3&4CVZvyyDXY4;d8hKdP)N0jr2o{l{KMfwHn5sn|=fP(|tg zrK<@MnzT^ZzjSRr!k9j4_8({YkB@;Ap~o1t^^dFNkA78#Fl2_x`OC+AlMrr$%KS^W z%^@f_q8$FxZ=NO8+(xPYqduu7=!b&s`~T+`@(pt$V4_h}|52mE2%LD7>p#@Eyn18;F(E4%e3t(I zWpzC=wVj}oi5fu*{;#a7M`qwT0(04eT#7>Pv#wk1gq>z?u@}Kc6l>K)IAjqbMcotW z%9eso22@0l>nxQb%=blhXR829$X2D_;+ z?pOP7eSt>Zq+htYz16)0i!1v&6=7rVn{fdP@6%539XKDH{Y{_QuiA*)uP!Hb+AX%9 zp3*0~5E;oOvl6CbyacqF zCcCxBIVJ80os$X2sztAv;vBZ`n9EE}jmcxSuFFst=yxicP=rzaxGzsc`_+-FY38(a zjp5lTe&XLP5wa0)r^;)LYscS8m)49(PhGs2W%u&_@4DFscMI4}+Fm=yetE!ObmM#i z{>hZY2bE6Ooqc(Z`VoeU= z`ryT+hUc9KaLgFJMvccNCTm;X35FPW=43ou5eO zQ^nB4Yt2%N?r?n3G)-UaXL(LP-MzAz$=^NTJ~eHL?=It83XOPUm7`2?5^)UVwxSG9 zrdJ+fD4g7bon)x$XH8!t>;$ip_)>}<@i7#YCb9TH*$^Qir18D!gF3E3C%9ms_EN9y zOc3I+6BjC>)$JtWX~9G4E=KlMV}&$qaMZj-z~?iYRXz8}$cx;LYLPKAxR6gTvh<0R zEcA1r=H@=~JotF?GV`slrJk|9EZ9Zk{p*9fXe0%K0M z5+?FdDo=>0{2eorh{|I)qX$MJzIq=AZ3di6oZk`!O^%REjrM-MtwwTQ!7t_hi3UEu zumz{s^k@S*{@|}#*;#HEeQjTsQjY6N*{w732ce`WYs8m1(wpgMzrJ#JM@!vEb5@$C z(VNo@ZT)`o^OY7l!_-(0wak^$B?@=%j8~6460Iu&%JKu0wRI9b?Qz4OvrFodzbxJM zIBCs7k|Llg^g+R7q8g#))2EwsA#L=eMezj^Umdx@1Mk*Mog%%IQ%9ZAQmqQvI@Suo z3fb8cE%c`l?;{K)XYAY30(ZYs2!`p~e%RSW*^Jx}>6HstV!wMz>0PJh@`0rYdfu(u}rV!|DyMUfJy<{ zG$8ho)ro|oU5cs?kqg3S+IdFgB`;euhS8N5G|OGntUbDbQvaAHhI{HoJDXqfE{Jo& z2E|Gq_%cWD$b1-6kVy*rw-Yx&UKL#RcWsRh=JS(^-<1Z5#Jp zv%>{!IWJX)rY2@o9L(eNr_U+7%A18=N8Zw;s!19@`M@-xjx&%$$e-+u4zF8e)@B%D z>2VjzBZB3&Z|lWO)#4EA^A|rf*Ty|5%cP`bDAKH8ZVgmJFs1Z3t<<`ho<2S#Vv%M* zig_`fRdqr$>!|&&gu#SU&u(e1>-PF9v5GY~_qI~ECeVoG61`%4hD#Dk6ef=HnF^gu zGg8ASx1Z%pyraNWA;-*$7ICw;M8_LR=*3f1@?6T%d1LIicVSy)frPcV zdclr{PXBtwMN@s-U{&^e;UC0BR>VEm@6*To%F@fxFX*XM3KIehsZyeP=<=3aXI}>% zTfTZ`AVe;(eUC=d`x=f?`=UmX=7Qa`I8q^!f#s%KtiNv@znP^)`J0&h)rqsLtCtgw z-y6r3#7L?>$^7W~_HixdLZj33GRNtmNRE>fy;%Dbj~uvZ^*XUbL_wvtZ!ZX4qb62v+H8+@vdmn6bm1zwrGVT*TKb-VMb6Co*+GjY zd#-E?Ws0`&HdVTnw9i)`p#}0OKU*bkQ*LnJrY`#5oToYO>iyLZmvhmIIZq`jCY^Il zyeCM1{^%=%bROi5I^PGlW)`i+tT#LIJTL7fS|**l&zgL7+T;c;jaSm#H-g7)J|(bu zFcf5;`t`#kx-B$gCGL^B5!ZOVrH|i(O*zMzP5C1Zlb>b?4JMj=C1zD`&nqCx8hxbH z8(GV4&@`QuVa5A127Ak>-lyDY;VAYOB-WHktT`RZpo7X&wkqH9#__Cws|upay67#{ z@sP_V=)0(Ywy?SF%}1;WyQHz1@*+Jw%e_6;5^m2w^atY_C8@(czqND8IL6)Abf#5( zmWZ^NcT$=01iQWF*OWT)Bj_o=ZS6*_t*eL|*XyL;7hg{JU3961#I3nap)UE|TgPW! zvm*hd9fgD%RZl9E+D9YYqY}T!iBIm6RdSZI&LPWpFKN2Xbc+`qsUsJT360_IIc2j< z=ThXj{j&ZAH%$OfCxT%1%AG=K^$rHg$(m^fD*XrWR z6C?PV^>ww;;%uW&X_AmswXW{tPi~Kmw8;dff5?ZnbXY$0?y^?DiyLtBR!^$Q?p3x< z7{|@_&XzSV(%er9*?8V~MS`V>c7IJ#pya+@s!U64Bvu32T77yoXCN(%QRMS91qtf4 zI9+C`?cglT51bB#!JEKhed1kGx|YR zjNs4rnEl+Mp$8`@H*n!wsyETwJ2TWu_uudEpx$6!&4upAoEUND#2$ZoRj=w3N8{ae zc@5k(?UqvIq9fk%0ixoXt->~Kak35sq}kGNaEnGH^QP37MuihHt~J-wc~0>&z7~?{ zI2BXdasP$9;D_}-;y5dP&)RwnTE->HyqPl=U$*vYj5YeqTA9t2#K-qj{eLIO3v~bV z39UWiP)E)2>iy~BMz81EIgM8O0rSc|E{{L3JV)il-sZYhs^&e;%TJbEM@A)M8=qPA zP@k90&x%){L+8Ytg0V*aD~h&<-yH5{=!N1_OHoV?UDq%E8qbT|h#)N$Z3`Vg_mW`n ztv--Ue(imD$_1&=Hg{qp3jRFzYTNRXaGD*p$SUdxt2SxDvza_b&a^CocN3+(1cew4 zQf=!S=G=LOEplEdbA3B0^}tThv-$cRD}9I1nsdA96LRVJ6J;nSTw4qJ9mTSmGG*SW zbREw#xoxxWIsB|-m=eVWT&h27CD-s+-f)t;8!;k&x$Q@{ZQ@p1U;eX~31z8P$qiN1 zwM3JV(<)RKZQs2A;FCEM+AQ0pl`vZq(kkp<81G?tZ}TiJfaCt}ZH@-2o@SEeDxRa4 zrc+rKMvuIH`6cfvMq1|BmH0~JOL1a$@O3LE=Qmqd0jI+g-0(k)D=7-D)_)BRjcf?b@Y^ z5bNqWo_6J-gpWUgT86c_J9scfU|3h+rq}~JzsYx1;=84n47b^F#`mh(aOQeZ^yo6F5-zdD2ov@qZ3lJX3D{$hN~ z@2r#PY18y#ax3k%u5Zt`X){REBh2HppX}qGsC?vGqSlJ$i(pnb#wm2ILw1H;@H2}s z8J$TTn=_|C2hKR&MSC{9OYq^fgIMX$-(Mufe_r2X_C785=mS&KL1GAwZZ1*Gq3KxP z*B9;GiP6@@R|Mu`d<6~U(%OH{?lyWFemX_<`Atm?~O=-A7p z*7qAHI4dUCiHJ3942@hpitA+BvZ*`Ad5JU+JOQHi5K)x(U(p|r;ZI*Sd&yqapE96! z?R`DD@pakIZJYCbF4iJ<@204_wR20f9Vl&mZZf#Vs~>p0tt-~#P@8wCj_wAqA&=oB$^RO~Hhu$<}4s!fn5s;bIxPCHH?e2lus*)fs$(xr?sN;U$`L++YQO8W8<#COiBfX+XMR~D zPsKAjeb;^76ZTkO^&>^bb#h6Lh*zx+>auzfOX7ONCVQ4)7M{)V&nid;m{i{stJKn) zpr~jTB|R`ZTZ-&IrCp03xT&9=RJ&rWdfnv`)@adH`qS{t@zjz*wXR5<#L6?L*V^6+ zcf3WAL}yyc&G;+dM1KoqkWSB*_(fH<;Y}LbxAGAi7*vR<#Os6`lg}AsvClGBw4T7* zM!phM_IS@VP2?o}{tbzhoYoLuAxBr+BC%9Gk+B2UW{3)f{hhydAIVvBTf{t zUK0ZRKRqv0g$%Q>k+Du3nWEl zDZT@k;?3k+2v^Bxoi=Nz)ZfYIg5W~p`HMV8gDy)A%vXP4r(1LR<-l-Jh4tY-g(R{% z`JcC*m?EpPyjy}Ss>$z7tIvqp`PJ{;uN1;FS72hJmZV6b_Hj~#t^4QaWlDW{uR1ZZ zt6U2#^GZRhy&f}V`$5+;8noQ9(o|5KTOuj9OuyJQ*E{Zdue0ZlfhmVrD~6 z{ziKR=cs(wI#>AX^l664_a^!@7?Hq&54F09e2+4V1|DYqtPQy_J#wJ#>eR4NtiPB1 z%v5e-JRe;8K^Ut> zy+Pv2@3vYd##k~G)sdH)J_UQXYEW}}gX33>%zg%||!oB;EC!XLHkvCX)@nK8b$;DF9m9Vj_WR2xDa3S164&nJehw!u3T>St0`(M3kesS?qI0qnqtO+mPRJC0<$=YFR3^lj=aQtms&_-Nh z`}-*7svWCx57PYszk?rD6{m)C*p`PP=d847 z#N{#{_AL2Fe-|1mnR?UnuDSP@HjR40i)Et|6rCz}%6c*%rgINc*wj%edy0)dma<E0+bEWArU-or&wSnQ^)- zE0@2{$PJ}S2!(j5KOcPP&f*xwwG}K|&8Q*ReM>HmQI7JbgJ_n$0oQ{6hjOWNs_iL{ z1w5v<*Zd6)<#j~P6@J@!baATlarlWrqiRncX=|$U~5ng0mHDdXeyojupjdSu* z*$nAX!G(Md*c11-B1Y=|*-296m9~39M6d1r#%Se{v70KEr2e!Q4JED>wOKc}S0()V z=JbO5smys=rP3BID~s0ooyhFa1G`-54OTw|SBsuZJxeope3Yf+Pafj8!&k{B zVyhz4N$)ysxUQ_t_!*v%_+tG+!L35q)o|G;!sl4@R^WG?hyy=Y&A?xlxGTz$Nq*AB z4;?*vagSPuH$A*p<%`KFkJ;Z#^EPcuztN^;%0T^1U6eHR<->ztkx4~aM|{+z9$C?h zR}92QJ?4{%HyubG3p=xCc0!^eUxb1|ymNK#5qA(c3rA1PYN(Zty~WG-yR8u!C9sKo zv#H@0H%v7dCnvpAR?9#$Z6DZeJfKdl7pwCGrGz8m7UN^t;o7P}UL|qkH2yidmrdnS ztVrFaLDw)q+BtMZyftOyx>a`H3&=0$J011#)Vz2Rjhpst$1+Qjon%m7AhRVJ8S|*JJZ5w4!OWe_YlRf% zq!*@e`m$c$%&ghz;t!3kXJz$xoe!Sf*|;~OziS?-U-Q#h&mkwI+*~C!WGTgVE~=%^ zJ6)fbIagnwwb|caU*U(u`en3~GScT%!`cVyy5Bo%ViN6)wo;P&)l=UNc8YPYtE;Q` zRyfuf;$F9GT|lMU+=%*lk+;Mvq}pZIC`rUw1J}0cf9;Habo!o;dfGo;Fmd|R3-K@FMyvjSoXcv*?0W1 z7}E!Wbkx)5);z=AO%;NKjQwdIkj7t8@LL$Q!QEpliZhY1Nsj#8y7tbqBSqO!&&MTC z#GBga0p+ZOw`s_@^Dp}f-VBMxuCp2=*9((1ezw{h`5qStBdQAUG+sJ+*-O`mQEHDb z-tu`_afpGnK5L=;Ddeui@ixPahVV1NHB|(TLjH@vVHYTcTY1WLC6#v5-I(Ii-+lMj zbvDHHWYiF&Zl$#nd=_@&%3H(a4Iepho_d<)oXdT|54oxk{YX-U;RPl*OkJG@tGq(w zvCo5%<#_1Clwj4N_3)!Im3B*I{0(Z`2Qfn49Q{F&=K~rw4=O~(N(<$`$WmcfQuHjD z?#;FAN%zwQszmtR!r}eeyQH6Z)Y|*?hdG+yUInakkL2Dka15|i&o~o7AN*zec(O#o z6!zSRQ|o29O1;jHD2>;>FN?;melkh8zwsbgvHAGrEl!Q324}hG;ZXUC`!siDZ^bO1 zdBFH1a6XaK*oRibzV&5rZmH^#*Y_;7Dyiar$BS16y!#rtPAdA;YC|-Fp1)(>4sVFm zT=vLjRRJr$6^F-4?}r+_(jo@OuePzbp6OwX^kAC*)&EZ(*ZP zdpD9MXO=X#0FIkHA3W)7WJt?WiA?zY&pnf{FdJ?yWy9>P z2UsNGu8@{t_J#s1eqSXEukEKk;I^Vkj>--E@%_$kL1|U@wE`tC(mTthX$9ZzHVVdh zO7PqWSUxcyLo#eZ?twiq_A&elEwJ`%}Vj z>_@1O{F+XPoJy6s+>zo7nmVp;F8<^_8OLC~>wU07*Y%nF!zp2^DXPqdgjn1_B-#m2 zjoc`A-Cth5O39C4T}t3K6(qWlULD4)#_*P0@*>|8;kIzE!R&a+M`)lBhFKF z_0Xkv4=M4O+>gv5J1_q(k(!|acb5Edj&|Z37m9}xG*05IiTo}BH%pXA3fG>#jIw^@ zsTu5&a}djYtx{zaj)J^arDO-tSL-xA(X>Cch6;>V&>$w4oYj0dtChytE;8& z!g}v$r#)kCE^TsUPCtJlfm-<|&3={wO?u22!(DcnG%q=o;}^2Yt5l2hH6G(iDClmP zm4xyv6s?*fPE3BZ&2(I3;^0|8d&8_+&{yg+VO)ZQWS*$9K6rX6N=& zW%9C8oFfMeT^@zIRbSIo85Pe>^*wDaEBwKp>!N}+S*Er%LPBOHPvl(?a{~JSGX3(- ziJ6^u$1hf>lk=XVN}sNm92fR&z$xk)7S{wUhK7B2H^c8suNj>+&9JM{>L6%J^!u>C zu$$>tY>H?X5JoA)@))rAicNm=yM$D5#n_f^wQe4$a=t2eyL^4*G+%vwqH=<>?xYZ< z{m?k&c#p+c*U@)X4|e3jlP(;O%wcL~6k0$Zv5q$S-cKIU=db%CP`SpZC#haX?Z%1X>Z20E^rPB|EOOO7k9xIl-V*CEsVgs( z4Y(L9|As1uqxrKTOO2mG|C~*sv2ktf@(FCJohi@Oo#M5lPJYnQ`YI)MPObR z>p38Ae~YjX?MrHiyT4 zD$%gmNO;>*OSTwkQj3Vbm*VC3iuV(-C}XK|fST$Eb$L4V%KM^p)*|}mrzN;y4tg=F z3_+uf#NaOZ>!B2b1{L?-B=?6Y2U0NRI?&G+<_S41`4dZS2rfUV6njy`jMf+RD64DF zaCmY`BR1c##!>TD`|*<-N4)mAvlorZ2G}gCf9=^GD3D4rScSy@;9%!{OJc#(pSn^} z#>_?08F4AniE7GINcmG^4e7)eoN=2Rp)UKP$-`enk)*ED@e)pL^rIcmnT9#cPme}e zoQ@m_;d`*&BTnUgr#Q{PhsvC zr>Fv-eOTXpcPu>6Y@aFRSChFH)4PJ#(`U)#i2PnKJEa@36`aqh``Yp*gX5C>kGQ8% z--fTjj zlq9`vD5fg^Jw=?mqSg*&kBQlUpfgU_=w3a!)v|DTyIkBo%fe>~M_Ai8;`_6mZTf)URMPvhR_@GzycU161j5iOQ+Llu+Q`^EfyCXgq9t4!)a@#Bg z8P7hUd11I2bl1|w@{6x$oROIpmJoX3{nKr|g8wSEpMdLKv~$H2V`4wJ z#GO@tqb6iJ-NxK`#mM0O(AO&Sx01L^h3lbu1@-Flftq^9(qAlaXJ%NNOrF0j*FDPg zCe172O&hYf;I#Nu)k?8l73b}Imqg2XPG8>eO@#YwKI8YxZ2AtFjA?-vm}OtbQ4JLQz0_5@b~5^d{|?R!Da*Bpw(FFA9xm8 z=G?If8_z3@LjozZG>_&7ibi#{@2Wd>Ro<5sF-w&krpQs)ZWl?ps`POu88y5vUy{mJ zQtSCNf62LJ<3@mc=eqm*lOsnKjcIpq-Nxq69~V^J_8;}()R5mVm(;0s4Q-`3dBB{! zm9y{9TR#?bVyU6x^#10SW&fJs{8j6dj6)LfK5=r}qpy1+Z zZwI)EJW)sr?U79zP(4$qxzg41qJR7+&dDwO#X-A#$X6Xtbo zLUhVG)HZd~O|R{K&*k(I6B`rh<|r`ZPGmKOcMvTnXzN{+UoRD9?Bn*AqULpFu)b09 zim;om-c?QXUD&s2X=*P&_uxa*m6}Yu2P*^zvd6IlQQO9B^F|oA35McgmO*v)9{2)Jk_U+_@LjRlz>#ic>Pczr5 z**nUv=FII4uZ~;ERX+%`%?pwDFj{xAD1Kk-&E_~|IOci%O)V?e#{=qQrM<+mJ+=?4 zwO1P*S9rb5b3180`Cj3kwq+LI4Q64*c`4Otl)8F)d0yRhFTLm7u019bal3j&bp$!) zzSF{=ZS+LY`_}U`kH(x)8JU;c-#@wz%tl0=8_3)1eOWN)v#@>O(wZ}Vo-9)~B4VY= z^VYFqSz|hF?@4o`)tQ&pgY(gidENbvUROP?F5dZiSLxG7tjk`-)r&$)chxLE&U@f4 z7S8O}&JWB#ZOn^cn&?{{j52i;KZV zygU8krDZDaC3oms3S4O3%h=kf*ahMyp!v3%n1{SH2&-aWZ?hO%5G@ zcl+nh(HlN{Pa88M^aR+niNgZz+!W27C!d>t9gvzj*t5&q-@O$-fcw6+zFX-zak*e9 zOLViGT5m_ng1(4(fGE$X#KUyk!JML2Y~o?}AnV(Rnch2mBZQUw&35B!VK2QMF1O!s z-Jyv7ug+eNW8_6D9zP+?KblU^otI|f{r{KeRs=}>4?H7fJO z&pBk1x*YV&I@sGWSc@k8G@LTY>WN03weI6IBWrZm0l1M_h8R|D=bjqblc3~J!$ zJ2LKtd%pF&RoR_1gy$9Jtb6b0y!(?cOzW*;L;k=w=W$u*{3_8TocmszXy*QrSfw#z zF=FyPboIkgO8&E%X9wQCbzA!WF8jNVtBIT0*=uL7iS&F~zSm`RTYhzNYBJIBN{i2` z@U^=K9>OtSNZl{r@u8@_QQkhDRkC2M%uLT~_;p9-d~cbDk5A*L{ug=!?o#K>Q}0;} zEOI{4JCo-w#XcBjB_*(rd(@QIf5n6#s9`;EAF}}mK%IO;dO}QToZL^a{s(X`b00+d!X`mF>lRUV@D3n2dBfXTrM`cc3k}dF_S0yR)j(jW!+eP|4T4KUT_a z`L4{uTQ_Lf&SbFt^Ibu|3Rv#ts3+~7b9?38-;bJdV{`^?ybfSGavQh%;Zr|PRa>nz z|MTb9aH8FHkWbjkEcRZ7{-x`Df9A{FTGV|XXr> z12a|n5fS_~TR{;l^eM#6vk!1F<{i4?=tuIFVW&mCUY&WXmaXFR^`%peBH(AwS^$vffB8P z9>rG<1WV0sr={`LhN=oF7PZx}Y>#^fuNpr(JFN^K5xUr5)4SXuuW7=1{5HT3+ zbAN%~aVp|;VSewm-@89>UGA5D85sI_i?us$G9@2(zv6)Z?lCtKPkWL4MsMQv$DeZw zMtc)@6I)d5;+>YBt~NZVXhOPLeJIaf{JAds<6b7O*WxJt(=%tWt%!P)im8=*#f>gq z4}F-~`>TEO9}~jZQ;nU>;x4w@x^m8uUs@Tpxp&NhnOjE(20p?@XbRa{fI73iWA~UTQyHTCi>I%2U3I zReUk(d*pmR=DkI9BNr!{iIyx<92tw1DA13vPu$nSJSo{|6Kx&1wf#X#yY#G*#K!fA zHqNs*v=5^1zGb<&yl<(-_>e{ej^d-n1f-Im*v zZ;nk~4;Q&leCAVD-F{JE{>yAFt?b;$;>c9Hpm-C9sKbXyoZ^Yio0miFMD32oUB+nq zD4~}dLHb`Q=;t^!=TW3M$RrWU@ zANs8MRUGXYUk}c0{$zMN$B&um#NV3H8OBGVxsonL;pnTy#rLa4dOnV0o|L}vt39K& z;P9}A>!v5i{6(wv3Wn9K1ZIP4LoajWf3Z*MY2Pcp$TGWAa#8kp-kOU9<7E%O*t1M= z%>tBrGfW}9Tb1{_@^xFkxu%rbkFtLIRNYF zR2>wp++6u=oSeXrITUF>TM-;6gt*=S&s<%g*7LSw{0Ab{bE*!P9PZvZ%rqGz`3sR& zj38do)ZAPXS4c5lELymG#9Y-u#rC%IVW!B`>}A9>F@n{K=DTL=Wi6cV_ML`;*31}H z2TccS+go>S4>P(7P30kckqDh0T-|i0AllJNb;NgSPc~ecQXY@3~t4pW${(W*LG5iTLG8qV4<6S>rjAV~y@< zjVv}O^P%5OUDPXt1u+7(w4dEMa_&;nFWP&Vb}z?O9WLMc|GDrSbzc!2U@$DwG^a^2 zN982D*|{`Ji{pgV&nPz|I$~%*8YW@re@B=kw7_UG>a2JfDYPp7wglRUl~mP%Pw}?1 z^X*$S|06yv+q-uy?QHMjdnM4c?BpN;+A0kPx4YDUwJfde9d0??veR|FZGD#&FQAB~ z$2Uu%-{2#p(ZVrPWfj zV<|;@DXqG=+|r*`d(jQGSMR;;|DH3Se4+Qt?S1~Hf1c+%=VX>M@4n5MnO1816~>#X zyr;^+`aJ&Jk$bZj4X;i-UafQpW^yySN^)%VMR$vT^F%X2G*5~~fS!C%G-pL~lbRGy z(S(a8MKt1!lrf^2E1ET;*(aKF)TAg&ZaKkZl|BimC zm&H6kQIqB)nmB4qa!N`HBBu4E#!kevQDWPpVw*&70=M3i!V)4rF|TOoozBac3(imH zyI4KU$l%LaeY}vtQ&|IS){ReM7JRxJ@8(PII7!#zAW-S2(&x?T`RMuri%1o}@5UpU ziawdVLlC{UBw8N@7NrE#rb-L?)Pi{TRkRDet&+j4?(SHc$pehjklg*CxO`Mf;~#P0b-O*dSc&zrKQXyo%zM6rOre17Evikv@n^yIRB zVjf3&YZDPVL<)bd&_@Z9lp;GwQlWE&YS@5tCs7LNX>p>rl+mkAnOb38(2PE0jE(#8 zc`OK*_v0BX7%%iAPK98b{ycy+$L#*RD|L&^?s$Km#af{M0G>|34ynLxr;UsBX>a<=z_%tr6zSZJRRPa4g>?F)o^A%p1qQsRd){i0T~U zn%3y22|T%jLoDrfz+~h$L7GeOx5uh~9vsje2;Nqh=tK`-^ohqcQYY~M9%6KS?#;?ox7BX8ePUUed20xz4+pt*t zX(}(45KqoGiXY`$cwdJQ+ZD+4;=(IQ6C&fGss8k@9TgdO*x(!;hvO^wimr$sI7 zVQ~?kpQvAtT&9l_6X zozYq6UASX(D@7bv=jht3sq-AZfZ%&>4v%0-xMvRUWP)kEXTV$@tOnICD1)wH#ymd5 zJm-m(#=&{Kv=&DpQLA$!GhA@8hFNXYL7LUZ3EgOiLwuyT+oM#;U7P8l(;i^4*8&PR ze3MCss#lG-7joBHA_eJQ>@jp5aXgUVwj}@$Qp6`A-75tL zKg&D2I8&M>(o|gjERPuKkT{E$&j2}GDt4ta$$uRQ%#GPQo?*oz@n&)MzSDmVm0PlQ}KhC;f z$}$Pp8_Ni;uK49LiVV{+Y&nI58CbHMFEimnFx+3_-|@o#9xh3xS_ni$8+1)bs*iUI z@;O6R@oB6Zo?Jy>Wn%hj0xJtER`WELjXPHJp(Z>l8W;hu@HaS#v@1v4@GHgU5170xp$x(uO{Q{tc20q?A0MbN(cJRs|c9ma&Yr{avMGI zOX^&E2}4dNevG|0ki6$&)&|+dGdJ?7_{9e9 zg70tStyq7&wvmn-U^}i9m%PR!T?g9!)#blrAMK=_KU#D&u z_I;gqH_=|V+IaPKK2GcT-?O1c9`1(8@K`nqBX;oM zJcp-By|cRw}a$nG&bHzDQq$3?xb9341T(k zP#KFpyC~ithxxn6VU59ec2Nd524Oev*?_X#`g%emC&f!uaPdv<$F1APW5sU1ov0J_ zE-~W~9PuuZWdgqTF5k>1;@~|zhE2i+d-%Jo1he*1(nPOcQFpE|*6ihdT^xHmSx(sh z1EExxF0W?XX+6ZZvdP%?LrP=aaKML@v6f=F_^%X~eaMs29CE|X2s`4A3>MteS}Y7Q*qA`(xj>Q^%34#(&u0sBl;trP)jr*y~H0%pDUk`20n^@ z$9P0QEu_F<$GD$F;z)%t^B7fd95cDj;V1D)4agR4EWJQe325l*q!57M1U4ku1S<2a9%xP5%dxO$w=QU^Gugjpw~Ys(pAa4h3uDI<2BJXR*a zyDY4LPZ*^k3@WTxjtBnAkxj$Fr^p&i$Azc(8ze0qPLr4f;ONuDi3)t?G(W*+VA0=r zVN3{>H1qJABLW*nlDBfT^w>boxRmQH<%e*E#29wD^*@0ms(OmAVc=!nSIwP`Q!n#e_1Q{1c$sgLm;Y+AQTa6oE#4st z_RHJza!E2m#<;=@iKV_*c{@4VH{FeXSNRLIsJzsctw#vv?`MhTCDDj#?)Mj{`Mu0! zQ=02ng<{%vzgRf$1|REKqibplog@pzc3GEEjwJmR5fDn!U-^JWrn3?S`70lb<_pn$ zC#0mQUrQ-7%>uhxt%_0>=;}_jxRRUXw{&CEO`grz<9O#5KTjU$)NM+2Rs4t91>ceX zW!@ow^aL)s!xvK*beAt-PvTp5`CRJS|H${UIe7O+-j}+Zdz9+W#c}t@Ku^Kv?(vVE z>8*?V)Y}C{@lX7Qt7EJmiraswPvHL&CK{1i{9c?96V}2Ro!(QeDAv{3sDN&Vcxdno zt1>*CAc}?7E})VPiQBN)89Gahxw_VP(;1$r#d80yh&jZ|mW;md3SqS;oE)yBYdvVn z7GukL(24@wzV%?dGrenbAJ^V7{#+0AT54Q&e*Ipo`ga)Bj5Ur~AUoP2SELfjcvL71 z;YQPu^T})|5iD*f5q!2G6qpFQUNr7DggGi9KdX`4w~^lEYwoi&Gol-VH}CH7Vs`DU zwpQj9O=X>CDq$1R1%<@Tur9{MUU12S@`Z$n7B{6KxTuONRLrpc3FmpkQuDHn{fuxQ zXu}Dle*Q4Z-01bD@t!|)R$DrTg{n&TFJ56?iY)`-Me|(W9ma=&;9eUOg?iK_|7iNu z0GmV(4T5ozwW48qeH;JqS`hRiTBHR-BwL2#f?)((jvoa>I$MG6A#l<}GVqM?Z3xU) z9Y>n>+MDSe%?h?aoNmJKpkmRK&j}^xw%aXwOz-gK+9z!3@!@ z!P%l)i-zc4#UDiXGDft7;m-7S+kL$G9Aj}yn9m&>5DA9FlCGQ98lEvv4Bu~@ZVgLo zGazImdBm_f=2=ahyBh_~vK;cvjNB>O;E}=u3MWOR6yR0Y1Zol=3!>qy?*>Kjf5cKx zaR>U6s=tfkE&?uZ>jvx{1775biesRJ^~KXMFpyk*bS$Ks6Jk9P$ziShGuG>QP>5p)DoTv zFJelxbp3V2JU0R_m5IizWa4MtU~|{n#oDyw)v|48KuxsqXeLY}na#)|y-mXNSrA8E zqikp=Zf>`-eu8>7v{vI(oSA*!KBS*q|7A94jxS&H0yetVP^ju<1Vn2L&4m>)?~y_k zl0x}Ng;MV;l-NA(;my`pto!grF05hu@rB-i>;Ojf0V@f>=04ED6o8y>jUW0za4lRD ziuT9ap=JF@+up-N{UFwH_GmAx+SZ#8_3S3!PB>|zWVmeS>ajA+?GH)X`-bbrQ814+SE{AD2YVF$6# zAjqL^YL6$Cz@BQj?E*O9+pIAxJXRxG_NV>c%ukTv%`3J zG(?6`_T9<4*V06Z1{XK6K!u`oro`EjbL$$?EqCijf=gZ)RSfgl5!_h}70o_Ulq9{4 z#al@Om!?X#_|9oB(U9G^ySh|IF^L(X2DgDlZw)0Dp@ZNVbqvYX(Q`N{C+lM5sV3yu*8=_XYfyQp)bHBAY6EFNC~UiI~4@{d%^ z3by_gE&6=}I5WfOrNd9aPGa_4h<032wu`(-2WtdD0>>JHUc)d^uue9~I5L+^1v`a- z^T3Cl#)NqU^rtv(9?8fVe19JFW@pj!DQLky!=$I6Kl>kC@)QZ}IXv2$hP4pk@{32s!6GG*MJiii4S!xq zam7U}e;IZ=)7L!q@#U?I_N(Bt{}BE175}7}>L`k$nNyiyP>uV+f$?3vt(S1!8i@Z7 zshzA~+3W$rTF5f-dO6+5Uki`b!pJ&DNn&KnQS;V8rsK+}1mEtz9`bXm=Mz6yub}CY zCkTmX*0@C))p9SbgA?pB?pzN=WW1VgAcLghkPR@C2#~msuldwCzX2+L`weaxGH(>C zLVwqgS=94uDU=C>oTEAhS-(blUiK>!_SdMOzZsscg?SRrx|GKn%zI&LZP|*sBH1** z0#$M2Z{i8e-U{LIzd>0|UW@3)#(!M9m3;RVytS3g>|#vV1~Kd^7H@;^*)`1H4#m{% z+77#&=<6hWOS$pb+wfB@+AGUxe-NSY-VS)dabEY(eNwqvdeLUwyAxUxqL+74_<9d5 zyI_n&?d{3Nj9rv1{B|PNsK4N`J>b=JF;!rzJYC%tKj`hJ1VxcOmG_&-F{fBxMs+U? zlb71r<TI2CHg|mbhylgm-qxw}()W_mQOXN;cX!7(->bko}OQT7Sj~`(d|g{RJZq zK)NP4w#S%q03HWgczpXHWRq9zc!;VKZrJY-`B7J6@gZo)Xnpm{4`GBn{(S=uQz+z^ zs?zRDK;%Lg3CIW?S006Na)QG~gHNCncYNpjp{Pzwz(2+r#|fSuxcxYcBmDQi}%ha{HFnB=VndHY8uRT2Xm0qe(M$I}oe zFLB%`KMmz7Ym8Sug*3+|^r6g5PHgIy5DW8);%-LG>)`Y=BzhjW`V4fo#L*X&yNQ)= zAr+7G#cOBa8F~Fv#+&h@9-4qQRGDmW}9N!MM$6()f+Fu zC|ZAMxdg$qcsTkJbYS5){t}eP%U>|gUxF6@siJ6;D-8b@RzjD3{GxIATX>tPkcZaq z!Kd;wx}WGF?k8HS1gV2XBk$rq_^?NskD!cvYD0>HFq9I#|KkG`9uG!NG%GDYj<^C{ zD;w#NiV{m9i$BHl;SFf1dJ~m0g)pEsoRKPF zIRq4mT&=T6j#b*`@}Wr-B`(XeUVcT{)X@{822PydW*vRb0$ zQ!{oQk~bkmxW~Tfikja zY=0ekd&JN^2EEkc%*s{8pHkh5&=6dHos6^_?!QjiMJ%4VPBIpYZa1il!;BlyjkU#v zH%P|f@z4$OTM78%4az(cG4CeKp!JqVZ&Kw$#R<2_wy3!77RhFNtaqC{eG@n5h;z1PoJ@iS~uEs=UEok!2|aK$$lM=-5*fNNttji!ona#pPe zR3)CW=gLUEqoQOD#|=!23|gGfL+@msMGsoiqh8MKj&2>LZ?JYSHkA}#gl+cYhB0;p5R)VE19Nv>*=V7*60UXD_Sa;0oqbpws#)1 zX%N#u&%{BRww_k*F()mDx?WD&I+kVJcG7w?%4WN{Xjx%Y7wBMp)yq=}1sA!LqY-UM zvc5xG!facH>e;y6MH>stvh?m4uG~ptRrBR2!h?98+IQgDr7-E^ZW~ zt#Nv9{7#Ivi&2{fGspsMG23jKQ3ZhYci`E+66{BPtvAsCfqAg(g zc*~-t!;3WdhFT~1JW?Nk*Tminq543KaHG9nCFz5( zz)j15i}5sC??%U6j-=6dZgku?p)?A0r{lg8+XlO9i4CvNHo{HHR;zN1cGtq;TC_eG z54&s0a6OVnE{(JVZSGC6u}dSZgEsfJ*s9B|cg1iw4c+G63)KhTpQ-gDXl$2teC9-5Ee97Tz>9`*APg5#>R z1Q+oHT4{k^fLlDY@!*%K567mS#G-&K8a?Vs3=9;bqcmd8FvN>4R*2bNS{yAgoav=C zhfp7V1g;UIa4|X}MiF9kU5r|l>LbzDTbre|u`Z$EGH>lAh>oG%9efDj*mN4r@X>lh z+phX3{KQAgg@hcv2!nmKfzU2gAC0qoiJVD8^SUaj;AX!Y0HLGM(3BJTFrvT04I7C_x3%ni`i#TSN<_N36Ss_-VY z7Sf@r!a{1N$x*dx7ST@nSgvASrk7wu6FPIGJ8g;-XO8?kwLi;IA3AHSICEt6nR&G1 z0-dS9sZTa|ptg%;7SRJBN~}1ns6AJdeEL-tJwcXZCH<<3UeOd~5B;i&){+T(kA77} z^GGSy(66ef%tcY2re9SNLNhIeRt0u$MuaR5(x>2sW+dTb18CGJh-7QLH;qz)w27$opS+F*YmE-YXI&d0Z4A#;Drqidom5_Wd3xx?}o8$)Td)wh_)1F z7V8ywHbk3Jf3`5oo+C2C^cgsyxfTbHi_s!6da@;r-fynOYjdqH>5t(*n`;}idDeOQ zOx)N)dmiTJ=(DhMs5VerXkDz&#+9Mka^I%|2&_c=yg0@x-AnzxdoDlL?5qM-*hBXldKhieJ2v;~c3g=;aej1K%?3I-WH delta 93264 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 z z#o3@{DqbDjT*X%D!}1*R2Nm;GvVq>*FwR9f809~*+hctX@x#l` z!4VkZEex3nLlrYVOflob6*E3UF&i{eF%L|m6!S$6f3$LJf@6$g-u*u8Ee#vQ9y|&@ zWP8B#|6|B^%ngo>@Z;#9i?hMw6r;hu8SkyQBVmGK_GqGFR`7&k#(l+Xz>|vE$DBgh{uTabp zS*e))S`{+JpChn3bOd)&YrseB2>gZuj=8ZD;8!t1M{S%Vwhle~#4;PaUNIZI0VAa2 z8y$20nXt(@V6%eFiWz@RF&nW(G1tIW#q9Cxith%$fd;z`;6hy(OPOg^Lg?ZTT}WU#z-q^G|{^BlaeEC-P76{Lcrc;9YMs z9l~tkF7Ro~yx`c40**OCdm{WkD%SD6iaCP&6tnz(VSD~(0)7enjtV|d%=kgYtl&e% zjDO_4ent`Bl!ZjD(u>Lo&_bTk7B~oYPnXUxNAInm7ag$}$hdpL^Rv=7@Zu zI5+sBVjj3IDb9mxFL{1Y!A%5t5qcR3*X#y*BH;@7hUIaHJLUyxHOv1¥*$zl!|t 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 LUDP<pveVyZY@FP{?xz41WXgmJf>ih2yeu)* zvtvg2Joco?j*JSM`8ejB<1}MnWMF1sU@+Uf`PyejMw89UZ&Wh|nlNZHm@*hLm@^mw zX>$exhBSs$AT(u2Vn}8%V@P2z0m>u;WkApnC~m@F3513~Yz7oD2I??jumJLnz~YIM Wi*K2;nlR`w7;N5n%b$^nfdK#?eppBV delta 299 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 z%0A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

T(yPB6x&qJXIN9RklMWW*p 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

Not a comment: a comment is static metadata, block skip is a runtime toggle that can change per machine/operator setting. + + +
+
CallFrame
+

One entry in Frames. Holds the caller-side +information consumers need to “unwind” or “look back” — currently +only the relative file path of the caller, used by +SubProgramReturnSyntax on +M99 P{seq} to locate the caller's N{seq} block.

+
+
+
+
CallStack
+

JSON-section data shape representing the active call-frame stack on +a block — pushed by call-and-inline syntaxes +(SubProgramCallSyntax for M98/M198, +FanucMacroCallSyntax for G65, and +FanucModalMacroSyntax's expansion +phase for G66 implicit triggers) and popped by +SubProgramReturnSyntax on M99. Every +block between push and pop carries the section forward via +ModalCarrySyntax; the caller's blocks +before push and after pop carry the surrounding stack state +(typically empty when running from the main file).

+

+The section is wrapped in a JsonObject rather than +exposed as a bare JsonArray so it fits ModalCarry's +"deep-clone JsonObject" carry pattern — the array of frames lives +inside Frames. +

@@ -164,6 +194,97 @@ Heidenhain: CYCL DEF 247 (Datum Preset) / CYCL DEF 7 (Datum Shift).
Dwell

Section key holder + concrete implementation for IDwellDef.

+
+
+
+
FanucGoto
+

Fanuc Custom Macro B GOTO record. Stamped on the host block by +FanucGotoSyntax after the control-flow +decision has been made; produced earlier by +FanucGotoParsingSyntax as a parsing-stage +sub-section (Parsing.FanucGoto) carrying the raw captured fields.

+

+Two source forms map to the same shape: +

  • GOTO <n> — unconditional jump. Condition is null.
  • IF [<bool-expr>] GOTO <n> — conditional jump. + Condition holds the expression text from inside the + brackets.
+ +

+At parsing time N is a raw token from the source — it may +be a literal ("100"), a variable reference ("#1"), or a +bracketed expression ("#[#2+5]"). VariableEvaluatorSyntax +substitutes a resolved literal back into the same field in the +Evaluation bundle; FanucGotoSyntax then +int.TryParses the final string to produce an int target. +

+
+
+
+
FanucIfThen
+

Fanuc Custom Macro B IF [<cond>] THEN <body> +single-block conditional record. Stamped on the host block by +FanucIfThenSyntax after the gate +decision; produced earlier by +FanucIfThenParsingSyntax as a parsing-stage +sub-section (Parsing.FanucIfThen) carrying the raw captured fields +plus an internal PendingAssignments sub-object harvested from the +body text.

+

+Spec: IF [bool-expr] THEN <stmt> executes <stmt> +only when the condition is truthy. Unlike FanucGoto's +conditional form there is no jump — the body affects the current block +only, no source splice, no label scan, no iteration watchdog. The most +common body shape is a single Custom Macro B assignment +(#nnn = <expr>); multiple assignments in one body are also +accepted and lifted together. +

+

+Condition is held as a string at parsing time so +VariableEvaluatorSyntax's pass-2 tree walk can substitute +it to a numeric JsonValue in place; +the FanucIfThenSyntax tail then reads the resolved node polymorphically +via the same ReadCondition shape used by +FanucGotoSyntax. +

+
+
+
+
FanucMacroCall
+

One-shot custom-macro-call record written by +FanucMacroCallSyntax. Lives on both the +G65 host block (the caller) and every inlined block of the +macro body — so a cache-dump reader can land on any block inside the +macro and immediately see “this block belongs to a G65 call of +File with these argument bindings” without back-walking +to find the host.

+

+Each inlined block additionally carries the resolved +Vars.Local #1-#26 bindings derived from Args +(see FanucMacroArgumentMap), so +LocalVariableLookup +resolves macro args in a single-block lookup. Frame isolation is +structural: caller blocks never have Vars.Local written, so +after the macro body ends, the next caller block reads null +for any #1-#26 without any explicit frame marker. +

+
+
+
+
FanucModalMacro
+

Modal-macro-call record left by +FanucModalMacroSyntax. Carries Fanuc +G66 setup state forward block-to-block until cancelled by +G67. The section is also written on the G67 block itself +(with Term = “G67”) so cache dumps show the cancel +edge; subsequent blocks then carry no section at all.

+

+Per-block expansion of the modal call into an actual macro inline at +every positioning move is not yet implemented — a +FanucModalMacro--NotExpanded warning is emitted on the setup +block to flag the simulation gap. The setup state itself is captured +faithfully so external tooling can detect "this block sits inside a +G66 modal" via the carried section. +

@@ -215,6 +336,32 @@ do not share this key, because their data shapes are richer.
MachineCoordinateState

Section key holder for IMachineCoordinateStateDef.

+
+
+
+
MacroFrame
+

Top-level integer marker stamped onto a SyntaxPiece's JSON +to identify which call frame the block belongs to. Brand-agnostic by +design — written by FanucMacroCallSyntax +today, reusable by any future call-inlining syntax (Fanuc G66 +modal expansion, Heidenhain LBL CALL, …) that needs +local-variable isolation across call boundaries.

+

+Semantics: the value is an opaque id; only equality matters. Two +blocks with the same MacroFrame id share a call frame +(locals visible across them via single-step carry); two blocks with +different ids do not. The id 0 is reserved for the main +program frame and is returned by Get(JsonObject) when the field is +absent — so a plain caller block needs no stamp and yet compares +distinct from any inlined frame. +

+

+Stored as a top-level JSON int (not an object section) so it stays +lightweight on every inlined block. Decoupled from +FanucMacroCall: that section is a diagnostic record of +the call (what file, what args), while MacroFrame is the +purely functional marker the local-variable I/O syntaxes consult. +

@@ -274,11 +421,19 @@ do not share this key, because their data shapes are richer.
SubProgramCall
-

Subprogram call record left on the M98 / M198 host block by -SubProgramCallSyntax after the subprogram -file has been inlined into the source layer. The call itself emits no -motion act; this section is bookkeeping so cache dumps and diagnostic -readers can see "this block triggered an inline of file File".

+

Subprogram call record left by +SubProgramCallSyntax on the M98 / +M198 host block and on every inlined body block. The call itself +emits no motion act; this section is bookkeeping so cache dumps and +diagnostic readers can see "this block triggered (or sits inside) +an inline of program P".

+

+M98 and M198 share the exact same section shape. The +difference between them is purely environmental — which folder the +resolver looks in (SubProgramFolderConfig.InternalFolder vs +ExternalFolder) — and that lives on the dependency, not in +this JSON record. +

@@ -286,8 +441,7 @@ readers can see "this block triggered an inline of file File&q

Subprogram return record left on the M99 host block by SubProgramReturnSyntax. Return blocks produce no motion acts; this section makes the consumed M99 visible -in cache dumps and reserves a slot for future M99 P{seq} -(return-to-sequence-number) support.

+in cache dumps and surfaces the M99 P{seq} jump decision.

@@ -459,11 +613,24 @@ as NaN sentinels.
IMotionEventDef
-

One-shot motion event — present only on blocks that actually issue a -motion command. Used by motion semantics (McLinearMotionSemantic, +

One-shot motion event — present on every block whose source programmed +a motion command, regardless of whether the resulting displacement is non-zero. +A redundant G01 X10 on a block already at X10 still gets a +MotionEvent; the motion semantics +(McLinearMotionSemantic, McArcMotionSemantic, ClLinearMotionSemantic) -as the trigger to emit motion IAct. NOT carried -forward across blocks. Property names are used as JSON keys via nameof.

+then early-return on distance <= 0 and emit no +IAct. NOT carried forward across blocks.

+

+Reason for the "programmed, not displaced" definition: Fanuc G66 modal +macro fires once per programmed motion command (per Fanuc spec — +no distance gate), so FanucModalMacroSyntax.Expansion uses +MotionEvent presence as its trigger. Suppressing the section +on zero-distance moves would silently change G66 behaviour. The modal +sibling MotionState separately latches the Group-01 mode for +readers that only need to know "what G-code is active". +

+Property names are used as JSON keys via nameof.
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html new file mode 100644 index 00000000..fb1a5379 --- /dev/null +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html @@ -0,0 +1,387 @@ + + + + + Enum BareG28Behavior | HiAPI-C# 2025 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum BareG28Behavior +

+ +
+
Namespace
Hi.NcParsers.LogicSyntaxs
+
Assembly
HiMech.dll
+
+ +

Writes ICompoundMotionDef section for G28 reference point return. +Reads intermediate XYZ from Parsing.G28 +(written by G28Syntax) +and converts to machine coordinates via +ResolveProgramXyz(JsonNode, LazyLinkedListNode<SyntaxPiece>, ISentenceCarrier, NcDiagnosticProgress).

+

+Must be placed after LinearMotionSyntax in the syntax chain. +Removes the IMotionEventDef section written by +LinearMotionSyntax (G28 handles its own motion). +Overwrites root MachineCoordinateState +and ProgramXyz with reference position +for subsequent block lookback. +

+
+
+ +
+
public enum BareG28Behavior
+
+ + + + + + + + +
+
Extension Methods
+
+ + + + + + + + +
+ +

Fields +

+
+
Alarm = 0
+ +

Emit Coord-RefReturn–003 validation error and +consume the bare G28 without emitting motion.

+
+
AllAxesHome = 1
+ +

Interpret bare G28 as if every configured axis were +listed at its current modal value, so item 0 (intermediate) is +a no-op and item 1 sends each configured axis to its home. +Requires an IMachineAxisConfig dep; without one +the syntax falls back to Alarm.

+
+
+ +

Examples

+

All cases hardcode a TestDeps.HomeMc with X/Y home at 0 and Z +home at 100 (typical mill where Z-home is above the table) and leave +the ProgramToMcTransform chain at identity so the final +ProgramXyz equals MachineCoordinateState. The G28 +pattern emits a 2-item CompoundMotion: item 0 is the +intermediate point in ProgramXyz, item 1 is the final position +in MachineCoordinateState. Axes not present in the G28 block +keep the previous-block MC value rather than going home.

+

+G91 G28 X0 Y0 Z0 with a #Previous: block carrying +MachineCoordinateState=(50,60,70) — all three axes go home, +so the final MC is the configured home (0,0,100): +

+#Previous: +
{ "MachineCoordinateState": { "X": 50, "Y": 60, "Z": 70 } }
+#BeforeBuild: +
{ "Parsing": { "G28": { "X": 0, "Y": 0, "Z": 0 } } }
+#AfterBuild: +
{
+  "CompoundMotion": {
+    "Term": "G28",
+    "Items": [
+      {
+        "MotionEvent": { "Form": "McLinear", "IsRapid": true },
+        "ProgramXyz": { "X": 0, "Y": 0, "Z": 0 }
+      },
+      {
+        "MotionEvent": { "Form": "McLinear", "IsRapid": true },
+        "MachineCoordinateState": { "X": 0, "Y": 0, "Z": 100 }
+      }
+    ]
+  },
+  "ProgramXyz": { "X": 0, "Y": 0, "Z": 100 }
+}
+G91 G28 Z0 — only Z goes to its home; X/Y inherit from the +previous block's MC. Item 0's intermediate ProgramXyz takes +X/Y from the inherited program XYZ (= previous MC under identity +transform) and Z from the literal 0 in the G28 block: +#Previous: +
{ "MachineCoordinateState": { "X": 50, "Y": 60, "Z": 70 } }
+#BeforeBuild: +
{ "Parsing": { "G28": { "Z": 0 } } }
+#AfterBuild: +
{
+  "CompoundMotion": {
+    "Term": "G28",
+    "Items": [
+      {
+        "MotionEvent": { "Form": "McLinear", "IsRapid": true },
+        "ProgramXyz": { "X": 50, "Y": 60, "Z": 0 }
+      },
+      {
+        "MotionEvent": { "Form": "McLinear", "IsRapid": true },
+        "MachineCoordinateState": { "X": 50, "Y": 60, "Z": 100 }
+      }
+    ]
+  },
+  "ProgramXyz": { "X": 50, "Y": 60, "Z": 100 }
+}
+No IHomeMcConfig dep on the dependency list — the +syntax early-returns and the G28 sub-section stays in Parsing +for an upstream consumer or downstream syntax to handle: +#BeforeBuild: +
{ "Parsing": { "G28": { "X": 0, "Y": 0, "Z": 0 } } }
+#AfterBuild: +
{ "Parsing": { "G28": { "X": 0, "Y": 0, "Z": 0 } } }
+

+Rotary cases below add TestDeps.AxisConfig declaring B as +rotary and extend HomeMc with the conventional B home at 0°. +Each rotary block uses literal B = 45° so item 0's intermediate +(45°), item 1's home (0°), and #Previous: modal B (30°) are +pairwise distinct — a test that swaps any two values for any other +is caught by the assertion. The wrap pass +(McAbcCyclicPathSyntax) is a different syntax, so +these per-SUT conformance assertions show only the raw literal / +canonical-home values written by this syntax, before any cyclic +normalization runs. +

+G91 G28 B45. — pure rotary G28. Emits a 2-item +CompoundMotion whose items carry only ABC keys in MC; no XYZ +ProgramXyz and no XYZ MC because the block doesn't reference +X/Y/Z (and the conformance harness doesn't run +McXyzSyntax downstream — in the full pipeline that +syntax fills root MachineCoordinateState's XYZ from root +ProgramXyz, but with no XYZ in the block there's nothing to +fill anyway). Root MC.B holds the canonical home for modal +carry-forward; root ProgramXyz is not written: +#BeforeBuild: +
{ "Parsing": { "G28": { "B": 45 } } }
+#AfterBuild: +
{
+  "MachineCoordinateState": { "B": 0 },
+  "CompoundMotion": {
+    "Term": "G28",
+    "Items": [
+      {
+        "MotionEvent": { "Form": "McLinear", "IsRapid": true },
+        "MachineCoordinateState": { "B": 45 }
+      },
+      {
+        "MotionEvent": { "Form": "McLinear", "IsRapid": true },
+        "MachineCoordinateState": { "B": 0 }
+      }
+    ]
+  }
+}
+G28 X0. B45. mixed XYZ + rotary. Both axis kinds occupy the +same two items: item 0 carries the XYZ intermediate +ProgramXyz alongside the rotary literal in MC; item 1 +carries the final XYZ MC alongside the rotary home in MC. Root +MachineCoordinateState here holds only the rotary modal value +(B = 0, the home); the XYZ portion of root MC would be filled by +the downstream McXyzSyntax in the full pipeline +(out of scope for this per-SUT conformance). Root +MachineCoordinateState appears first because the +rotary-home write happens before CompoundMotion / +ProgramXyz are inserted. #Previous: carries B = 30 so +the prev rotary modal is distinct from both the literal (45) and +the home (0): +#Previous: +
{ "MachineCoordinateState": { "X": 50, "Y": 60, "Z": 70, "B": 30 } }
+#BeforeBuild: +
{ "Parsing": { "G28": { "X": 0, "B": 45 } } }
+#AfterBuild: +
{
+  "MachineCoordinateState": { "B": 0 },
+  "CompoundMotion": {
+    "Term": "G28",
+    "Items": [
+      {
+        "MotionEvent": { "Form": "McLinear", "IsRapid": true },
+        "ProgramXyz": { "X": 0, "Y": 60, "Z": 70 },
+        "MachineCoordinateState": { "B": 45 }
+      },
+      {
+        "MotionEvent": { "Form": "McLinear", "IsRapid": true },
+        "MachineCoordinateState": { "X": 0, "Y": 60, "Z": 70, "B": 0 }
+      }
+    ]
+  },
+  "ProgramXyz": { "X": 0, "Y": 60, "Z": 70 }
+}
+

+Bare G28 — no axis specifiers — exercises the configurable +BareG28 policy. Default Alarm +emits Coord-RefReturn--003 and consumes the G28 without +motion (the diagnostic surfaces through the +NcDiagnosticProgress sink, not the block JSON, so the +canonical #AfterBuild is just an empty object): +

+#BeforeBuild: +
{ "Parsing": { "G28": {} } }
+#AfterBuild: +
{}
+Bare G28 with BareG28 set to +AllAxesHome: the syntax synthesises a +literal at the inherited program position for every configured +linear axis and the previous modal angle for every configured +rotary axis (here X/Y/Z taken from the #Previous: MC under +the identity ProgramToMcTransform, B taken from the prev +modal). Item 0's intermediate therefore equals current (no motion +in stage 1) and item 1 sends each axis to its home: +#Previous: +
{ "MachineCoordinateState": { "X": 10, "Y": 20, "Z": 30, "B": 45 } }
+#BeforeBuild: +
{ "Parsing": { "G28": {} } }
+#AfterBuild: +
{
+  "MachineCoordinateState": { "B": 0 },
+  "CompoundMotion": {
+    "Term": "G28",
+    "Items": [
+      {
+        "MotionEvent": { "Form": "McLinear", "IsRapid": true },
+        "ProgramXyz": { "X": 10, "Y": 20, "Z": 30 },
+        "MachineCoordinateState": { "B": 45 }
+      },
+      {
+        "MotionEvent": { "Form": "McLinear", "IsRapid": true },
+        "MachineCoordinateState": { "X": 0, "Y": 0, "Z": 100, "B": 0 }
+      }
+    ]
+  },
+  "ProgramXyz": { "X": 0, "Y": 0, "Z": 100 }
+}
+ + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html index 44b78e9e..c8bfc890 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html @@ -195,6 +195,161 @@ writes a MotionEve
+

Examples

+

All cases below have the current block's ProgramXyz already +set (as a prior ProgramXyzSyntax would have produced) +and run with no #Previous:, so GetLastProgramXyz +returns Vec3d.Zero. The G17 XY plane is implicit +(no PlaneSelect section means PlaneNormalDir = 2).

+

+G02 with I/J — quarter arc from (0,0,0) to (10,0,0) +around (5,0,0); I=5 J=0 are incremental offsets from start +to center. The G02 flag is consumed (Parsing removed +once empty); MotionState + MotionEvent are written: +

+#BeforeBuild: +
{
+  "Parsing": { "Flags": ["G02"], "I": 5, "J": 0 },
+  "ProgramXyz": { "X": 10, "Y": 0, "Z": 0 }
+}
+#AfterBuild: +
{
+  "ProgramXyz": { "X": 10, "Y": 0, "Z": 0 },
+  "MotionState": { "Term": "G02" },
+  "MotionEvent": {
+    "Form": "McArc",
+    "ArcCenter": { "X": 5, "Y": 0, "Z": 0 },
+    "PlaneNormalDir": 2,
+    "IsCcw": false,
+    "AdditionalCircleNum": 0
+  }
+}
+Modal carry of G02: no motion flag on the current block but a +#Previous: MotionState.Term = "G02" tells us we are +still in circular mode. I/J on the current block describe the arc +the same way: +#Previous: +
{ "MotionState": { "Term": "G02" } }
+#BeforeBuild: +
{
+  "Parsing": { "I": 5, "J": 0 },
+  "ProgramXyz": { "X": 10, "Y": 0, "Z": 0 }
+}
+#AfterBuild: +
{
+  "ProgramXyz": { "X": 10, "Y": 0, "Z": 0 },
+  "MotionState": { "Term": "G02" },
+  "MotionEvent": {
+    "Form": "McArc",
+    "ArcCenter": { "X": 5, "Y": 0, "Z": 0 },
+    "PlaneNormalDir": 2,
+    "IsCcw": false,
+    "AdditionalCircleNum": 0
+  }
+}
+No I/J/K/R on the block — the per-block arc data is missing, so +the syntax bails out early; the G02 flag stays in +Parsing.Flags for some other syntax to act on (or to surface +as residue if no one does): +#BeforeBuild: +
{
+  "Parsing": { "Flags": ["G02"] },
+  "ProgramXyz": { "X": 10, "Y": 0, "Z": 0 }
+}
+#AfterBuild: +
{
+  "Parsing": { "Flags": ["G02"] },
+  "ProgramXyz": { "X": 10, "Y": 0, "Z": 0 }
+}
+R-format degenerate (chord = 2R, semicircle): start (0,0,0) +→ end (10,0,0), R=5. perpDistSq resolves to 0 so the +computed center collapses to the chord midpoint (5,0,0); no +sqrt drift on this branch: +#BeforeBuild: +
{
+  "Parsing": { "Flags": ["G02"], "R": 5 },
+  "ProgramXyz": { "X": 10, "Y": 0, "Z": 0 }
+}
+#AfterBuild: +
{
+  "ProgramXyz": { "X": 10, "Y": 0, "Z": 0 },
+  "MotionState": { "Term": "G02" },
+  "MotionEvent": {
+    "Form": "McArc",
+    "ArcCenter": { "X": 5, "Y": 0, "Z": 0 },
+    "PlaneNormalDir": 2,
+    "IsCcw": false,
+    "AdditionalCircleNum": 0
+  }
+}
+R-format non-trivial: G02 90° arc from (0,0,0) to +(10,10,0) with R=10. The center comes from the cross-product ++ sqrt + normalize path inside ResolveCenterFromR(Vec3d, Vec3d, int, bool, double), +but for this particular axis-aligned chord the rounding errors +cancel and the center lands at exactly (10, 0, 0) — i.e. +no ULP drift here, in contrast to e.g. +McAbcCyclicPathSyntax's rad/deg round-trip: +#BeforeBuild: +
{
+  "Parsing": { "Flags": ["G02"], "R": 10 },
+  "ProgramXyz": { "X": 10, "Y": 10, "Z": 0 }
+}
+#AfterBuild: +
{
+  "ProgramXyz": { "X": 10, "Y": 10, "Z": 0 },
+  "MotionState": { "Term": "G02" },
+  "MotionEvent": {
+    "Form": "McArc",
+    "ArcCenter": { "X": 10, "Y": 0, "Z": 0 },
+    "PlaneNormalDir": 2,
+    "IsCcw": false,
+    "AdditionalCircleNum": 0
+  }
+}
+G03 CCW with I/J — same geometry as case 0 (start (0,0,0), +end (10,0,0), I=5 J=0 → center (5,0,0)) but the G03 +flag flips IsCcw to true. Direction is the only +differentiating output; arc-center math is unchanged: +#BeforeBuild: +
{
+  "Parsing": { "Flags": ["G03"], "I": 5, "J": 0 },
+  "ProgramXyz": { "X": 10, "Y": 0, "Z": 0 }
+}
+#AfterBuild: +
{
+  "ProgramXyz": { "X": 10, "Y": 0, "Z": 0 },
+  "MotionState": { "Term": "G03" },
+  "MotionEvent": {
+    "Form": "McArc",
+    "ArcCenter": { "X": 5, "Y": 0, "Z": 0 },
+    "PlaneNormalDir": 2,
+    "IsCcw": true,
+    "AdditionalCircleNum": 0
+  }
+}
+Full circle G02 — start == end (both (0,0,0)), I=5 J=0 +places center off-start at (5,0,0). The +isFullCircle guard (chord length < 1e-6 and +center-to-start > 1e-6) flips AdditionalCircleNum to 1 +so a downstream motion semantic knows to draw the closed loop: +#BeforeBuild: +
{
+  "Parsing": { "Flags": ["G02"], "I": 5, "J": 0 },
+  "ProgramXyz": { "X": 0, "Y": 0, "Z": 0 }
+}
+#AfterBuild: +
{
+  "ProgramXyz": { "X": 0, "Y": 0, "Z": 0 },
+  "MotionState": { "Term": "G02" },
+  "MotionEvent": {
+    "Form": "McArc",
+    "ArcCenter": { "X": 5, "Y": 0, "Z": 0 },
+    "PlaneNormalDir": 2,
+    "IsCcw": false,
+    "AdditionalCircleNum": 1
+  }
+}
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html index a83a881b..07ec9fb0 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html @@ -185,6 +185,28 @@ Modal — persists via backward lookback.

+

Examples

+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["M08"] } }
+

#AfterBuild:

+
{ "Coolant": { "IsOn": true, "Mode": "Flood" } }
+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["M09", "M03"] } }
+

#AfterBuild:

+
{
+  "Parsing": { "Flags": ["M03"] },
+  "Coolant": { "IsOn": false, "Mode": "Off" }
+}
+

#Previous:

+
{ "Coolant": { "IsOn": true, "Mode": "Mist" } }
+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["M03"] } }
+

#AfterBuild:

+
{
+  "Parsing": { "Flags": ["M03"] },
+  "Coolant": { "IsOn": true, "Mode": "Mist" }
+}
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html index d5e44c96..e7ba771f 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html @@ -190,6 +190,37 @@ Modal carry to subsequent blocks is handled by
+

Examples

+

First block of the stream (no #Previous:) — stamps the default +disabled section so downstream modal lookback always sees a concrete +PathSmoothing: +#BeforeBuild:

+
{ }
+

#AfterBuild:

+
{ "PathSmoothing": { "IsEnabled": false, "Term": "G05.1" } }
+

G05.1 Q1 with no R — enables, no Level emitted: +#Previous:

+
{ "PathSmoothing": { "IsEnabled": false, "Term": "G05.1" } }
+

#BeforeBuild:

+
{ "Parsing": { "G05.1": { "Q": 1 } } }
+

#AfterBuild:

+
{ "PathSmoothing": { "IsEnabled": true, "Term": "G05.1" } }
+

G05.1 Q1 R3 — enables and preserves the precision level: +#Previous:

+
{ "PathSmoothing": { "IsEnabled": false, "Term": "G05.1" } }
+

#BeforeBuild:

+
{ "Parsing": { "G05.1": { "Q": 1, "R": 3 } } }
+

#AfterBuild:

+
{ "PathSmoothing": { "IsEnabled": true, "Term": "G05.1", "Level": 3 } }
+

G05.1 Q0 — disables; any prior Level is dropped (R only meaningful +when enabling): +#Previous:

+
{ "PathSmoothing": { "IsEnabled": true, "Term": "G05.1", "Level": 3 } }
+

#BeforeBuild:

+
{ "Parsing": { "G05.1": { "Q": 0 } } }
+

#AfterBuild:

+
{ "PathSmoothing": { "IsEnabled": false, "Term": "G05.1" } }
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html index fa98944c..14349bc0 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html @@ -182,6 +182,35 @@ Writes resolved state to a Examples +

New F value with explicit G94 mode — both consumed, Unit +derived as mm/min (G94 default): +#BeforeBuild:

+
{ "Parsing": { "Flags": ["G94"], "F": 100 } }
+

#AfterBuild:

+
{ "Feedrate": { "FeedrateValue": 100, "Term": "G94", "Unit": "mm/min" } }
+

G95 mode flag only — feedrate value inherited from +#Previous:; unit recomputed (mm/rev) from the new term: +#Previous:

+
{ "Feedrate": { "FeedrateValue": 50, "Term": "G94", "Unit": "mm/min" } }
+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["G95"] } }
+

#AfterBuild:

+
{ "Feedrate": { "FeedrateValue": 50, "Term": "G95", "Unit": "mm/rev" } }
+

F value only (no G94/G95 on this block) alongside an unrelated M03 +flag — mode inherits from #Previous:; M03 stays in +Parsing.Flags because CleanupParsing is only invoked +on the mode-flag branch: +#Previous:

+
{ "Feedrate": { "FeedrateValue": 50, "Term": "G95", "Unit": "mm/rev" } }
+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["M03"], "F": 200 } }
+

#AfterBuild:

+
{
+  "Parsing": { "Flags": ["M03"] },
+  "Feedrate": { "FeedrateValue": 200, "Term": "G95", "Unit": "mm/rev" }
+}
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html index f539b030..c67fa25e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html @@ -205,7 +205,7 @@ When G68.2 is not active, a validation error is reported. Optional explicit A/B/C on the G53.1 line (post-processor hints) override the IK result. These are read from
Parsing via -ConsumeAxis(JsonObject, string, Sentence, NcDiagnosticProgress) and consumed +ConsumeAxis(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) and consumed to prevent McAbcSyntax from double-processing.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html index 45448d26..78a33b61 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html @@ -189,6 +189,79 @@ so both syntaxes can coexist without double-composing. +

Examples

+

Mat4d arrays are 16 plain doubles in column-major order; pure +translation by (tx,ty,tz) is +[1,0,0,0, 0,1,0,0, 0,0,1,0, tx,ty,tz,1]. The syntax does not +consume from Parsing — the CYCL DEF cycle number and its +parameters survive for downstream syntaxes / round-trip emission.

+

+CYCL DEF 247 Q339=+1 with a +HeidenhainDatumTable populated so preset +row 1 = (50, 50, 0) — the syntax looks up the row and writes +a synthetic CoordinateId = "DATUM_PRESET_1" reflecting the +resolved preset index: +

+#BeforeBuild: +
{ "Parsing": { "CYCL DEF": 247, "Q339": "+1" } }
+#AfterBuild: +
{
+  "Parsing": { "CYCL DEF": 247, "Q339": "+1" },
+  "CoordinateOffset": {
+    "CoordinateId": "DATUM_PRESET_1",
+    "Offset_X": 50, "Offset_Y": 50, "Offset_Z": 0
+  },
+  "ProgramToMcTransform": [
+    {
+      "Source": "CoordinateOffset",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 50,50,0,1]
+    }
+  ]
+}
+CYCL DEF 7 #5 — datum shift table lookup via the # +index (here mapped to (100, 200, 0)); CoordinateId +records the resolved shift row id: +#BeforeBuild: +
{ "Parsing": { "CYCL DEF": 7, "#": 5 } }
+#AfterBuild: +
{
+  "Parsing": { "CYCL DEF": 7, "#": 5 },
+  "CoordinateOffset": {
+    "CoordinateId": "DATUM_SHIFT_5",
+    "Offset_X": 100, "Offset_Y": 200, "Offset_Z": 0
+  },
+  "ProgramToMcTransform": [
+    {
+      "Source": "CoordinateOffset",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 100,200,0,1]
+    }
+  ]
+}
+CYCL DEF 7 X10 Y20 Z5 — direct X/Y/Z form (no # +index) writes the values straight into the offset; no +HeidenhainDatumTable dep is required. +CoordinateId is the literal "DATUM_SHIFT_DIRECT" +sentinel: +#BeforeBuild: +
{ "Parsing": { "CYCL DEF": 7, "X": 10, "Y": 20, "Z": 5 } }
+#AfterBuild: +
{
+  "Parsing": { "CYCL DEF": 7, "X": 10, "Y": 20, "Z": 5 },
+  "CoordinateOffset": {
+    "CoordinateId": "DATUM_SHIFT_DIRECT",
+    "Offset_X": 10, "Offset_Y": 20, "Offset_Z": 5
+  },
+  "ProgramToMcTransform": [
+    {
+      "Source": "CoordinateOffset",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,5,1]
+    }
+  ]
+}
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html index 48420913..51fc782c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html @@ -204,6 +204,55 @@ incremental logic. +

Examples

+

G90 (absolute) on the block — the syntax early-returns without +touching Parsing.X/Y/Z, even though the values look like +incremental deltas: +#BeforeBuild:

+
{
+  "Positioning": { "Term": "G90", "Mode": "Absolute" },
+  "Parsing": { "X": 10, "Y": 20, "Z": 30 }
+}
+

#AfterBuild:

+
{
+  "Positioning": { "Term": "G90", "Mode": "Absolute" },
+  "Parsing": { "X": 10, "Y": 20, "Z": 30 }
+}
+

G91 (incremental) with a #Previous: block carrying +MachineCoordinateState=(100,200,300). Under the identity +ProgramToMcTransform chain, GetLastProgramXyz recovers +program XYZ equal to MC, so each axis in Parsing is rewritten +to lastAbs + incremental: +#Previous:

+
{ "MachineCoordinateState": { "X": 100, "Y": 200, "Z": 300 } }
+

#BeforeBuild:

+
{
+  "Positioning": { "Term": "G91", "Mode": "Incremental" },
+  "Parsing": { "X": 10, "Y": 20, "Z": 30 }
+}
+

#AfterBuild:

+
{
+  "Positioning": { "Term": "G91", "Mode": "Incremental" },
+  "Parsing": { "X": 110, "Y": 220, "Z": 330 }
+}
+

G91 + Parsing.G28 sub-section — exercises the second entry +of the default WorkingPathList; the root Parsing has +no X/Y/Z so the first path no-ops, but the +[“Parsing”,“G28”] path picks up the G28 intermediate axes +and resolves them against the same lastProgramXyz: +#Previous:

+
{ "MachineCoordinateState": { "X": 100, "Y": 200, "Z": 300 } }
+

#BeforeBuild:

+
{
+  "Positioning": { "Term": "G91", "Mode": "Incremental" },
+  "Parsing": { "G28": { "X": 5, "Y": 10, "Z": 15 } }
+}
+

#AfterBuild:

+
{
+  "Positioning": { "Term": "G91", "Mode": "Incremental" },
+  "Parsing": { "G28": { "X": 105, "Y": 210, "Z": 315 } }
+}
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html index c1ce1eeb..2df44f41 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html @@ -185,6 +185,85 @@ Default coordinate ID is set by Examples +

The Mat4d arrays below are written as 16 plain doubles in +column-major order; the first 12 are the identity 3×3 rotation, the +last 4 are the translation column (tx, ty, tz, 1). So a pure +translation by (tx, ty, tz) is +[1,0,0,0, 0,1,0,0, 0,0,1,0, tx,ty,tz,1].

+

+G54 flag on the block but no IIsoCoordinateConfig on +the dep list — the resolved offset falls back to Vec3d.Zero +and the composed translation is the identity matrix: +

+#BeforeBuild: +
{ "Parsing": { "Flags": ["G54"] } }
+#AfterBuild: +
{
+  "CoordinateOffset": {
+    "CoordinateId": "G54",
+    "Offset_X": 0, "Offset_Y": 0, "Offset_Z": 0
+  },
+  "ProgramToMcTransform": [
+    {
+      "Source": "CoordinateOffset",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
+    }
+  ]
+}
+G55 flag with an IsoCoordinateTable +providing G55 → (100, 50, -200) — the offset is written to +the CoordinateOffset section and the same translation is +composed into the transform chain: +#BeforeBuild: +
{ "Parsing": { "Flags": ["G55"] } }
+#AfterBuild: +
{
+  "CoordinateOffset": {
+    "CoordinateId": "G55",
+    "Offset_X": 100, "Offset_Y": 50, "Offset_Z": -200
+  },
+  "ProgramToMcTransform": [
+    {
+      "Source": "CoordinateOffset",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 100,50,-200,1]
+    }
+  ]
+}
+No coordinate flag on the current block (e.g. an unrelated M03) but +#Previous: carried G54 — modal lookback inherits +G54, the dep is re-queried (so Offset_X/Y/Z are taken +from the table, not from the previous block), and the transform +chain is rebuilt. The unrelated M03 flag survives in +Parsing.Flags because CleanupParsing only fires on the +new-coord-flag branch: +#Previous: +
{
+  "CoordinateOffset": {
+    "CoordinateId": "G54",
+    "Offset_X": 10, "Offset_Y": 20, "Offset_Z": -100
+  }
+}
+#BeforeBuild: +
{ "Parsing": { "Flags": ["M03"] } }
+#AfterBuild: +
{
+  "Parsing": { "Flags": ["M03"] },
+  "CoordinateOffset": {
+    "CoordinateId": "G54",
+    "Offset_X": 10, "Offset_Y": 20, "Offset_Z": -100
+  },
+  "ProgramToMcTransform": [
+    {
+      "Source": "CoordinateOffset",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,-100,1]
+    }
+  ]
+}
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html index 97a37b1f..d77f89a2 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html @@ -188,6 +188,93 @@ Managed commands: G68, G69 (idempotent with Examples +

All cases below avoid the cos/sin rotation math by using either G69 +cancel (identity), the first-block default (no transform composed), +or modal carry of an identity Mat4d. Mat4d arrays are 16 +plain doubles in column-major order — see +IsoCoordinateOffsetSyntax for the template. A future +round can add a non-trivial G68 case by dumping the actual output +and pasting the 16 doubles back into the marker.

+

+First block of the stream (no #Previous:, no G68/G69 on the +block) — CarryForwardFromPrevious stamps a default +TiltTransform.Term = "G69" so downstream lookback always +sees a concrete state; no transform chain entry is composed: +

+#BeforeBuild: +
{ }
+#AfterBuild: +
{ "TiltTransform": { "Term": "G69" } }
+G69 flag on the block — TryHandleG69 consumes it, writes the +G69 section, and composes the identity Mat4d into the chain so any +previously composed tilt rotation is overridden: +#BeforeBuild: +
{ "Parsing": { "Flags": ["G69"] } }
+#AfterBuild: +
{
+  "TiltTransform": { "Term": "G69" },
+  "ProgramToMcTransform": [
+    {
+      "Source": "TiltTransform",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
+    }
+  ]
+}
+Modal carry: no G68/G69 on the current block, but +#Previous: carries an active G68 with identity tilt Mat4d in +its chain. The current block inherits TiltTransform.Term = "G68" +and re-composes the same Mat4d into its own chain; unrelated M03 +flag survives because this syntax does not touch Parsing +during the carry path: +#Previous: +
{
+  "TiltTransform": { "Term": "G68" },
+  "ProgramToMcTransform": [
+    {
+      "Source": "TiltTransform",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
+    }
+  ]
+}
+#BeforeBuild: +
{ "Parsing": { "Flags": ["M03"] } }
+#AfterBuild: +
{
+  "Parsing": { "Flags": ["M03"] },
+  "TiltTransform": { "Term": "G68" },
+  "ProgramToMcTransform": [
+    {
+      "Source": "TiltTransform",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
+    }
+  ]
+}
+Non-trivial G68 rotation: 90° around the Z axis (no I/J/K → plane +normal of the default G17 plane) at the origin (no X/Y/Z → all 0). +The Mat4d column-major layout is rotation 90° about Z (no +translation since pivot is the origin); cos(π/2) is not +exactly 0 in IEEE-754 so the diagonal carries the +6.123233995736766E-17 drift produced by +Math.Cos(Math.PI / 2) — preserved verbatim per the +no-shorthand marker convention: +#BeforeBuild: +
{ "Parsing": { "G68": { "R": 90 } } }
+#AfterBuild: +
{
+  "TiltTransform": { "Term": "G68" },
+  "ProgramToMcTransform": [
+    {
+      "Source": "TiltTransform",
+      "Kind": "Static",
+      "Mat4d": [6.123233995736766E-17, 1, 0, 0, -1, 6.123233995736766E-17, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
+    }
+  ]
+}
+

Remarks

Input: Parsing.G68 → {X,Y,Z,I,J,K,R} from ParameterizedFlagSyntax. diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html index 95a4850b..2cc5c18b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html @@ -188,6 +188,75 @@ Modal — persists via backward lookback until changed or cancelled. +

Examples

+

Mat4d arrays are 16 plain doubles in column-major order; pure +translation by (tx,ty,tz) is +[1,0,0,0, 0,1,0,0, 0,0,1,0, tx,ty,tz,1] — see +IsoCoordinateOffsetSyntax for the column-major template.

+

+First block of the stream (no #Previous:) — the syntax +stamps a zero-offset section and an identity translation in the +chain so downstream lookback always sees a concrete state: +

+#BeforeBuild: +
{ }
+#AfterBuild: +
{
+  "IsoLocalCoordinateOffset": { "Offset_X": 0, "Offset_Y": 0, "Offset_Z": 0 },
+  "ProgramToMcTransform": [
+    {
+      "Source": "IsoLocalCoordinateOffset",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
+    }
+  ]
+}
+G52 X10 Y20 Z5 on a non-first block alongside an unrelated +M03 flag — the G52 sub-section is consumed (removed from +Parsing) and the translation is composed into the chain; the +unrelated flag stays because this syntax does not call +CleanupParsing: +#Previous: +
{ "IsoLocalCoordinateOffset": { "Offset_X": 0, "Offset_Y": 0, "Offset_Z": 0 } }
+#BeforeBuild: +
{
+  "Parsing": {
+    "Flags": ["M03"],
+    "G52": { "X": 10, "Y": 20, "Z": 5 }
+  }
+}
+#AfterBuild: +
{
+  "Parsing": { "Flags": ["M03"] },
+  "IsoLocalCoordinateOffset": { "Offset_X": 10, "Offset_Y": 20, "Offset_Z": 5 },
+  "ProgramToMcTransform": [
+    {
+      "Source": "IsoLocalCoordinateOffset",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,5,1]
+    }
+  ]
+}
+No G52 on the current block but #Previous: had a non-zero +offset — modal lookback inherits it (with the translation +re-composed into this block's chain): +#Previous: +
{ "IsoLocalCoordinateOffset": { "Offset_X": 10, "Offset_Y": 20, "Offset_Z": 5 } }
+#BeforeBuild: +
{ "Parsing": { "Flags": ["M03"] } }
+#AfterBuild: +
{
+  "Parsing": { "Flags": ["M03"] },
+  "IsoLocalCoordinateOffset": { "Offset_X": 10, "Offset_Y": 20, "Offset_Z": 5 },
+  "ProgramToMcTransform": [
+    {
+      "Source": "IsoLocalCoordinateOffset",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,5,1]
+    }
+  ]
+}
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html index 244eef22..b2d71e9b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html @@ -190,6 +190,50 @@ Must be placed after Examples +

G00 explicit + MachineCoordinateState on the block — both the +modal MotionState and the one-shot MotionEvent are +written; IsRapid is set only on rapid (G00); the parsing flag +is consumed and Parsing is cleaned up: +#BeforeBuild:

+
{
+  "Parsing": { "Flags": ["G00"] },
+  "MachineCoordinateState": { "X": 10, "Y": 20, "Z": 30 }
+}
+

#AfterBuild:

+
{
+  "MachineCoordinateState": { "X": 10, "Y": 20, "Z": 30 },
+  "MotionState": { "Term": "G00" },
+  "MotionEvent": { "Form": "McLinear", "IsRapid": true }
+}
+

G01 explicit + MC — same shape but IsRapid is omitted on the +event section (only written when true): +#BeforeBuild:

+
{
+  "Parsing": { "Flags": ["G01"] },
+  "MachineCoordinateState": { "X": 10, "Y": 20, "Z": 30 }
+}
+

#AfterBuild:

+
{
+  "MachineCoordinateState": { "X": 10, "Y": 20, "Z": 30 },
+  "MotionState": { "Term": "G01" },
+  "MotionEvent": { "Form": "McLinear" }
+}
+

No motion flag on the current block but MachineCoordinateState +is present (e.g. a downstream syntax already wrote the endpoint) — +the previous block's MotionState.Term is the only way to know +G00 vs G01, so the modal carry path fires: +#Previous:

+
{ "MotionState": { "Term": "G01" } }
+

#BeforeBuild:

+
{ "MachineCoordinateState": { "X": 10, "Y": 20, "Z": 30 } }
+

#AfterBuild:

+
{
+  "MachineCoordinateState": { "X": 10, "Y": 20, "Z": 30 },
+  "MotionState": { "Term": "G01" },
+  "MotionEvent": { "Form": "McLinear" }
+}
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html index b738a9c6..f0314bb8 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html @@ -192,14 +192,39 @@ as program coordinates.

Examples

-

G53 with full axes (G54 offset = 100,50,-200):

-
Input:  G53 G00 X0. Y0. Z0.
-Output: MachineCoordinate = (0, 0, 0)
-        ProgramXyz = (-100, -50, 200)   [mc * inverse(transform)]
-

G53 with partial axes (only Z specified):

-
Input:  G53 Z0.
-Output: MachineCoordinate = (prevMcX, prevMcY, 0)
-        ProgramXyz derived from MC * inverse(transform)
+

G53 with full XYZ on a first block (no #Previous:) — FindPreviousMc +falls back to Vec3d.Zero, transform defaults to identity, so +ProgramXyz equals MachineCoordinateState: +#BeforeBuild:

+
{ "Parsing": { "Flags": ["G53"], "X": 10, "Y": 20, "Z": 30 } }
+

#AfterBuild:

+
{
+  "MachineCoordinateState": { "X": 10, "Y": 20, "Z": 30 },
+  "ProgramXyz": { "X": 10, "Y": 20, "Z": 30 }
+}
+

G53 with only Z specified — FindPreviousMc picks up X/Y from the +previous block's MachineCoordinateState; Z is overwritten: +#Previous:

+
{ "MachineCoordinateState": { "X": 100, "Y": 50, "Z": -200 } }
+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["G53"], "Z": 0 } }
+

#AfterBuild:

+
{
+  "MachineCoordinateState": { "X": 100, "Y": 50, "Z": 0 },
+  "ProgramXyz": { "X": 100, "Y": 50, "Z": 0 }
+}
+

G91 active on the same block → G53 is ignored per ISO standard; nothing +is consumed and no machine-state section is written: +#BeforeBuild:

+
{
+  "Parsing": { "Flags": ["G53"], "X": 10 },
+  "Positioning": { "Term": "G91" }
+}
+

#AfterBuild:

+
{
+  "Parsing": { "Flags": ["G53"], "X": 10 },
+  "Positioning": { "Term": "G91" }
+}
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html index 214eefcb..0ad67270 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html @@ -6,7 +6,7 @@ - + @@ -102,6 +102,18 @@ Uses
MachineCoordinateState need cyclic resolution. Falls back to hardcoded A/B/C if no IMachineAxisConfig is available. Must be placed after ProgramXyzSyntax in NcSyntaxList.

+

+Two stages, mirroring McXyzSyntax: +

  1. Root MachineCoordinateState — anchored at the previous + block's modal rotary state.
  2. CompoundMotion.ItemsKey[*] + — sequential walk through items, anchoring item 0 at the previous + block's modal state and item i > 0 at item i-1's + post-cycle value (per-axis chain). Items without a rotary + MachineCoordinateState are skipped.
+The items pass enables rotary motion (e.g. G28 ABC intermediate / +home stages) to surface as motion IAct +segments rather than a single root-MC stamp. +
@@ -183,6 +195,73 @@ Must be placed after Examples +

Cases below run with no IMachineAxisConfig on the dep +list, so the syntax uses the A/B/C fallback (a configuration +warning is emitted but does not affect the JSON). The syntax is +the tail-pass rotary-wrap centraliser — upstream rotary writers +(McAbcSyntax, G28, G53.1, ...) store raw degrees and +let this pass resolve to the shortest cyclic path.

+

+Current B is within ±180° of the previous B — no wrap needed; the +value is rewritten in place but equals the input: +

+#Previous: +
{ "MachineCoordinateState": { "B": 0 } }
+#BeforeBuild: +
{ "MachineCoordinateState": { "B": 10 } }
+#AfterBuild: +
{ "MachineCoordinateState": { "B": 10 } }
+Current B is 270° but previous B is 0° — the shortest path is the +other way around, so the value is rewritten as -90° (mathematically +equivalent, geometrically the same orientation, but signalling the +shorter rotation to a downstream motion consumer). 270/0 round-trips +through ToRadCycleToDeg with no rounding +noise (1.5π → -0.5π → -90 exactly); other angle pairs (e.g. +350° → -10°) emit a trailing ULP-scale drift instead: +#Previous: +
{ "MachineCoordinateState": { "B": 0 } }
+#BeforeBuild: +
{ "MachineCoordinateState": { "B": 270 } }
+#AfterBuild: +
{ "MachineCoordinateState": { "B": -90 } }
+First block of the stream (no #Previous:) — no anchor to +resolve against, so the syntax early-returns and the raw value is +preserved verbatim: +#BeforeBuild: +
{ "MachineCoordinateState": { "B": 350 } }
+#AfterBuild: +
{ "MachineCoordinateState": { "B": 350 } }
+

+CompoundMotion.Items walk — two items chain: item 0 cycles +against the previous block's modal B = 0° (270° → -90°), and item 1 +cycles against item 0's post-cycle -90° (170° → -190°, since the +shorter path from -90° to 170° wraps backward through -180°). If +item 1 had used the previous-block anchor instead of the chained +anchor, 170° would have stayed at 170° (already in the ±180° window +around 0°), so the test discriminates between chain and no-chain: +

+#Previous: +
{ "MachineCoordinateState": { "B": 0 } }
+#BeforeBuild: +
{
+  "CompoundMotion": {
+    "Items": [
+      { "MachineCoordinateState": { "B": 270 } },
+      { "MachineCoordinateState": { "B": 170 } }
+    ]
+  }
+}
+#AfterBuild: +
{
+  "CompoundMotion": {
+    "Items": [
+      { "MachineCoordinateState": { "B": -90 } },
+      { "MachineCoordinateState": { "B": -190 } }
+    ]
+  }
+}
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html index f750c62b..1b5c99cc 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html @@ -211,6 +211,37 @@ that need the current-block ABC to compute transforms +

Examples

+

Cases 1 and 2 inject a TestDeps.AxisConfig declaring B and C +as Rotary. Values are stored as raw degrees; +shortest-cyclic resolution is a downstream pass via +McAbcCyclicPathSyntax.

+

+No IMachineAxisConfig dep on the list — early-return +no-op (the syntax only fires when rotary axes are declared): +

+#BeforeBuild: +
{ "Parsing": { "B": 45, "C": 90 } }
+#AfterBuild: +
{ "Parsing": { "B": 45, "C": 90 } }
+AxisConfig declares B+C rotary; Parsing.B/C are consumed +into a freshly created MachineCoordinateState section +(X/Y/Z are deliberately left out so McXyzSyntax can +still derive XYZ later — see class summary): +#BeforeBuild: +
{ "Parsing": { "B": 45, "C": 90 } }
+#AfterBuild: +
{ "MachineCoordinateState": { "B": 45, "C": 90 } }
+Only Parsing.B on the current block; #Previous: +carries a full MC including C=0. The missing C is filled from the +per-axis backward lookback (FindPreviousMcAxis(LazyLinkedListNode<SyntaxPiece>, string)): +#Previous: +
{ "MachineCoordinateState": { "B": 0, "C": 0 } }
+#BeforeBuild: +
{ "Parsing": { "B": 30 } }
+#AfterBuild: +
{ "MachineCoordinateState": { "B": 30, "C": 0 } }
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html index 8af2a71e..fd1c415e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html @@ -218,6 +218,47 @@ Does nothing when the section already carries all three of X/Y/Z +

Examples

+

All cases below stay on the non-dynamic branch (no +PivotTransformSource entry in the +chain) so the RTCP re-derivation path is skipped.

+

+Block has no MachineCoordinateState section at all (pure +parse-only) — the syntax early-returns and the block is unchanged: +

+#BeforeBuild: +
{ "Parsing": { "Flags": ["G00"] } }
+#AfterBuild: +
{ "Parsing": { "Flags": ["G00"] } }
+MC already complete (all three of X/Y/Z present) — the second guard +fires and the section is preserved verbatim (no overwrite even if a +#Previous: MC differed): +#BeforeBuild: +
{ "MachineCoordinateState": { "X": 10, "Y": 20, "Z": 30 } }
+#AfterBuild: +
{ "MachineCoordinateState": { "X": 10, "Y": 20, "Z": 30 } }
+Rotary-only MC on a rotary-only block (e.g. a 5-axis B+C trunnion +machine running G00 B45. C90.) — missing X/Y/Z are copied +from the #Previous: block's MC; the rotary keys keep their +existing positions (insertion order) and X/Y/Z are appended. The +previous block's MC carries the modal rotary state alongside X/Y/Z, +but the fallback only reads X/Y/Z from it: +#Previous: +
{
+  "MachineCoordinateState": {
+    "X": 100, "Y": 200, "Z": 300, "B": 0, "C": 0
+  }
+}
+#BeforeBuild: +
{ "MachineCoordinateState": { "B": 45, "C": 90 } }
+#AfterBuild: +
{
+  "MachineCoordinateState": {
+    "B": 45, "C": 90,
+    "X": 100, "Y": 200, "Z": 300
+  }
+}
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html index 930ed849..8888db2d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html @@ -191,6 +191,55 @@ and before syntaxes that read MachineCoordinate +

Examples

+

Root ProgramXyz only, no ProgramToMcTransform chain — +composed transform is identity, so MC equals ProgramXyz: +#BeforeBuild:

+
{ "ProgramXyz": { "X": 10, "Y": 20, "Z": 30 } }
+

#AfterBuild:

+
{
+  "ProgramXyz": { "X": 10, "Y": 20, "Z": 30 },
+  "MachineCoordinateState": { "X": 10, "Y": 20, "Z": 30 }
+}
+

Root MachineCoordinateState already present — guarded by the +non-null check, so an upstream syntax's explicit MC is preserved +verbatim (the derivation from ProgramXyz is skipped): +#BeforeBuild:

+
{
+  "ProgramXyz": { "X": 10, "Y": 20, "Z": 30 },
+  "MachineCoordinateState": { "X": 100, "Y": 200, "Z": 300 }
+}
+

#AfterBuild:

+
{
+  "ProgramXyz": { "X": 10, "Y": 20, "Z": 30 },
+  "MachineCoordinateState": { "X": 100, "Y": 200, "Z": 300 }
+}
+

CompoundMotion.Items[*] with ProgramXyz but no +MachineCoordinateState — each item receives its own derived +MC; items that already had MC (or had no ProgramXyz) are +left alone: +#BeforeBuild:

+
{
+  "CompoundMotion": {
+    "Items": [
+      { "ProgramXyz": { "X": 1, "Y": 2, "Z": 3 } },
+      { "MachineCoordinateState": { "X": 9, "Y": 9, "Z": 9 } }
+    ]
+  }
+}
+

#AfterBuild:

+
{
+  "CompoundMotion": {
+    "Items": [
+      {
+        "ProgramXyz": { "X": 1, "Y": 2, "Z": 3 },
+        "MachineCoordinateState": { "X": 1, "Y": 2, "Z": 3 }
+      },
+      { "MachineCoordinateState": { "X": 9, "Y": 9, "Z": 9 } }
+    ]
+  }
+}
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html index 5e04f016..508e8255 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html @@ -187,6 +187,28 @@ Downstream consumers (Examples +

#BeforeBuild:

+
{ "Parsing": { "Flags": ["G17"] } }
+

#AfterBuild:

+
{ "PlaneSelect": { "Term": "G17", "Plane": "XY" } }
+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["G18", "M03"] } }
+

#AfterBuild:

+
{
+  "Parsing": { "Flags": ["M03"] },
+  "PlaneSelect": { "Term": "G18", "Plane": "ZX" }
+}
+

#Previous:

+
{ "PlaneSelect": { "Term": "G19", "Plane": "YZ" } }
+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["M03"] } }
+

#AfterBuild:

+
{
+  "Parsing": { "Flags": ["M03"] },
+  "PlaneSelect": { "Term": "G19", "Plane": "YZ" }
+}
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html index 0b5c5afa..ef7b629e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html @@ -193,6 +193,30 @@ their parameters with cycle-specific G91 semantics. +

Examples

+

G90 explicit — flag consumed, Positioning written with +Mode=“Absolute”: +#BeforeBuild:

+
{ "Parsing": { "Flags": ["G90"] } }
+

#AfterBuild:

+
{ "Positioning": { "Term": "G90", "Mode": "Absolute" } }
+

G91 explicit — flag consumed, Mode=“Incremental”: +#BeforeBuild:

+
{ "Parsing": { "Flags": ["G91"] } }
+

#AfterBuild:

+
{ "Positioning": { "Term": "G91", "Mode": "Incremental" } }
+

No positioning flag on the block but #Previous: carried G91 — +modal lookback inherits G91; the unrelated M03 flag is left alone: +#Previous:

+
{ "Positioning": { "Term": "G91", "Mode": "Incremental" } }
+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["M03"] } }
+

#AfterBuild:

+
{
+  "Parsing": { "Flags": ["M03"] },
+  "Positioning": { "Term": "G91", "Mode": "Incremental" }
+}
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html index 13c6c6b4..b600bd63 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html @@ -6,7 +6,7 @@ - + @@ -121,6 +121,15 @@ Local variables (#1-#33, scope: macro call frame) are also untouched here; their lifecycle belongs to G65/G66/M99 push/pop, not program end.

+

+Also clears any active FanucModalMacro on the same +edge: a G66 modal that was still active when M02/M30 hit is +implicitly cancelled, matching real Fanuc reset behaviour. The +section is overwritten with a G67-shaped cancel marker so +the carry mechanism in +FanucModalMacroSyntax sees the boundary +and does not propagate the modal past the program-end edge. +

@@ -202,6 +211,44 @@ program end. +

Examples

+

M30 with a populated Vars.Volatile — the dictionary is wiped +to an empty JsonObject in place (assignment, not removal, so +downstream snapshots can distinguish “cleared on program end” from +“block never had volatile data”): +#BeforeBuild:

+
{
+  "ProgramEnd": { "Term": "M30" },
+  "Vars": { "Volatile": { "#100": 1.5, "#101": 2.5 } }
+}
+

#AfterBuild:

+
{
+  "ProgramEnd": { "Term": "M30" },
+  "Vars": { "Volatile": {} }
+}
+

M02 with an active G66 FanucModalMacro and no +pre-existing Vars — the modal is overwritten with a +G67-shaped cancel marker (P/L dropped), and a fresh +Vars.Volatile dictionary is created: +#BeforeBuild:

+
{
+  "ProgramEnd": { "Term": "M02" },
+  "FanucModalMacro": { "Term": "G66", "P": 1234, "L": 1 }
+}
+

#AfterBuild:

+
{
+  "ProgramEnd": { "Term": "M02" },
+  "FanucModalMacro": { "Term": "G67" },
+  "Vars": { "Volatile": {} }
+}
+

No ProgramEnd on the block (regular machining line) — the +guard rejects the block; Vars.Volatile is left intact for +downstream blocks to inherit via carry: +#BeforeBuild:

+
{ "Vars": { "Volatile": { "#100": 1.5 } } }
+

#AfterBuild:

+
{ "Vars": { "Volatile": { "#100": 1.5 } } }
+ @@ -311,7 +358,7 @@ program end. -

XML element name for Regs registration.

+

XML element name for Generators registration.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html index 1daed1ff..90471925 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html @@ -187,6 +187,20 @@ Must be placed before syntaxes that depend on the ProgramEnd section. +

Examples

+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["M30"] } }
+

#AfterBuild:

+
{ "ProgramEnd": { "Term": "M30" } }
+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["M02"] } }
+

#AfterBuild:

+
{ "ProgramEnd": { "Term": "M02" } }
+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["M03"] } }
+

#AfterBuild:

+
{ "Parsing": { "Flags": ["M03"] } }
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html index 5dd7e17b..8e249bbf 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html @@ -193,6 +193,23 @@ pauses the run is a runtime/semantic decision gated by the operator's +

Examples

+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["M00"] } }
+

#AfterBuild:

+
{ "ProgramStop": { "Term": "M00" } }
+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["M01", "M03"] } }
+

#AfterBuild:

+
{
+  "Parsing": { "Flags": ["M03"] },
+  "ProgramStop": { "Term": "M01" }
+}
+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["M01", "M00"] } }
+

#AfterBuild:

+
{ "ProgramStop": { "Term": "M00" } }
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html index e8b5bbf3..35bf8d83 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html @@ -188,6 +188,39 @@ cross-node lookback for last position.

+

Examples

+

SUT uses Default so the default +WorkingPathList points at the Parsing root. All cases +stay on the identity-transform path so +GetLastProgramXyz simply returns the previous block's MC.

+

+Full X/Y/Z in Parsing — values are read directly (no +lookback), Parsing.X/Y/Z are consumed, ProgramXyz +section is written; CleanupParsing removes the now-empty +Parsing: +

+#BeforeBuild: +
{ "Parsing": { "X": 10, "Y": 20, "Z": 30 } }
+#AfterBuild: +
{ "ProgramXyz": { "X": 10, "Y": 20, "Z": 30 } }
+Only Z in Parsing with a #Previous: block carrying +MachineCoordinateState=(50,60,70) — under the identity +transform GetLastProgramXyz equals previous MC, so X/Y are +inherited from prev and Z is taken from the parsed literal: +#Previous: +
{ "MachineCoordinateState": { "X": 50, "Y": 60, "Z": 70 } }
+#BeforeBuild: +
{ "Parsing": { "Z": 0 } }
+#AfterBuild: +
{ "ProgramXyz": { "X": 50, "Y": 60, "Z": 0 } }
+Parsing present but with no X/Y/Z (e.g. an unrelated M03 +flag) — ResolveProgramXyz returns null and the syntax +early-returns; the block is unchanged: +#BeforeBuild: +
{ "Parsing": { "Flags": ["M03"] } }
+#AfterBuild: +
{ "Parsing": { "Flags": ["M03"] } }
+

Remarks

The term “Program” is absolute positioning coordinate that can be end-user editing. diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html index d4bc7ad2..9a63fe7f 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html @@ -664,8 +664,8 @@ against the spurious-origin case. -

- ResolveProgramXyz(JsonNode, LazyLinkedListNode<SyntaxPiece>, Sentence, NcDiagnosticProgress) +

+ ResolveProgramXyz(JsonNode, LazyLinkedListNode<SyntaxPiece>, ISentenceCarrier, NcDiagnosticProgress)

@@ -675,7 +675,7 @@ Fills missing axes from last program position via lookback.

-
public static Vec3d ResolveProgramXyz(JsonNode xyzSource, LazyLinkedListNode<SyntaxPiece> syntaxPieceNode, Sentence sentence, NcDiagnosticProgress diag)
+
public static Vec3d ResolveProgramXyz(JsonNode xyzSource, LazyLinkedListNode<SyntaxPiece> syntaxPieceNode, ISentenceCarrier sentenceCarrier, NcDiagnosticProgress diag)

Parameters

@@ -687,8 +687,8 @@ Fills missing axes from last program position via lookback.

syntaxPieceNode LazyLinkedListNode<SyntaxPiece>

Current node for lookback.

-
sentence Sentence
-

Source sentence used to attach diagnostics to the offending text span.

+
sentenceCarrier ISentenceCarrier
+

Carrier used to attach diagnostics to the offending text span.

diag NcDiagnosticProgress

Diagnostic sink that receives parse errors for malformed X/Y/Z values.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html index 47ed6816..5d7d2da8 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html @@ -6,7 +6,7 @@ - + @@ -97,20 +97,7 @@ Class ReferenceReturnSyntax
Assembly
HiMech.dll
-

Writes ICompoundMotionDef section for G28 reference point return. -Reads intermediate XYZ from Parsing.G28 -(written by G28Syntax) -and converts to machine coordinates via -ResolveProgramXyz(JsonNode, LazyLinkedListNode<SyntaxPiece>, Sentence, NcDiagnosticProgress).

-

-Must be placed after LinearMotionSyntax in the syntax chain. -Removes the IMotionEventDef section written by -LinearMotionSyntax (G28 handles its own motion). -Overwrites root MachineCoordinateState -and ProgramXyz with reference position -for subsequent block lookback. -

-
+
@@ -191,28 +178,6 @@ for subsequent block lookback. -

Examples

-

Input: G91 G28 Z0.0 (only Z specified → only Z goes to home)

-
"CompoundMotion": {
-  "Term": "G28",
-  "Items": [
-    {
-      "ProgramXyz": { "X": prevX, "Y": prevY, "Z": intermediate },
-      "Motion": { "Form": "McLinear", "IsRapid": true }
-    },
-    {
-      "MachineCoordinate": { "X": prevMcX, "Y": prevMcY, "Z": 0 },
-      "Motion": { "Form": "McLinear", "IsRapid": true }
-    }
-  ]
-}
-

Only axes present in the G28 block move to home; others keep previous MC value. -Item 0 uses ProgramXyz (intermediate point from NC program); -McXyzSyntax derives its MachineCoordinate. -Item 1 uses MachineCoordinate directly (selective home per axis). -Root ProgramXyz is overwritten to the final position; -McXyzSyntax derives the root MachineCoordinate.

- @@ -227,7 +192,8 @@ Root ProgramXyz is overwritten to the final position; -

Initializes a new instance with default settings.

+

Initializes a new instance with default settings +(BareG28 = Alarm).

@@ -284,6 +250,39 @@ Root ProgramXyz is overwritten to the final position; + + +

+ BareG28 + +

+ +

Behaviour for a G28 block with no axis specifiers. +Defaults to Alarm.

+
+
+ +
+
public BareG28Behavior BareG28 { get; set; }
+
+ + + + + +

Property Value

+
+
BareG28Behavior
+
+
+ + + + + + + +

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html index 9097a181..4df319e3 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html @@ -158,8 +158,8 @@ and other syntaxes that read or write rotary axis values.

-

- ConsumeAxis(JsonObject, string, Sentence, NcDiagnosticProgress) +

+ ConsumeAxis(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress)

@@ -170,7 +170,7 @@ Returns the value and removes the key, or null if not present.

A non-numeric value (e.g. "#124" left by the parser stage) raises VariableExpression--Unevaluated via -GetParsedDouble(JsonObject, string, Sentence, NcDiagnosticProgress) instead of silently dropping +GetParsedDouble(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) instead of silently dropping the post-processor hint. The key is consumed regardless so downstream syntaxes do not re-process it.

@@ -178,7 +178,7 @@ syntaxes do not re-process it.
-
public static double? ConsumeAxis(JsonObject parsing, string axisName, Sentence sentence, NcDiagnosticProgress diag)
+
public static double? ConsumeAxis(JsonObject parsing, string axisName, ISentenceCarrier sentenceCarrier, NcDiagnosticProgress diag)

Parameters

@@ -187,7 +187,7 @@ syntaxes do not re-process it.
axisName string
-
sentence Sentence
+
sentenceCarrier ISentenceCarrier
diag NcDiagnosticProgress
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html index 8c7c4165..b3ab5906 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html @@ -183,6 +183,80 @@ composes into Examples +

Unlike IsoCoordinateOffsetSyntax (Fanuc/ISO), this +Siemens variant does not consume the coordinate flag from +Parsing.Flags — the flag stays for downstream syntaxes / +reconstruction. Mat4d arrays are 16 plain doubles in +column-major order; pure translation by (tx,ty,tz) is +[1,0,0,0, 0,1,0,0, 0,0,1,0, tx,ty,tz,1].

+

+G54 with an IsoCoordinateTable +providing G54 → (10, 20, -100) — same shape as +IsoCoordinateOffsetSyntax but the G54 flag +survives: +

+#BeforeBuild: +
{ "Parsing": { "Flags": ["G54"] } }
+#AfterBuild: +
{
+  "Parsing": { "Flags": ["G54"] },
+  "CoordinateOffset": {
+    "CoordinateId": "G54",
+    "Offset_X": 10, "Offset_Y": 20, "Offset_Z": -100
+  },
+  "ProgramToMcTransform": [
+    {
+      "Source": "CoordinateOffset",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,-100,1]
+    }
+  ]
+}
+Siemens-extended G505 with a table entry for the same id — +proves the syntax recognises the extended series, not only the +ISO-compat G54–G57 subset: +#BeforeBuild: +
{ "Parsing": { "Flags": ["G505"] } }
+#AfterBuild: +
{
+  "Parsing": { "Flags": ["G505"] },
+  "CoordinateOffset": {
+    "CoordinateId": "G505",
+    "Offset_X": 100, "Offset_Y": 50, "Offset_Z": -200
+  },
+  "ProgramToMcTransform": [
+    {
+      "Source": "CoordinateOffset",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 100,50,-200,1]
+    }
+  ]
+}
+G500 cancel with no IIsoCoordinateConfig on +the dep list — falls back to Vec3d.Zero; the resolved +offset is zero and the composed translation is identity (matching +the special case inside +GetCoordinateOffset(string) +for G500): +#BeforeBuild: +
{ "Parsing": { "Flags": ["G500"] } }
+#AfterBuild: +
{
+  "Parsing": { "Flags": ["G500"] },
+  "CoordinateOffset": {
+    "CoordinateId": "G500",
+    "Offset_X": 0, "Offset_Y": 0, "Offset_Z": 0
+  },
+  "ProgramToMcTransform": [
+    {
+      "Source": "CoordinateOffset",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
+    }
+  ]
+}
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html index 3058363e..e9960a9b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html @@ -184,6 +184,31 @@ Direction is converted from ISO M-codes to the conventional +

Examples

+

New S + M03 (CW) — both consumed; SpindleSpeed section +written with the converted direction enum string: +#BeforeBuild:

+
{ "Parsing": { "Flags": ["M03"], "S": 2000 } }
+

#AfterBuild:

+
{ "SpindleSpeed": { "SpindleSpeed_rpm": 2000, "Direction": "CW" } }
+

M04 (CCW) only — RPM inherited from #Previous:; direction +updated to the new CCW state: +#Previous:

+
{ "SpindleSpeed": { "SpindleSpeed_rpm": 1500, "Direction": "CW" } }
+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["M04"] } }
+

#AfterBuild:

+
{ "SpindleSpeed": { "SpindleSpeed_rpm": 1500, "Direction": "CCW" } }
+

M05 (STOP) only — RPM still carried from #Previous: for +bidirectional round-tripping; downstream consumers gate on +Direction == STOP rather than RPM == 0: +#Previous:

+
{ "SpindleSpeed": { "SpindleSpeed_rpm": 1500, "Direction": "CW" } }
+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["M05"] } }
+

#AfterBuild:

+
{ "SpindleSpeed": { "SpindleSpeed_rpm": 1500, "Direction": "STOP" } }
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html index 0cc8bb55..d8213a5d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html @@ -186,6 +186,32 @@ the tool-change M code); modal-only blocks omit it.

+

Examples

+

T5 + M06 — full tool change on one block; both T and M06 flag +consumed, Term written: +#BeforeBuild:

+
{ "Parsing": { "Flags": ["M06"], "T": 5 } }
+

#AfterBuild:

+
{ "ToolChange": { "ToolId": 5, "IsChange": true, "Term": "M06" } }
+

T5 alone alongside an unrelated flag — modal arming only, no actual +change; IsChange=false and Term omitted. M03 is left in +place because CleanupParsing only runs on the M06 branch: +#BeforeBuild:

+
{ "Parsing": { "Flags": ["M03"], "T": 7 } }
+

#AfterBuild:

+
{
+  "Parsing": { "Flags": ["M03"] },
+  "ToolChange": { "ToolId": 7, "IsChange": false }
+}
+

M06 alone — T comes from #Previous: modal lookback; +IsChange=true, Term=“M06”: +#Previous:

+
{ "ToolChange": { "ToolId": 5, "IsChange": false } }
+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["M06"] } }
+

#AfterBuild:

+
{ "ToolChange": { "ToolId": 5, "IsChange": true, "Term": "M06" } }
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html index 3ee14d83..e70bb200 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html @@ -185,6 +185,97 @@ syntaxes (e.g., Examples +

All cases below have no ToolOrientation section and no +TiltTransform entry in the chain — the composed translation +therefore lies along UnitZ (the identity tilt's +AxialNormal), so Mat4d.Trans = (0, 0, height_mm).

+

+G43 H1 with a TestDeps.ToolOffset mapping offset 1 to 99.98 +mm — full consume from Parsing.G43, positive sign on G43: +

+#BeforeBuild: +
{ "Parsing": { "G43": { "H": "1" } } }
+#AfterBuild: +
{
+  "ToolHeightCompensation": {
+    "Offset_mm": 99.98, "Term": "G43", "OffsetId": 1
+  },
+  "ProgramToMcTransform": [
+    {
+      "Source": "ToolHeightCompensation",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,99.98,1]
+    }
+  ]
+}
+G49 cancel flag — writes a sentinel G49 section with +Offset_mm = 0, OffsetId = 0, and composes an identity +Mat4d so any previously composed tool-height translation is reset: +#BeforeBuild: +
{ "Parsing": { "Flags": ["G49"] } }
+#AfterBuild: +
{
+  "ToolHeightCompensation": {
+    "Offset_mm": 0, "Term": "G49", "OffsetId": 0
+  },
+  "ProgramToMcTransform": [
+    {
+      "Source": "ToolHeightCompensation",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
+    }
+  ]
+}
+No G43/G44/G49 on the current block but #Previous: carries +an active G43 H1 — modal lookback inherits the term + offset id, +re-queries the tool table, and re-composes the translation. The +unrelated M03 flag survives because the consume path only triggers +when an ISO term is on the current block: +#Previous: +
{
+  "ToolHeightCompensation": {
+    "Offset_mm": 99.98, "Term": "G43", "OffsetId": 1
+  }
+}
+#BeforeBuild: +
{ "Parsing": { "Flags": ["M03"] } }
+#AfterBuild: +
{
+  "Parsing": { "Flags": ["M03"] },
+  "ToolHeightCompensation": {
+    "Offset_mm": 99.98, "Term": "G43", "OffsetId": 1
+  },
+  "ProgramToMcTransform": [
+    {
+      "Source": "ToolHeightCompensation",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,99.98,1]
+    }
+  ]
+}
+G44 H1 with the same TestDeps.ToolOffset offset-1 → +99.98 mm — G44 negates the table value, so +Offset_mm = -99.98 and the composed translation lies along +-UnitZ. The X/Y components of toolOrientation * -99.98 +land on IEEE-754 negative zero (0 * -99.98 = -0.0), which +System.Text.Json emits literally as -0: +#BeforeBuild: +
{ "Parsing": { "G44": { "H": "1" } } }
+#AfterBuild: +
{
+  "ToolHeightCompensation": {
+    "Offset_mm": -99.98, "Term": "G44", "OffsetId": 1
+  },
+  "ProgramToMcTransform": [
+    {
+      "Source": "ToolHeightCompensation",
+      "Kind": "Static",
+      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, -0,-0,-99.98,1]
+    }
+  ]
+}
+

Remarks

Input data locations in JsonObject:

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html index b60d794f..824b9cde 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html @@ -191,6 +191,25 @@ the default. +

Examples

+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["G21"] } }
+

#AfterBuild:

+
{ "Unit": { "Term": "G21", "System": "Metric" } }
+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["G20"] } }
+

#AfterBuild:

+
{ "Unit": { "Term": "G20", "System": "Inch" } }
+

#Previous:

+
{ "Unit": { "Term": "G21", "System": "Metric" } }
+

#BeforeBuild:

+
{ "Parsing": { "Flags": ["M03"] } }
+

#AfterBuild:

+
{
+  "Parsing": { "Flags": ["M03"] },
+  "Unit": { "Term": "G21", "System": "Metric" }
+}
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html index d241f8e0..8fbe04bb 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html @@ -449,6 +449,18 @@ Uses MachineCoordinateState need cyclic resolution. Falls back to hardcoded A/B/C if no IMachineAxisConfig is available. Must be placed after ProgramXyzSyntax in NcSyntaxList.

+

+Two stages, mirroring McXyzSyntax: +

  1. Root MachineCoordinateState — anchored at the previous + block's modal rotary state.
  2. CompoundMotion.ItemsKey[*] + — sequential walk through items, anchoring item 0 at the previous + block's modal state and item i > 0 at item i-1's + post-cycle value (per-axis chain). Items without a rotary + MachineCoordinateState are skipped.
+The items pass enables rotary motion (e.g. G28 ABC intermediate / +home stages) to surface as motion IAct +segments rather than a single root-MC stamp. +
@@ -665,6 +677,15 @@ Local variables (#1-#33, scope: macro call frame) are also untouched here; their lifecycle belongs to G65/G66/M99 push/pop, not program end.

+

+Also clears any active FanucModalMacro on the same +edge: a G66 modal that was still active when M02/M30 hit is +implicitly cancelled, matching real Fanuc reset behaviour. The +section is overwritten with a G67-shaped cancel marker so +the carry mechanism in +FanucModalMacroSyntax sees the boundary +and does not propagate the modal past the program-end edge. +

@@ -777,20 +798,7 @@ MC vs predecessor lookback, picks strategy from
ReferenceReturnSyntax
-

Writes ICompoundMotionDef section for G28 reference point return. -Reads intermediate XYZ from Parsing.G28 -(written by G28Syntax) -and converts to machine coordinates via -ResolveProgramXyz(JsonNode, LazyLinkedListNode<SyntaxPiece>, Sentence, NcDiagnosticProgress).

-

-Must be placed after LinearMotionSyntax in the syntax chain. -Removes the IMotionEventDef section written by -LinearMotionSyntax (G28 handles its own motion). -Overwrites root MachineCoordinateState -and ProgramXyz with reference position -for subsequent block lookback. -

-
+
RotaryAxisUtil
@@ -876,6 +884,26 @@ are forced to pre-convert the NC program to metric. G21 is accepted as a no-op confirmation of the default.

+ +
+

+Enums +

+
+
BareG28Behavior
+

Writes ICompoundMotionDef section for G28 reference point return. +Reads intermediate XYZ from Parsing.G28 +(written by G28Syntax) +and converts to machine coordinates via +ResolveProgramXyz(JsonNode, LazyLinkedListNode<SyntaxPiece>, ISentenceCarrier, NcDiagnosticProgress).

+

+Must be placed after LinearMotionSyntax in the syntax chain. +Removes the IMotionEventDef section written by +LinearMotionSyntax (G28 handles its own motion). +Overwrites root MachineCoordinateState +and ProgramXyz with reference position +for subsequent block lookback. +

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.NcDiagnostic.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.NcDiagnostic.html index 92aeba3f..0595efef 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.NcDiagnostic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.NcDiagnostic.html @@ -183,8 +183,8 @@ For irregular cases that don't fit the pattern, use a custom string. -

- NcDiagnostic(NcDiagnosticSeverity, NcDiagnosticCategory, string, string, object, Sentence) +

+ NcDiagnostic(NcDiagnosticSeverity, NcDiagnosticCategory, string, string, object, ISentenceCarrier)

@@ -193,7 +193,7 @@ For irregular cases that don't fit the pattern, use a custom string.
-
public NcDiagnostic(NcDiagnosticSeverity severity, NcDiagnosticCategory category, string id, string text, object detail = null, Sentence sentence = null)
+
public NcDiagnostic(NcDiagnosticSeverity severity, NcDiagnosticCategory category, string id, string text, object detail = null, ISentenceCarrier sentenceCarrier = null)

Parameters

@@ -213,8 +213,8 @@ For irregular cases that don't fit the pattern, use a custom string.
detail object

Optional detail data or exception. Null if not applicable.

-
sentence Sentence
-

The NC source block that triggered this diagnostic; null for pipeline-level messages.

+
sentenceCarrier ISentenceCarrier
+

Carrier for the NC source block that triggered this diagnostic; null for pipeline-level messages.

@@ -330,20 +330,23 @@ Normally {Primary}-{Secondary}–{Serial:000}.

- + -

- Sentence +

+ SentenceCarrier

-

The NC source block that triggered this diagnostic. -Null for pipeline-level messages (e.g., lifecycle start/done).

+

Carrier of the NC source block that triggered this diagnostic, exposing +both the source Sentence (via +GetSentence()) and the execution-order +SentenceIndex. Null for pipeline-level +messages (e.g., lifecycle start/done) that have no source block.

-
public Sentence Sentence { get; }
+
public ISentenceCarrier SentenceCarrier { get; }
@@ -352,7 +355,7 @@ Null for pipeline-level messages (e.g., lifecycle start/done).

Property Value

-
Sentence
+
ISentenceCarrier
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.NcDiagnosticProgress.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.NcDiagnosticProgress.html index 7a8b608b..353b25d9 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.NcDiagnosticProgress.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.NcDiagnosticProgress.html @@ -228,22 +228,22 @@ reported NcDiagnostic -

- ConfigurationError(Sentence, string, string, object) +

+ ConfigurationError(ISentenceCarrier, string, string, object)

-

Emits Configuration + Error located at sentence.

+

Emits Configuration + Error located at sentenceCarrier.

-
public void ConfigurationError(Sentence sentence, string id, string text, object detail = null)
+
public void ConfigurationError(ISentenceCarrier sentenceCarrier, string id, string text, object detail = null)

Parameters

-
sentence Sentence
+
sentenceCarrier ISentenceCarrier
id string
@@ -302,22 +302,22 @@ reported NcDiagnostic -

- ConfigurationMessage(Sentence, string, string) +

+ ConfigurationMessage(ISentenceCarrier, string, string)

-

Emits Configuration + Message located at sentence.

+

Emits Configuration + Message located at sentenceCarrier.

-
public void ConfigurationMessage(Sentence sentence, string id, string text)
+
public void ConfigurationMessage(ISentenceCarrier sentenceCarrier, string id, string text)

Parameters

-
sentence Sentence
+
sentenceCarrier ISentenceCarrier
id string
@@ -372,22 +372,22 @@ reported NcDiagnostic -

- ConfigurationWarning(Sentence, string, string, object) +

+ ConfigurationWarning(ISentenceCarrier, string, string, object)

-

Emits Configuration + Warning located at sentence.

+

Emits Configuration + Warning located at sentenceCarrier.

-
public void ConfigurationWarning(Sentence sentence, string id, string text, object detail = null)
+
public void ConfigurationWarning(ISentenceCarrier sentenceCarrier, string id, string text, object detail = null)

Parameters

-
sentence Sentence
+
sentenceCarrier ISentenceCarrier
id string
@@ -479,22 +479,22 @@ reported NcDiagnostic -

- SystemError(Sentence, string, string, object) +

+ SystemError(ISentenceCarrier, string, string, object)

-

Emits System + Error located at sentence.

+

Emits System + Error located at sentenceCarrier.

-
public void SystemError(Sentence sentence, string id, string text, object detail = null)
+
public void SystemError(ISentenceCarrier sentenceCarrier, string id, string text, object detail = null)

Parameters

-
sentence Sentence
+
sentenceCarrier ISentenceCarrier
id string
@@ -553,22 +553,22 @@ reported NcDiagnostic -

- SystemMessage(Sentence, string, string) +

+ SystemMessage(ISentenceCarrier, string, string)

-

Emits System + Message located at sentence.

+

Emits System + Message located at sentenceCarrier.

-
public void SystemMessage(Sentence sentence, string id, string text)
+
public void SystemMessage(ISentenceCarrier sentenceCarrier, string id, string text)

Parameters

-
sentence Sentence
+
sentenceCarrier ISentenceCarrier
id string
@@ -623,22 +623,22 @@ reported NcDiagnostic -

- UnsupportedError(Sentence, string, string, object) +

+ UnsupportedError(ISentenceCarrier, string, string, object)

-

Emits Unsupported + Error located at sentence.

+

Emits Unsupported + Error located at sentenceCarrier.

-
public void UnsupportedError(Sentence sentence, string id, string text, object detail = null)
+
public void UnsupportedError(ISentenceCarrier sentenceCarrier, string id, string text, object detail = null)

Parameters

-
sentence Sentence
+
sentenceCarrier ISentenceCarrier
id string
@@ -697,22 +697,22 @@ reported NcDiagnostic -

- UnsupportedMessage(Sentence, string, string, object) +

+ UnsupportedMessage(ISentenceCarrier, string, string, object)

-

Emits Unsupported + Message located at sentence.

+

Emits Unsupported + Message located at sentenceCarrier.

-
public void UnsupportedMessage(Sentence sentence, string id, string text, object detail = null)
+
public void UnsupportedMessage(ISentenceCarrier sentenceCarrier, string id, string text, object detail = null)

Parameters

-
sentence Sentence
+
sentenceCarrier ISentenceCarrier
id string
@@ -771,22 +771,22 @@ reported NcDiagnostic -

- UnsupportedWarning(Sentence, string, string, object) +

+ UnsupportedWarning(ISentenceCarrier, string, string, object)

-

Emits Unsupported + Warning located at sentence.

+

Emits Unsupported + Warning located at sentenceCarrier.

-
public void UnsupportedWarning(Sentence sentence, string id, string text, object detail = null)
+
public void UnsupportedWarning(ISentenceCarrier sentenceCarrier, string id, string text, object detail = null)

Parameters

-
sentence Sentence
+
sentenceCarrier ISentenceCarrier
id string
@@ -845,22 +845,22 @@ reported NcDiagnostic -

- ValidationError(Sentence, string, string, object) +

+ ValidationError(ISentenceCarrier, string, string, object)

-

Emits Validation + Error located at sentence.

+

Emits Validation + Error located at sentenceCarrier.

-
public void ValidationError(Sentence sentence, string id, string text, object detail = null)
+
public void ValidationError(ISentenceCarrier sentenceCarrier, string id, string text, object detail = null)

Parameters

-
sentence Sentence
+
sentenceCarrier ISentenceCarrier
id string
@@ -919,22 +919,22 @@ reported NcDiagnostic -

- ValidationWarning(Sentence, string, string, object) +

+ ValidationWarning(ISentenceCarrier, string, string, object)

-

Emits Validation + Warning located at sentence.

+

Emits Validation + Warning located at sentenceCarrier.

-
public void ValidationWarning(Sentence sentence, string id, string text, object detail = null)
+
public void ValidationWarning(ISentenceCarrier sentenceCarrier, string id, string text, object detail = null)

Parameters

-
sentence Sentence
+
sentenceCarrier ISentenceCarrier
id string
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html index cdb79d7a..7dfcea80 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html @@ -195,6 +195,20 @@ regardless of the skip switch.
+

Examples

+

#BeforeBuild.UnparsedText: /X100 Y200 +#AfterBuild:

+
{
+  "UnparsedText": "X100 Y200",
+  "BlockSkip": { "Symbol": "/", "Layer": 1 }
+}
+

#BeforeBuild.UnparsedText: /3 G01 X0 +#AfterBuild:

+
{
+  "UnparsedText": "G01 X0",
+  "BlockSkip": { "Symbol": "/", "Layer": 3 }
+}
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html index f0fce607..20cf7a6d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html @@ -181,6 +181,19 @@ the () symbol.

+

Examples

+

#BeforeBuild.UnparsedText: (only a comment) +#AfterBuild:

+
{
+  "Comment": { "Symbol": "()", "Text": "only a comment" }
+}
+

#BeforeBuild.UnparsedText: G01 X100 (mid-line comment) +#AfterBuild:

+
{
+  "UnparsedText": "G01 X100",
+  "Comment": { "Symbol": "()", "Text": "mid-line comment" }
+}
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html index fdc15e0d..e3eed5c6 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html @@ -180,6 +180,19 @@ Class TailCommentSyntax
+

Examples

+

#BeforeBuild.UnparsedText: ;header comment (with TailSymbol=";") +#AfterBuild:

+
{
+  "Comment": { "Symbol": ";", "Text": "header comment" }
+}
+

#BeforeBuild.UnparsedText: G01 X100 ;mid comment (with TailSymbol=";") +#AfterBuild:

+
{
+  "UnparsedText": "G01 X100",
+  "Comment": { "Symbol": ";", "Text": "mid comment" }
+}
+ @@ -328,7 +341,7 @@ Class TailCommentSyntax -

XML element name for Regs registration.

+

XML element name for Generators registration.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html index dabe9e18..dba8dbef 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html @@ -422,7 +422,7 @@ The symbols are configurable and serialized to XML.

-

XML element name for Regs registration.

+

XML element name for Generators registration.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html new file mode 100644 index 00000000..a1daec12 --- /dev/null +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html @@ -0,0 +1,495 @@ + + + + + Class FanucGotoParsingSyntax | HiAPI-C# 2025 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FanucGotoParsingSyntax +

+ +
+
Namespace
Hi.NcParsers.ParsingSyntaxs.Fanuc
+
Assembly
HiMech.dll
+
+ +

Parses Fanuc Custom Macro B GOTO phrases out of the remaining +UnparsedText into a Parsing.FanucGoto +sub-object. Two forms are recognised:

+
  • GOTO <n> — unconditional jump.
  • IF [<bool-expr>] GOTO <n> — conditional jump.
+

+IF [...] GOTO is matched as a single phrase, not as an IF +syntax composed with a GOTO syntax — Fanuc only permits the two +fixed forms (the other being IF [...] THEN <assignment>, +out of scope here), so a phrase-level parser is more faithful and +avoids parsing-ambiguity rabbit holes. +

+

+<n> is captured as a raw token (literal like "100", +variable like "#1", or bracketed expression like +"#[#2+5]"). VariableEvaluatorSyntax +substitutes the resolved literal back into the same field downstream; +FanucGotoSyntax then parses the final +string as an int. Storing as a string at parsing time mirrors how axis +tags and canned-cycle params accept #N references and the +evaluator rewrites them in place. +

+

+Pipeline placement: after HeadIndexSyntax (so the leading +N{seq} on a block like N50 GOTO 100 has already been +consumed) and after QuoteCommentSyntax +(so a parenthesised (GOTO 100) inside a comment never matches). +The phrase consumes the entire remaining text on the block — Fanuc +allows only the GOTO / IF-GOTO phrase after any preceding head index, +no other instructions on the same block. +

+
+
+ +
+
public class FanucGotoParsingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
+
+ + + + +
+
Inheritance
+
+ +
FanucGotoParsingSyntax
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ +
+
Extension Methods
+
+ + + + + + + +
+ + +

Examples

+

#BeforeBuild.UnparsedText: GOTO 100 +#AfterBuild:

+
{
+  "Parsing": {
+    "FanucGoto": {
+      "Term": "GOTO",
+      "N": "100"
+    }
+  }
+}
+

#BeforeBuild.UnparsedText: GOTO #1 +#AfterBuild:

+
{
+  "Parsing": {
+    "FanucGoto": {
+      "Term": "GOTO",
+      "N": "#1"
+    }
+  }
+}
+

#BeforeBuild.UnparsedText: IF [#1 GT 0] GOTO 100 +#AfterBuild:

+
{
+  "Parsing": {
+    "FanucGoto": {
+      "Term": "IF...GOTO",
+      "N": "100",
+      "Condition": "#1 GT 0"
+    }
+  }
+}
+ + + + +

Constructors +

+ + + + +

+ FanucGotoParsingSyntax() + +

+ +

Parameterless instance for bundle composition (no XML state).

+
+
+ +
+
public FanucGotoParsingSyntax()
+
+ + + + + + + + + + + + + + + +

+ FanucGotoParsingSyntax(XElement) + +

+ +

XML ctor (no child elements; reserved for forward compatibility).

+
+
+ +
+
public FanucGotoParsingSyntax(XElement src)
+
+ +

Parameters

+
+
src XElement
+

Root element named XName.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Name + +

+ +

Syntax kind name (typically the concrete type name).

+
+
+ +
+
public string Name { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ XName + +

+ +

XML element name used to register this syntax with XFactory.

+
+
+ +
+
public static string XName { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Build(LazyLinkedListNode<SyntaxPiece>, List<INcDependency>, NcDiagnosticProgress) + +

+ +

Build syntax arrangement into the +syntaxPieceNode in-place.

+
+
+ +
+
public void Build(LazyLinkedListNode<SyntaxPiece> syntaxPieceNode, List<INcDependency> ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress)
+
+ +

Parameters

+
+
syntaxPieceNode LazyLinkedListNode<SyntaxPiece>
+
+
ncDependencyList List<INcDependency>
+
+
ncDiagnosticProgress NcDiagnosticProgress
+
+
+ + + + + + + + + + + + + + +

+ MakeXmlSource(string, string, bool) + +

+ +

Creates an XML representation of the object. +This method may also generate additional resources such as related files.

+
+
+ +
+
public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly)
+
+ +

Parameters

+
+
baseDirectory string
+

The base directory for resolving relative paths

+
+
relFile string
+

The relative file path for the XML source

+
+
exhibitionOnly bool
+

if true, the extended file creation is suppressed.

+
+
+ +

Returns

+
+
XElement
+

An XML element representing the object's state

+
+
+ + + + + + + +

Remarks

+

For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. +The baseDirectory is typically the folder at the nearest configuration file folder. +Since the folder can be moving with the configuration file.

+
+ + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html new file mode 100644 index 00000000..ad8e7885 --- /dev/null +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html @@ -0,0 +1,485 @@ + + + + + Class FanucIfThenParsingSyntax | HiAPI-C# 2025 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FanucIfThenParsingSyntax +

+ +
+
Namespace
Hi.NcParsers.ParsingSyntaxs.Fanuc
+
Assembly
HiMech.dll
+
+ +

Parses the Fanuc Custom Macro B +IF [<bool-expr>] THEN <body> single-block conditional +phrase out of UnparsedText into a +Parsing.FanucIfThen sub-object. Sibling to +FanucGotoParsingSyntax — Fanuc spec only permits two +IF-led control phrases (IF [...] GOTO <n> handled there, +IF [...] THEN <stmt> handled here) so each form is matched +phrase-level rather than composed from a generic IF combinator.

+

+Body shape. The body after THEN is conceptually a single +statement that affects the current block only — no jump, no label scan. +Almost always a Custom Macro B assignment (#nnn = <expr>); +multiple assignments in the same body +(#100 = 5. #101 = #100 + 1) are also accepted. The parsing +syntax pre-extracts these via +GrabTagAssignment(ref string, IEnumerable<string>, string, IEnumerable<string>) into +Parsing.FanucIfThen.PendingAssignments as {tag: rhs-string} +entries — that shape lets VariableEvaluatorSyntax's +pass-2 tree walk substitute each RHS to a numeric in place, and lets +FanucIfThenSyntax lift the +resolved entries into Parsing.Assignments only when the gate +condition fires (so unfired bodies leave no trace in the readers). +

+

+Pipeline placement. This syntax must run before +FanucGotoParsingSyntax — the bare IF-GOTO regex over there +(^IF[..]GOTO n$) is anchored, but consuming IF-THEN here first +keeps the two phrases textually disjoint and avoids any future +regression if either regex is loosened. Also placed before +TagAssignmentSyntax so a bare +IF [...] THEN #100 = 5. is not first half-eaten as a plain +assignment. +

+

+Raw BodyText is retained verbatim on the +parsing section regardless of whether the body parsed as assignments — +it carries the round-trip view and lets the evaluation syntax warn +(FanucIfThen--UnsupportedBody) if no PendingAssignments were +produced on a truthy condition. +

+
+
+ +
+
public class FanucIfThenParsingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
+
+ + + + +
+
Inheritance
+
+ +
FanucIfThenParsingSyntax
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + + +
+ +
+
Extension Methods
+
+ + + + + + + +
+ + +

Examples

+

#Input: IF [#1 GT 0] THEN #100 = #500 + 1 +#Output:

+
{
+  "Parsing": {
+    "FanucIfThen": {
+      "Condition": "#1 GT 0",
+      "BodyText": "#100 = #500 + 1",
+      "PendingAssignments": { "#100": "#500 + 1" }
+    }
+  }
+}
+ + + + +

Constructors +

+ + + + +

+ FanucIfThenParsingSyntax() + +

+ +

Parameterless instance for bundle composition (no XML state).

+
+
+ +
+
public FanucIfThenParsingSyntax()
+
+ + + + + + + + + + + + + + + +

+ FanucIfThenParsingSyntax(XElement) + +

+ +

XML ctor (no child elements; reserved for forward compatibility).

+
+
+ +
+
public FanucIfThenParsingSyntax(XElement src)
+
+ +

Parameters

+
+
src XElement
+

Root element named XName.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ Name + +

+ +

Syntax kind name (typically the concrete type name).

+
+
+ +
+
public string Name { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ XName + +

+ +

XML element name used to register this syntax with XFactory.

+
+
+ +
+
public static string XName { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Build(LazyLinkedListNode<SyntaxPiece>, List<INcDependency>, NcDiagnosticProgress) + +

+ +

Build syntax arrangement into the +syntaxPieceNode in-place.

+
+
+ +
+
public void Build(LazyLinkedListNode<SyntaxPiece> syntaxPieceNode, List<INcDependency> ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress)
+
+ +

Parameters

+
+
syntaxPieceNode LazyLinkedListNode<SyntaxPiece>
+
+
ncDependencyList List<INcDependency>
+
+
ncDiagnosticProgress NcDiagnosticProgress
+
+
+ + + + + + + + + + + + + + +

+ MakeXmlSource(string, string, bool) + +

+ +

Creates an XML representation of the object. +This method may also generate additional resources such as related files.

+
+
+ +
+
public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly)
+
+ +

Parameters

+
+
baseDirectory string
+

The base directory for resolving relative paths

+
+
relFile string
+

The relative file path for the XML source

+
+
exhibitionOnly bool
+

if true, the extended file creation is suppressed.

+
+
+ +

Returns

+
+
XElement
+

An XML element representing the object's state

+
+
+ + + + + + + +

Remarks

+

For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. +The baseDirectory is typically the folder at the nearest configuration file folder. +Since the folder can be moving with the configuration file.

+
+ + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html similarity index 72% rename from App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html rename to App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html index 6f46fb93..8762e5ca 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html @@ -84,16 +84,16 @@
-
+

Examples

+

Bare O1234 on the first block of the stream (no +#Previous:) — start-of-stream is itself a tape boundary +per IsPreviousNodeTapeBoundary(LazyLinkedListNode<SyntaxPiece>), so +the syntax fires; the consumed text leaves nothing behind: +#BeforeBuild.UnparsedText: O1234 +#AfterBuild:

+
{ "FanucProgramNumber": { "Number": "1234", "Wrapper": "None" } }
+

Angle-bracketed <O5678> after an explicit +TapeBoundary block (% on the prior line) — +Wrapper records the surface form: +#Previous:

+
{ "TapeBoundary": { "Text": "" } }
+

#BeforeBuild.UnparsedText: <O5678> +#AfterBuild:

+
{ "FanucProgramNumber": { "Number": "5678", "Wrapper": "Angle" } }
+

O1234 followed by trailing text (e.g. an inline comment) — +only the program-number header is consumed; the rest stays on +UnparsedText for downstream syntaxes to handle: +#Previous:

+
{ "TapeBoundary": { "Text": "" } }
+

#BeforeBuild.UnparsedText: O1234 (PART-A) +#AfterBuild:

+
{
+  "UnparsedText": "(PART-A)",
+  "FanucProgramNumber": { "Number": "1234", "Wrapper": "None" }
+}
+

Previous block is not a tape boundary (e.g. ordinary +FanucProgramNumber already in the stream) — the +guard rejects the block, leaving UnparsedText intact: +#Previous:

+
{ "FanucProgramNumber": { "Number": "1000", "Wrapper": "None" } }
+

#BeforeBuild.UnparsedText: O9999 +#AfterBuild:

+
{ "UnparsedText": "O9999" }
+ @@ -191,9 +227,9 @@ back to its original notation.

- + -

+

FanucProgramNumberSyntax()

@@ -218,9 +254,9 @@ back to its original notation.

- + -

+

FanucProgramNumberSyntax(XElement)

@@ -236,7 +272,7 @@ back to its original notation.

Parameters

src XElement
-

Root element named XName.

+

Root element named XName.

@@ -255,9 +291,9 @@ back to its original notation.

- + -

+

Name

@@ -287,14 +323,14 @@ back to its original notation.

- + -

+

XName

-

XML element name for Regs registration.

+

XML element name for Generators registration.

@@ -323,9 +359,9 @@ back to its original notation.

- + -

+

Build(LazyLinkedListNode<SyntaxPiece>, List<INcDependency>, NcDiagnosticProgress)

@@ -360,9 +396,9 @@ back to its original notation.

- + -

+

MakeXmlSource(string, string, bool)

@@ -402,7 +438,7 @@ This method may also generate additional resources such as related files.

-

Remarks

+

Remarks

For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.html new file mode 100644 index 00000000..fdf733a0 --- /dev/null +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Fanuc.html @@ -0,0 +1,210 @@ + + + + + Namespace Hi.NcParsers.ParsingSyntaxs.Fanuc | HiAPI-C# 2025 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +

Namespace Hi.NcParsers.ParsingSyntaxs.Fanuc

+
+
+
+ +

+Classes +

+
+
FanucGotoParsingSyntax
+

Parses Fanuc Custom Macro B GOTO phrases out of the remaining +UnparsedText into a Parsing.FanucGoto +sub-object. Two forms are recognised:

+
  • GOTO <n> — unconditional jump.
  • IF [<bool-expr>] GOTO <n> — conditional jump.
+

+IF [...] GOTO is matched as a single phrase, not as an IF +syntax composed with a GOTO syntax — Fanuc only permits the two +fixed forms (the other being IF [...] THEN <assignment>, +out of scope here), so a phrase-level parser is more faithful and +avoids parsing-ambiguity rabbit holes. +

+

+<n> is captured as a raw token (literal like "100", +variable like "#1", or bracketed expression like +"#[#2+5]"). VariableEvaluatorSyntax +substitutes the resolved literal back into the same field downstream; +FanucGotoSyntax then parses the final +string as an int. Storing as a string at parsing time mirrors how axis +tags and canned-cycle params accept #N references and the +evaluator rewrites them in place. +

+

+Pipeline placement: after HeadIndexSyntax (so the leading +N{seq} on a block like N50 GOTO 100 has already been +consumed) and after QuoteCommentSyntax +(so a parenthesised (GOTO 100) inside a comment never matches). +The phrase consumes the entire remaining text on the block — Fanuc +allows only the GOTO / IF-GOTO phrase after any preceding head index, +no other instructions on the same block. +

+
+
+
+
FanucIfThenParsingSyntax
+

Parses the Fanuc Custom Macro B +IF [<bool-expr>] THEN <body> single-block conditional +phrase out of UnparsedText into a +Parsing.FanucIfThen sub-object. Sibling to +FanucGotoParsingSyntax — Fanuc spec only permits two +IF-led control phrases (IF [...] GOTO <n> handled there, +IF [...] THEN <stmt> handled here) so each form is matched +phrase-level rather than composed from a generic IF combinator.

+

+Body shape. The body after THEN is conceptually a single +statement that affects the current block only — no jump, no label scan. +Almost always a Custom Macro B assignment (#nnn = <expr>); +multiple assignments in the same body +(#100 = 5. #101 = #100 + 1) are also accepted. The parsing +syntax pre-extracts these via +GrabTagAssignment(ref string, IEnumerable<string>, string, IEnumerable<string>) into +Parsing.FanucIfThen.PendingAssignments as {tag: rhs-string} +entries — that shape lets VariableEvaluatorSyntax's +pass-2 tree walk substitute each RHS to a numeric in place, and lets +FanucIfThenSyntax lift the +resolved entries into Parsing.Assignments only when the gate +condition fires (so unfired bodies leave no trace in the readers). +

+

+Pipeline placement. This syntax must run before +FanucGotoParsingSyntax — the bare IF-GOTO regex over there +(^IF[..]GOTO n$) is anchored, but consuming IF-THEN here first +keeps the two phrases textually disjoint and avoids any future +regression if either regex is loosened. Also placed before +TagAssignmentSyntax so a bare +IF [...] THEN #100 = 5. is not first half-eaten as a plain +assignment. +

+

+Raw BodyText is retained verbatim on the +parsing section regardless of whether the body parsed as assignments — +it carries the round-trip view and lets the evaluation syntax warn +(FanucIfThen--UnsupportedBody) if no PendingAssignments were +produced on a truthy condition. +

+
+
+
+
FanucProgramNumberSyntax
+

Detects a Fanuc-family program identifier header — O1234 or +<O1234> — that follows a TapeBoundary +line, and records it under FanucProgramNumber on the +block JSON. The wrapping form (bare vs angle-bracketed) is preserved +in Wrapper so the block can be emitted +back to its original notation.

+
+
+ + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html index 490b061c..1a95099f 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html @@ -364,7 +364,7 @@ The term Tag generally accomanys with variable value.

-

XML element name for Regs registration.

+

XML element name for Generators registration.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html index 21caf42c..bdc40b4e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html @@ -179,6 +179,19 @@ Class HeadIndexSyntax
+

Examples

+

#BeforeBuild.UnparsedText: N100 X0 (with HeadSymbol=“N”) +#AfterBuild:

+
{
+  "UnparsedText": "X0",
+  "IndexNote": { "Symbol": "N", "Number": 100 }
+}
+

#BeforeBuild.UnparsedText: N42 (lone head index, no trailing tokens; with HeadSymbol=“N”) +#AfterBuild:

+
{
+  "IndexNote": { "Symbol": "N", "Number": 42 }
+}
+ @@ -329,7 +342,7 @@ NC Index from Heidenhain may have no head symbol.

-

XML element name for Regs registration.

+

XML element name for Generators registration.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html index 0956c00c..c8f4870b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html @@ -180,35 +180,34 @@ Class HeidenhainBlkFormSyntax

Examples

-

Input: BLK FORM 0.1 Z X+0 Y+0 Z-40 -Output:

+

#BeforeBuild.UnparsedText: BLK FORM 0.1 Z X+0 Y+0 Z-40 +#AfterBuild:

{
-  "BLK FORM": {
-    "Type": "0.1",
-    "Axis": "Z",
-    "X": "+0",
-    "Y": "+0",
-    "Z": "-40"
+  "Parsing": {
+    "BLK FORM": {
+      "Type": "0.1", "Axis": "Z",
+      "X": 0, "Y": 0, "Z": -40
+    }
   }
 }
-

Input: BLK FORM 0.2 X+100 Y+100 Z+0 -Output:

+

#BeforeBuild.UnparsedText: BLK FORM 0.2 X+100 Y+100 Z+0 +#AfterBuild:

{
-  "BLK FORM": {
-    "Type": "0.2",
-    "X": "+100",
-    "Y": "+100",
-    "Z": "+0"
+  "Parsing": {
+    "BLK FORM": {
+      "Type": "0.2",
+      "X": 100, "Y": 100, "Z": 0
+    }
   }
 }
-

Input: BLK FORM CYLINDER Z R50 L105 -Output:

+

#BeforeBuild.UnparsedText: BLK FORM CYLINDER Z R50 L105 +#AfterBuild:

{
-  "BLK FORM": {
-    "Type": "CYLINDER",
-    "Axis": "Z",
-    "R": "50",
-    "L": "105"
+  "Parsing": {
+    "BLK FORM": {
+      "Type": "CYLINDER", "Axis": "Z",
+      "R": 50, "L": 105
+    }
   }
 }
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html index e921baf3..a6207a22 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html @@ -180,29 +180,25 @@ Class HeidenhainCallSyntax

Examples

-

Input: CALL PGM SubProg -Output:

+

#BeforeBuild.UnparsedText: CALL PGM SubProg +#AfterBuild:

{
-  "CALL": {
-    "Target": "PGM",
-    "Name": "SubProg"
+  "Parsing": {
+    "CALL": { "Target": "PGM", "Name": "SubProg" }
   }
 }
-

Input: CALL LBL 5 -Output:

+

#BeforeBuild.UnparsedText: CALL LBL 5 +#AfterBuild:

{
-  "CALL": {
-    "Target": "LBL",
-    "Name": "5"
+  "Parsing": {
+    "CALL": { "Target": "LBL", "Name": "5" }
   }
 }
-

Input: CALL LBL MyLabel REP 3 -Output:

+

#BeforeBuild.UnparsedText: CALL LBL MyLabel REP 3 +#AfterBuild:

{
-  "CALL": {
-    "Target": "LBL",
-    "Name": "MyLabel",
-    "REP": "3"
+  "Parsing": {
+    "CALL": { "Target": "LBL", "Name": "MyLabel", "REP": "3" }
   }
 }
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html index c3eb0814..1e47b95c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html @@ -6,7 +6,7 @@ - + @@ -97,7 +97,11 @@ Class HeidenhainLSyntax
Assembly
HiMech.dll
-

Heidenhain linear movement (the leading L) syntax.

+

Heidenhain linear movement (the leading L) syntax. Strips the leading +L and grabs axis-tag values for any of +AxisTagList (X, Y, Z, U, V, W, A, B, C) that +appear afterwards as {axis}{signed-value} pairs; values are +parsed as floats via ToFloat(string).

@@ -179,6 +183,22 @@ Class HeidenhainLSyntax
+

Examples

+

#BeforeBuild.UnparsedText: L X+10 Y+20 Z-5 +#AfterBuild:

+
{
+  "Parsing": {
+    "L": { "X": 10, "Y": 20, "Z": -5 }
+  }
+}
+

#BeforeBuild.UnparsedText: L A+45 B-15 +#AfterBuild:

+
{
+  "Parsing": {
+    "L": { "A": 45, "B": -15 }
+  }
+}
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html index 26ff1ecb..5f28c91c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html @@ -182,25 +182,25 @@ LBL 0 is reserved for end of subprogram.

Examples

-

Input: LBL 1 -Output:

+

#BeforeBuild.UnparsedText: LBL 1 +#AfterBuild:

{
-  "LBL": {
-    "Name": "1"
+  "Parsing": {
+    "LBL": { "Name": "1" }
   }
 }
-

Input: LBL MyLabel -Output:

+

#BeforeBuild.UnparsedText: LBL MyLabel +#AfterBuild:

{
-  "LBL": {
-    "Name": "MyLabel"
+  "Parsing": {
+    "LBL": { "Name": "MyLabel" }
   }
 }
-

Input: LBL 0 -Output:

+

#BeforeBuild.UnparsedText: LBL 0 (LBL 0 is the end-of-subprogram sentinel) +#AfterBuild:

{
-  "LBL": {
-    "Name": "0"
+  "Parsing": {
+    "LBL": { "Name": "0" }
   }
 }
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html index fdd622b0..d8c828ee 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html @@ -186,37 +186,33 @@ Handles:

Examples

-

Input: PLANE SPATIAL SPA+30 SPB+0 SPC-10 SEQ+ COORD ROT TURN -Output:

+

#BeforeBuild.UnparsedText: PLANE SPATIAL SPA+30 SPB+0 SPC-10 SEQ+ COORD ROT TURN +#AfterBuild:

{
-  "PLANE": {
-    "Mode": "SPATIAL",
-    "SPA": "+30",
-    "SPB": "+0",
-    "SPC": "-10",
-    "SEQ": "+",
-    "Rot": "COORD",
-    "Positioning": "TURN"
+  "Parsing": {
+    "PLANE": {
+      "Mode": "SPATIAL",
+      "SPA": 30, "SPB": 0, "SPC": -10,
+      "SEQ": "+", "Rot": "COORD", "Positioning": "TURN"
+    }
   }
 }
-

Input: PLANE PROJECTED PROPR+30 PROMIN+0 ROT+45 SEQ- TABLE ROT MOVE -Output:

+

#BeforeBuild.UnparsedText: PLANE PROJECTED PROPR+30 PROMIN+0 ROT+45 SEQ- TABLE ROT MOVE +#AfterBuild:

{
-  "PLANE": {
-    "Mode": "PROJECTED",
-    "PROPR": "+30",
-    "PROMIN": "+0",
-    "ROT": "+45",
-    "SEQ": "-",
-    "Rot": "TABLE",
-    "Positioning": "MOVE"
+  "Parsing": {
+    "PLANE": {
+      "Mode": "PROJECTED",
+      "PROPR": 30, "PROMIN": 0, "ROT": 45,
+      "SEQ": "-", "Rot": "TABLE", "Positioning": "MOVE"
+    }
   }
 }
-

Input: PLANE RESET -Output:

+

#BeforeBuild.UnparsedText: PLANE RESET +#AfterBuild:

{
-  "PLANE": {
-    "Mode": "RESET"
+  "Parsing": {
+    "PLANE": { "Mode": "RESET" }
   }
 }
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html index f664889c..73f66d04 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html @@ -180,22 +180,18 @@ Class HeidenhainProgramSyntax

Examples

-

Input: BEGIN PGM DEMO MM -Output:

+

#BeforeBuild.UnparsedText: BEGIN PGM DEMO MM +#AfterBuild:

{
-  "PGM": {
-    "Command": "BEGIN",
-    "Name": "DEMO",
-    "Unit": "MM"
+  "Parsing": {
+    "PGM": { "Command": "BEGIN", "Name": "DEMO", "Unit": "MM" }
   }
 }
-

Input: END PGM DEMO MM -Output:

+

#BeforeBuild.UnparsedText: END PGM DEMO MM +#AfterBuild:

{
-  "PGM": {
-    "Command": "END",
-    "Name": "DEMO",
-    "Unit": "MM"
+  "Parsing": {
+    "PGM": { "Command": "END", "Name": "DEMO", "Unit": "MM" }
   }
 }
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html index cf71b99a..568947c6 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html @@ -181,24 +181,18 @@ Handles: TOOL CALL [ToolId|“ToolName”] [X|Y|Z] [S…] [DL&helli

Examples

-

Input: TOOL CALL 1 Z S5000 -Output:

+

#BeforeBuild.UnparsedText: TOOL CALL 1 Z S5000 +#AfterBuild:

{
-  "TOOL CALL": {
-    "T": "1",
-    "Axis": "Z",
-    "S": "5000"
+  "Parsing": {
+    "TOOL CALL": { "Axis": "Z", "S": "5000", "T": "1" }
   }
 }
-

Input: TOOL CALL “MyTool” Z S3000 DL+0.5 DR-0.1 -Output:

+

#BeforeBuild.UnparsedText: TOOL CALL “MyTool” Z S3000 DL+0.5 DR-0.1 +#AfterBuild:

{
-  "TOOL CALL": {
-    "T": "MyTool",
-    "Axis": "Z",
-    "S": "3000",
-    "DL": "+0.5",
-    "DR": "-0.1"
+  "Parsing": {
+    "TOOL CALL": { "Axis": "Z", "S": "3000", "DL": "+0.5", "DR": "-0.1", "T": "MyTool" }
   }
 }
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.html index aa668814..d20402a5 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.html @@ -117,7 +117,11 @@ Extends
HeidenhainLSyntax
-

Heidenhain linear movement (the leading L) syntax.

+

Heidenhain linear movement (the leading L) syntax. Strips the leading +L and grabs axis-tag values for any of +AxisTagList (X, Y, Z, U, V, W, A, B, C) that +appear afterwards as {axis}{signed-value} pairs; values are +parsed as floats via ToFloat(string).

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html index a59f1722..a0619a12 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html @@ -413,7 +413,7 @@ Note: Parameters like P2 in G54.1P2 should be handled by TagSetupSyntax separate -

XML element name for Regs registration.

+

XML element name for Generators registration.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html index 12a78188..2fef1d8c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html @@ -549,7 +549,7 @@ Extraction stops when encountering these prefixes followed by a number.

-

XML element name for Regs registration.

+

XML element name for Generators registration.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html index 8f8aa623..98dc16e7 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html @@ -303,7 +303,7 @@ This syntax is only needed for legacy “conventional type” configurat -

XML element name for Regs registration.

+

XML element name for Generators registration.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html index ebcc6dc0..f46b9eb7 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html @@ -183,6 +183,23 @@ separate concern handled by its own brand-specific syntax.

+

Examples

+

#BeforeBuild.UnparsedText: % +#AfterBuild:

+
{
+  "TapeBoundary": { "Text": "" }
+}
+

#BeforeBuild.UnparsedText: %foo +#AfterBuild:

+
{
+  "TapeBoundary": { "Text": "foo" }
+}
+

#BeforeBuild.UnparsedText: % header text +#AfterBuild:

+
{
+  "TapeBoundary": { "Text": "header text" }
+}
+ @@ -293,7 +310,7 @@ separate concern handled by its own brand-specific syntax.

-

XML element name for Regs registration.

+

XML element name for Generators registration.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.html index 736623b7..406d8526 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.html @@ -121,16 +121,6 @@ regardless of the skip switch. PreMarker marks a script that runs before the NC block; PostMarker marks a script that runs after. The symbols are configurable and serialized to XML.

- -
-
-
FanucProgramNumberSyntax
-

Detects a Fanuc-family program identifier header — O1234 or -<O1234> — that follows a TapeBoundary -line, and records it under FanucProgramNumber on the -block JSON. The wrapping form (bare vs angle-bracketed) is preserved -in Wrapper so the block can be emitted -back to its original notation.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html index 409dfddc..17731654 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html @@ -6,7 +6,7 @@ - + @@ -106,6 +106,28 @@ inside the cloned section. Lets every block stand alone with its full modal context, so downstream readers (cache-file dumps, semantics, UI jumping to a single block) do not need EnumerateBack() to resolve modal state.

+

+A JSON section is a candidate for TrackedKeys when ALL +four criteria hold: +

  1. Writers concentrated — one or two syntaxes own the + section (e.g. LinearMotionSyntax / + CircularMotionSyntax own + MotionState; the call/return pair own + SubProgramCall-derived state).
  2. Readers distributed — multiple downstream consumers + each need the value, and none of them should walk back to find it. + Single-reader sections do not benefit from blanket carry.
  3. Every block must see the section — cache-dump readers + landing randomly, single-block UI views, and look-ahead syntaxes + all require the section to be present on every block.
  4. Carry is unconditional — no frame-gating or other + per-block veto. Sections that need conditional carry (e.g. + FanucLocalVariableReadingSyntax's + frame-aware Vars.Local dict-merge — carry only when + MacroFrame matches) belong in the owning syntax's own + carry logic, not here.
+A section failing any criterion should be carried through its owning +syntax's own logic (single-step node.Previous read, or no carry +at all if absence is meaningful — e.g. MacroFrame absent = main +frame). +

This replaces the earlier CacheSyntax design (which sampled every Pace blocks). The legacy CacheSyntax XName is still @@ -489,7 +511,7 @@ modal value reflects the final, post-compensation state.

-

XML element name for Regs registration.

+

XML element name for Generators registration.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html index 5a718866..ffa6e9d0 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html @@ -371,7 +371,7 @@ and CompoundMotion arc items.

-

XML element name for Regs registration.

+

XML element name for Generators registration.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.html index 53edf755..1033954b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.html @@ -105,6 +105,28 @@ inside the cloned section. Lets every block stand alone with its full modal context, so downstream readers (cache-file dumps, semantics, UI jumping to a single block) do not need EnumerateBack() to resolve modal state.

+

+A JSON section is a candidate for TrackedKeys when ALL +four criteria hold: +

  1. Writers concentrated — one or two syntaxes own the + section (e.g. LinearMotionSyntax / + CircularMotionSyntax own + MotionState; the call/return pair own + SubProgramCall-derived state).
  2. Readers distributed — multiple downstream consumers + each need the value, and none of them should walk back to find it. + Single-reader sections do not benefit from blanket carry.
  3. Every block must see the section — cache-dump readers + landing randomly, single-block UI views, and look-ahead syntaxes + all require the section to be present on every block.
  4. Carry is unconditional — no frame-gating or other + per-block veto. Sections that need conditional carry (e.g. + FanucLocalVariableReadingSyntax's + frame-aware Vars.Local dict-merge — carry only when + MacroFrame matches) belong in the owning syntax's own + carry logic, not here.
+A section failing any criterion should be carried through its owning +syntax's own logic (single-step node.Previous read, or no carry +at all if absence is meaningful — e.g. MacroFrame absent = main +frame). +

This replaces the earlier CacheSyntax design (which sampled every Pace blocks). The legacy CacheSyntax XName is still diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html index 5f0a811e..e2f5af4f 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html @@ -224,7 +224,7 @@ Class SingleLineSegmenter -

XML element name for Regs registration.

+

XML element name for Generators registration.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CompoundMotionSemantic.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CompoundMotionSemantic.html index deacb32d..09785fe8 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CompoundMotionSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CompoundMotionSemantic.html @@ -99,7 +99,7 @@ Class CompoundMotionSemantic
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.html index 5d2a4917..38a7ed82 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.html @@ -111,7 +111,7 @@ non-linear because the tool orientation changes during the move.
CompoundMotionSemantic

Resolves ICompoundMotionDef into acts by delegating ItemsKey to -ResolveItems(JsonArray, LazyLinkedListNode<SyntaxPiece>, Vec3d, IRapidFeedrateConfig, NcDiagnosticProgress, IMachineAxisConfig).

+ResolveItems(JsonArray, LazyLinkedListNode<SyntaxPiece>, DVec3d, IRapidFeedrateConfig, NcDiagnosticProgress, IMachineAxisConfig, IMachineKinematics).

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcRunner.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcRunner.html index 0534b448..5801dd07 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcRunner.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcRunner.html @@ -599,7 +599,7 @@ Each pipeline list (

XML element name for Regs registration.

+

XML element name for Generators registration.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcUtil.html index b2bf57ab..3098b5d0 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcUtil.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcUtil.html @@ -216,7 +216,7 @@ stack trace anchors the bug at the read site (which is the right place to investigate — the originating block has already passed). Continuing with NaN/0 would silently propagate corrupt coordinates downstream and is more dangerous than crashing the run. -Use GetParsedDouble(JsonObject, string, Sentence, NcDiagnosticProgress) instead when reading from a parser- +Use GetParsedDouble(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) instead when reading from a parser- stage section (variable expressions on the current block deserve a soft diagnostic, not a hard crash).
@@ -346,8 +346,8 @@ and meaningfully indicates an authored claim on this block. -

- GetParsedDouble(JsonObject, string, Sentence, NcDiagnosticProgress) +

+ GetParsedDouble(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress)

@@ -358,7 +358,7 @@ section, or any sub-object thereof), with strict separation between
-
public static double? GetParsedDouble(this JsonObject section, string key, Sentence sentence, NcDiagnosticProgress diag)
+
public static double? GetParsedDouble(this JsonObject section, string key, ISentenceCarrier sentenceCarrier, NcDiagnosticProgress diag)

Parameters

@@ -388,7 +388,7 @@ call site that consumes a numeric tag held on a
string
-
sentence Sentence
+
sentenceCarrier ISentenceCarrier
diag NcDiagnosticProgress
@@ -412,8 +412,8 @@ call site that consumes a numeric tag held on a -

- GetVec3d(JsonObject, string, Vec3d, Sentence, NcDiagnosticProgress) +

+ GetVec3d(JsonObject, string, Vec3d, ISentenceCarrier, NcDiagnosticProgress)

@@ -421,16 +421,16 @@ call site that consumes a numeric tag held on a fallback.

-When sentence is non-null and diag +When sentenceCarrier is non-null and diag is supplied, non-numeric X/Y/Z values are reported via -GetParsedDouble(JsonObject, string, Sentence, NcDiagnosticProgress); when sentence is +GetParsedDouble(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress); when sentenceCarrier is null, the diagnostic still fires but without a source-line anchor.

-
public static Vec3d GetVec3d(JsonObject json, string sectionKey, Vec3d fallback, Sentence sentence, NcDiagnosticProgress diag)
+
public static Vec3d GetVec3d(JsonObject json, string sectionKey, Vec3d fallback, ISentenceCarrier sentenceCarrier, NcDiagnosticProgress diag)

Parameters

@@ -441,7 +441,7 @@ null, the diagnostic still fires but without a source-line anchor.
fallback Vec3d
-
sentence Sentence
+
sentenceCarrier ISentenceCarrier
diag NcDiagnosticProgress
@@ -465,8 +465,8 @@ null, the diagnostic still fires but without a source-line anchor. -

- GetVec3d(JsonObject, string, Sentence, NcDiagnosticProgress) +

+ GetVec3d(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress)

@@ -474,10 +474,10 @@ null, the diagnostic still fires but without a source-line anchor. Returns null if the section or all three keys are missing; individual missing keys are filled with NaN.

-When sentence is non-null and diag +When sentenceCarrier is non-null and diag is supplied, non-numeric X/Y/Z values are reported via -GetParsedDouble(JsonObject, string, Sentence, NcDiagnosticProgress) (id VariableExpression--Unevaluated); -when sentence is null, the diagnostic still fires +GetParsedDouble(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) (id VariableExpression--Unevaluated); +when sentenceCarrier is null, the diagnostic still fires but without a source-line anchor (used by backward-walk / dump-reading callers that cannot tie the read to the current sentence).

@@ -485,7 +485,7 @@ callers that cannot tie the read to the current sentence).
-
public static Vec3d GetVec3d(JsonObject json, string sectionKey, Sentence sentence, NcDiagnosticProgress diag)
+
public static Vec3d GetVec3d(JsonObject json, string sectionKey, ISentenceCarrier sentenceCarrier, NcDiagnosticProgress diag)

Parameters

@@ -494,7 +494,7 @@ callers that cannot tie the read to the current sentence).
sectionKey string
-
sentence Sentence
+
sentenceCarrier ISentenceCarrier
diag NcDiagnosticProgress
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.BundleSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.BundleSyntax.html index 2d884b8a..7e57bcbd 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.BundleSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.BundleSyntax.html @@ -394,7 +394,7 @@ If the INcSyntax -

XML element name for Regs registration.

+

XML element name for Generators registration.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.SyntaxPiece.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.SyntaxPiece.html index 8314faf3..1fa42c1b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.SyntaxPiece.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.SyntaxPiece.html @@ -102,7 +102,7 @@ Class SyntaxPiece
-
public class SyntaxPiece : IGetSentence
+
public class SyntaxPiece : ISentenceCarrier, IGetSentence, ISentenceIndexed
@@ -119,7 +119,9 @@ Class SyntaxPiece
Implements
+ +
@@ -198,17 +200,17 @@ to store typed values at parse time. -

- SyntaxPiece(Sentence, JsonObject) +

+ SyntaxPiece(Sentence, JsonObject, int)

-

Creates a piece binding sentence to jsonObject.

+

Creates a piece binding sentence to jsonObject with its execution-order sentenceIndex.

-
public SyntaxPiece(Sentence sentence, JsonObject jsonObject)
+
public SyntaxPiece(Sentence sentence, JsonObject jsonObject, int sentenceIndex)

Parameters

@@ -217,6 +219,8 @@ to store typed values at parse time.
jsonObject JsonObject
+
sentenceIndex int
+
@@ -306,18 +310,23 @@ to store typed values at parse time.

0-based ordinal in NC execution order. Stamped at piece construction -time by GetSyntaxPieces(ISegmenter, LazyLinkedList<IndexedFileLine>, int, NcDiagnosticProgress, CancellationToken) from the destination +time by GetSyntaxPieces(ISegmenter, IEnumerable<IndexedFileLine>, int, NcDiagnosticProgress, CancellationToken) from the destination layers[0]'s running count, so subprogram pieces inlined by SubProgramCallSyntax get sequential indices that interleave correctly between host blocks. Useful as a cross-process alignment key (messages, ClStripPos, MachiningStep) — unlike FileLineUtil.MixedIndex(), it reflects execution order rather than (FileIndex, LineIndex) source order.

+

+Required at construction: the index is identity, not optional metadata. +Read-only after construction; the pipeline guarantees one stamping per +piece at the wrapping chokepoint. +

-
public int SentenceIndex { get; set; }
+
public int SentenceIndex { get; }
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.html index 24bbd59d..969379a9 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.html @@ -94,6 +94,15 @@

Classes

+
+
IndexedSentence
+

Minimal ISentenceCarrier pairing a Sentence +with its execution-order SentenceIndex. Use when there is no +richer host object that already carries the sentence — e.g. CSV-driven +runs that go straight from an input line to a Sentence +without a SyntaxPiece wrapper.

+
+
NcDiagnostic

A structured diagnostic from the SoftNcRunner pipeline, @@ -136,6 +145,28 @@ Interfaces

IGetSentence

Abstraction for a source that carries a Sentence.

+
+
+
+
ISentenceCarrier
+

Carries a reference to a source Sentence together with its +execution-order SentenceIndex. Used as the +cross-process alignment carrier for diagnostics, messages, ClStripPos, +MachiningStep, etc. — both the source content (via +GetSentence()) and the execution-order position +(via SentenceIndex) are available without +needing two separate references.

+
+
+
+
ISentenceIndexed
+

Abstraction for an object that carries a SentenceIndex — +a 0-based ordinal of its source Sentence in NC execution +order. Use as a cross-process alignment key (messages, ClStripPos, +MachiningStep, etc.) when source order +(MixedIndex(IFileLineIndex)) +is not enough because SubProgram inline reorders blocks relative to +(FileIndex, LineIndex).

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.FilePlayers.CsvRunner.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.FilePlayers.CsvRunner.html index f3adc253..ab3923c2 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.FilePlayers.CsvRunner.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.FilePlayers.CsvRunner.html @@ -264,7 +264,10 @@ Class CsvRunner

-

Reset runtime data.

+

Reset runtime data, including the execution-order +Hi.Numerical.FilePlayers.CsvRunner.sentenceIndex counter. Called from +LocalProjectService.ResetRuntime only — session stop +(EndSession) deliberately does not reset the runner.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.HardNcLine.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.HardNcLine.html index e9d513bb..3230a6bc 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.HardNcLine.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.HardNcLine.html @@ -102,7 +102,7 @@ Class HardNcLine
-
public class HardNcLine : IIndexedFileLine, IFileLine, IFileLineIndex, IGetIndexedFileLine, IGetFileLineIndex, IFlagText, IGetSentence
+
public class HardNcLine : IIndexedFileLine, IFileLine, IFileLineIndex, IGetIndexedFileLine, IGetFileLineIndex, IFlagText, ISentenceCarrier, IGetSentence, ISentenceIndexed
@@ -125,7 +125,9 @@ Class HardNcLine + +
@@ -198,8 +200,8 @@ Class HardNcLine -

- HardNcLine(HardNcEnv, IndexedFileLine, HardNcLine, out NcNoteCache, IProgress<object>) +

+ HardNcLine(HardNcEnv, IndexedFileLine, HardNcLine, int, out NcNoteCache, IProgress<object>)

@@ -208,7 +210,7 @@ Class HardNcLine
-
public HardNcLine(HardNcEnv ncEnv, IndexedFileLine fileLine, HardNcLine preNcLine, out NcNoteCache ncNoteCache, IProgress<object> progress)
+
public HardNcLine(HardNcEnv ncEnv, IndexedFileLine fileLine, HardNcLine preNcLine, int sentenceIndex, out NcNoteCache ncNoteCache, IProgress<object> progress)

Parameters

@@ -222,6 +224,10 @@ Class HardNcLine
preNcLine HardNcLine

reference HardNcLine that this HardNcLine copy from. If previous HardNcLine is not null, apply previous HardNcLine.

+
+
sentenceIndex int
+

0-based ordinal in NC execution order; stamped at construction +and exposed via SentenceIndex.

ncNoteCache NcNoteCache

Output NC note cache

@@ -249,7 +255,9 @@ If previous HardNcLine i -

Ctor for initial state.

+

Ctor for initial state. The instance is the pre-pipeline seed +(RefNcLineOnInit), so +SentenceIndex is set to -1 as a “not in pipeline” sentinel.

@@ -1887,6 +1895,42 @@ So be care that do not change the NC XYZ if not needed.

+ + +

+ SentenceIndex + +

+ +

0-based ordinal in NC execution order, stamped at construction by +Hi.Numerical.FilePlayers.HardNcRunner (source-side) or by +NcOptProc (optimized-side, a fresh independent count). +Init-state lines (RefNcLineOnInit) carry +-1 as a “not in pipeline” sentinel.

+
+
+ +
+
public int SentenceIndex { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + +

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.SourcedActEntry.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.SourcedActEntry.html index 8039b676..9b83e35d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.SourcedActEntry.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.SourcedActEntry.html @@ -186,8 +186,8 @@ Class SourcedActEntry -

- SourcedActEntry(IGetSentence, IAct) +

+ SourcedActEntry(ISentenceCarrier, IAct)

@@ -196,13 +196,15 @@ Class SourcedActEntry
-
public SourcedActEntry(IGetSentence SentenceSource, IAct Act)
+
public SourcedActEntry(ISentenceCarrier SentenceSource, IAct Act)

Parameters

-
SentenceSource IGetSentence
-

The source sentence.

+
SentenceSource ISentenceCarrier
+

The source sentence carrier, carrying both the +Sentence and the execution-order +SentenceIndex.

Act IAct

The act associated with the source command.

@@ -263,12 +265,14 @@ Class SourcedActEntry -

The source sentence.

+

The source sentence carrier, carrying both the +Sentence and the execution-order +SentenceIndex.

-
public IGetSentence SentenceSource { get; init; }
+
public ISentenceCarrier SentenceSource { get; init; }
@@ -277,7 +281,7 @@ Class SourcedActEntry

Property Value

-
IGetSentence
+
ISentenceCarrier
diff --git a/App/wwwroot/HiAPI-docsite/api/toc.html b/App/wwwroot/HiAPI-docsite/api/toc.html index 613e353e..d6b5949f 100644 --- a/App/wwwroot/HiAPI-docsite/api/toc.html +++ b/App/wwwroot/HiAPI-docsite/api/toc.html @@ -683,7 +683,7 @@ XFactory
  • - XFactory.GenByXElementDelegate + XFactory.XGeneratorDelegate
  • XFactory.XmlExceptionDelegate @@ -2381,6 +2381,15 @@
  • IGetSentence
  • +
  • + ISentenceCarrier +
  • +
  • + ISentenceIndexed +
  • +
  • + IndexedSentence +
  • NcDiagnostic
  • @@ -2467,6 +2476,9 @@
  • CutterCompensationType
  • +
  • + FanucGotoIterationDependency +
  • FanucParameterTable
  • @@ -2573,7 +2585,19 @@ +
  • + + Hi.NcParsers.EvaluationSyntaxs.Fanuc + + +
  • Hi.NcParsers.Initializers @@ -2690,6 +2745,12 @@
  • BlockSkip
  • +
  • + CallFrame +
  • +
  • + CallStack +
  • CannedCycle
  • @@ -2711,6 +2772,18 @@
  • Dwell
  • +
  • + FanucGoto +
  • +
  • + FanucIfThen +
  • +
  • + FanucMacroCall +
  • +
  • + FanucModalMacro +
  • FanucPathSmoothing
  • @@ -2810,6 +2883,9 @@
  • MachineCoordinateState
  • +
  • + MacroFrame +
  • MotionEvent
  • @@ -2917,6 +2993,9 @@
  • BackBoringSyntax
  • +
  • + BareG28Behavior +
  • BoringCycleSyntax
  • @@ -3070,9 +3149,6 @@
  • CsScriptSyntax
  • -
  • - FanucProgramNumberSyntax -
  • FlagSyntax
  • @@ -3121,6 +3197,22 @@ +
  • + + Hi.NcParsers.ParsingSyntaxs.Fanuc + + +
  • Hi.NcParsers.ParsingSyntaxs.Heidenhain diff --git a/App/wwwroot/HiAPI-docsite/api/toc.json b/App/wwwroot/HiAPI-docsite/api/toc.json index 2b2f759f..d1858224 100644 --- a/App/wwwroot/HiAPI-docsite/api/toc.json +++ b/App/wwwroot/HiAPI-docsite/api/toc.json @@ -1,2 +1,2 @@ -{"items":[{"name":"Hi.Cbtr","href":"Hi.Cbtr.html","topicHref":"Hi.Cbtr.html","topicUid":"Hi.Cbtr","type":"Namespace","items":[{"name":"CachedTris","href":"Hi.Cbtr.CachedTris.html","topicHref":"Hi.Cbtr.CachedTris.html","topicUid":"Hi.Cbtr.CachedTris","type":"Class"},{"name":"CachedTris.SweepingMode","href":"Hi.Cbtr.CachedTris.SweepingMode.html","topicHref":"Hi.Cbtr.CachedTris.SweepingMode.html","topicUid":"Hi.Cbtr.CachedTris.SweepingMode","type":"Enum"},{"name":"CbtrPickable","href":"Hi.Cbtr.CbtrPickable.html","topicHref":"Hi.Cbtr.CbtrPickable.html","topicUid":"Hi.Cbtr.CbtrPickable","type":"Class"},{"name":"ConstructionDefectDisplayee","href":"Hi.Cbtr.ConstructionDefectDisplayee.html","topicHref":"Hi.Cbtr.ConstructionDefectDisplayee.html","topicUid":"Hi.Cbtr.ConstructionDefectDisplayee","type":"Class"},{"name":"CubeTree","href":"Hi.Cbtr.CubeTree.html","topicHref":"Hi.Cbtr.CubeTree.html","topicUid":"Hi.Cbtr.CubeTree","type":"Class"},{"name":"CubeTree.DefectNodeInfo","href":"Hi.Cbtr.CubeTree.DefectNodeInfo.html","topicHref":"Hi.Cbtr.CubeTree.DefectNodeInfo.html","topicUid":"Hi.Cbtr.CubeTree.DefectNodeInfo","type":"Class"},{"name":"CubeTree.DefectNodeInfo.TriWireInfo","href":"Hi.Cbtr.CubeTree.DefectNodeInfo.TriWireInfo.html","topicHref":"Hi.Cbtr.CubeTree.DefectNodeInfo.TriWireInfo.html","topicUid":"Hi.Cbtr.CubeTree.DefectNodeInfo.TriWireInfo","type":"Class"},{"name":"CubeTree.DefectTriWireInfoInterop","href":"Hi.Cbtr.CubeTree.DefectTriWireInfoInterop.html","topicHref":"Hi.Cbtr.CubeTree.DefectTriWireInfoInterop.html","topicUid":"Hi.Cbtr.CubeTree.DefectTriWireInfoInterop","type":"Struct"},{"name":"CubeTree.InfNodeInfo","href":"Hi.Cbtr.CubeTree.InfNodeInfo.html","topicHref":"Hi.Cbtr.CubeTree.InfNodeInfo.html","topicUid":"Hi.Cbtr.CubeTree.InfNodeInfo","type":"Class"},{"name":"CubeTree.TriWireRelationInterop","href":"Hi.Cbtr.CubeTree.TriWireRelationInterop.html","topicHref":"Hi.Cbtr.CubeTree.TriWireRelationInterop.html","topicUid":"Hi.Cbtr.CubeTree.TriWireRelationInterop","type":"Struct"},{"name":"CubeTree.diff_response_func_t","href":"Hi.Cbtr.CubeTree.diff_response_func_t.html","topicHref":"Hi.Cbtr.CubeTree.diff_response_func_t.html","topicUid":"Hi.Cbtr.CubeTree.diff_response_func_t","type":"Delegate"},{"name":"CubeTreeExportExtensions","href":"Hi.Cbtr.CubeTreeExportExtensions.html","topicHref":"Hi.Cbtr.CubeTreeExportExtensions.html","topicUid":"Hi.Cbtr.CubeTreeExportExtensions","type":"Class"},{"name":"CubeTreeFile","href":"Hi.Cbtr.CubeTreeFile.html","topicHref":"Hi.Cbtr.CubeTreeFile.html","topicUid":"Hi.Cbtr.CubeTreeFile","type":"Class"},{"name":"DiffAttachment","href":"Hi.Cbtr.DiffAttachment.html","topicHref":"Hi.Cbtr.DiffAttachment.html","topicUid":"Hi.Cbtr.DiffAttachment","type":"Class"},{"name":"GeomBoolCache","href":"Hi.Cbtr.GeomBoolCache.html","topicHref":"Hi.Cbtr.GeomBoolCache.html","topicUid":"Hi.Cbtr.GeomBoolCache","type":"Class"},{"name":"GeomBoolCacheEnum","href":"Hi.Cbtr.GeomBoolCacheEnum.html","topicHref":"Hi.Cbtr.GeomBoolCacheEnum.html","topicUid":"Hi.Cbtr.GeomBoolCacheEnum","type":"Enum"},{"name":"IGetInitStickConvex","href":"Hi.Cbtr.IGetInitStickConvex.html","topicHref":"Hi.Cbtr.IGetInitStickConvex.html","topicUid":"Hi.Cbtr.IGetInitStickConvex","type":"Interface"},{"name":"InfDefectDisplayee","href":"Hi.Cbtr.InfDefectDisplayee.html","topicHref":"Hi.Cbtr.InfDefectDisplayee.html","topicUid":"Hi.Cbtr.InfDefectDisplayee","type":"Class"},{"name":"InitStickConvex","href":"Hi.Cbtr.InitStickConvex.html","topicHref":"Hi.Cbtr.InitStickConvex.html","topicUid":"Hi.Cbtr.InitStickConvex","type":"Class"},{"name":"LsStl","href":"Hi.Cbtr.LsStl.html","topicHref":"Hi.Cbtr.LsStl.html","topicUid":"Hi.Cbtr.LsStl","type":"Class"},{"name":"Substraction","href":"Hi.Cbtr.Substraction.html","topicHref":"Hi.Cbtr.Substraction.html","topicUid":"Hi.Cbtr.Substraction","type":"Class"},{"name":"UnhighlightablePickable","href":"Hi.Cbtr.UnhighlightablePickable.html","topicHref":"Hi.Cbtr.UnhighlightablePickable.html","topicUid":"Hi.Cbtr.UnhighlightablePickable","type":"Class"},{"name":"UnmanagedSubstraction","href":"Hi.Cbtr.UnmanagedSubstraction.html","topicHref":"Hi.Cbtr.UnmanagedSubstraction.html","topicUid":"Hi.Cbtr.UnmanagedSubstraction","type":"Class"},{"name":"WireCube","href":"Hi.Cbtr.WireCube.html","topicHref":"Hi.Cbtr.WireCube.html","topicUid":"Hi.Cbtr.WireCube","type":"Class"},{"name":"node_diff_t","href":"Hi.Cbtr.node_diff_t.html","topicHref":"Hi.Cbtr.node_diff_t.html","topicUid":"Hi.Cbtr.node_diff_t","type":"Struct"}]},{"name":"Hi.Collision","href":"Hi.Collision.html","topicHref":"Hi.Collision.html","topicUid":"Hi.Collision","type":"Namespace","items":[{"name":"AnchoredCollidableLeaf","href":"Hi.Collision.AnchoredCollidableLeaf.html","topicHref":"Hi.Collision.AnchoredCollidableLeaf.html","topicUid":"Hi.Collision.AnchoredCollidableLeaf","type":"Class"},{"name":"AnchoredCollidablePair","href":"Hi.Collision.AnchoredCollidablePair.html","topicHref":"Hi.Collision.AnchoredCollidablePair.html","topicUid":"Hi.Collision.AnchoredCollidablePair","type":"Class"},{"name":"CollidableStl","href":"Hi.Collision.CollidableStl.html","topicHref":"Hi.Collision.CollidableStl.html","topicUid":"Hi.Collision.CollidableStl","type":"Class"},{"name":"CollisionFlag","href":"Hi.Collision.CollisionFlag.html","topicHref":"Hi.Collision.CollisionFlag.html","topicUid":"Hi.Collision.CollisionFlag","type":"Enum"},{"name":"CollisionIndexPair","href":"Hi.Collision.CollisionIndexPair.html","topicHref":"Hi.Collision.CollisionIndexPair.html","topicUid":"Hi.Collision.CollisionIndexPair","type":"Class"},{"name":"CollisionUtil","href":"Hi.Collision.CollisionUtil.html","topicHref":"Hi.Collision.CollisionUtil.html","topicUid":"Hi.Collision.CollisionUtil","type":"Class"},{"name":"FuncAnchoredCollidable","href":"Hi.Collision.FuncAnchoredCollidable.html","topicHref":"Hi.Collision.FuncAnchoredCollidable.html","topicUid":"Hi.Collision.FuncAnchoredCollidable","type":"Class"},{"name":"IAnchoredCollidableBased","href":"Hi.Collision.IAnchoredCollidableBased.html","topicHref":"Hi.Collision.IAnchoredCollidableBased.html","topicUid":"Hi.Collision.IAnchoredCollidableBased","type":"Interface"},{"name":"IAnchoredCollidableLeaf","href":"Hi.Collision.IAnchoredCollidableLeaf.html","topicHref":"Hi.Collision.IAnchoredCollidableLeaf.html","topicUid":"Hi.Collision.IAnchoredCollidableLeaf","type":"Interface"},{"name":"IAnchoredCollidableNode","href":"Hi.Collision.IAnchoredCollidableNode.html","topicHref":"Hi.Collision.IAnchoredCollidableNode.html","topicUid":"Hi.Collision.IAnchoredCollidableNode","type":"Interface"},{"name":"IAnchoredCollidableStem","href":"Hi.Collision.IAnchoredCollidableStem.html","topicHref":"Hi.Collision.IAnchoredCollidableStem.html","topicUid":"Hi.Collision.IAnchoredCollidableStem","type":"Interface"},{"name":"ICollidable","href":"Hi.Collision.ICollidable.html","topicHref":"Hi.Collision.ICollidable.html","topicUid":"Hi.Collision.ICollidable","type":"Interface"},{"name":"ICollidee","href":"Hi.Collision.ICollidee.html","topicHref":"Hi.Collision.ICollidee.html","topicUid":"Hi.Collision.ICollidee","type":"Interface"},{"name":"ICollisionArena","href":"Hi.Collision.ICollisionArena.html","topicHref":"Hi.Collision.ICollisionArena.html","topicUid":"Hi.Collision.ICollisionArena","type":"Interface"},{"name":"ICollisionIndex","href":"Hi.Collision.ICollisionIndex.html","topicHref":"Hi.Collision.ICollisionIndex.html","topicUid":"Hi.Collision.ICollisionIndex","type":"Interface"},{"name":"IGetAnchoredCollidablePairs","href":"Hi.Collision.IGetAnchoredCollidablePairs.html","topicHref":"Hi.Collision.IGetAnchoredCollidablePairs.html","topicUid":"Hi.Collision.IGetAnchoredCollidablePairs","type":"Interface"},{"name":"IGetCollidable","href":"Hi.Collision.IGetCollidable.html","topicHref":"Hi.Collision.IGetCollidable.html","topicUid":"Hi.Collision.IGetCollidable","type":"Interface"},{"name":"IGetCollisionIndexPairs","href":"Hi.Collision.IGetCollisionIndexPairs.html","topicHref":"Hi.Collision.IGetCollisionIndexPairs.html","topicUid":"Hi.Collision.IGetCollisionIndexPairs","type":"Interface"},{"name":"IGetDefaultCollidablePairs","href":"Hi.Collision.IGetDefaultCollidablePairs.html","topicHref":"Hi.Collision.IGetDefaultCollidablePairs.html","topicUid":"Hi.Collision.IGetDefaultCollidablePairs","type":"Interface"},{"name":"IGetTriTree","href":"Hi.Collision.IGetTriTree.html","topicHref":"Hi.Collision.IGetTriTree.html","topicUid":"Hi.Collision.IGetTriTree","type":"Interface"},{"name":"MechCollisionResult","href":"Hi.Collision.MechCollisionResult.html","topicHref":"Hi.Collision.MechCollisionResult.html","topicUid":"Hi.Collision.MechCollisionResult","type":"Class"},{"name":"MechCollisionUtil","href":"Hi.Collision.MechCollisionUtil.html","topicHref":"Hi.Collision.MechCollisionUtil.html","topicUid":"Hi.Collision.MechCollisionUtil","type":"Class"},{"name":"TriTree","href":"Hi.Collision.TriTree.html","topicHref":"Hi.Collision.TriTree.html","topicUid":"Hi.Collision.TriTree","type":"Class"}]},{"name":"Hi.Collisions","href":"Hi.Collisions.html","topicHref":"Hi.Collisions.html","topicUid":"Hi.Collisions","type":"Namespace","items":[{"name":"AnchoredCollidabled","href":"Hi.Collisions.AnchoredCollidabled.html","topicHref":"Hi.Collisions.AnchoredCollidabled.html","topicUid":"Hi.Collisions.AnchoredCollidabled","type":"Class"},{"name":"IAnchoredCollidabled","href":"Hi.Collisions.IAnchoredCollidabled.html","topicHref":"Hi.Collisions.IAnchoredCollidabled.html","topicUid":"Hi.Collisions.IAnchoredCollidabled","type":"Interface"}]},{"name":"Hi.Coloring","href":"Hi.Coloring.html","topicHref":"Hi.Coloring.html","topicUid":"Hi.Coloring","type":"Namespace","items":[{"name":"ColorUtil","href":"Hi.Coloring.ColorUtil.html","topicHref":"Hi.Coloring.ColorUtil.html","topicUid":"Hi.Coloring.ColorUtil","type":"Class"},{"name":"DictionaryColorGuide","href":"Hi.Coloring.DictionaryColorGuide.html","topicHref":"Hi.Coloring.DictionaryColorGuide.html","topicUid":"Hi.Coloring.DictionaryColorGuide","type":"Class"},{"name":"DiscreteQuantityColorGuide","href":"Hi.Coloring.DiscreteQuantityColorGuide.html","topicHref":"Hi.Coloring.DiscreteQuantityColorGuide.html","topicUid":"Hi.Coloring.DiscreteQuantityColorGuide","type":"Class"},{"name":"FilteredColorGuide","href":"Hi.Coloring.FilteredColorGuide.html","topicHref":"Hi.Coloring.FilteredColorGuide.html","topicUid":"Hi.Coloring.FilteredColorGuide","type":"Class"},{"name":"FuncRangeColorGuide","href":"Hi.Coloring.FuncRangeColorGuide.html","topicHref":"Hi.Coloring.FuncRangeColorGuide.html","topicUid":"Hi.Coloring.FuncRangeColorGuide","type":"Class"},{"name":"IColorGuide","href":"Hi.Coloring.IColorGuide.html","topicHref":"Hi.Coloring.IColorGuide.html","topicUid":"Hi.Coloring.IColorGuide","type":"Interface"},{"name":"IColorGuideProperty","href":"Hi.Coloring.IColorGuideProperty.html","topicHref":"Hi.Coloring.IColorGuideProperty.html","topicUid":"Hi.Coloring.IColorGuideProperty","type":"Interface"},{"name":"IGetColorGuide","href":"Hi.Coloring.IGetColorGuide.html","topicHref":"Hi.Coloring.IGetColorGuide.html","topicUid":"Hi.Coloring.IGetColorGuide","type":"Interface"},{"name":"IGetRangeColorRule","href":"Hi.Coloring.IGetRangeColorRule.html","topicHref":"Hi.Coloring.IGetRangeColorRule.html","topicUid":"Hi.Coloring.IGetRangeColorRule","type":"Interface"},{"name":"IGetRgb","href":"Hi.Coloring.IGetRgb.html","topicHref":"Hi.Coloring.IGetRgb.html","topicUid":"Hi.Coloring.IGetRgb","type":"Interface"},{"name":"IGetRgbWithPriority","href":"Hi.Coloring.IGetRgbWithPriority.html","topicHref":"Hi.Coloring.IGetRgbWithPriority.html","topicUid":"Hi.Coloring.IGetRgbWithPriority","type":"Interface"},{"name":"PlainColorGuide","href":"Hi.Coloring.PlainColorGuide.html","topicHref":"Hi.Coloring.PlainColorGuide.html","topicUid":"Hi.Coloring.PlainColorGuide","type":"Class"},{"name":"QuantityColorGuide","href":"Hi.Coloring.QuantityColorGuide.html","topicHref":"Hi.Coloring.QuantityColorGuide.html","topicUid":"Hi.Coloring.QuantityColorGuide","type":"Class"},{"name":"RangeColorRule","href":"Hi.Coloring.RangeColorRule.html","topicHref":"Hi.Coloring.RangeColorRule.html","topicUid":"Hi.Coloring.RangeColorRule","type":"Class"},{"name":"RatioRgbFuncEnum","href":"Hi.Coloring.RatioRgbFuncEnum.html","topicHref":"Hi.Coloring.RatioRgbFuncEnum.html","topicUid":"Hi.Coloring.RatioRgbFuncEnum","type":"Enum"},{"name":"RgbSeed","href":"Hi.Coloring.RgbSeed.html","topicHref":"Hi.Coloring.RgbSeed.html","topicUid":"Hi.Coloring.RgbSeed","type":"Class"}]},{"name":"Hi.Common","href":"Hi.Common.html","topicHref":"Hi.Common.html","topicUid":"Hi.Common","type":"Namespace","items":[{"name":"BinIoUtil","href":"Hi.Common.BinIoUtil.html","topicHref":"Hi.Common.BinIoUtil.html","topicUid":"Hi.Common.BinIoUtil","type":"Class"},{"name":"BitUtil","href":"Hi.Common.BitUtil.html","topicHref":"Hi.Common.BitUtil.html","topicUid":"Hi.Common.BitUtil","type":"Class"},{"name":"BlockingTimer","href":"Hi.Common.BlockingTimer.html","topicHref":"Hi.Common.BlockingTimer.html","topicUid":"Hi.Common.BlockingTimer","type":"Class"},{"name":"BytesUtil","href":"Hi.Common.BytesUtil.html","topicHref":"Hi.Common.BytesUtil.html","topicUid":"Hi.Common.BytesUtil","type":"Class"},{"name":"ConcurrentTimeCounter","href":"Hi.Common.ConcurrentTimeCounter.html","topicHref":"Hi.Common.ConcurrentTimeCounter.html","topicUid":"Hi.Common.ConcurrentTimeCounter","type":"Class"},{"name":"ConsoleUtil","href":"Hi.Common.ConsoleUtil.html","topicHref":"Hi.Common.ConsoleUtil.html","topicUid":"Hi.Common.ConsoleUtil","type":"Class"},{"name":"CppLogUtil","href":"Hi.Common.CppLogUtil.html","topicHref":"Hi.Common.CppLogUtil.html","topicUid":"Hi.Common.CppLogUtil","type":"Class"},{"name":"CppLogUtil.LogDelegate","href":"Hi.Common.CppLogUtil.LogDelegate.html","topicHref":"Hi.Common.CppLogUtil.LogDelegate.html","topicUid":"Hi.Common.CppLogUtil.LogDelegate","type":"Delegate"},{"name":"CultureUtil","href":"Hi.Common.CultureUtil.html","topicHref":"Hi.Common.CultureUtil.html","topicUid":"Hi.Common.CultureUtil","type":"Class"},{"name":"DuplicateUtil","href":"Hi.Common.DuplicateUtil.html","topicHref":"Hi.Common.DuplicateUtil.html","topicUid":"Hi.Common.DuplicateUtil","type":"Class"},{"name":"EnumUtil","href":"Hi.Common.EnumUtil.html","topicHref":"Hi.Common.EnumUtil.html","topicUid":"Hi.Common.EnumUtil","type":"Class"},{"name":"EnumerablePlayer","href":"Hi.Common.EnumerablePlayer.html","topicHref":"Hi.Common.EnumerablePlayer.html","topicUid":"Hi.Common.EnumerablePlayer","type":"Class"},{"name":"IAbstractNote","href":"Hi.Common.IAbstractNote.html","topicHref":"Hi.Common.IAbstractNote.html","topicUid":"Hi.Common.IAbstractNote","type":"Interface"},{"name":"IBinaryIo","href":"Hi.Common.IBinaryIo.html","topicHref":"Hi.Common.IBinaryIo.html","topicUid":"Hi.Common.IBinaryIo","type":"Interface"},{"name":"IClearCache","href":"Hi.Common.IClearCache.html","topicHref":"Hi.Common.IClearCache.html","topicUid":"Hi.Common.IClearCache","type":"Interface"},{"name":"IDuplicate","href":"Hi.Common.IDuplicate.html","topicHref":"Hi.Common.IDuplicate.html","topicUid":"Hi.Common.IDuplicate","type":"Interface"},{"name":"IGetQuantityByKey","href":"Hi.Common.IGetQuantityByKey.html","topicHref":"Hi.Common.IGetQuantityByKey.html","topicUid":"Hi.Common.IGetQuantityByKey","type":"Interface"},{"name":"IGetSelectionName","href":"Hi.Common.IGetSelectionName.html","topicHref":"Hi.Common.IGetSelectionName.html","topicUid":"Hi.Common.IGetSelectionName","type":"Interface"},{"name":"INameNote","href":"Hi.Common.INameNote.html","topicHref":"Hi.Common.INameNote.html","topicUid":"Hi.Common.INameNote","type":"Interface"},{"name":"IPreferredFileName","href":"Hi.Common.IPreferredFileName.html","topicHref":"Hi.Common.IPreferredFileName.html","topicUid":"Hi.Common.IPreferredFileName","type":"Interface"},{"name":"IProgressFraction","href":"Hi.Common.IProgressFraction.html","topicHref":"Hi.Common.IProgressFraction.html","topicUid":"Hi.Common.IProgressFraction","type":"Interface"},{"name":"ISourceFile","href":"Hi.Common.ISourceFile.html","topicHref":"Hi.Common.ISourceFile.html","topicUid":"Hi.Common.ISourceFile","type":"Interface"},{"name":"IToPresentDto","href":"Hi.Common.IToPresentDto.html","topicHref":"Hi.Common.IToPresentDto.html","topicUid":"Hi.Common.IToPresentDto","type":"Interface"},{"name":"IUpdateByContent","href":"Hi.Common.IUpdateByContent.html","topicHref":"Hi.Common.IUpdateByContent.html","topicUid":"Hi.Common.IUpdateByContent","type":"Interface"},{"name":"IUriGetter","href":"Hi.Common.IUriGetter.html","topicHref":"Hi.Common.IUriGetter.html","topicUid":"Hi.Common.IUriGetter","type":"Interface"},{"name":"IWriteBin","href":"Hi.Common.IWriteBin.html","topicHref":"Hi.Common.IWriteBin.html","topicUid":"Hi.Common.IWriteBin","type":"Interface"},{"name":"IndexSegment","href":"Hi.Common.IndexSegment.html","topicHref":"Hi.Common.IndexSegment.html","topicUid":"Hi.Common.IndexSegment","type":"Class"},{"name":"IntegerKeyDictionaryConverter","href":"Hi.Common.IntegerKeyDictionaryConverter.html","topicHref":"Hi.Common.IntegerKeyDictionaryConverter.html","topicUid":"Hi.Common.IntegerKeyDictionaryConverter","type":"Class"},{"name":"IntegerKeyDictionaryConverter","href":"Hi.Common.IntegerKeyDictionaryConverter-1.html","topicHref":"Hi.Common.IntegerKeyDictionaryConverter-1.html","topicUid":"Hi.Common.IntegerKeyDictionaryConverter`1","type":"Class"},{"name":"InternalException","href":"Hi.Common.InternalException.html","topicHref":"Hi.Common.InternalException.html","topicUid":"Hi.Common.InternalException","type":"Class"},{"name":"InvokeUtil","href":"Hi.Common.InvokeUtil.html","topicHref":"Hi.Common.InvokeUtil.html","topicUid":"Hi.Common.InvokeUtil","type":"Class"},{"name":"JsonUtil","href":"Hi.Common.JsonUtil.html","topicHref":"Hi.Common.JsonUtil.html","topicUid":"Hi.Common.JsonUtil","type":"Class"},{"name":"LooseRunner","href":"Hi.Common.LooseRunner.html","topicHref":"Hi.Common.LooseRunner.html","topicUid":"Hi.Common.LooseRunner","type":"Class"},{"name":"LooseRunner.MergedCancellationTokenRun","href":"Hi.Common.LooseRunner.MergedCancellationTokenRun.html","topicHref":"Hi.Common.LooseRunner.MergedCancellationTokenRun.html","topicUid":"Hi.Common.LooseRunner.MergedCancellationTokenRun","type":"Delegate"},{"name":"ManualUtil","href":"Hi.Common.ManualUtil.html","topicHref":"Hi.Common.ManualUtil.html","topicUid":"Hi.Common.ManualUtil","type":"Class"},{"name":"MaskUtil","href":"Hi.Common.MaskUtil.html","topicHref":"Hi.Common.MaskUtil.html","topicUid":"Hi.Common.MaskUtil","type":"Class"},{"name":"NameUtil","href":"Hi.Common.NameUtil.html","topicHref":"Hi.Common.NameUtil.html","topicUid":"Hi.Common.NameUtil","type":"Class"},{"name":"PacePlayee","href":"Hi.Common.PacePlayee.html","topicHref":"Hi.Common.PacePlayee.html","topicUid":"Hi.Common.PacePlayee","type":"Class"},{"name":"PacePlayer","href":"Hi.Common.PacePlayer.html","topicHref":"Hi.Common.PacePlayer.html","topicUid":"Hi.Common.PacePlayer","type":"Class"},{"name":"Pair","href":"Hi.Common.Pair-2.html","topicHref":"Hi.Common.Pair-2.html","topicUid":"Hi.Common.Pair`2","type":"Class"},{"name":"ProgressFraction","href":"Hi.Common.ProgressFraction.html","topicHref":"Hi.Common.ProgressFraction.html","topicUid":"Hi.Common.ProgressFraction","type":"Class"},{"name":"Range","href":"Hi.Common.Range-1.html","topicHref":"Hi.Common.Range-1.html","topicUid":"Hi.Common.Range`1","type":"Class"},{"name":"ResourceUtil","href":"Hi.Common.ResourceUtil.html","topicHref":"Hi.Common.ResourceUtil.html","topicUid":"Hi.Common.ResourceUtil","type":"Class"},{"name":"RoutineBlocker","href":"Hi.Common.RoutineBlocker.html","topicHref":"Hi.Common.RoutineBlocker.html","topicUid":"Hi.Common.RoutineBlocker","type":"Class"},{"name":"SearchResult","href":"Hi.Common.SearchResult.html","topicHref":"Hi.Common.SearchResult.html","topicUid":"Hi.Common.SearchResult","type":"Enum"},{"name":"SeqPairUtil","href":"Hi.Common.SeqPairUtil.html","topicHref":"Hi.Common.SeqPairUtil.html","topicUid":"Hi.Common.SeqPairUtil","type":"Class"},{"name":"SeqPair","href":"Hi.Common.SeqPair-1.html","topicHref":"Hi.Common.SeqPair-1.html","topicUid":"Hi.Common.SeqPair`1","type":"Class"},{"name":"ServerFileExplorerConfig","href":"Hi.Common.ServerFileExplorerConfig.html","topicHref":"Hi.Common.ServerFileExplorerConfig.html","topicUid":"Hi.Common.ServerFileExplorerConfig","type":"Class"},{"name":"StringLocalizer","href":"Hi.Common.StringLocalizer.html","topicHref":"Hi.Common.StringLocalizer.html","topicUid":"Hi.Common.StringLocalizer","type":"Class"},{"name":"StringUtil","href":"Hi.Common.StringUtil.html","topicHref":"Hi.Common.StringUtil.html","topicUid":"Hi.Common.StringUtil","type":"Class"},{"name":"TaskUtil","href":"Hi.Common.TaskUtil.html","topicHref":"Hi.Common.TaskUtil.html","topicUid":"Hi.Common.TaskUtil","type":"Class"},{"name":"TimeCounter","href":"Hi.Common.TimeCounter.html","topicHref":"Hi.Common.TimeCounter.html","topicUid":"Hi.Common.TimeCounter","type":"Class"}]},{"name":"Hi.Common.Collections","href":"Hi.Common.Collections.html","topicHref":"Hi.Common.Collections.html","topicUid":"Hi.Common.Collections","type":"Namespace","items":[{"name":"DictionaryUtil","href":"Hi.Common.Collections.DictionaryUtil.html","topicHref":"Hi.Common.Collections.DictionaryUtil.html","topicUid":"Hi.Common.Collections.DictionaryUtil","type":"Class"},{"name":"EnumerableUtil","href":"Hi.Common.Collections.EnumerableUtil.html","topicHref":"Hi.Common.Collections.EnumerableUtil.html","topicUid":"Hi.Common.Collections.EnumerableUtil","type":"Class"},{"name":"FixedSizeConcurrentLinkedListUtil","href":"Hi.Common.Collections.FixedSizeConcurrentLinkedListUtil.html","topicHref":"Hi.Common.Collections.FixedSizeConcurrentLinkedListUtil.html","topicUid":"Hi.Common.Collections.FixedSizeConcurrentLinkedListUtil","type":"Class"},{"name":"LazyLinkedListNode","href":"Hi.Common.Collections.LazyLinkedListNode-1.html","topicHref":"Hi.Common.Collections.LazyLinkedListNode-1.html","topicUid":"Hi.Common.Collections.LazyLinkedListNode`1","type":"Class"},{"name":"LazyLinkedList","href":"Hi.Common.Collections.LazyLinkedList-1.html","topicHref":"Hi.Common.Collections.LazyLinkedList-1.html","topicUid":"Hi.Common.Collections.LazyLinkedList`1","type":"Class"},{"name":"LinkedListUtil","href":"Hi.Common.Collections.LinkedListUtil.html","topicHref":"Hi.Common.Collections.LinkedListUtil.html","topicUid":"Hi.Common.Collections.LinkedListUtil","type":"Class"},{"name":"ListIndexBasedEnumerable","href":"Hi.Common.Collections.ListIndexBasedEnumerable-1.html","topicHref":"Hi.Common.Collections.ListIndexBasedEnumerable-1.html","topicUid":"Hi.Common.Collections.ListIndexBasedEnumerable`1","type":"Class"},{"name":"ListIndexBasedIEnumerator","href":"Hi.Common.Collections.ListIndexBasedIEnumerator-1.html","topicHref":"Hi.Common.Collections.ListIndexBasedIEnumerator-1.html","topicUid":"Hi.Common.Collections.ListIndexBasedIEnumerator`1","type":"Class"},{"name":"ListUtil","href":"Hi.Common.Collections.ListUtil.html","topicHref":"Hi.Common.Collections.ListUtil.html","topicUid":"Hi.Common.Collections.ListUtil","type":"Class"},{"name":"ListUtil.OuterPolationMode","href":"Hi.Common.Collections.ListUtil.OuterPolationMode.html","topicHref":"Hi.Common.Collections.ListUtil.OuterPolationMode.html","topicUid":"Hi.Common.Collections.ListUtil.OuterPolationMode","type":"Enum"},{"name":"SearchTargetMode","href":"Hi.Common.Collections.SearchTargetMode.html","topicHref":"Hi.Common.Collections.SearchTargetMode.html","topicUid":"Hi.Common.Collections.SearchTargetMode","type":"Enum"},{"name":"SeekDirection","href":"Hi.Common.Collections.SeekDirection.html","topicHref":"Hi.Common.Collections.SeekDirection.html","topicUid":"Hi.Common.Collections.SeekDirection","type":"Enum"},{"name":"SortedListUtil","href":"Hi.Common.Collections.SortedListUtil.html","topicHref":"Hi.Common.Collections.SortedListUtil.html","topicUid":"Hi.Common.Collections.SortedListUtil","type":"Class"},{"name":"SubList","href":"Hi.Common.Collections.SubList-1.html","topicHref":"Hi.Common.Collections.SubList-1.html","topicUid":"Hi.Common.Collections.SubList`1","type":"Class"},{"name":"SynList","href":"Hi.Common.Collections.SynList-1.html","topicHref":"Hi.Common.Collections.SynList-1.html","topicUid":"Hi.Common.Collections.SynList`1","type":"Class"}]},{"name":"Hi.Common.CsvUtils","href":"Hi.Common.CsvUtils.html","topicHref":"Hi.Common.CsvUtils.html","topicUid":"Hi.Common.CsvUtils","type":"Namespace","items":[{"name":"CsvInputKit","href":"Hi.Common.CsvUtils.CsvInputKit.html","topicHref":"Hi.Common.CsvUtils.CsvInputKit.html","topicUid":"Hi.Common.CsvUtils.CsvInputKit","type":"Class"},{"name":"CsvOutputKit","href":"Hi.Common.CsvUtils.CsvOutputKit.html","topicHref":"Hi.Common.CsvUtils.CsvOutputKit.html","topicUid":"Hi.Common.CsvUtils.CsvOutputKit","type":"Class"},{"name":"CsvUtil","href":"Hi.Common.CsvUtils.CsvUtil.html","topicHref":"Hi.Common.CsvUtils.CsvUtil.html","topicUid":"Hi.Common.CsvUtils.CsvUtil","type":"Class"},{"name":"ICsvRowIo","href":"Hi.Common.CsvUtils.ICsvRowIo.html","topicHref":"Hi.Common.CsvUtils.ICsvRowIo.html","topicUid":"Hi.Common.CsvUtils.ICsvRowIo","type":"Interface"},{"name":"IGetCsvDictionary","href":"Hi.Common.CsvUtils.IGetCsvDictionary.html","topicHref":"Hi.Common.CsvUtils.IGetCsvDictionary.html","topicUid":"Hi.Common.CsvUtils.IGetCsvDictionary","type":"Interface"}]},{"name":"Hi.Common.FileLines","href":"Hi.Common.FileLines.html","topicHref":"Hi.Common.FileLines.html","topicUid":"Hi.Common.FileLines","type":"Namespace","items":[{"name":"FileBeginEventArgs","href":"Hi.Common.FileLines.FileBeginEventArgs.html","topicHref":"Hi.Common.FileLines.FileBeginEventArgs.html","topicUid":"Hi.Common.FileLines.FileBeginEventArgs","type":"Class"},{"name":"FileEndEventArgs","href":"Hi.Common.FileLines.FileEndEventArgs.html","topicHref":"Hi.Common.FileLines.FileEndEventArgs.html","topicUid":"Hi.Common.FileLines.FileEndEventArgs","type":"Class"},{"name":"FileLineCharIndex","href":"Hi.Common.FileLines.FileLineCharIndex.html","topicHref":"Hi.Common.FileLines.FileLineCharIndex.html","topicUid":"Hi.Common.FileLines.FileLineCharIndex","type":"Class"},{"name":"FileLineCharIndexSegment","href":"Hi.Common.FileLines.FileLineCharIndexSegment.html","topicHref":"Hi.Common.FileLines.FileLineCharIndexSegment.html","topicUid":"Hi.Common.FileLines.FileLineCharIndexSegment","type":"Class"},{"name":"FileLineIndex","href":"Hi.Common.FileLines.FileLineIndex.html","topicHref":"Hi.Common.FileLines.FileLineIndex.html","topicUid":"Hi.Common.FileLines.FileLineIndex","type":"Class"},{"name":"FileLineUtil","href":"Hi.Common.FileLines.FileLineUtil.html","topicHref":"Hi.Common.FileLines.FileLineUtil.html","topicUid":"Hi.Common.FileLines.FileLineUtil","type":"Class"},{"name":"FileUtil","href":"Hi.Common.FileLines.FileUtil.html","topicHref":"Hi.Common.FileLines.FileUtil.html","topicUid":"Hi.Common.FileLines.FileUtil","type":"Class"},{"name":"IFileChangedEventSupport","href":"Hi.Common.FileLines.IFileChangedEventSupport.html","topicHref":"Hi.Common.FileLines.IFileChangedEventSupport.html","topicUid":"Hi.Common.FileLines.IFileChangedEventSupport","type":"Interface"},{"name":"IFileLine","href":"Hi.Common.FileLines.IFileLine.html","topicHref":"Hi.Common.FileLines.IFileLine.html","topicUid":"Hi.Common.FileLines.IFileLine","type":"Interface"},{"name":"IFileLineCharIndex","href":"Hi.Common.FileLines.IFileLineCharIndex.html","topicHref":"Hi.Common.FileLines.IFileLineCharIndex.html","topicUid":"Hi.Common.FileLines.IFileLineCharIndex","type":"Interface"},{"name":"IFileLineIndex","href":"Hi.Common.FileLines.IFileLineIndex.html","topicHref":"Hi.Common.FileLines.IFileLineIndex.html","topicUid":"Hi.Common.FileLines.IFileLineIndex","type":"Interface"},{"name":"IGetFileLineIndex","href":"Hi.Common.FileLines.IGetFileLineIndex.html","topicHref":"Hi.Common.FileLines.IGetFileLineIndex.html","topicUid":"Hi.Common.FileLines.IGetFileLineIndex","type":"Interface"},{"name":"IGetIndexedFileLine","href":"Hi.Common.FileLines.IGetIndexedFileLine.html","topicHref":"Hi.Common.FileLines.IGetIndexedFileLine.html","topicUid":"Hi.Common.FileLines.IGetIndexedFileLine","type":"Interface"},{"name":"IIndexedFileLine","href":"Hi.Common.FileLines.IIndexedFileLine.html","topicHref":"Hi.Common.FileLines.IIndexedFileLine.html","topicUid":"Hi.Common.FileLines.IIndexedFileLine","type":"Interface"},{"name":"ILineChangedEventSupport","href":"Hi.Common.FileLines.ILineChangedEventSupport.html","topicHref":"Hi.Common.FileLines.ILineChangedEventSupport.html","topicUid":"Hi.Common.FileLines.ILineChangedEventSupport","type":"Interface"},{"name":"IndexedFile","href":"Hi.Common.FileLines.IndexedFile.html","topicHref":"Hi.Common.FileLines.IndexedFile.html","topicUid":"Hi.Common.FileLines.IndexedFile","type":"Class"},{"name":"IndexedFileLine","href":"Hi.Common.FileLines.IndexedFileLine.html","topicHref":"Hi.Common.FileLines.IndexedFileLine.html","topicUid":"Hi.Common.FileLines.IndexedFileLine","type":"Class"},{"name":"IndexedFileLineChar","href":"Hi.Common.FileLines.IndexedFileLineChar.html","topicHref":"Hi.Common.FileLines.IndexedFileLineChar.html","topicUid":"Hi.Common.FileLines.IndexedFileLineChar","type":"Class"},{"name":"LineBeginEventArgs","href":"Hi.Common.FileLines.LineBeginEventArgs.html","topicHref":"Hi.Common.FileLines.LineBeginEventArgs.html","topicUid":"Hi.Common.FileLines.LineBeginEventArgs","type":"Class"},{"name":"LineEndEventArgs","href":"Hi.Common.FileLines.LineEndEventArgs.html","topicHref":"Hi.Common.FileLines.LineEndEventArgs.html","topicUid":"Hi.Common.FileLines.LineEndEventArgs","type":"Class"}]},{"name":"Hi.Common.Messages","href":"Hi.Common.Messages.html","topicHref":"Hi.Common.Messages.html","topicUid":"Hi.Common.Messages","type":"Namespace","items":[{"name":"ActionProgress","href":"Hi.Common.Messages.ActionProgress-1.html","topicHref":"Hi.Common.Messages.ActionProgress-1.html","topicUid":"Hi.Common.Messages.ActionProgress`1","type":"Class"},{"name":"BootstrapTheme","href":"Hi.Common.Messages.BootstrapTheme.html","topicHref":"Hi.Common.Messages.BootstrapTheme.html","topicUid":"Hi.Common.Messages.BootstrapTheme","type":"Enum"},{"name":"DebugUtil","href":"Hi.Common.Messages.DebugUtil.html","topicHref":"Hi.Common.Messages.DebugUtil.html","topicUid":"Hi.Common.Messages.DebugUtil","type":"Class"},{"name":"ExceptionUtil","href":"Hi.Common.Messages.ExceptionUtil.html","topicHref":"Hi.Common.Messages.ExceptionUtil.html","topicUid":"Hi.Common.Messages.ExceptionUtil","type":"Class"},{"name":"MessageBoardUtil","href":"Hi.Common.Messages.MessageBoardUtil.html","topicHref":"Hi.Common.Messages.MessageBoardUtil.html","topicUid":"Hi.Common.Messages.MessageBoardUtil","type":"Class"},{"name":"MessageFlag","href":"Hi.Common.Messages.MessageFlag.html","topicHref":"Hi.Common.Messages.MessageFlag.html","topicUid":"Hi.Common.Messages.MessageFlag","type":"Enum"},{"name":"MultiTagMessage","href":"Hi.Common.Messages.MultiTagMessage.html","topicHref":"Hi.Common.Messages.MultiTagMessage.html","topicUid":"Hi.Common.Messages.MultiTagMessage","type":"Class"},{"name":"MultiTagMessageUtil","href":"Hi.Common.Messages.MultiTagMessageUtil.html","topicHref":"Hi.Common.Messages.MultiTagMessageUtil.html","topicUid":"Hi.Common.Messages.MultiTagMessageUtil","type":"Class"},{"name":"ShowMessageBoardDelegate","href":"Hi.Common.Messages.ShowMessageBoardDelegate.html","topicHref":"Hi.Common.Messages.ShowMessageBoardDelegate.html","topicUid":"Hi.Common.Messages.ShowMessageBoardDelegate","type":"Delegate"}]},{"name":"Hi.Common.MinMaxUtils","href":"Hi.Common.MinMaxUtils.html","topicHref":"Hi.Common.MinMaxUtils.html","topicUid":"Hi.Common.MinMaxUtils","type":"Namespace","items":[{"name":"IndexedMinMaxPos","href":"Hi.Common.MinMaxUtils.IndexedMinMaxPos-2.html","topicHref":"Hi.Common.MinMaxUtils.IndexedMinMaxPos-2.html","topicUid":"Hi.Common.MinMaxUtils.IndexedMinMaxPos`2","type":"Class"},{"name":"MinMaxUtil","href":"Hi.Common.MinMaxUtils.MinMaxUtil.html","topicHref":"Hi.Common.MinMaxUtils.MinMaxUtil.html","topicUid":"Hi.Common.MinMaxUtils.MinMaxUtil","type":"Class"}]},{"name":"Hi.Common.NativeProgresses","href":"Hi.Common.NativeProgresses.html","topicHref":"Hi.Common.NativeProgresses.html","topicUid":"Hi.Common.NativeProgresses","type":"Namespace","items":[{"name":"NativeProgressFraction","href":"Hi.Common.NativeProgresses.NativeProgressFraction.html","topicHref":"Hi.Common.NativeProgresses.NativeProgressFraction.html","topicUid":"Hi.Common.NativeProgresses.NativeProgressFraction","type":"Class"},{"name":"progress_monitor_t","href":"Hi.Common.NativeProgresses.progress_monitor_t.html","topicHref":"Hi.Common.NativeProgresses.progress_monitor_t.html","topicUid":"Hi.Common.NativeProgresses.progress_monitor_t","type":"Struct"},{"name":"report_progress_func_t","href":"Hi.Common.NativeProgresses.report_progress_func_t.html","topicHref":"Hi.Common.NativeProgresses.report_progress_func_t.html","topicUid":"Hi.Common.NativeProgresses.report_progress_func_t","type":"Delegate"}]},{"name":"Hi.Common.ParallelBulkUtils","href":"Hi.Common.ParallelBulkUtils.html","topicHref":"Hi.Common.ParallelBulkUtils.html","topicUid":"Hi.Common.ParallelBulkUtils","type":"Namespace","items":[{"name":"ParallelBulkReader","href":"Hi.Common.ParallelBulkUtils.ParallelBulkReader-1.html","topicHref":"Hi.Common.ParallelBulkUtils.ParallelBulkReader-1.html","topicUid":"Hi.Common.ParallelBulkUtils.ParallelBulkReader`1","type":"Class"},{"name":"ParallelBulkWriter","href":"Hi.Common.ParallelBulkUtils.ParallelBulkWriter-1.html","topicHref":"Hi.Common.ParallelBulkUtils.ParallelBulkWriter-1.html","topicUid":"Hi.Common.ParallelBulkUtils.ParallelBulkWriter`1","type":"Class"},{"name":"ReadBulkDelegate","href":"Hi.Common.ParallelBulkUtils.ReadBulkDelegate-1.html","topicHref":"Hi.Common.ParallelBulkUtils.ReadBulkDelegate-1.html","topicUid":"Hi.Common.ParallelBulkUtils.ReadBulkDelegate`1","type":"Delegate"},{"name":"SequentialBulkReader","href":"Hi.Common.ParallelBulkUtils.SequentialBulkReader-1.html","topicHref":"Hi.Common.ParallelBulkUtils.SequentialBulkReader-1.html","topicUid":"Hi.Common.ParallelBulkUtils.SequentialBulkReader`1","type":"Class"}]},{"name":"Hi.Common.PathUtils","href":"Hi.Common.PathUtils.html","topicHref":"Hi.Common.PathUtils.html","topicUid":"Hi.Common.PathUtils","type":"Namespace","items":[{"name":"ExtendedNamedPath","href":"Hi.Common.PathUtils.ExtendedNamedPath.html","topicHref":"Hi.Common.PathUtils.ExtendedNamedPath.html","topicUid":"Hi.Common.PathUtils.ExtendedNamedPath","type":"Class"},{"name":"HttpUtil","href":"Hi.Common.PathUtils.HttpUtil.html","topicHref":"Hi.Common.PathUtils.HttpUtil.html","topicUid":"Hi.Common.PathUtils.HttpUtil","type":"Class"},{"name":"Lang","href":"Hi.Common.PathUtils.Lang.html","topicHref":"Hi.Common.PathUtils.Lang.html","topicUid":"Hi.Common.PathUtils.Lang","type":"Class"},{"name":"NamedPath","href":"Hi.Common.PathUtils.NamedPath.html","topicHref":"Hi.Common.PathUtils.NamedPath.html","topicUid":"Hi.Common.PathUtils.NamedPath","type":"Class"},{"name":"PathUtil","href":"Hi.Common.PathUtils.PathUtil.html","topicHref":"Hi.Common.PathUtils.PathUtil.html","topicUid":"Hi.Common.PathUtils.PathUtil","type":"Class"}]},{"name":"Hi.Common.QueueCacheUtils","href":"Hi.Common.QueueCacheUtils.html","topicHref":"Hi.Common.QueueCacheUtils.html","topicUid":"Hi.Common.QueueCacheUtils","type":"Namespace","items":[{"name":"QueueCacherHost","href":"Hi.Common.QueueCacheUtils.QueueCacherHost-1.html","topicHref":"Hi.Common.QueueCacheUtils.QueueCacherHost-1.html","topicUid":"Hi.Common.QueueCacheUtils.QueueCacherHost`1","type":"Class"},{"name":"QueueCacher","href":"Hi.Common.QueueCacheUtils.QueueCacher-1.html","topicHref":"Hi.Common.QueueCacheUtils.QueueCacher-1.html","topicUid":"Hi.Common.QueueCacheUtils.QueueCacher`1","type":"Class"}]},{"name":"Hi.Common.XmlUtils","href":"Hi.Common.XmlUtils.html","topicHref":"Hi.Common.XmlUtils.html","topicUid":"Hi.Common.XmlUtils","type":"Namespace","items":[{"name":"FileRefSource","href":"Hi.Common.XmlUtils.FileRefSource-1.html","topicHref":"Hi.Common.XmlUtils.FileRefSource-1.html","topicUid":"Hi.Common.XmlUtils.FileRefSource`1","type":"Class"},{"name":"IMakeXmlSource","href":"Hi.Common.XmlUtils.IMakeXmlSource.html","topicHref":"Hi.Common.XmlUtils.IMakeXmlSource.html","topicUid":"Hi.Common.XmlUtils.IMakeXmlSource","type":"Interface"},{"name":"IToXElement","href":"Hi.Common.XmlUtils.IToXElement.html","topicHref":"Hi.Common.XmlUtils.IToXElement.html","topicUid":"Hi.Common.XmlUtils.IToXElement","type":"Interface"},{"name":"ProjectApiVersion","href":"Hi.Common.XmlUtils.ProjectApiVersion.html","topicHref":"Hi.Common.XmlUtils.ProjectApiVersion.html","topicUid":"Hi.Common.XmlUtils.ProjectApiVersion","type":"Class"},{"name":"SetFileDelegate","href":"Hi.Common.XmlUtils.SetFileDelegate.html","topicHref":"Hi.Common.XmlUtils.SetFileDelegate.html","topicUid":"Hi.Common.XmlUtils.SetFileDelegate","type":"Delegate"},{"name":"XFactory","href":"Hi.Common.XmlUtils.XFactory.html","topicHref":"Hi.Common.XmlUtils.XFactory.html","topicUid":"Hi.Common.XmlUtils.XFactory","type":"Class"},{"name":"XFactory.GenByXElementDelegate","href":"Hi.Common.XmlUtils.XFactory.GenByXElementDelegate.html","topicHref":"Hi.Common.XmlUtils.XFactory.GenByXElementDelegate.html","topicUid":"Hi.Common.XmlUtils.XFactory.GenByXElementDelegate","type":"Delegate"},{"name":"XFactory.XmlExceptionDelegate","href":"Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html","topicHref":"Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html","topicUid":"Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate","type":"Delegate"},{"name":"XmlUtil","href":"Hi.Common.XmlUtils.XmlUtil.html","topicHref":"Hi.Common.XmlUtils.XmlUtil.html","topicUid":"Hi.Common.XmlUtils.XmlUtil","type":"Class"}]},{"name":"Hi.CutterLocations","href":"Hi.CutterLocations.html","topicHref":"Hi.CutterLocations.html","topicUid":"Hi.CutterLocations","type":"Namespace","items":[{"name":"IGetProgramCl","href":"Hi.CutterLocations.IGetProgramCl.html","topicHref":"Hi.CutterLocations.IGetProgramCl.html","topicUid":"Hi.CutterLocations.IGetProgramCl","type":"Interface"},{"name":"SimpleCl","href":"Hi.CutterLocations.SimpleCl.html","topicHref":"Hi.CutterLocations.SimpleCl.html","topicUid":"Hi.CutterLocations.SimpleCl","type":"Class"}]},{"name":"Hi.CutterLocations.ClPath","href":"Hi.CutterLocations.ClPath.html","topicHref":"Hi.CutterLocations.ClPath.html","topicUid":"Hi.CutterLocations.ClPath","type":"Namespace","items":[{"name":"ClCircleArc","href":"Hi.CutterLocations.ClPath.ClCircleArc.html","topicHref":"Hi.CutterLocations.ClPath.ClCircleArc.html","topicUid":"Hi.CutterLocations.ClPath.ClCircleArc","type":"Class"},{"name":"ClLinear","href":"Hi.CutterLocations.ClPath.ClLinear.html","topicHref":"Hi.CutterLocations.ClPath.ClLinear.html","topicUid":"Hi.CutterLocations.ClPath.ClLinear","type":"Class"},{"name":"IClPath","href":"Hi.CutterLocations.ClPath.IClPath.html","topicHref":"Hi.CutterLocations.ClPath.IClPath.html","topicUid":"Hi.CutterLocations.ClPath.IClPath","type":"Interface"}]},{"name":"Hi.CutterLocations.ClStrips","href":"Hi.CutterLocations.ClStrips.html","topicHref":"Hi.CutterLocations.ClStrips.html","topicUid":"Hi.CutterLocations.ClStrips","type":"Namespace","items":[{"name":"ClStrip","href":"Hi.CutterLocations.ClStrips.ClStrip.html","topicHref":"Hi.CutterLocations.ClStrips.ClStrip.html","topicUid":"Hi.CutterLocations.ClStrips.ClStrip","type":"Class"},{"name":"ClStripPos","href":"Hi.CutterLocations.ClStrips.ClStripPos.html","topicHref":"Hi.CutterLocations.ClStrips.ClStripPos.html","topicUid":"Hi.CutterLocations.ClStrips.ClStripPos","type":"Class"},{"name":"RgbFunc","href":"Hi.CutterLocations.ClStrips.RgbFunc.html","topicHref":"Hi.CutterLocations.ClStrips.RgbFunc.html","topicUid":"Hi.CutterLocations.ClStrips.RgbFunc","type":"Delegate"}]},{"name":"Hi.Disp","href":"Hi.Disp.html","topicHref":"Hi.Disp.html","topicUid":"Hi.Disp","type":"Namespace","items":[{"name":"Bind","href":"Hi.Disp.Bind.html","topicHref":"Hi.Disp.Bind.html","topicUid":"Hi.Disp.Bind","type":"Class"},{"name":"Box3dDispUtil","href":"Hi.Disp.Box3dDispUtil.html","topicHref":"Hi.Disp.Box3dDispUtil.html","topicUid":"Hi.Disp.Box3dDispUtil","type":"Class"},{"name":"Box3dDispUtil.BoxableExpandToBox3dDel","href":"Hi.Disp.Box3dDispUtil.BoxableExpandToBox3dDel.html","topicHref":"Hi.Disp.Box3dDispUtil.BoxableExpandToBox3dDel.html","topicUid":"Hi.Disp.Box3dDispUtil.BoxableExpandToBox3dDel","type":"Delegate"},{"name":"DelegateFuncDisplayee","href":"Hi.Disp.DelegateFuncDisplayee.html","topicHref":"Hi.Disp.DelegateFuncDisplayee.html","topicUid":"Hi.Disp.DelegateFuncDisplayee","type":"Class"},{"name":"DispEngine","href":"Hi.Disp.DispEngine.html","topicHref":"Hi.Disp.DispEngine.html","topicUid":"Hi.Disp.DispEngine","type":"Class"},{"name":"DispEngine.ImageRequestedDelegate","href":"Hi.Disp.DispEngine.ImageRequestedDelegate.html","topicHref":"Hi.Disp.DispEngine.ImageRequestedDelegate.html","topicUid":"Hi.Disp.DispEngine.ImageRequestedDelegate","type":"Delegate"},{"name":"DispEngineConfig","href":"Hi.Disp.DispEngineConfig.html","topicHref":"Hi.Disp.DispEngineConfig.html","topicUid":"Hi.Disp.DispEngineConfig","type":"Class"},{"name":"DispFrameUtil","href":"Hi.Disp.DispFrameUtil.html","topicHref":"Hi.Disp.DispFrameUtil.html","topicUid":"Hi.Disp.DispFrameUtil","type":"Class"},{"name":"DispList","href":"Hi.Disp.DispList.html","topicHref":"Hi.Disp.DispList.html","topicUid":"Hi.Disp.DispList","type":"Class"},{"name":"DispUtil","href":"Hi.Disp.DispUtil.html","topicHref":"Hi.Disp.DispUtil.html","topicUid":"Hi.Disp.DispUtil","type":"Class"},{"name":"Drawing","href":"Hi.Disp.Drawing.html","topicHref":"Hi.Disp.Drawing.html","topicUid":"Hi.Disp.Drawing","type":"Class"},{"name":"FuncDisplayee","href":"Hi.Disp.FuncDisplayee.html","topicHref":"Hi.Disp.FuncDisplayee.html","topicUid":"Hi.Disp.FuncDisplayee","type":"Class"},{"name":"GL","href":"Hi.Disp.GL.html","topicHref":"Hi.Disp.GL.html","topicUid":"Hi.Disp.GL","type":"Class"},{"name":"IDisplayee","href":"Hi.Disp.IDisplayee.html","topicHref":"Hi.Disp.IDisplayee.html","topicUid":"Hi.Disp.IDisplayee","type":"Interface"},{"name":"IGetDispEngine","href":"Hi.Disp.IGetDispEngine.html","topicHref":"Hi.Disp.IGetDispEngine.html","topicUid":"Hi.Disp.IGetDispEngine","type":"Interface"},{"name":"IGetPickable","href":"Hi.Disp.IGetPickable.html","topicHref":"Hi.Disp.IGetPickable.html","topicUid":"Hi.Disp.IGetPickable","type":"Interface"},{"name":"IGlContextDirver","href":"Hi.Disp.IGlContextDirver.html","topicHref":"Hi.Disp.IGlContextDirver.html","topicUid":"Hi.Disp.IGlContextDirver","type":"Interface"},{"name":"MatStack","href":"Hi.Disp.MatStack.html","topicHref":"Hi.Disp.MatStack.html","topicUid":"Hi.Disp.MatStack","type":"Class"},{"name":"MatStack.ItemDisposable","href":"Hi.Disp.MatStack.ItemDisposable.html","topicHref":"Hi.Disp.MatStack.ItemDisposable.html","topicUid":"Hi.Disp.MatStack.ItemDisposable","type":"Class"},{"name":"MvpBoxRelation","href":"Hi.Disp.MvpBoxRelation.html","topicHref":"Hi.Disp.MvpBoxRelation.html","topicUid":"Hi.Disp.MvpBoxRelation","type":"Enum"},{"name":"Pickable","href":"Hi.Disp.Pickable.html","topicHref":"Hi.Disp.Pickable.html","topicUid":"Hi.Disp.Pickable","type":"Class"},{"name":"PopModelMat","href":"Hi.Disp.PopModelMat.html","topicHref":"Hi.Disp.PopModelMat.html","topicUid":"Hi.Disp.PopModelMat","type":"Class"},{"name":"PushModelMat","href":"Hi.Disp.PushModelMat.html","topicHref":"Hi.Disp.PushModelMat.html","topicUid":"Hi.Disp.PushModelMat","type":"Class"},{"name":"Segment3dDispUtil","href":"Hi.Disp.Segment3dDispUtil.html","topicHref":"Hi.Disp.Segment3dDispUtil.html","topicUid":"Hi.Disp.Segment3dDispUtil","type":"Class"},{"name":"ShowEventPickable","href":"Hi.Disp.ShowEventPickable.html","topicHref":"Hi.Disp.ShowEventPickable.html","topicUid":"Hi.Disp.ShowEventPickable","type":"Class"},{"name":"Stamp","href":"Hi.Disp.Stamp.html","topicHref":"Hi.Disp.Stamp.html","topicUid":"Hi.Disp.Stamp","type":"Enum"},{"name":"StringDrawing","href":"Hi.Disp.StringDrawing.html","topicHref":"Hi.Disp.StringDrawing.html","topicUid":"Hi.Disp.StringDrawing","type":"Class"},{"name":"Tri3dDispUtil","href":"Hi.Disp.Tri3dDispUtil.html","topicHref":"Hi.Disp.Tri3dDispUtil.html","topicUid":"Hi.Disp.Tri3dDispUtil","type":"Class"},{"name":"Vec3dDispUtil","href":"Hi.Disp.Vec3dDispUtil.html","topicHref":"Hi.Disp.Vec3dDispUtil.html","topicUid":"Hi.Disp.Vec3dDispUtil","type":"Class"},{"name":"WrappedDisplayee","href":"Hi.Disp.WrappedDisplayee.html","topicHref":"Hi.Disp.WrappedDisplayee.html","topicUid":"Hi.Disp.WrappedDisplayee","type":"Class"}]},{"name":"Hi.Disp.Flag","href":"Hi.Disp.Flag.html","topicHref":"Hi.Disp.Flag.html","topicUid":"Hi.Disp.Flag","type":"Namespace","items":[{"name":"ColorScaleBar","href":"Hi.Disp.Flag.ColorScaleBar.html","topicHref":"Hi.Disp.Flag.ColorScaleBar.html","topicUid":"Hi.Disp.Flag.ColorScaleBar","type":"Class"},{"name":"CoordinateDrawing","href":"Hi.Disp.Flag.CoordinateDrawing.html","topicHref":"Hi.Disp.Flag.CoordinateDrawing.html","topicUid":"Hi.Disp.Flag.CoordinateDrawing","type":"Class"},{"name":"CubicalFlagDrawing","href":"Hi.Disp.Flag.CubicalFlagDrawing.html","topicHref":"Hi.Disp.Flag.CubicalFlagDrawing.html","topicUid":"Hi.Disp.Flag.CubicalFlagDrawing","type":"Class"},{"name":"DimensionBar","href":"Hi.Disp.Flag.DimensionBar.html","topicHref":"Hi.Disp.Flag.DimensionBar.html","topicUid":"Hi.Disp.Flag.DimensionBar","type":"Class"},{"name":"DispCoverUtil","href":"Hi.Disp.Flag.DispCoverUtil.html","topicHref":"Hi.Disp.Flag.DispCoverUtil.html","topicUid":"Hi.Disp.Flag.DispCoverUtil","type":"Class"}]},{"name":"Hi.Disp.Treat","href":"Hi.Disp.Treat.html","topicHref":"Hi.Disp.Treat.html","topicUid":"Hi.Disp.Treat","type":"Namespace","items":[{"name":"LineWidthSwap","href":"Hi.Disp.Treat.LineWidthSwap.html","topicHref":"Hi.Disp.Treat.LineWidthSwap.html","topicUid":"Hi.Disp.Treat.LineWidthSwap","type":"Class"},{"name":"LineWidthTreat","href":"Hi.Disp.Treat.LineWidthTreat.html","topicHref":"Hi.Disp.Treat.LineWidthTreat.html","topicUid":"Hi.Disp.Treat.LineWidthTreat","type":"Class"},{"name":"PointSizeSwap","href":"Hi.Disp.Treat.PointSizeSwap.html","topicHref":"Hi.Disp.Treat.PointSizeSwap.html","topicUid":"Hi.Disp.Treat.PointSizeSwap","type":"Class"},{"name":"PointSizeTreat","href":"Hi.Disp.Treat.PointSizeTreat.html","topicHref":"Hi.Disp.Treat.PointSizeTreat.html","topicUid":"Hi.Disp.Treat.PointSizeTreat","type":"Class"},{"name":"RgbSwap","href":"Hi.Disp.Treat.RgbSwap.html","topicHref":"Hi.Disp.Treat.RgbSwap.html","topicUid":"Hi.Disp.Treat.RgbSwap","type":"Class"},{"name":"RgbTreat","href":"Hi.Disp.Treat.RgbTreat.html","topicHref":"Hi.Disp.Treat.RgbTreat.html","topicUid":"Hi.Disp.Treat.RgbTreat","type":"Class"},{"name":"RgbWrapper","href":"Hi.Disp.Treat.RgbWrapper.html","topicHref":"Hi.Disp.Treat.RgbWrapper.html","topicUid":"Hi.Disp.Treat.RgbWrapper","type":"Class"},{"name":"TransformationWrapper","href":"Hi.Disp.Treat.TransformationWrapper.html","topicHref":"Hi.Disp.Treat.TransformationWrapper.html","topicUid":"Hi.Disp.Treat.TransformationWrapper","type":"Class"}]},{"name":"Hi.Fanuc","href":"Hi.Fanuc.html","topicHref":"Hi.Fanuc.html","topicUid":"Hi.Fanuc","type":"Namespace","items":[{"name":"FanucVarTable","href":"Hi.Fanuc.FanucVarTable.html","topicHref":"Hi.Fanuc.FanucVarTable.html","topicUid":"Hi.Fanuc.FanucVarTable","type":"Class"},{"name":"FanucVarValue","href":"Hi.Fanuc.FanucVarValue.html","topicHref":"Hi.Fanuc.FanucVarValue.html","topicUid":"Hi.Fanuc.FanucVarValue","type":"Struct"}]},{"name":"Hi.Geom","href":"Hi.Geom.html","topicHref":"Hi.Geom.html","topicUid":"Hi.Geom","type":"Namespace","items":[{"name":"ArrayUtil","href":"Hi.Geom.ArrayUtil.html","topicHref":"Hi.Geom.ArrayUtil.html","topicUid":"Hi.Geom.ArrayUtil","type":"Class"},{"name":"AxisAngle4d","href":"Hi.Geom.AxisAngle4d.html","topicHref":"Hi.Geom.AxisAngle4d.html","topicUid":"Hi.Geom.AxisAngle4d","type":"Class"},{"name":"Box2d","href":"Hi.Geom.Box2d.html","topicHref":"Hi.Geom.Box2d.html","topicUid":"Hi.Geom.Box2d","type":"Class"},{"name":"Box2d.NoInit","href":"Hi.Geom.Box2d.NoInit.html","topicHref":"Hi.Geom.Box2d.NoInit.html","topicUid":"Hi.Geom.Box2d.NoInit","type":"Class"},{"name":"Box3d","href":"Hi.Geom.Box3d.html","topicHref":"Hi.Geom.Box3d.html","topicUid":"Hi.Geom.Box3d","type":"Class"},{"name":"Box3d.NoInit","href":"Hi.Geom.Box3d.NoInit.html","topicHref":"Hi.Geom.Box3d.NoInit.html","topicUid":"Hi.Geom.Box3d.NoInit","type":"Class"},{"name":"Cylindroid","href":"Hi.Geom.Cylindroid.html","topicHref":"Hi.Geom.Cylindroid.html","topicUid":"Hi.Geom.Cylindroid","type":"Class"},{"name":"DVec3d","href":"Hi.Geom.DVec3d.html","topicHref":"Hi.Geom.DVec3d.html","topicUid":"Hi.Geom.DVec3d","type":"Class"},{"name":"Dir","href":"Hi.Geom.Dir.html","topicHref":"Hi.Geom.Dir.html","topicUid":"Hi.Geom.Dir","type":"Enum"},{"name":"ExtendedCylinder","href":"Hi.Geom.ExtendedCylinder.html","topicHref":"Hi.Geom.ExtendedCylinder.html","topicUid":"Hi.Geom.ExtendedCylinder","type":"Class"},{"name":"Flat3d","href":"Hi.Geom.Flat3d.html","topicHref":"Hi.Geom.Flat3d.html","topicUid":"Hi.Geom.Flat3d","type":"Class"},{"name":"FractionStatus","href":"Hi.Geom.FractionStatus.html","topicHref":"Hi.Geom.FractionStatus.html","topicUid":"Hi.Geom.FractionStatus","type":"Enum"},{"name":"Fraction","href":"Hi.Geom.Fraction-1.html","topicHref":"Hi.Geom.Fraction-1.html","topicUid":"Hi.Geom.Fraction`1","type":"Struct"},{"name":"GeomCombination","href":"Hi.Geom.GeomCombination.html","topicHref":"Hi.Geom.GeomCombination.html","topicUid":"Hi.Geom.GeomCombination","type":"Class"},{"name":"GeomUtil","href":"Hi.Geom.GeomUtil.html","topicHref":"Hi.Geom.GeomUtil.html","topicUid":"Hi.Geom.GeomUtil","type":"Class"},{"name":"IExpandToBox2d","href":"Hi.Geom.IExpandToBox2d.html","topicHref":"Hi.Geom.IExpandToBox2d.html","topicUid":"Hi.Geom.IExpandToBox2d","type":"Interface"},{"name":"IExpandToBox3d","href":"Hi.Geom.IExpandToBox3d.html","topicHref":"Hi.Geom.IExpandToBox3d.html","topicUid":"Hi.Geom.IExpandToBox3d","type":"Interface"},{"name":"IFlat3d","href":"Hi.Geom.IFlat3d.html","topicHref":"Hi.Geom.IFlat3d.html","topicUid":"Hi.Geom.IFlat3d","type":"Interface"},{"name":"IGenStl","href":"Hi.Geom.IGenStl.html","topicHref":"Hi.Geom.IGenStl.html","topicUid":"Hi.Geom.IGenStl","type":"Interface"},{"name":"IGeomProperty","href":"Hi.Geom.IGeomProperty.html","topicHref":"Hi.Geom.IGeomProperty.html","topicUid":"Hi.Geom.IGeomProperty","type":"Interface"},{"name":"IGetStl","href":"Hi.Geom.IGetStl.html","topicHref":"Hi.Geom.IGetStl.html","topicUid":"Hi.Geom.IGetStl","type":"Interface"},{"name":"IGetZrContour","href":"Hi.Geom.IGetZrContour.html","topicHref":"Hi.Geom.IGetZrContour.html","topicUid":"Hi.Geom.IGetZrContour","type":"Interface"},{"name":"IGetZrList","href":"Hi.Geom.IGetZrList.html","topicHref":"Hi.Geom.IGetZrList.html","topicUid":"Hi.Geom.IGetZrList","type":"Interface"},{"name":"IStlSource","href":"Hi.Geom.IStlSource.html","topicHref":"Hi.Geom.IStlSource.html","topicUid":"Hi.Geom.IStlSource","type":"Interface"},{"name":"ITri3d","href":"Hi.Geom.ITri3d.html","topicHref":"Hi.Geom.ITri3d.html","topicUid":"Hi.Geom.ITri3d","type":"Interface"},{"name":"IVec","href":"Hi.Geom.IVec-1.html","topicHref":"Hi.Geom.IVec-1.html","topicUid":"Hi.Geom.IVec`1","type":"Interface"},{"name":"IZrListSourceProperty","href":"Hi.Geom.IZrListSourceProperty.html","topicHref":"Hi.Geom.IZrListSourceProperty.html","topicUid":"Hi.Geom.IZrListSourceProperty","type":"Interface"},{"name":"Mat4d","href":"Hi.Geom.Mat4d.html","topicHref":"Hi.Geom.Mat4d.html","topicUid":"Hi.Geom.Mat4d","type":"Class"},{"name":"Mat4d.IndexFlag","href":"Hi.Geom.Mat4d.IndexFlag.html","topicHref":"Hi.Geom.Mat4d.IndexFlag.html","topicUid":"Hi.Geom.Mat4d.IndexFlag","type":"Enum"},{"name":"MathNetUtil","href":"Hi.Geom.MathNetUtil.html","topicHref":"Hi.Geom.MathNetUtil.html","topicUid":"Hi.Geom.MathNetUtil","type":"Class"},{"name":"MathUtil","href":"Hi.Geom.MathUtil.html","topicHref":"Hi.Geom.MathUtil.html","topicUid":"Hi.Geom.MathUtil","type":"Class"},{"name":"NativeFraction","href":"Hi.Geom.NativeFraction.html","topicHref":"Hi.Geom.NativeFraction.html","topicUid":"Hi.Geom.NativeFraction","type":"Class"},{"name":"NativeStl","href":"Hi.Geom.NativeStl.html","topicHref":"Hi.Geom.NativeStl.html","topicUid":"Hi.Geom.NativeStl","type":"Class"},{"name":"NativeTopoStld","href":"Hi.Geom.NativeTopoStld.html","topicHref":"Hi.Geom.NativeTopoStld.html","topicUid":"Hi.Geom.NativeTopoStld","type":"Class"},{"name":"NativeTopoStlfr","href":"Hi.Geom.NativeTopoStlfr.html","topicHref":"Hi.Geom.NativeTopoStlfr.html","topicUid":"Hi.Geom.NativeTopoStlfr","type":"Class"},{"name":"ObjUtil","href":"Hi.Geom.ObjUtil.html","topicHref":"Hi.Geom.ObjUtil.html","topicUid":"Hi.Geom.ObjUtil","type":"Class"},{"name":"PairZr","href":"Hi.Geom.PairZr.html","topicHref":"Hi.Geom.PairZr.html","topicUid":"Hi.Geom.PairZr","type":"Class"},{"name":"PairZrUtil","href":"Hi.Geom.PairZrUtil.html","topicHref":"Hi.Geom.PairZrUtil.html","topicUid":"Hi.Geom.PairZrUtil","type":"Class"},{"name":"PlyUtil","href":"Hi.Geom.PlyUtil.html","topicHref":"Hi.Geom.PlyUtil.html","topicUid":"Hi.Geom.PlyUtil","type":"Class"},{"name":"Polar3d","href":"Hi.Geom.Polar3d.html","topicHref":"Hi.Geom.Polar3d.html","topicUid":"Hi.Geom.Polar3d","type":"Class"},{"name":"Segment3d","href":"Hi.Geom.Segment3d.html","topicHref":"Hi.Geom.Segment3d.html","topicUid":"Hi.Geom.Segment3d","type":"Class"},{"name":"Stl","href":"Hi.Geom.Stl.html","topicHref":"Hi.Geom.Stl.html","topicUid":"Hi.Geom.Stl","type":"Class"},{"name":"Stl.StlType","href":"Hi.Geom.Stl.StlType.html","topicHref":"Hi.Geom.Stl.StlType.html","topicUid":"Hi.Geom.Stl.StlType","type":"Enum"},{"name":"StlFile","href":"Hi.Geom.StlFile.html","topicHref":"Hi.Geom.StlFile.html","topicUid":"Hi.Geom.StlFile","type":"Class"},{"name":"StlFuncHost","href":"Hi.Geom.StlFuncHost.html","topicHref":"Hi.Geom.StlFuncHost.html","topicUid":"Hi.Geom.StlFuncHost","type":"Class"},{"name":"StlUtil","href":"Hi.Geom.StlUtil.html","topicHref":"Hi.Geom.StlUtil.html","topicUid":"Hi.Geom.StlUtil","type":"Class"},{"name":"TransformationGeom","href":"Hi.Geom.TransformationGeom.html","topicHref":"Hi.Geom.TransformationGeom.html","topicUid":"Hi.Geom.TransformationGeom","type":"Class"},{"name":"Tri3d","href":"Hi.Geom.Tri3d.html","topicHref":"Hi.Geom.Tri3d.html","topicUid":"Hi.Geom.Tri3d","type":"Class"},{"name":"Tri3dUtil","href":"Hi.Geom.Tri3dUtil.html","topicHref":"Hi.Geom.Tri3dUtil.html","topicUid":"Hi.Geom.Tri3dUtil","type":"Class"},{"name":"Vec2d","href":"Hi.Geom.Vec2d.html","topicHref":"Hi.Geom.Vec2d.html","topicUid":"Hi.Geom.Vec2d","type":"Class"},{"name":"Vec2i","href":"Hi.Geom.Vec2i.html","topicHref":"Hi.Geom.Vec2i.html","topicUid":"Hi.Geom.Vec2i","type":"Class"},{"name":"Vec3d","href":"Hi.Geom.Vec3d.html","topicHref":"Hi.Geom.Vec3d.html","topicUid":"Hi.Geom.Vec3d","type":"Class"}]},{"name":"Hi.Geom.Resolution","href":"Hi.Geom.Resolution.html","topicHref":"Hi.Geom.Resolution.html","topicUid":"Hi.Geom.Resolution","type":"Namespace","items":[{"name":"IPolarResolution2d","href":"Hi.Geom.Resolution.IPolarResolution2d.html","topicHref":"Hi.Geom.Resolution.IPolarResolution2d.html","topicUid":"Hi.Geom.Resolution.IPolarResolution2d","type":"Interface"},{"name":"IPolarResolution2dSourceProperty","href":"Hi.Geom.Resolution.IPolarResolution2dSourceProperty.html","topicHref":"Hi.Geom.Resolution.IPolarResolution2dSourceProperty.html","topicUid":"Hi.Geom.Resolution.IPolarResolution2dSourceProperty","type":"Interface"},{"name":"PolarResolution2d","href":"Hi.Geom.Resolution.PolarResolution2d.html","topicHref":"Hi.Geom.Resolution.PolarResolution2d.html","topicUid":"Hi.Geom.Resolution.PolarResolution2d","type":"Class"}]},{"name":"Hi.Geom.Solvers","href":"Hi.Geom.Solvers.html","topicHref":"Hi.Geom.Solvers.html","topicUid":"Hi.Geom.Solvers","type":"Namespace","items":[{"name":"BinarySolverUtil","href":"Hi.Geom.Solvers.BinarySolverUtil.html","topicHref":"Hi.Geom.Solvers.BinarySolverUtil.html","topicUid":"Hi.Geom.Solvers.BinarySolverUtil","type":"Class"},{"name":"BinarySolvingEntry","href":"Hi.Geom.Solvers.BinarySolvingEntry.html","topicHref":"Hi.Geom.Solvers.BinarySolvingEntry.html","topicUid":"Hi.Geom.Solvers.BinarySolvingEntry","type":"Class"},{"name":"DeepSolvingStatus","href":"Hi.Geom.Solvers.DeepSolvingStatus.html","topicHref":"Hi.Geom.Solvers.DeepSolvingStatus.html","topicUid":"Hi.Geom.Solvers.DeepSolvingStatus","type":"Class"},{"name":"NumericalSolver","href":"Hi.Geom.Solvers.NumericalSolver.html","topicHref":"Hi.Geom.Solvers.NumericalSolver.html","topicUid":"Hi.Geom.Solvers.NumericalSolver","type":"Class"},{"name":"NumericalSolver.GetRepondsDelegate","href":"Hi.Geom.Solvers.NumericalSolver.GetRepondsDelegate.html","topicHref":"Hi.Geom.Solvers.NumericalSolver.GetRepondsDelegate.html","topicUid":"Hi.Geom.Solvers.NumericalSolver.GetRepondsDelegate","type":"Delegate"},{"name":"NumericalSolver.SetParasDelegate","href":"Hi.Geom.Solvers.NumericalSolver.SetParasDelegate.html","topicHref":"Hi.Geom.Solvers.NumericalSolver.SetParasDelegate.html","topicUid":"Hi.Geom.Solvers.NumericalSolver.SetParasDelegate","type":"Delegate"},{"name":"SolverUtil","href":"Hi.Geom.Solvers.SolverUtil.html","topicHref":"Hi.Geom.Solvers.SolverUtil.html","topicUid":"Hi.Geom.Solvers.SolverUtil","type":"Class"},{"name":"SolvingResult","href":"Hi.Geom.Solvers.SolvingResult.html","topicHref":"Hi.Geom.Solvers.SolvingResult.html","topicUid":"Hi.Geom.Solvers.SolvingResult","type":"Class"},{"name":"SolvingStatus","href":"Hi.Geom.Solvers.SolvingStatus.html","topicHref":"Hi.Geom.Solvers.SolvingStatus.html","topicUid":"Hi.Geom.Solvers.SolvingStatus","type":"Enum"},{"name":"SolvingTerm","href":"Hi.Geom.Solvers.SolvingTerm.html","topicHref":"Hi.Geom.Solvers.SolvingTerm.html","topicUid":"Hi.Geom.Solvers.SolvingTerm","type":"Enum"}]},{"name":"Hi.Geom.Topo","href":"Hi.Geom.Topo.html","topicHref":"Hi.Geom.Topo.html","topicUid":"Hi.Geom.Topo","type":"Namespace","items":[{"name":"TopoLine3Hfr","href":"Hi.Geom.Topo.TopoLine3Hfr.html","topicHref":"Hi.Geom.Topo.TopoLine3Hfr.html","topicUid":"Hi.Geom.Topo.TopoLine3Hfr","type":"Class"},{"name":"TopoLine3StockHfr","href":"Hi.Geom.Topo.TopoLine3StockHfr.html","topicHref":"Hi.Geom.Topo.TopoLine3StockHfr.html","topicUid":"Hi.Geom.Topo.TopoLine3StockHfr","type":"Class"},{"name":"TopoPoint3Hfr","href":"Hi.Geom.Topo.TopoPoint3Hfr.html","topicHref":"Hi.Geom.Topo.TopoPoint3Hfr.html","topicUid":"Hi.Geom.Topo.TopoPoint3Hfr","type":"Class"},{"name":"TopoPoint3StockHfr","href":"Hi.Geom.Topo.TopoPoint3StockHfr.html","topicHref":"Hi.Geom.Topo.TopoPoint3StockHfr.html","topicUid":"Hi.Geom.Topo.TopoPoint3StockHfr","type":"Class"},{"name":"TopoStl3Hfr","href":"Hi.Geom.Topo.TopoStl3Hfr.html","topicHref":"Hi.Geom.Topo.TopoStl3Hfr.html","topicUid":"Hi.Geom.Topo.TopoStl3Hfr","type":"Class"},{"name":"TopoStl3HfrFlatDisplayee","href":"Hi.Geom.Topo.TopoStl3HfrFlatDisplayee.html","topicHref":"Hi.Geom.Topo.TopoStl3HfrFlatDisplayee.html","topicUid":"Hi.Geom.Topo.TopoStl3HfrFlatDisplayee","type":"Class"},{"name":"TopoStl3HfrSmoothDisplayee","href":"Hi.Geom.Topo.TopoStl3HfrSmoothDisplayee.html","topicHref":"Hi.Geom.Topo.TopoStl3HfrSmoothDisplayee.html","topicUid":"Hi.Geom.Topo.TopoStl3HfrSmoothDisplayee","type":"Class"},{"name":"TopoTri3Hfr","href":"Hi.Geom.Topo.TopoTri3Hfr.html","topicHref":"Hi.Geom.Topo.TopoTri3Hfr.html","topicUid":"Hi.Geom.Topo.TopoTri3Hfr","type":"Class"},{"name":"TopoTri3StockHfr","href":"Hi.Geom.Topo.TopoTri3StockHfr.html","topicHref":"Hi.Geom.Topo.TopoTri3StockHfr.html","topicUid":"Hi.Geom.Topo.TopoTri3StockHfr","type":"Class"},{"name":"Vec3Hfr","href":"Hi.Geom.Topo.Vec3Hfr.html","topicHref":"Hi.Geom.Topo.Vec3Hfr.html","topicUid":"Hi.Geom.Topo.Vec3Hfr","type":"Struct"}]},{"name":"Hi.Geom.UnitUtils","href":"Hi.Geom.UnitUtils.html","topicHref":"Hi.Geom.UnitUtils.html","topicUid":"Hi.Geom.UnitUtils","type":"Namespace","items":[{"name":"PhysicsUnit","href":"Hi.Geom.UnitUtils.PhysicsUnit.html","topicHref":"Hi.Geom.UnitUtils.PhysicsUnit.html","topicUid":"Hi.Geom.UnitUtils.PhysicsUnit","type":"Enum"},{"name":"StringValueAttribute","href":"Hi.Geom.UnitUtils.StringValueAttribute.html","topicHref":"Hi.Geom.UnitUtils.StringValueAttribute.html","topicUid":"Hi.Geom.UnitUtils.StringValueAttribute","type":"Class"},{"name":"UnitConvertUtil","href":"Hi.Geom.UnitUtils.UnitConvertUtil.html","topicHref":"Hi.Geom.UnitUtils.UnitConvertUtil.html","topicUid":"Hi.Geom.UnitUtils.UnitConvertUtil","type":"Class"}]},{"name":"Hi.Grpcs","href":"Hi.Grpcs.html","topicHref":"Hi.Grpcs.html","topicUid":"Hi.Grpcs","type":"Namespace","items":[{"name":"ClStripService","href":"Hi.Grpcs.ClStripService.html","topicHref":"Hi.Grpcs.ClStripService.html","topicUid":"Hi.Grpcs.ClStripService","type":"Class"},{"name":"ClStripService.ClStripServiceBase","href":"Hi.Grpcs.ClStripService.ClStripServiceBase.html","topicHref":"Hi.Grpcs.ClStripService.ClStripServiceBase.html","topicUid":"Hi.Grpcs.ClStripService.ClStripServiceBase","type":"Class"},{"name":"ClStripService.ClStripServiceClient","href":"Hi.Grpcs.ClStripService.ClStripServiceClient.html","topicHref":"Hi.Grpcs.ClStripService.ClStripServiceClient.html","topicUid":"Hi.Grpcs.ClStripService.ClStripServiceClient","type":"Class"},{"name":"ClStripServiceReflection","href":"Hi.Grpcs.ClStripServiceReflection.html","topicHref":"Hi.Grpcs.ClStripServiceReflection.html","topicUid":"Hi.Grpcs.ClStripServiceReflection","type":"Class"},{"name":"ClStripServiceRunner","href":"Hi.Grpcs.ClStripServiceRunner.html","topicHref":"Hi.Grpcs.ClStripServiceRunner.html","topicUid":"Hi.Grpcs.ClStripServiceRunner","type":"Class"},{"name":"DictionaryStep","href":"Hi.Grpcs.DictionaryStep.html","topicHref":"Hi.Grpcs.DictionaryStep.html","topicUid":"Hi.Grpcs.DictionaryStep","type":"Class"},{"name":"PlayerService","href":"Hi.Grpcs.PlayerService.html","topicHref":"Hi.Grpcs.PlayerService.html","topicUid":"Hi.Grpcs.PlayerService","type":"Class"},{"name":"PlayerService.PlayerServiceBase","href":"Hi.Grpcs.PlayerService.PlayerServiceBase.html","topicHref":"Hi.Grpcs.PlayerService.PlayerServiceBase.html","topicUid":"Hi.Grpcs.PlayerService.PlayerServiceBase","type":"Class"},{"name":"PlayerService.PlayerServiceClient","href":"Hi.Grpcs.PlayerService.PlayerServiceClient.html","topicHref":"Hi.Grpcs.PlayerService.PlayerServiceClient.html","topicUid":"Hi.Grpcs.PlayerService.PlayerServiceClient","type":"Class"},{"name":"PlayerServiceReflection","href":"Hi.Grpcs.PlayerServiceReflection.html","topicHref":"Hi.Grpcs.PlayerServiceReflection.html","topicUid":"Hi.Grpcs.PlayerServiceReflection","type":"Class"},{"name":"PlayerServiceRunner","href":"Hi.Grpcs.PlayerServiceRunner.html","topicHref":"Hi.Grpcs.PlayerServiceRunner.html","topicUid":"Hi.Grpcs.PlayerServiceRunner","type":"Class"}]},{"name":"Hi.HiNcKits","href":"Hi.HiNcKits.html","topicHref":"Hi.HiNcKits.html","topicUid":"Hi.HiNcKits","type":"Namespace","items":[{"name":"BasePathEnum","href":"Hi.HiNcKits.BasePathEnum.html","topicHref":"Hi.HiNcKits.BasePathEnum.html","topicUid":"Hi.HiNcKits.BasePathEnum","type":"Enum"},{"name":"HiNcHost","href":"Hi.HiNcKits.HiNcHost.html","topicHref":"Hi.HiNcKits.HiNcHost.html","topicUid":"Hi.HiNcKits.HiNcHost","type":"Class"},{"name":"LocalApp","href":"Hi.HiNcKits.LocalApp.html","topicHref":"Hi.HiNcKits.LocalApp.html","topicUid":"Hi.HiNcKits.LocalApp","type":"Class"},{"name":"LocalAppConfig","href":"Hi.HiNcKits.LocalAppConfig.html","topicHref":"Hi.HiNcKits.LocalAppConfig.html","topicUid":"Hi.HiNcKits.LocalAppConfig","type":"Class"},{"name":"PlayerDivConfig","href":"Hi.HiNcKits.PlayerDivConfig.html","topicHref":"Hi.HiNcKits.PlayerDivConfig.html","topicUid":"Hi.HiNcKits.PlayerDivConfig","type":"Class"},{"name":"ProxyConfig","href":"Hi.HiNcKits.ProxyConfig.html","topicHref":"Hi.HiNcKits.ProxyConfig.html","topicUid":"Hi.HiNcKits.ProxyConfig","type":"Class"},{"name":"UserConfig","href":"Hi.HiNcKits.UserConfig.html","topicHref":"Hi.HiNcKits.UserConfig.html","topicUid":"Hi.HiNcKits.UserConfig","type":"Class"},{"name":"UserService","href":"Hi.HiNcKits.UserService.html","topicHref":"Hi.HiNcKits.UserService.html","topicUid":"Hi.HiNcKits.UserService","type":"Class"}]},{"name":"Hi.Licenses","href":"Hi.Licenses.html","topicHref":"Hi.Licenses.html","topicUid":"Hi.Licenses","type":"Namespace","items":[{"name":"AuthFeature","href":"Hi.Licenses.AuthFeature.html","topicHref":"Hi.Licenses.AuthFeature.html","topicUid":"Hi.Licenses.AuthFeature","type":"Enum"},{"name":"AuthorizationFailedEventArgs","href":"Hi.Licenses.AuthorizationFailedEventArgs.html","topicHref":"Hi.Licenses.AuthorizationFailedEventArgs.html","topicUid":"Hi.Licenses.AuthorizationFailedEventArgs","type":"Class"},{"name":"BlockType","href":"Hi.Licenses.BlockType.html","topicHref":"Hi.Licenses.BlockType.html","topicUid":"Hi.Licenses.BlockType","type":"Enum"},{"name":"License","href":"Hi.Licenses.License.html","topicHref":"Hi.Licenses.License.html","topicUid":"Hi.Licenses.License","type":"Class"},{"name":"LicenseType","href":"Hi.Licenses.LicenseType.html","topicHref":"Hi.Licenses.LicenseType.html","topicUid":"Hi.Licenses.LicenseType","type":"Enum"}]},{"name":"Hi.Machining","href":"Hi.Machining.html","topicHref":"Hi.Machining.html","topicUid":"Hi.Machining","type":"Namespace","items":[{"name":"FreeformRemover","href":"Hi.Machining.FreeformRemover.html","topicHref":"Hi.Machining.FreeformRemover.html","topicUid":"Hi.Machining.FreeformRemover","type":"Class"},{"name":"ICutter","href":"Hi.Machining.ICutter.html","topicHref":"Hi.Machining.ICutter.html","topicUid":"Hi.Machining.ICutter","type":"Interface"},{"name":"ICutterAnchorable","href":"Hi.Machining.ICutterAnchorable.html","topicHref":"Hi.Machining.ICutterAnchorable.html","topicUid":"Hi.Machining.ICutterAnchorable","type":"Interface"},{"name":"IGetSweptable","href":"Hi.Machining.IGetSweptable.html","topicHref":"Hi.Machining.IGetSweptable.html","topicUid":"Hi.Machining.IGetSweptable","type":"Interface"},{"name":"IMachiningTool","href":"Hi.Machining.IMachiningTool.html","topicHref":"Hi.Machining.IMachiningTool.html","topicUid":"Hi.Machining.IMachiningTool","type":"Interface"},{"name":"IVolumeRemover","href":"Hi.Machining.IVolumeRemover.html","topicHref":"Hi.Machining.IVolumeRemover.html","topicUid":"Hi.Machining.IVolumeRemover","type":"Interface"},{"name":"MachiningToolHouse","href":"Hi.Machining.MachiningToolHouse.html","topicHref":"Hi.Machining.MachiningToolHouse.html","topicUid":"Hi.Machining.MachiningToolHouse","type":"Class"},{"name":"MachiningVolumeRemovalProc","href":"Hi.Machining.MachiningVolumeRemovalProc.html","topicHref":"Hi.Machining.MachiningVolumeRemovalProc.html","topicUid":"Hi.Machining.MachiningVolumeRemovalProc","type":"Class"},{"name":"MachiningVolumeRemovalProc.StepMotionSnapshot","href":"Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html","topicHref":"Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html","topicUid":"Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot","type":"Class"},{"name":"MatInterpolationKit","href":"Hi.Machining.MatInterpolationKit.html","topicHref":"Hi.Machining.MatInterpolationKit.html","topicUid":"Hi.Machining.MatInterpolationKit","type":"Class"},{"name":"MatRelation","href":"Hi.Machining.MatRelation.html","topicHref":"Hi.Machining.MatRelation.html","topicUid":"Hi.Machining.MatRelation","type":"Enum"},{"name":"MatRelationUtil","href":"Hi.Machining.MatRelationUtil.html","topicHref":"Hi.Machining.MatRelationUtil.html","topicUid":"Hi.Machining.MatRelationUtil","type":"Class"},{"name":"Sweptable","href":"Hi.Machining.Sweptable.html","topicHref":"Hi.Machining.Sweptable.html","topicUid":"Hi.Machining.Sweptable","type":"Class"},{"name":"SweptableUtil","href":"Hi.Machining.SweptableUtil.html","topicHref":"Hi.Machining.SweptableUtil.html","topicUid":"Hi.Machining.SweptableUtil","type":"Class"},{"name":"ToolNotFoundException","href":"Hi.Machining.ToolNotFoundException.html","topicHref":"Hi.Machining.ToolNotFoundException.html","topicUid":"Hi.Machining.ToolNotFoundException","type":"Class"}]},{"name":"Hi.Machining.MachiningEquipmentUtils","href":"Hi.Machining.MachiningEquipmentUtils.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.html","topicUid":"Hi.Machining.MachiningEquipmentUtils","type":"Namespace","items":[{"name":"CollidableComponentEnum","href":"Hi.Machining.MachiningEquipmentUtils.CollidableComponentEnum.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.CollidableComponentEnum.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.CollidableComponentEnum","type":"Enum"},{"name":"IGetMachiningEquipment","href":"Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment","type":"Interface"},{"name":"IMachiningEquipment","href":"Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment","type":"Interface"},{"name":"MachiningEquipment","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipment","type":"Class"},{"name":"MachiningEquipmentCollisionIndex","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex","type":"Class"},{"name":"MachiningEquipmentCollisionIndexPairsSource","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource","type":"Class"},{"name":"MachiningEquipmentUtil","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil","type":"Class"}]},{"name":"Hi.MachiningProcs","href":"Hi.MachiningProcs.html","topicHref":"Hi.MachiningProcs.html","topicUid":"Hi.MachiningProcs","type":"Namespace","items":[{"name":"ConfigStepFunc","href":"Hi.MachiningProcs.ConfigStepFunc.html","topicHref":"Hi.MachiningProcs.ConfigStepFunc.html","topicUid":"Hi.MachiningProcs.ConfigStepFunc","type":"Delegate"},{"name":"IMachiningProjectGetter","href":"Hi.MachiningProcs.IMachiningProjectGetter.html","topicHref":"Hi.MachiningProcs.IMachiningProjectGetter.html","topicUid":"Hi.MachiningProcs.IMachiningProjectGetter","type":"Interface"},{"name":"IProjectService","href":"Hi.MachiningProcs.IProjectService.html","topicHref":"Hi.MachiningProcs.IProjectService.html","topicUid":"Hi.MachiningProcs.IProjectService","type":"Interface"},{"name":"LocalProjectService","href":"Hi.MachiningProcs.LocalProjectService.html","topicHref":"Hi.MachiningProcs.LocalProjectService.html","topicUid":"Hi.MachiningProcs.LocalProjectService","type":"Class"},{"name":"LocalProjectService.MachiningProjectChangedDelegate","href":"Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate.html","topicHref":"Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate.html","topicUid":"Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate","type":"Delegate"},{"name":"MachiningActRunner","href":"Hi.MachiningProcs.MachiningActRunner.html","topicHref":"Hi.MachiningProcs.MachiningActRunner.html","topicUid":"Hi.MachiningProcs.MachiningActRunner","type":"Class"},{"name":"MachiningActRunner.MachiningStepBuiltDelegate","href":"Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate.html","topicHref":"Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate.html","topicUid":"Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate","type":"Delegate"},{"name":"MachiningActRunnerConfig","href":"Hi.MachiningProcs.MachiningActRunnerConfig.html","topicHref":"Hi.MachiningProcs.MachiningActRunnerConfig.html","topicUid":"Hi.MachiningProcs.MachiningActRunnerConfig","type":"Class"},{"name":"MachiningParallelProc","href":"Hi.MachiningProcs.MachiningParallelProc.html","topicHref":"Hi.MachiningProcs.MachiningParallelProc.html","topicUid":"Hi.MachiningProcs.MachiningParallelProc","type":"Class"},{"name":"MachiningParallelProc.StepTaskBundle","href":"Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle.html","topicHref":"Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle.html","topicUid":"Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle","type":"Class"},{"name":"MachiningParallelProc.SubstractionResult","href":"Hi.MachiningProcs.MachiningParallelProc.SubstractionResult.html","topicHref":"Hi.MachiningProcs.MachiningParallelProc.SubstractionResult.html","topicUid":"Hi.MachiningProcs.MachiningParallelProc.SubstractionResult","type":"Class"},{"name":"MachiningProject","href":"Hi.MachiningProcs.MachiningProject.html","topicHref":"Hi.MachiningProcs.MachiningProject.html","topicUid":"Hi.MachiningProcs.MachiningProject","type":"Class"},{"name":"MachiningProjectDisplayee","href":"Hi.MachiningProcs.MachiningProjectDisplayee.html","topicHref":"Hi.MachiningProcs.MachiningProjectDisplayee.html","topicUid":"Hi.MachiningProcs.MachiningProjectDisplayee","type":"Class"},{"name":"MachiningSession","href":"Hi.MachiningProcs.MachiningSession.html","topicHref":"Hi.MachiningProcs.MachiningSession.html","topicUid":"Hi.MachiningProcs.MachiningSession","type":"Class"},{"name":"MillingUtil","href":"Hi.MachiningProcs.MillingUtil.html","topicHref":"Hi.MachiningProcs.MillingUtil.html","topicUid":"Hi.MachiningProcs.MillingUtil","type":"Class"},{"name":"NcRunnerSessionState","href":"Hi.MachiningProcs.NcRunnerSessionState.html","topicHref":"Hi.MachiningProcs.NcRunnerSessionState.html","topicUid":"Hi.MachiningProcs.NcRunnerSessionState","type":"Class"},{"name":"ProxyProjectService","href":"Hi.MachiningProcs.ProxyProjectService.html","topicHref":"Hi.MachiningProcs.ProxyProjectService.html","topicUid":"Hi.MachiningProcs.ProxyProjectService","type":"Class"},{"name":"RenderingFlag","href":"Hi.MachiningProcs.RenderingFlag.html","topicHref":"Hi.MachiningProcs.RenderingFlag.html","topicUid":"Hi.MachiningProcs.RenderingFlag","type":"Enum"},{"name":"SessionMessage","href":"Hi.MachiningProcs.SessionMessage.html","topicHref":"Hi.MachiningProcs.SessionMessage.html","topicUid":"Hi.MachiningProcs.SessionMessage","type":"Class"},{"name":"SessionMessagePack","href":"Hi.MachiningProcs.SessionMessagePack.html","topicHref":"Hi.MachiningProcs.SessionMessagePack.html","topicUid":"Hi.MachiningProcs.SessionMessagePack","type":"Class"},{"name":"SessionProgress","href":"Hi.MachiningProcs.SessionProgress.html","topicHref":"Hi.MachiningProcs.SessionProgress.html","topicUid":"Hi.MachiningProcs.SessionProgress","type":"Class"},{"name":"SessionProgress.FilterFlag","href":"Hi.MachiningProcs.SessionProgress.FilterFlag.html","topicHref":"Hi.MachiningProcs.SessionProgress.FilterFlag.html","topicUid":"Hi.MachiningProcs.SessionProgress.FilterFlag","type":"Enum"},{"name":"SessionShell","href":"Hi.MachiningProcs.SessionShell.html","topicHref":"Hi.MachiningProcs.SessionShell.html","topicUid":"Hi.MachiningProcs.SessionShell","type":"Class"},{"name":"SessionShellController","href":"Hi.MachiningProcs.SessionShellController.html","topicHref":"Hi.MachiningProcs.SessionShellController.html","topicUid":"Hi.MachiningProcs.SessionShellController","type":"Class"},{"name":"SetupController","href":"Hi.MachiningProcs.SetupController.html","topicHref":"Hi.MachiningProcs.SetupController.html","topicUid":"Hi.MachiningProcs.SetupController","type":"Class"},{"name":"SpindleSpeedCache","href":"Hi.MachiningProcs.SpindleSpeedCache.html","topicHref":"Hi.MachiningProcs.SpindleSpeedCache.html","topicUid":"Hi.MachiningProcs.SpindleSpeedCache","type":"Class"}]},{"name":"Hi.MachiningSteps","href":"Hi.MachiningSteps.html","topicHref":"Hi.MachiningSteps.html","topicUid":"Hi.MachiningSteps","type":"Namespace","items":[{"name":"IFlagText","href":"Hi.MachiningSteps.IFlagText.html","topicHref":"Hi.MachiningSteps.IFlagText.html","topicUid":"Hi.MachiningSteps.IFlagText","type":"Interface"},{"name":"IMachiningService","href":"Hi.MachiningSteps.IMachiningService.html","topicHref":"Hi.MachiningSteps.IMachiningService.html","topicUid":"Hi.MachiningSteps.IMachiningService","type":"Interface"},{"name":"MachineMotionStep","href":"Hi.MachiningSteps.MachineMotionStep.html","topicHref":"Hi.MachiningSteps.MachineMotionStep.html","topicUid":"Hi.MachiningSteps.MachineMotionStep","type":"Class"},{"name":"MachiningStep","href":"Hi.MachiningSteps.MachiningStep.html","topicHref":"Hi.MachiningSteps.MachiningStep.html","topicUid":"Hi.MachiningSteps.MachiningStep","type":"Class"},{"name":"MachiningStep.CollidedKeyPair","href":"Hi.MachiningSteps.MachiningStep.CollidedKeyPair.html","topicHref":"Hi.MachiningSteps.MachiningStep.CollidedKeyPair.html","topicUid":"Hi.MachiningSteps.MachiningStep.CollidedKeyPair","type":"Class"},{"name":"MachiningStepUtil","href":"Hi.MachiningSteps.MachiningStepUtil.html","topicHref":"Hi.MachiningSteps.MachiningStepUtil.html","topicUid":"Hi.MachiningSteps.MachiningStepUtil","type":"Class"},{"name":"PresentAccess","href":"Hi.MachiningSteps.PresentAccess.html","topicHref":"Hi.MachiningSteps.PresentAccess.html","topicUid":"Hi.MachiningSteps.PresentAccess","type":"Class"},{"name":"PresentAttribute","href":"Hi.MachiningSteps.PresentAttribute.html","topicHref":"Hi.MachiningSteps.PresentAttribute.html","topicUid":"Hi.MachiningSteps.PresentAttribute","type":"Class"},{"name":"PropertyAccess","href":"Hi.MachiningSteps.PropertyAccess-1.html","topicHref":"Hi.MachiningSteps.PropertyAccess-1.html","topicUid":"Hi.MachiningSteps.PropertyAccess`1","type":"Class"}]},{"name":"Hi.Mapping","href":"Hi.Mapping.html","topicHref":"Hi.Mapping.html","topicUid":"Hi.Mapping","type":"Namespace","items":[{"name":"CsvNcStep","href":"Hi.Mapping.CsvNcStep.html","topicHref":"Hi.Mapping.CsvNcStep.html","topicUid":"Hi.Mapping.CsvNcStep","type":"Class"},{"name":"FileToTimeShotMapping","href":"Hi.Mapping.FileToTimeShotMapping.html","topicHref":"Hi.Mapping.FileToTimeShotMapping.html","topicUid":"Hi.Mapping.FileToTimeShotMapping","type":"Class"},{"name":"IAccelerationShot","href":"Hi.Mapping.IAccelerationShot.html","topicHref":"Hi.Mapping.IAccelerationShot.html","topicUid":"Hi.Mapping.IAccelerationShot","type":"Interface"},{"name":"IForceShot","href":"Hi.Mapping.IForceShot.html","topicHref":"Hi.Mapping.IForceShot.html","topicUid":"Hi.Mapping.IForceShot","type":"Interface"},{"name":"IMomentShot","href":"Hi.Mapping.IMomentShot.html","topicHref":"Hi.Mapping.IMomentShot.html","topicUid":"Hi.Mapping.IMomentShot","type":"Interface"},{"name":"ITimeShot","href":"Hi.Mapping.ITimeShot.html","topicHref":"Hi.Mapping.ITimeShot.html","topicUid":"Hi.Mapping.ITimeShot","type":"Interface"},{"name":"MappingUtil","href":"Hi.Mapping.MappingUtil.html","topicHref":"Hi.Mapping.MappingUtil.html","topicUid":"Hi.Mapping.MappingUtil","type":"Class"},{"name":"StepTimeShotUtil","href":"Hi.Mapping.StepTimeShotUtil.html","topicHref":"Hi.Mapping.StepTimeShotUtil.html","topicUid":"Hi.Mapping.StepTimeShotUtil","type":"Class"},{"name":"StepTimeShotUtil.CycleSamplingMode","href":"Hi.Mapping.StepTimeShotUtil.CycleSamplingMode.html","topicHref":"Hi.Mapping.StepTimeShotUtil.CycleSamplingMode.html","topicUid":"Hi.Mapping.StepTimeShotUtil.CycleSamplingMode","type":"Enum"},{"name":"StepTimeShotUtil.GetTimeShotByFileDelegate","href":"Hi.Mapping.StepTimeShotUtil.GetTimeShotByFileDelegate.html","topicHref":"Hi.Mapping.StepTimeShotUtil.GetTimeShotByFileDelegate.html","topicUid":"Hi.Mapping.StepTimeShotUtil.GetTimeShotByFileDelegate","type":"Delegate"},{"name":"TimeMapping","href":"Hi.Mapping.TimeMapping.html","topicHref":"Hi.Mapping.TimeMapping.html","topicUid":"Hi.Mapping.TimeMapping","type":"Class"}]},{"name":"Hi.Mappings","href":"Hi.Mappings.html","topicHref":"Hi.Mappings.html","topicUid":"Hi.Mappings","type":"Namespace","items":[{"name":"FileTimeSection","href":"Hi.Mappings.FileTimeSection.html","topicHref":"Hi.Mappings.FileTimeSection.html","topicUid":"Hi.Mappings.FileTimeSection","type":"Class"},{"name":"FileTimeSection.TimeOption","href":"Hi.Mappings.FileTimeSection.TimeOption.html","topicHref":"Hi.Mappings.FileTimeSection.TimeOption.html","topicUid":"Hi.Mappings.FileTimeSection.TimeOption","type":"Enum"}]},{"name":"Hi.Mech","href":"Hi.Mech.html","topicHref":"Hi.Mech.html","topicUid":"Hi.Mech","type":"Namespace","items":[{"name":"GeneralMechanism","href":"Hi.Mech.GeneralMechanism.html","topicHref":"Hi.Mech.GeneralMechanism.html","topicUid":"Hi.Mech.GeneralMechanism","type":"Class"},{"name":"IGetAnchorToSolidDictionary","href":"Hi.Mech.IGetAnchorToSolidDictionary.html","topicHref":"Hi.Mech.IGetAnchorToSolidDictionary.html","topicUid":"Hi.Mech.IGetAnchorToSolidDictionary","type":"Interface"},{"name":"IGetMachiningChain","href":"Hi.Mech.IGetMachiningChain.html","topicHref":"Hi.Mech.IGetMachiningChain.html","topicUid":"Hi.Mech.IGetMachiningChain","type":"Interface"},{"name":"IMachiningChain","href":"Hi.Mech.IMachiningChain.html","topicHref":"Hi.Mech.IMachiningChain.html","topicUid":"Hi.Mech.IMachiningChain","type":"Interface"},{"name":"IMachiningChainSource","href":"Hi.Mech.IMachiningChainSource.html","topicHref":"Hi.Mech.IMachiningChainSource.html","topicUid":"Hi.Mech.IMachiningChainSource","type":"Interface"},{"name":"MachiningChainUtil","href":"Hi.Mech.MachiningChainUtil.html","topicHref":"Hi.Mech.MachiningChainUtil.html","topicUid":"Hi.Mech.MachiningChainUtil","type":"Class"}]},{"name":"Hi.Mech.Topo","href":"Hi.Mech.Topo.html","topicHref":"Hi.Mech.Topo.html","topicUid":"Hi.Mech.Topo","type":"Namespace","items":[{"name":"Anchor","href":"Hi.Mech.Topo.Anchor.html","topicHref":"Hi.Mech.Topo.Anchor.html","topicUid":"Hi.Mech.Topo.Anchor","type":"Class"},{"name":"AnchorFuncSource","href":"Hi.Mech.Topo.AnchorFuncSource.html","topicHref":"Hi.Mech.Topo.AnchorFuncSource.html","topicUid":"Hi.Mech.Topo.AnchorFuncSource","type":"Class"},{"name":"AnchoredBoxable","href":"Hi.Mech.Topo.AnchoredBoxable.html","topicHref":"Hi.Mech.Topo.AnchoredBoxable.html","topicUid":"Hi.Mech.Topo.AnchoredBoxable","type":"Class"},{"name":"AnchoredDisplayee","href":"Hi.Mech.Topo.AnchoredDisplayee.html","topicHref":"Hi.Mech.Topo.AnchoredDisplayee.html","topicUid":"Hi.Mech.Topo.AnchoredDisplayee","type":"Class"},{"name":"Asmb","href":"Hi.Mech.Topo.Asmb.html","topicHref":"Hi.Mech.Topo.Asmb.html","topicUid":"Hi.Mech.Topo.Asmb","type":"Class"},{"name":"AsmbDraw","href":"Hi.Mech.Topo.AsmbDraw.html","topicHref":"Hi.Mech.Topo.AsmbDraw.html","topicUid":"Hi.Mech.Topo.AsmbDraw","type":"Class"},{"name":"Branch","href":"Hi.Mech.Topo.Branch.html","topicHref":"Hi.Mech.Topo.Branch.html","topicUid":"Hi.Mech.Topo.Branch","type":"Class"},{"name":"DirectionBranchEntry","href":"Hi.Mech.Topo.DirectionBranchEntry.html","topicHref":"Hi.Mech.Topo.DirectionBranchEntry.html","topicUid":"Hi.Mech.Topo.DirectionBranchEntry","type":"Class"},{"name":"DirectionBranchPackUtil","href":"Hi.Mech.Topo.DirectionBranchPackUtil.html","topicHref":"Hi.Mech.Topo.DirectionBranchPackUtil.html","topicUid":"Hi.Mech.Topo.DirectionBranchPackUtil","type":"Class"},{"name":"DynamicFreeform","href":"Hi.Mech.Topo.DynamicFreeform.html","topicHref":"Hi.Mech.Topo.DynamicFreeform.html","topicUid":"Hi.Mech.Topo.DynamicFreeform","type":"Class"},{"name":"DynamicRotation","href":"Hi.Mech.Topo.DynamicRotation.html","topicHref":"Hi.Mech.Topo.DynamicRotation.html","topicUid":"Hi.Mech.Topo.DynamicRotation","type":"Class"},{"name":"DynamicTranslation","href":"Hi.Mech.Topo.DynamicTranslation.html","topicHref":"Hi.Mech.Topo.DynamicTranslation.html","topicUid":"Hi.Mech.Topo.DynamicTranslation","type":"Class"},{"name":"GeneralTransform","href":"Hi.Mech.Topo.GeneralTransform.html","topicHref":"Hi.Mech.Topo.GeneralTransform.html","topicUid":"Hi.Mech.Topo.GeneralTransform","type":"Class"},{"name":"IAnchoredDisplayee","href":"Hi.Mech.Topo.IAnchoredDisplayee.html","topicHref":"Hi.Mech.Topo.IAnchoredDisplayee.html","topicUid":"Hi.Mech.Topo.IAnchoredDisplayee","type":"Interface"},{"name":"IDynamicRegular","href":"Hi.Mech.Topo.IDynamicRegular.html","topicHref":"Hi.Mech.Topo.IDynamicRegular.html","topicUid":"Hi.Mech.Topo.IDynamicRegular","type":"Interface"},{"name":"IDynamicRotation","href":"Hi.Mech.Topo.IDynamicRotation.html","topicHref":"Hi.Mech.Topo.IDynamicRotation.html","topicUid":"Hi.Mech.Topo.IDynamicRotation","type":"Interface"},{"name":"IDynamicTransformer","href":"Hi.Mech.Topo.IDynamicTransformer.html","topicHref":"Hi.Mech.Topo.IDynamicTransformer.html","topicUid":"Hi.Mech.Topo.IDynamicTransformer","type":"Interface"},{"name":"IGetAnchor","href":"Hi.Mech.Topo.IGetAnchor.html","topicHref":"Hi.Mech.Topo.IGetAnchor.html","topicUid":"Hi.Mech.Topo.IGetAnchor","type":"Interface"},{"name":"IGetAnchoredDisplayeeList","href":"Hi.Mech.Topo.IGetAnchoredDisplayeeList.html","topicHref":"Hi.Mech.Topo.IGetAnchoredDisplayeeList.html","topicUid":"Hi.Mech.Topo.IGetAnchoredDisplayeeList","type":"Interface"},{"name":"IGetAsmb","href":"Hi.Mech.Topo.IGetAsmb.html","topicHref":"Hi.Mech.Topo.IGetAsmb.html","topicUid":"Hi.Mech.Topo.IGetAsmb","type":"Interface"},{"name":"IGetFletchBuckle","href":"Hi.Mech.Topo.IGetFletchBuckle.html","topicHref":"Hi.Mech.Topo.IGetFletchBuckle.html","topicUid":"Hi.Mech.Topo.IGetFletchBuckle","type":"Interface"},{"name":"IGetInverseTransformer","href":"Hi.Mech.Topo.IGetInverseTransformer.html","topicHref":"Hi.Mech.Topo.IGetInverseTransformer.html","topicUid":"Hi.Mech.Topo.IGetInverseTransformer","type":"Interface"},{"name":"IGetTopoIndex","href":"Hi.Mech.Topo.IGetTopoIndex.html","topicHref":"Hi.Mech.Topo.IGetTopoIndex.html","topicUid":"Hi.Mech.Topo.IGetTopoIndex","type":"Interface"},{"name":"IStaticTransformer","href":"Hi.Mech.Topo.IStaticTransformer.html","topicHref":"Hi.Mech.Topo.IStaticTransformer.html","topicUid":"Hi.Mech.Topo.IStaticTransformer","type":"Interface"},{"name":"ITopo","href":"Hi.Mech.Topo.ITopo.html","topicHref":"Hi.Mech.Topo.ITopo.html","topicUid":"Hi.Mech.Topo.ITopo","type":"Interface"},{"name":"ITopoDisplayee","href":"Hi.Mech.Topo.ITopoDisplayee.html","topicHref":"Hi.Mech.Topo.ITopoDisplayee.html","topicUid":"Hi.Mech.Topo.ITopoDisplayee","type":"Interface"},{"name":"ITransformer","href":"Hi.Mech.Topo.ITransformer.html","topicHref":"Hi.Mech.Topo.ITransformer.html","topicUid":"Hi.Mech.Topo.ITransformer","type":"Interface"},{"name":"ITransformerProperty","href":"Hi.Mech.Topo.ITransformerProperty.html","topicHref":"Hi.Mech.Topo.ITransformerProperty.html","topicUid":"Hi.Mech.Topo.ITransformerProperty","type":"Interface"},{"name":"NoTransform","href":"Hi.Mech.Topo.NoTransform.html","topicHref":"Hi.Mech.Topo.NoTransform.html","topicUid":"Hi.Mech.Topo.NoTransform","type":"Class"},{"name":"StackTransformer","href":"Hi.Mech.Topo.StackTransformer.html","topicHref":"Hi.Mech.Topo.StackTransformer.html","topicUid":"Hi.Mech.Topo.StackTransformer","type":"Class"},{"name":"StaticFreeform","href":"Hi.Mech.Topo.StaticFreeform.html","topicHref":"Hi.Mech.Topo.StaticFreeform.html","topicUid":"Hi.Mech.Topo.StaticFreeform","type":"Class"},{"name":"StaticRotation","href":"Hi.Mech.Topo.StaticRotation.html","topicHref":"Hi.Mech.Topo.StaticRotation.html","topicUid":"Hi.Mech.Topo.StaticRotation","type":"Class"},{"name":"StaticTranslation","href":"Hi.Mech.Topo.StaticTranslation.html","topicHref":"Hi.Mech.Topo.StaticTranslation.html","topicUid":"Hi.Mech.Topo.StaticTranslation","type":"Class"},{"name":"TopoDisplayee","href":"Hi.Mech.Topo.TopoDisplayee.html","topicHref":"Hi.Mech.Topo.TopoDisplayee.html","topicUid":"Hi.Mech.Topo.TopoDisplayee","type":"Class"},{"name":"TopoDisplayeeUtil","href":"Hi.Mech.Topo.TopoDisplayeeUtil.html","topicHref":"Hi.Mech.Topo.TopoDisplayeeUtil.html","topicUid":"Hi.Mech.Topo.TopoDisplayeeUtil","type":"Class"},{"name":"TopoReflection","href":"Hi.Mech.Topo.TopoReflection.html","topicHref":"Hi.Mech.Topo.TopoReflection.html","topicUid":"Hi.Mech.Topo.TopoReflection","type":"Class"},{"name":"TopoUtil","href":"Hi.Mech.Topo.TopoUtil.html","topicHref":"Hi.Mech.Topo.TopoUtil.html","topicUid":"Hi.Mech.Topo.TopoUtil","type":"Class"},{"name":"TransformerUtil","href":"Hi.Mech.Topo.TransformerUtil.html","topicHref":"Hi.Mech.Topo.TransformerUtil.html","topicUid":"Hi.Mech.Topo.TransformerUtil","type":"Class"}]},{"name":"Hi.Milling","href":"Hi.Milling.html","topicHref":"Hi.Milling.html","topicUid":"Hi.Milling","type":"Namespace","items":[{"name":"IGetDiameter","href":"Hi.Milling.IGetDiameter.html","topicHref":"Hi.Milling.IGetDiameter.html","topicUid":"Hi.Milling.IGetDiameter","type":"Interface"},{"name":"IGetFluteHeight","href":"Hi.Milling.IGetFluteHeight.html","topicHref":"Hi.Milling.IGetFluteHeight.html","topicUid":"Hi.Milling.IGetFluteHeight","type":"Interface"},{"name":"IGetMillingGeomBrief","href":"Hi.Milling.IGetMillingGeomBrief.html","topicHref":"Hi.Milling.IGetMillingGeomBrief.html","topicUid":"Hi.Milling.IGetMillingGeomBrief","type":"Interface"},{"name":"IGetRadialReliefAngle","href":"Hi.Milling.IGetRadialReliefAngle.html","topicHref":"Hi.Milling.IGetRadialReliefAngle.html","topicUid":"Hi.Milling.IGetRadialReliefAngle","type":"Interface"},{"name":"IMillingGeomBriefAccessor","href":"Hi.Milling.IMillingGeomBriefAccessor.html","topicHref":"Hi.Milling.IMillingGeomBriefAccessor.html","topicUid":"Hi.Milling.IMillingGeomBriefAccessor","type":"Interface"},{"name":"MillingGeomBrief","href":"Hi.Milling.MillingGeomBrief.html","topicHref":"Hi.Milling.MillingGeomBrief.html","topicUid":"Hi.Milling.MillingGeomBrief","type":"Class"},{"name":"MillingRemovalUtil","href":"Hi.Milling.MillingRemovalUtil.html","topicHref":"Hi.Milling.MillingRemovalUtil.html","topicUid":"Hi.Milling.MillingRemovalUtil","type":"Class"},{"name":"SpindleCapability","href":"Hi.Milling.SpindleCapability.html","topicHref":"Hi.Milling.SpindleCapability.html","topicUid":"Hi.Milling.SpindleCapability","type":"Class"}]},{"name":"Hi.Milling.Apts","href":"Hi.Milling.Apts.html","topicHref":"Hi.Milling.Apts.html","topicUid":"Hi.Milling.Apts","type":"Namespace","items":[{"name":"AptDerivative","href":"Hi.Milling.Apts.AptDerivative.html","topicHref":"Hi.Milling.Apts.AptDerivative.html","topicUid":"Hi.Milling.Apts.AptDerivative","type":"Class"},{"name":"BallApt","href":"Hi.Milling.Apts.BallApt.html","topicHref":"Hi.Milling.Apts.BallApt.html","topicUid":"Hi.Milling.Apts.BallApt","type":"Class"},{"name":"BullNoseApt","href":"Hi.Milling.Apts.BullNoseApt.html","topicHref":"Hi.Milling.Apts.BullNoseApt.html","topicUid":"Hi.Milling.Apts.BullNoseApt","type":"Class"},{"name":"ColumnApt","href":"Hi.Milling.Apts.ColumnApt.html","topicHref":"Hi.Milling.Apts.ColumnApt.html","topicUid":"Hi.Milling.Apts.ColumnApt","type":"Class"},{"name":"ConeApt","href":"Hi.Milling.Apts.ConeApt.html","topicHref":"Hi.Milling.Apts.ConeApt.html","topicUid":"Hi.Milling.Apts.ConeApt","type":"Class"},{"name":"ExactColumnApt","href":"Hi.Milling.Apts.ExactColumnApt.html","topicHref":"Hi.Milling.Apts.ExactColumnApt.html","topicUid":"Hi.Milling.Apts.ExactColumnApt","type":"Class"},{"name":"GeneralApt","href":"Hi.Milling.Apts.GeneralApt.html","topicHref":"Hi.Milling.Apts.GeneralApt.html","topicUid":"Hi.Milling.Apts.GeneralApt","type":"Class"},{"name":"IAptAlpha","href":"Hi.Milling.Apts.IAptAlpha.html","topicHref":"Hi.Milling.Apts.IAptAlpha.html","topicUid":"Hi.Milling.Apts.IAptAlpha","type":"Interface"},{"name":"IAptBased","href":"Hi.Milling.Apts.IAptBased.html","topicHref":"Hi.Milling.Apts.IAptBased.html","topicUid":"Hi.Milling.Apts.IAptBased","type":"Interface"},{"name":"IAptBeta","href":"Hi.Milling.Apts.IAptBeta.html","topicHref":"Hi.Milling.Apts.IAptBeta.html","topicUid":"Hi.Milling.Apts.IAptBeta","type":"Interface"},{"name":"IAptRc","href":"Hi.Milling.Apts.IAptRc.html","topicHref":"Hi.Milling.Apts.IAptRc.html","topicUid":"Hi.Milling.Apts.IAptRc","type":"Interface"},{"name":"IAptRr","href":"Hi.Milling.Apts.IAptRr.html","topicHref":"Hi.Milling.Apts.IAptRr.html","topicUid":"Hi.Milling.Apts.IAptRr","type":"Interface"},{"name":"IAptRz","href":"Hi.Milling.Apts.IAptRz.html","topicHref":"Hi.Milling.Apts.IAptRz.html","topicUid":"Hi.Milling.Apts.IAptRz","type":"Interface"},{"name":"IGetApt","href":"Hi.Milling.Apts.IGetApt.html","topicHref":"Hi.Milling.Apts.IGetApt.html","topicUid":"Hi.Milling.Apts.IGetApt","type":"Interface"},{"name":"IGetGeneralApt","href":"Hi.Milling.Apts.IGetGeneralApt.html","topicHref":"Hi.Milling.Apts.IGetGeneralApt.html","topicUid":"Hi.Milling.Apts.IGetGeneralApt","type":"Interface"},{"name":"TaperApt","href":"Hi.Milling.Apts.TaperApt.html","topicHref":"Hi.Milling.Apts.TaperApt.html","topicUid":"Hi.Milling.Apts.TaperApt","type":"Class"},{"name":"apt_t","href":"Hi.Milling.Apts.apt_t.html","topicHref":"Hi.Milling.Apts.apt_t.html","topicUid":"Hi.Milling.Apts.apt_t","type":"Struct"}]},{"name":"Hi.Milling.Cutters","href":"Hi.Milling.Cutters.html","topicHref":"Hi.Milling.Cutters.html","topicUid":"Hi.Milling.Cutters","type":"Namespace","items":[{"name":"AptProfile","href":"Hi.Milling.Cutters.AptProfile.html","topicHref":"Hi.Milling.Cutters.AptProfile.html","topicUid":"Hi.Milling.Cutters.AptProfile","type":"Class"},{"name":"ConstRatioProfile","href":"Hi.Milling.Cutters.ConstRatioProfile.html","topicHref":"Hi.Milling.Cutters.ConstRatioProfile.html","topicUid":"Hi.Milling.Cutters.ConstRatioProfile","type":"Class"},{"name":"CustomSpinningProfile","href":"Hi.Milling.Cutters.CustomSpinningProfile.html","topicHref":"Hi.Milling.Cutters.CustomSpinningProfile.html","topicUid":"Hi.Milling.Cutters.CustomSpinningProfile","type":"Class"},{"name":"CutterUtil","href":"Hi.Milling.Cutters.CutterUtil.html","topicHref":"Hi.Milling.Cutters.CutterUtil.html","topicUid":"Hi.Milling.Cutters.CutterUtil","type":"Class"},{"name":"FluteContourDisplayee","href":"Hi.Milling.Cutters.FluteContourDisplayee.html","topicHref":"Hi.Milling.Cutters.FluteContourDisplayee.html","topicUid":"Hi.Milling.Cutters.FluteContourDisplayee","type":"Class"},{"name":"FluteDependentRatioProfile","href":"Hi.Milling.Cutters.FluteDependentRatioProfile.html","topicHref":"Hi.Milling.Cutters.FluteDependentRatioProfile.html","topicUid":"Hi.Milling.Cutters.FluteDependentRatioProfile","type":"Class"},{"name":"IShaperProfile","href":"Hi.Milling.Cutters.IShaperProfile.html","topicHref":"Hi.Milling.Cutters.IShaperProfile.html","topicUid":"Hi.Milling.Cutters.IShaperProfile","type":"Interface"},{"name":"MillingCutter","href":"Hi.Milling.Cutters.MillingCutter.html","topicHref":"Hi.Milling.Cutters.MillingCutter.html","topicUid":"Hi.Milling.Cutters.MillingCutter","type":"Class"},{"name":"MillingCutter.IntegralModeEnum","href":"Hi.Milling.Cutters.MillingCutter.IntegralModeEnum.html","topicHref":"Hi.Milling.Cutters.MillingCutter.IntegralModeEnum.html","topicUid":"Hi.Milling.Cutters.MillingCutter.IntegralModeEnum","type":"Enum"},{"name":"MillingCutter.MassAssignmentMode","href":"Hi.Milling.Cutters.MillingCutter.MassAssignmentMode.html","topicHref":"Hi.Milling.Cutters.MillingCutter.MassAssignmentMode.html","topicUid":"Hi.Milling.Cutters.MillingCutter.MassAssignmentMode","type":"Enum"},{"name":"MillingCutterEditorDisplayee","href":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.html","topicHref":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.html","topicUid":"Hi.Milling.Cutters.MillingCutterEditorDisplayee","type":"Class"},{"name":"MillingCutterEditorDisplayee.ShapeModeEnum","href":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum.html","topicHref":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum.html","topicUid":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum","type":"Enum"}]},{"name":"Hi.Milling.Engagements","href":"Hi.Milling.Engagements.html","topicHref":"Hi.Milling.Engagements.html","topicUid":"Hi.Milling.Engagements","type":"Namespace","items":[{"name":"BitwiseMillingEngagement","href":"Hi.Milling.Engagements.BitwiseMillingEngagement.html","topicHref":"Hi.Milling.Engagements.BitwiseMillingEngagement.html","topicUid":"Hi.Milling.Engagements.BitwiseMillingEngagement","type":"Class"},{"name":"EngagementLayer","href":"Hi.Milling.Engagements.EngagementLayer.html","topicHref":"Hi.Milling.Engagements.EngagementLayer.html","topicUid":"Hi.Milling.Engagements.EngagementLayer","type":"Class"},{"name":"EngagementSlice","href":"Hi.Milling.Engagements.EngagementSlice.html","topicHref":"Hi.Milling.Engagements.EngagementSlice.html","topicUid":"Hi.Milling.Engagements.EngagementSlice","type":"Class"},{"name":"IBitwiseMillingEngagementSupport","href":"Hi.Milling.Engagements.IBitwiseMillingEngagementSupport.html","topicHref":"Hi.Milling.Engagements.IBitwiseMillingEngagementSupport.html","topicUid":"Hi.Milling.Engagements.IBitwiseMillingEngagementSupport","type":"Interface"},{"name":"IGetLayerMillingEngagement","href":"Hi.Milling.Engagements.IGetLayerMillingEngagement.html","topicHref":"Hi.Milling.Engagements.IGetLayerMillingEngagement.html","topicUid":"Hi.Milling.Engagements.IGetLayerMillingEngagement","type":"Interface"},{"name":"LayerMillingEngagement","href":"Hi.Milling.Engagements.LayerMillingEngagement.html","topicHref":"Hi.Milling.Engagements.LayerMillingEngagement.html","topicUid":"Hi.Milling.Engagements.LayerMillingEngagement","type":"Class"},{"name":"MillingEngagementUtil","href":"Hi.Milling.Engagements.MillingEngagementUtil.html","topicHref":"Hi.Milling.Engagements.MillingEngagementUtil.html","topicUid":"Hi.Milling.Engagements.MillingEngagementUtil","type":"Class"}]},{"name":"Hi.Milling.FluteContours","href":"Hi.Milling.FluteContours.html","topicHref":"Hi.Milling.FluteContours.html","topicUid":"Hi.Milling.FluteContours","type":"Namespace","items":[{"name":"ConstHelixSideContour","href":"Hi.Milling.FluteContours.ConstHelixSideContour.html","topicHref":"Hi.Milling.FluteContours.ConstHelixSideContour.html","topicUid":"Hi.Milling.FluteContours.ConstHelixSideContour","type":"Class"},{"name":"FluteContour","href":"Hi.Milling.FluteContours.FluteContour.html","topicHref":"Hi.Milling.FluteContours.FluteContour.html","topicUid":"Hi.Milling.FluteContours.FluteContour","type":"Class"},{"name":"FluteContourUtil","href":"Hi.Milling.FluteContours.FluteContourUtil.html","topicHref":"Hi.Milling.FluteContours.FluteContourUtil.html","topicUid":"Hi.Milling.FluteContours.FluteContourUtil","type":"Class"},{"name":"FreeContourTray","href":"Hi.Milling.FluteContours.FreeContourTray.html","topicHref":"Hi.Milling.FluteContours.FreeContourTray.html","topicUid":"Hi.Milling.FluteContours.FreeContourTray","type":"Class"},{"name":"FreeformSideContour","href":"Hi.Milling.FluteContours.FreeformSideContour.html","topicHref":"Hi.Milling.FluteContours.FreeformSideContour.html","topicUid":"Hi.Milling.FluteContours.FreeformSideContour","type":"Class"},{"name":"IBottomContour","href":"Hi.Milling.FluteContours.IBottomContour.html","topicHref":"Hi.Milling.FluteContours.IBottomContour.html","topicUid":"Hi.Milling.FluteContours.IBottomContour","type":"Interface"},{"name":"IContourTray","href":"Hi.Milling.FluteContours.IContourTray.html","topicHref":"Hi.Milling.FluteContours.IContourTray.html","topicUid":"Hi.Milling.FluteContours.IContourTray","type":"Interface"},{"name":"IFluteNumSourceProperty","href":"Hi.Milling.FluteContours.IFluteNumSourceProperty.html","topicHref":"Hi.Milling.FluteContours.IFluteNumSourceProperty.html","topicUid":"Hi.Milling.FluteContours.IFluteNumSourceProperty","type":"Interface"},{"name":"IGetFluteNum","href":"Hi.Milling.FluteContours.IGetFluteNum.html","topicHref":"Hi.Milling.FluteContours.IGetFluteNum.html","topicUid":"Hi.Milling.FluteContours.IGetFluteNum","type":"Interface"},{"name":"ISideContour","href":"Hi.Milling.FluteContours.ISideContour.html","topicHref":"Hi.Milling.FluteContours.ISideContour.html","topicUid":"Hi.Milling.FluteContours.ISideContour","type":"Interface"},{"name":"IWorkingContour","href":"Hi.Milling.FluteContours.IWorkingContour.html","topicHref":"Hi.Milling.FluteContours.IWorkingContour.html","topicUid":"Hi.Milling.FluteContours.IWorkingContour","type":"Interface"},{"name":"ShiftedWorkingContour","href":"Hi.Milling.FluteContours.ShiftedWorkingContour.html","topicHref":"Hi.Milling.FluteContours.ShiftedWorkingContour.html","topicUid":"Hi.Milling.FluteContours.ShiftedWorkingContour","type":"Class"},{"name":"SideContourDisplayee","href":"Hi.Milling.FluteContours.SideContourDisplayee.html","topicHref":"Hi.Milling.FluteContours.SideContourDisplayee.html","topicUid":"Hi.Milling.FluteContours.SideContourDisplayee","type":"Class"},{"name":"SlideBottomContour","href":"Hi.Milling.FluteContours.SlideBottomContour.html","topicHref":"Hi.Milling.FluteContours.SlideBottomContour.html","topicUid":"Hi.Milling.FluteContours.SlideBottomContour","type":"Class"},{"name":"SpanContourPos4d","href":"Hi.Milling.FluteContours.SpanContourPos4d.html","topicHref":"Hi.Milling.FluteContours.SpanContourPos4d.html","topicUid":"Hi.Milling.FluteContours.SpanContourPos4d","type":"Class"},{"name":"UniformContourTray","href":"Hi.Milling.FluteContours.UniformContourTray.html","topicHref":"Hi.Milling.FluteContours.UniformContourTray.html","topicUid":"Hi.Milling.FluteContours.UniformContourTray","type":"Class"}]},{"name":"Hi.Milling.MillingTools","href":"Hi.Milling.MillingTools.html","topicHref":"Hi.Milling.MillingTools.html","topicUid":"Hi.Milling.MillingTools","type":"Namespace","items":[{"name":"MillingTool","href":"Hi.Milling.MillingTools.MillingTool.html","topicHref":"Hi.Milling.MillingTools.MillingTool.html","topicUid":"Hi.Milling.MillingTools.MillingTool","type":"Class"},{"name":"MillingToolAnchorReference","href":"Hi.Milling.MillingTools.MillingToolAnchorReference.html","topicHref":"Hi.Milling.MillingTools.MillingToolAnchorReference.html","topicUid":"Hi.Milling.MillingTools.MillingToolAnchorReference","type":"Enum"},{"name":"MillingToolEditorDisplayee","href":"Hi.Milling.MillingTools.MillingToolEditorDisplayee.html","topicHref":"Hi.Milling.MillingTools.MillingToolEditorDisplayee.html","topicUid":"Hi.Milling.MillingTools.MillingToolEditorDisplayee","type":"Class"},{"name":"MillingToolUtil","href":"Hi.Milling.MillingTools.MillingToolUtil.html","topicHref":"Hi.Milling.MillingTools.MillingToolUtil.html","topicUid":"Hi.Milling.MillingTools.MillingToolUtil","type":"Class"}]},{"name":"Hi.MillingForces","href":"Hi.MillingForces.html","topicHref":"Hi.MillingForces.html","topicUid":"Hi.MillingForces","type":"Namespace","items":[{"name":"FluteZData","href":"Hi.MillingForces.FluteZData.html","topicHref":"Hi.MillingForces.FluteZData.html","topicUid":"Hi.MillingForces.FluteZData","type":"Class"},{"name":"IGetMillingForce","href":"Hi.MillingForces.IGetMillingForce.html","topicHref":"Hi.MillingForces.IGetMillingForce.html","topicUid":"Hi.MillingForces.IGetMillingForce","type":"Interface"},{"name":"IMillingForceAccessor","href":"Hi.MillingForces.IMillingForceAccessor.html","topicHref":"Hi.MillingForces.IMillingForceAccessor.html","topicUid":"Hi.MillingForces.IMillingForceAccessor","type":"Interface"},{"name":"MillingForce","href":"Hi.MillingForces.MillingForce.html","topicHref":"Hi.MillingForces.MillingForce.html","topicUid":"Hi.MillingForces.MillingForce","type":"Class"},{"name":"MillingForceLicense","href":"Hi.MillingForces.MillingForceLicense.html","topicHref":"Hi.MillingForces.MillingForceLicense.html","topicUid":"Hi.MillingForces.MillingForceLicense","type":"Class"},{"name":"MillingForceLuggage","href":"Hi.MillingForces.MillingForceLuggage.html","topicHref":"Hi.MillingForces.MillingForceLuggage.html","topicUid":"Hi.MillingForces.MillingForceLuggage","type":"Class"},{"name":"MillingForceUtil","href":"Hi.MillingForces.MillingForceUtil.html","topicHref":"Hi.MillingForces.MillingForceUtil.html","topicUid":"Hi.MillingForces.MillingForceUtil","type":"Class"},{"name":"MillingForceUtil.AnglePack","href":"Hi.MillingForces.MillingForceUtil.AnglePack.html","topicHref":"Hi.MillingForces.MillingForceUtil.AnglePack.html","topicUid":"Hi.MillingForces.MillingForceUtil.AnglePack","type":"Class"},{"name":"MillingPhysicsBrief","href":"Hi.MillingForces.MillingPhysicsBrief.html","topicHref":"Hi.MillingForces.MillingPhysicsBrief.html","topicUid":"Hi.MillingForces.MillingPhysicsBrief","type":"Class"},{"name":"PhysicsUtil","href":"Hi.MillingForces.PhysicsUtil.html","topicHref":"Hi.MillingForces.PhysicsUtil.html","topicUid":"Hi.MillingForces.PhysicsUtil","type":"Class"},{"name":"ToolObservationReference","href":"Hi.MillingForces.ToolObservationReference.html","topicHref":"Hi.MillingForces.ToolObservationReference.html","topicUid":"Hi.MillingForces.ToolObservationReference","type":"Enum"}]},{"name":"Hi.MillingForces.Fittings","href":"Hi.MillingForces.Fittings.html","topicHref":"Hi.MillingForces.Fittings.html","topicUid":"Hi.MillingForces.Fittings","type":"Namespace","items":[{"name":"CuttingParaUtil","href":"Hi.MillingForces.Fittings.CuttingParaUtil.html","topicHref":"Hi.MillingForces.Fittings.CuttingParaUtil.html","topicUid":"Hi.MillingForces.Fittings.CuttingParaUtil","type":"Class"},{"name":"ICuttingPara","href":"Hi.MillingForces.Fittings.ICuttingPara.html","topicHref":"Hi.MillingForces.Fittings.ICuttingPara.html","topicUid":"Hi.MillingForces.Fittings.ICuttingPara","type":"Interface"},{"name":"IGetCuttingPara","href":"Hi.MillingForces.Fittings.IGetCuttingPara.html","topicHref":"Hi.MillingForces.Fittings.IGetCuttingPara.html","topicUid":"Hi.MillingForces.Fittings.IGetCuttingPara","type":"Interface"},{"name":"SampleCategory","href":"Hi.MillingForces.Fittings.SampleCategory.html","topicHref":"Hi.MillingForces.Fittings.SampleCategory.html","topicUid":"Hi.MillingForces.Fittings.SampleCategory","type":"Class"},{"name":"SampleFlag","href":"Hi.MillingForces.Fittings.SampleFlag.html","topicHref":"Hi.MillingForces.Fittings.SampleFlag.html","topicUid":"Hi.MillingForces.Fittings.SampleFlag","type":"Enum"},{"name":"SampleFlagUtil","href":"Hi.MillingForces.Fittings.SampleFlagUtil.html","topicHref":"Hi.MillingForces.Fittings.SampleFlagUtil.html","topicUid":"Hi.MillingForces.Fittings.SampleFlagUtil","type":"Class"},{"name":"SampleInstance","href":"Hi.MillingForces.Fittings.SampleInstance.html","topicHref":"Hi.MillingForces.Fittings.SampleInstance.html","topicUid":"Hi.MillingForces.Fittings.SampleInstance","type":"Class"},{"name":"TimeForce","href":"Hi.MillingForces.Fittings.TimeForce.html","topicHref":"Hi.MillingForces.Fittings.TimeForce.html","topicUid":"Hi.MillingForces.Fittings.TimeForce","type":"Class"},{"name":"TimeForceFrequencyDomain","href":"Hi.MillingForces.Fittings.TimeForceFrequencyDomain.html","topicHref":"Hi.MillingForces.Fittings.TimeForceFrequencyDomain.html","topicUid":"Hi.MillingForces.Fittings.TimeForceFrequencyDomain","type":"Class"},{"name":"TimeForceSeries","href":"Hi.MillingForces.Fittings.TimeForceSeries.html","topicHref":"Hi.MillingForces.Fittings.TimeForceSeries.html","topicUid":"Hi.MillingForces.Fittings.TimeForceSeries","type":"Class"},{"name":"TimeForceUtil","href":"Hi.MillingForces.Fittings.TimeForceUtil.html","topicHref":"Hi.MillingForces.Fittings.TimeForceUtil.html","topicUid":"Hi.MillingForces.Fittings.TimeForceUtil","type":"Class"},{"name":"TimeVsForceSeries","href":"Hi.MillingForces.Fittings.TimeVsForceSeries.html","topicHref":"Hi.MillingForces.Fittings.TimeVsForceSeries.html","topicUid":"Hi.MillingForces.Fittings.TimeVsForceSeries","type":"Class"},{"name":"TimeVsTorqueSeries","href":"Hi.MillingForces.Fittings.TimeVsTorqueSeries.html","topicHref":"Hi.MillingForces.Fittings.TimeVsTorqueSeries.html","topicUid":"Hi.MillingForces.Fittings.TimeVsTorqueSeries","type":"Class"},{"name":"TrainingSample","href":"Hi.MillingForces.Fittings.TrainingSample.html","topicHref":"Hi.MillingForces.Fittings.TrainingSample.html","topicUid":"Hi.MillingForces.Fittings.TrainingSample","type":"Class"}]},{"name":"Hi.MillingForces.ProfileMillingParas","href":"Hi.MillingForces.ProfileMillingParas.html","topicHref":"Hi.MillingForces.ProfileMillingParas.html","topicUid":"Hi.MillingForces.ProfileMillingParas","type":"Namespace","items":[{"name":"IGetLocalProfileMillingPara","href":"Hi.MillingForces.ProfileMillingParas.IGetLocalProfileMillingPara.html","topicHref":"Hi.MillingForces.ProfileMillingParas.IGetLocalProfileMillingPara.html","topicUid":"Hi.MillingForces.ProfileMillingParas.IGetLocalProfileMillingPara","type":"Interface"},{"name":"LocalProfileMillingPara","href":"Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html","topicHref":"Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html","topicUid":"Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara","type":"Class"},{"name":"ProfileMillingParaMap","href":"Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html","topicHref":"Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html","topicUid":"Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap","type":"Class"},{"name":"RtaMillingParaKey","href":"Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey.html","topicHref":"Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey.html","topicUid":"Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey","type":"Enum"}]},{"name":"Hi.MillingForces.RakeFaceCuttingParas","href":"Hi.MillingForces.RakeFaceCuttingParas.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas","type":"Namespace","items":[{"name":"IRakeFaceCuttingPara","href":"Hi.MillingForces.RakeFaceCuttingParas.IRakeFaceCuttingPara.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.IRakeFaceCuttingPara.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.IRakeFaceCuttingPara","type":"Interface"},{"name":"MillingPhysicsUtil","href":"Hi.MillingForces.RakeFaceCuttingParas.MillingPhysicsUtil.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.MillingPhysicsUtil.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.MillingPhysicsUtil","type":"Class"},{"name":"MultiFormRakeFaceCuttingPara","href":"Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara","type":"Class"},{"name":"RakeFaceCuttingPara2d","href":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d","type":"Class"},{"name":"RakeFaceCuttingPara3d","href":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d","type":"Class"},{"name":"RakeFaceCuttingParaMap","href":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap","type":"Class"}]},{"name":"Hi.MillingForces.Training","href":"Hi.MillingForces.Training.html","topicHref":"Hi.MillingForces.Training.html","topicUid":"Hi.MillingForces.Training","type":"Namespace","items":[{"name":"MillingTraining","href":"Hi.MillingForces.Training.MillingTraining.html","topicHref":"Hi.MillingForces.Training.MillingTraining.html","topicUid":"Hi.MillingForces.Training.MillingTraining","type":"Class"}]},{"name":"Hi.MillingProcs","href":"Hi.MillingProcs.html","topicHref":"Hi.MillingProcs.html","topicUid":"Hi.MillingProcs","type":"Namespace","items":[{"name":"MillingGuide","href":"Hi.MillingProcs.MillingGuide.html","topicHref":"Hi.MillingProcs.MillingGuide.html","topicUid":"Hi.MillingProcs.MillingGuide","type":"Class"}]},{"name":"Hi.MillingStepUtils","href":"Hi.MillingStepUtils.html","topicHref":"Hi.MillingStepUtils.html","topicUid":"Hi.MillingStepUtils","type":"Namespace","items":[{"name":"ClStripChartConfig","href":"Hi.MillingStepUtils.ClStripChartConfig.html","topicHref":"Hi.MillingStepUtils.ClStripChartConfig.html","topicUid":"Hi.MillingStepUtils.ClStripChartConfig","type":"Class"},{"name":"ClStripChartItemConfig","href":"Hi.MillingStepUtils.ClStripChartItemConfig.html","topicHref":"Hi.MillingStepUtils.ClStripChartItemConfig.html","topicUid":"Hi.MillingStepUtils.ClStripChartItemConfig","type":"Class"},{"name":"ForceCycleFlag","href":"Hi.MillingStepUtils.ForceCycleFlag.html","topicHref":"Hi.MillingStepUtils.ForceCycleFlag.html","topicUid":"Hi.MillingStepUtils.ForceCycleFlag","type":"Enum"},{"name":"ForceCycleLineDivConfig","href":"Hi.MillingStepUtils.ForceCycleLineDivConfig.html","topicHref":"Hi.MillingStepUtils.ForceCycleLineDivConfig.html","topicUid":"Hi.MillingStepUtils.ForceCycleLineDivConfig","type":"Class"},{"name":"LineChartVRangeMode","href":"Hi.MillingStepUtils.LineChartVRangeMode.html","topicHref":"Hi.MillingStepUtils.LineChartVRangeMode.html","topicUid":"Hi.MillingStepUtils.LineChartVRangeMode","type":"Enum"},{"name":"SpindleMomentCycleLineDivConfig","href":"Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html","topicHref":"Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html","topicUid":"Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig","type":"Class"},{"name":"TimeChartYConfig","href":"Hi.MillingStepUtils.TimeChartYConfig.html","topicHref":"Hi.MillingStepUtils.TimeChartYConfig.html","topicUid":"Hi.MillingStepUtils.TimeChartYConfig","type":"Class"}]},{"name":"Hi.MillingSteps","href":"Hi.MillingSteps.html","topicHref":"Hi.MillingSteps.html","topicUid":"Hi.MillingSteps","type":"Namespace","items":[{"name":"MillingInstance","href":"Hi.MillingSteps.MillingInstance.html","topicHref":"Hi.MillingSteps.MillingInstance.html","topicUid":"Hi.MillingSteps.MillingInstance","type":"Class"},{"name":"MillingStepLuggage","href":"Hi.MillingSteps.MillingStepLuggage.html","topicHref":"Hi.MillingSteps.MillingStepLuggage.html","topicUid":"Hi.MillingSteps.MillingStepLuggage","type":"Class"}]},{"name":"Hi.Motion","href":"Hi.Motion.html","topicHref":"Hi.Motion.html","topicUid":"Hi.Motion","type":"Namespace","items":[{"name":"MotionUtil","href":"Hi.Motion.MotionUtil.html","topicHref":"Hi.Motion.MotionUtil.html","topicUid":"Hi.Motion.MotionUtil","type":"Class"}]},{"name":"Hi.Motion.MatValves","href":"Hi.Motion.MatValves.html","topicHref":"Hi.Motion.MatValves.html","topicUid":"Hi.Motion.MatValves","type":"Namespace","items":[{"name":"ClMachiningValve","href":"Hi.Motion.MatValves.ClMachiningValve.html","topicHref":"Hi.Motion.MatValves.ClMachiningValve.html","topicUid":"Hi.Motion.MatValves.ClMachiningValve","type":"Class"},{"name":"IMotionValve","href":"Hi.Motion.MatValves.IMotionValve.html","topicHref":"Hi.Motion.MatValves.IMotionValve.html","topicUid":"Hi.Motion.MatValves.IMotionValve","type":"Interface"},{"name":"MacroMotionValve","href":"Hi.Motion.MatValves.MacroMotionValve.html","topicHref":"Hi.Motion.MatValves.MacroMotionValve.html","topicUid":"Hi.Motion.MatValves.MacroMotionValve","type":"Class"},{"name":"StepMotionValve","href":"Hi.Motion.MatValves.StepMotionValve.html","topicHref":"Hi.Motion.MatValves.StepMotionValve.html","topicUid":"Hi.Motion.MatValves.StepMotionValve","type":"Class"}]},{"name":"Hi.Native","href":"Hi.Native.html","topicHref":"Hi.Native.html","topicUid":"Hi.Native","type":"Namespace","items":[{"name":"StopSource","href":"Hi.Native.StopSource.html","topicHref":"Hi.Native.StopSource.html","topicUid":"Hi.Native.StopSource","type":"Class"},{"name":"StopToken","href":"Hi.Native.StopToken.html","topicHref":"Hi.Native.StopToken.html","topicUid":"Hi.Native.StopToken","type":"Class"},{"name":"StopTokenKit","href":"Hi.Native.StopTokenKit.html","topicHref":"Hi.Native.StopTokenKit.html","topicUid":"Hi.Native.StopTokenKit","type":"Class"},{"name":"StopTokenUtil","href":"Hi.Native.StopTokenUtil.html","topicHref":"Hi.Native.StopTokenUtil.html","topicUid":"Hi.Native.StopTokenUtil","type":"Class"},{"name":"bind_t","href":"Hi.Native.bind_t.html","topicHref":"Hi.Native.bind_t.html","topicUid":"Hi.Native.bind_t","type":"Struct"},{"name":"box2d","href":"Hi.Native.box2d.html","topicHref":"Hi.Native.box2d.html","topicUid":"Hi.Native.box2d","type":"Struct"},{"name":"box3d","href":"Hi.Native.box3d.html","topicHref":"Hi.Native.box3d.html","topicUid":"Hi.Native.box3d","type":"Struct"},{"name":"expand_to_box3d_func_t","href":"Hi.Native.expand_to_box3d_func_t.html","topicHref":"Hi.Native.expand_to_box3d_func_t.html","topicUid":"Hi.Native.expand_to_box3d_func_t","type":"Delegate"},{"name":"key_event_t","href":"Hi.Native.key_event_t.html","topicHref":"Hi.Native.key_event_t.html","topicUid":"Hi.Native.key_event_t","type":"Struct"},{"name":"key_table__transform_view_by_key_pressing_t","href":"Hi.Native.key_table__transform_view_by_key_pressing_t.html","topicHref":"Hi.Native.key_table__transform_view_by_key_pressing_t.html","topicUid":"Hi.Native.key_table__transform_view_by_key_pressing_t","type":"Struct"},{"name":"mat4d","href":"Hi.Native.mat4d.html","topicHref":"Hi.Native.mat4d.html","topicUid":"Hi.Native.mat4d","type":"Struct"},{"name":"mat_stack_t","href":"Hi.Native.mat_stack_t.html","topicHref":"Hi.Native.mat_stack_t.html","topicUid":"Hi.Native.mat_stack_t","type":"Struct"},{"name":"mouse_button_event_t","href":"Hi.Native.mouse_button_event_t.html","topicHref":"Hi.Native.mouse_button_event_t.html","topicUid":"Hi.Native.mouse_button_event_t","type":"Struct"},{"name":"mouse_button_table__transform_view_by_mouse_drag_t","href":"Hi.Native.mouse_button_table__transform_view_by_mouse_drag_t.html","topicHref":"Hi.Native.mouse_button_table__transform_view_by_mouse_drag_t.html","topicUid":"Hi.Native.mouse_button_table__transform_view_by_mouse_drag_t","type":"Struct"},{"name":"mouse_move_event_t","href":"Hi.Native.mouse_move_event_t.html","topicHref":"Hi.Native.mouse_move_event_t.html","topicUid":"Hi.Native.mouse_move_event_t","type":"Struct"},{"name":"mouse_wheel_event_t","href":"Hi.Native.mouse_wheel_event_t.html","topicHref":"Hi.Native.mouse_wheel_event_t.html","topicUid":"Hi.Native.mouse_wheel_event_t","type":"Struct"},{"name":"panel_state_t","href":"Hi.Native.panel_state_t.html","topicHref":"Hi.Native.panel_state_t.html","topicUid":"Hi.Native.panel_state_t","type":"Struct"},{"name":"picking_event_t","href":"Hi.Native.picking_event_t.html","topicHref":"Hi.Native.picking_event_t.html","topicUid":"Hi.Native.picking_event_t","type":"Struct"},{"name":"picking_mark_t","href":"Hi.Native.picking_mark_t.html","topicHref":"Hi.Native.picking_mark_t.html","topicUid":"Hi.Native.picking_mark_t","type":"Struct"},{"name":"tri3d","href":"Hi.Native.tri3d.html","topicHref":"Hi.Native.tri3d.html","topicUid":"Hi.Native.tri3d","type":"Struct"},{"name":"ui_event_type","href":"Hi.Native.ui_event_type.html","topicHref":"Hi.Native.ui_event_type.html","topicUid":"Hi.Native.ui_event_type","type":"Enum"},{"name":"vec2d","href":"Hi.Native.vec2d.html","topicHref":"Hi.Native.vec2d.html","topicUid":"Hi.Native.vec2d","type":"Struct"},{"name":"vec3d","href":"Hi.Native.vec3d.html","topicHref":"Hi.Native.vec3d.html","topicUid":"Hi.Native.vec3d","type":"Struct"},{"name":"vec3f","href":"Hi.Native.vec3f.html","topicHref":"Hi.Native.vec3f.html","topicUid":"Hi.Native.vec3f","type":"Struct"}]},{"name":"Hi.NcMech","href":"Hi.NcMech.html","topicHref":"Hi.NcMech.html","topicUid":"Hi.NcMech","type":"Namespace","items":[{"name":"ICollisionIndexPairsSource","href":"Hi.NcMech.ICollisionIndexPairsSource.html","topicHref":"Hi.NcMech.ICollisionIndexPairsSource.html","topicUid":"Hi.NcMech.ICollisionIndexPairsSource","type":"Interface"}]},{"name":"Hi.NcMech.Fixtures","href":"Hi.NcMech.Fixtures.html","topicHref":"Hi.NcMech.Fixtures.html","topicUid":"Hi.NcMech.Fixtures","type":"Namespace","items":[{"name":"Fixture","href":"Hi.NcMech.Fixtures.Fixture.html","topicHref":"Hi.NcMech.Fixtures.Fixture.html","topicUid":"Hi.NcMech.Fixtures.Fixture","type":"Class"},{"name":"FixtureEditorDisplayee","href":"Hi.NcMech.Fixtures.FixtureEditorDisplayee.html","topicHref":"Hi.NcMech.Fixtures.FixtureEditorDisplayee.html","topicUid":"Hi.NcMech.Fixtures.FixtureEditorDisplayee","type":"Class"},{"name":"FixtureEditorDisplayeeConfig","href":"Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html","topicHref":"Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html","topicUid":"Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig","type":"Class"}]},{"name":"Hi.NcMech.Holders","href":"Hi.NcMech.Holders.html","topicHref":"Hi.NcMech.Holders.html","topicUid":"Hi.NcMech.Holders","type":"Namespace","items":[{"name":"CylindroidHolder","href":"Hi.NcMech.Holders.CylindroidHolder.html","topicHref":"Hi.NcMech.Holders.CylindroidHolder.html","topicUid":"Hi.NcMech.Holders.CylindroidHolder","type":"Class"},{"name":"FreeformHolder","href":"Hi.NcMech.Holders.FreeformHolder.html","topicHref":"Hi.NcMech.Holders.FreeformHolder.html","topicUid":"Hi.NcMech.Holders.FreeformHolder","type":"Class"},{"name":"HolderEditorDisplayee","href":"Hi.NcMech.Holders.HolderEditorDisplayee.html","topicHref":"Hi.NcMech.Holders.HolderEditorDisplayee.html","topicUid":"Hi.NcMech.Holders.HolderEditorDisplayee","type":"Class"},{"name":"IHolder","href":"Hi.NcMech.Holders.IHolder.html","topicHref":"Hi.NcMech.Holders.IHolder.html","topicUid":"Hi.NcMech.Holders.IHolder","type":"Interface"}]},{"name":"Hi.NcMech.Solids","href":"Hi.NcMech.Solids.html","topicHref":"Hi.NcMech.Solids.html","topicUid":"Hi.NcMech.Solids","type":"Namespace","items":[{"name":"IGetSolid","href":"Hi.NcMech.Solids.IGetSolid.html","topicHref":"Hi.NcMech.Solids.IGetSolid.html","topicUid":"Hi.NcMech.Solids.IGetSolid","type":"Interface"},{"name":"Solid","href":"Hi.NcMech.Solids.Solid.html","topicHref":"Hi.NcMech.Solids.Solid.html","topicUid":"Hi.NcMech.Solids.Solid","type":"Class"},{"name":"Solid.RenderingModeEnum","href":"Hi.NcMech.Solids.Solid.RenderingModeEnum.html","topicHref":"Hi.NcMech.Solids.Solid.RenderingModeEnum.html","topicUid":"Hi.NcMech.Solids.Solid.RenderingModeEnum","type":"Enum"},{"name":"SolidFuncSource","href":"Hi.NcMech.Solids.SolidFuncSource.html","topicHref":"Hi.NcMech.Solids.SolidFuncSource.html","topicUid":"Hi.NcMech.Solids.SolidFuncSource","type":"Class"}]},{"name":"Hi.NcMech.Topo","href":"Hi.NcMech.Topo.html","topicHref":"Hi.NcMech.Topo.html","topicUid":"Hi.NcMech.Topo","type":"Namespace","items":[{"name":"INcStroke","href":"Hi.NcMech.Topo.INcStroke.html","topicHref":"Hi.NcMech.Topo.INcStroke.html","topicUid":"Hi.NcMech.Topo.INcStroke","type":"Interface"},{"name":"INcTransformer","href":"Hi.NcMech.Topo.INcTransformer.html","topicHref":"Hi.NcMech.Topo.INcTransformer.html","topicUid":"Hi.NcMech.Topo.INcTransformer","type":"Interface"},{"name":"ITopoBrick","href":"Hi.NcMech.Topo.ITopoBrick.html","topicHref":"Hi.NcMech.Topo.ITopoBrick.html","topicUid":"Hi.NcMech.Topo.ITopoBrick","type":"Interface"},{"name":"NcRotation","href":"Hi.NcMech.Topo.NcRotation.html","topicHref":"Hi.NcMech.Topo.NcRotation.html","topicUid":"Hi.NcMech.Topo.NcRotation","type":"Class"},{"name":"NcTranslation","href":"Hi.NcMech.Topo.NcTranslation.html","topicHref":"Hi.NcMech.Topo.NcTranslation.html","topicUid":"Hi.NcMech.Topo.NcTranslation","type":"Class"},{"name":"SolidSourceTopoBrick","href":"Hi.NcMech.Topo.SolidSourceTopoBrick.html","topicHref":"Hi.NcMech.Topo.SolidSourceTopoBrick.html","topicUid":"Hi.NcMech.Topo.SolidSourceTopoBrick","type":"Class"},{"name":"StlSourceTopoBrick","href":"Hi.NcMech.Topo.StlSourceTopoBrick.html","topicHref":"Hi.NcMech.Topo.StlSourceTopoBrick.html","topicUid":"Hi.NcMech.Topo.StlSourceTopoBrick","type":"Class"}]},{"name":"Hi.NcMech.Workpieces","href":"Hi.NcMech.Workpieces.html","topicHref":"Hi.NcMech.Workpieces.html","topicUid":"Hi.NcMech.Workpieces","type":"Namespace","items":[{"name":"Workpiece","href":"Hi.NcMech.Workpieces.Workpiece.html","topicHref":"Hi.NcMech.Workpieces.Workpiece.html","topicUid":"Hi.NcMech.Workpieces.Workpiece","type":"Class"},{"name":"WorkpieceEditorDisplayee","href":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html","topicHref":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html","topicUid":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayee","type":"Class"},{"name":"WorkpieceEditorDisplayeeConfig","href":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html","topicHref":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html","topicUid":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig","type":"Class"},{"name":"WorkpieceService","href":"Hi.NcMech.Workpieces.WorkpieceService.html","topicHref":"Hi.NcMech.Workpieces.WorkpieceService.html","topicUid":"Hi.NcMech.Workpieces.WorkpieceService","type":"Class"}]},{"name":"Hi.NcMech.Xyzabc","href":"Hi.NcMech.Xyzabc.html","topicHref":"Hi.NcMech.Xyzabc.html","topicUid":"Hi.NcMech.Xyzabc","type":"Namespace","items":[{"name":"CodeXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.CodeXyzabcMachineTool","type":"Class"},{"name":"CodeXyzabcMachineToolUri","href":"Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.html","topicHref":"Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.html","topicUid":"Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri","type":"Class"},{"name":"GeneralXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool","type":"Class"},{"name":"IGetCodeXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.IGetCodeXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.IGetCodeXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.IGetCodeXyzabcMachineTool","type":"Interface"},{"name":"IXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.IXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.IXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.IXyzabcMachineTool","type":"Interface"}]},{"name":"Hi.NcOpt","href":"Hi.NcOpt.html","topicHref":"Hi.NcOpt.html","topicUid":"Hi.NcOpt","type":"Namespace","items":[{"name":"CuttingVelocityOptLimit","href":"Hi.NcOpt.CuttingVelocityOptLimit.html","topicHref":"Hi.NcOpt.CuttingVelocityOptLimit.html","topicUid":"Hi.NcOpt.CuttingVelocityOptLimit","type":"Class"},{"name":"FixedFeedPerCycleOptLimit","href":"Hi.NcOpt.FixedFeedPerCycleOptLimit.html","topicHref":"Hi.NcOpt.FixedFeedPerCycleOptLimit.html","topicUid":"Hi.NcOpt.FixedFeedPerCycleOptLimit","type":"Class"},{"name":"FixedFeedPerToothOptLimit","href":"Hi.NcOpt.FixedFeedPerToothOptLimit.html","topicHref":"Hi.NcOpt.FixedFeedPerToothOptLimit.html","topicUid":"Hi.NcOpt.FixedFeedPerToothOptLimit","type":"Class"},{"name":"ICutterOptLimitHost","href":"Hi.NcOpt.ICutterOptLimitHost.html","topicHref":"Hi.NcOpt.ICutterOptLimitHost.html","topicUid":"Hi.NcOpt.ICutterOptLimitHost","type":"Interface"},{"name":"ICutterOptOption","href":"Hi.NcOpt.ICutterOptOption.html","topicHref":"Hi.NcOpt.ICutterOptOption.html","topicUid":"Hi.NcOpt.ICutterOptOption","type":"Interface"},{"name":"ICuttingVelocityOptLimit","href":"Hi.NcOpt.ICuttingVelocityOptLimit.html","topicHref":"Hi.NcOpt.ICuttingVelocityOptLimit.html","topicUid":"Hi.NcOpt.ICuttingVelocityOptLimit","type":"Interface"},{"name":"IFeedPerToothOptLimit","href":"Hi.NcOpt.IFeedPerToothOptLimit.html","topicHref":"Hi.NcOpt.IFeedPerToothOptLimit.html","topicUid":"Hi.NcOpt.IFeedPerToothOptLimit","type":"Interface"},{"name":"MillingCutterOptOption","href":"Hi.NcOpt.MillingCutterOptOption.html","topicHref":"Hi.NcOpt.MillingCutterOptOption.html","topicUid":"Hi.NcOpt.MillingCutterOptOption","type":"Class"},{"name":"NcOptOption","href":"Hi.NcOpt.NcOptOption.html","topicHref":"Hi.NcOpt.NcOptOption.html","topicUid":"Hi.NcOpt.NcOptOption","type":"Class"},{"name":"NcOptProc","href":"Hi.NcOpt.NcOptProc.html","topicHref":"Hi.NcOpt.NcOptProc.html","topicUid":"Hi.NcOpt.NcOptProc","type":"Class"},{"name":"NcOptimizationEmbeddedLogMode","href":"Hi.NcOpt.NcOptimizationEmbeddedLogMode.html","topicHref":"Hi.NcOpt.NcOptimizationEmbeddedLogMode.html","topicUid":"Hi.NcOpt.NcOptimizationEmbeddedLogMode","type":"Enum"},{"name":"ShapeBasedCutterOptLimit","href":"Hi.NcOpt.ShapeBasedCutterOptLimit.html","topicHref":"Hi.NcOpt.ShapeBasedCutterOptLimit.html","topicUid":"Hi.NcOpt.ShapeBasedCutterOptLimit","type":"Class"}]},{"name":"Hi.NcParsers","href":"Hi.NcParsers.html","topicHref":"Hi.NcParsers.html","topicUid":"Hi.NcParsers","type":"Namespace","items":[{"name":"IGetSentence","href":"Hi.NcParsers.IGetSentence.html","topicHref":"Hi.NcParsers.IGetSentence.html","topicUid":"Hi.NcParsers.IGetSentence","type":"Interface"},{"name":"NcDiagnostic","href":"Hi.NcParsers.NcDiagnostic.html","topicHref":"Hi.NcParsers.NcDiagnostic.html","topicUid":"Hi.NcParsers.NcDiagnostic","type":"Class"},{"name":"NcDiagnosticCategory","href":"Hi.NcParsers.NcDiagnosticCategory.html","topicHref":"Hi.NcParsers.NcDiagnosticCategory.html","topicUid":"Hi.NcParsers.NcDiagnosticCategory","type":"Enum"},{"name":"NcDiagnosticProgress","href":"Hi.NcParsers.NcDiagnosticProgress.html","topicHref":"Hi.NcParsers.NcDiagnosticProgress.html","topicUid":"Hi.NcParsers.NcDiagnosticProgress","type":"Class"},{"name":"NcDiagnosticSeverity","href":"Hi.NcParsers.NcDiagnosticSeverity.html","topicHref":"Hi.NcParsers.NcDiagnosticSeverity.html","topicUid":"Hi.NcParsers.NcDiagnosticSeverity","type":"Enum"},{"name":"Sentence","href":"Hi.NcParsers.Sentence.html","topicHref":"Hi.NcParsers.Sentence.html","topicUid":"Hi.NcParsers.Sentence","type":"Class"},{"name":"SoftNcRunner","href":"Hi.NcParsers.SoftNcRunner.html","topicHref":"Hi.NcParsers.SoftNcRunner.html","topicUid":"Hi.NcParsers.SoftNcRunner","type":"Class"},{"name":"SoftNcUtil","href":"Hi.NcParsers.SoftNcUtil.html","topicHref":"Hi.NcParsers.SoftNcUtil.html","topicUid":"Hi.NcParsers.SoftNcUtil","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys","href":"Hi.NcParsers.Dependencys.html","topicHref":"Hi.NcParsers.Dependencys.html","topicUid":"Hi.NcParsers.Dependencys","type":"Namespace","items":[{"name":"AxisType","href":"Hi.NcParsers.Dependencys.AxisType.html","topicHref":"Hi.NcParsers.Dependencys.AxisType.html","topicUid":"Hi.NcParsers.Dependencys.AxisType","type":"Enum"},{"name":"CncBrandDependency","href":"Hi.NcParsers.Dependencys.CncBrandDependency.html","topicHref":"Hi.NcParsers.Dependencys.CncBrandDependency.html","topicUid":"Hi.NcParsers.Dependencys.CncBrandDependency","type":"Class"},{"name":"ControllerParameterTableBase","href":"Hi.NcParsers.Dependencys.ControllerParameterTableBase.html","topicHref":"Hi.NcParsers.Dependencys.ControllerParameterTableBase.html","topicUid":"Hi.NcParsers.Dependencys.ControllerParameterTableBase","type":"Class"},{"name":"HeidenhainDatumTable","href":"Hi.NcParsers.Dependencys.HeidenhainDatumTable.html","topicHref":"Hi.NcParsers.Dependencys.HeidenhainDatumTable.html","topicUid":"Hi.NcParsers.Dependencys.HeidenhainDatumTable","type":"Class"},{"name":"IBlockSkipConfig","href":"Hi.NcParsers.Dependencys.IBlockSkipConfig.html","topicHref":"Hi.NcParsers.Dependencys.IBlockSkipConfig.html","topicUid":"Hi.NcParsers.Dependencys.IBlockSkipConfig","type":"Interface"},{"name":"ICannedCycleConfig","href":"Hi.NcParsers.Dependencys.ICannedCycleConfig.html","topicHref":"Hi.NcParsers.Dependencys.ICannedCycleConfig.html","topicUid":"Hi.NcParsers.Dependencys.ICannedCycleConfig","type":"Interface"},{"name":"IHomeMcConfig","href":"Hi.NcParsers.Dependencys.IHomeMcConfig.html","topicHref":"Hi.NcParsers.Dependencys.IHomeMcConfig.html","topicUid":"Hi.NcParsers.Dependencys.IHomeMcConfig","type":"Interface"},{"name":"IIsoCoordinateConfig","href":"Hi.NcParsers.Dependencys.IIsoCoordinateConfig.html","topicHref":"Hi.NcParsers.Dependencys.IIsoCoordinateConfig.html","topicUid":"Hi.NcParsers.Dependencys.IIsoCoordinateConfig","type":"Interface"},{"name":"IMachineAxisConfig","href":"Hi.NcParsers.Dependencys.IMachineAxisConfig.html","topicHref":"Hi.NcParsers.Dependencys.IMachineAxisConfig.html","topicUid":"Hi.NcParsers.Dependencys.IMachineAxisConfig","type":"Interface"},{"name":"INcDependency","href":"Hi.NcParsers.Dependencys.INcDependency.html","topicHref":"Hi.NcParsers.Dependencys.INcDependency.html","topicUid":"Hi.NcParsers.Dependencys.INcDependency","type":"Interface"},{"name":"IPowerResettable","href":"Hi.NcParsers.Dependencys.IPowerResettable.html","topicHref":"Hi.NcParsers.Dependencys.IPowerResettable.html","topicUid":"Hi.NcParsers.Dependencys.IPowerResettable","type":"Interface"},{"name":"IRapidFeedrateConfig","href":"Hi.NcParsers.Dependencys.IRapidFeedrateConfig.html","topicHref":"Hi.NcParsers.Dependencys.IRapidFeedrateConfig.html","topicUid":"Hi.NcParsers.Dependencys.IRapidFeedrateConfig","type":"Interface"},{"name":"IStrokeLimitConfig","href":"Hi.NcParsers.Dependencys.IStrokeLimitConfig.html","topicHref":"Hi.NcParsers.Dependencys.IStrokeLimitConfig.html","topicUid":"Hi.NcParsers.Dependencys.IStrokeLimitConfig","type":"Interface"},{"name":"IToolOffsetConfig","href":"Hi.NcParsers.Dependencys.IToolOffsetConfig.html","topicHref":"Hi.NcParsers.Dependencys.IToolOffsetConfig.html","topicUid":"Hi.NcParsers.Dependencys.IToolOffsetConfig","type":"Interface"},{"name":"IToolingMcConfig","href":"Hi.NcParsers.Dependencys.IToolingMcConfig.html","topicHref":"Hi.NcParsers.Dependencys.IToolingMcConfig.html","topicUid":"Hi.NcParsers.Dependencys.IToolingMcConfig","type":"Interface"},{"name":"IsoCoordinateAddressMap","href":"Hi.NcParsers.Dependencys.IsoCoordinateAddressMap.html","topicHref":"Hi.NcParsers.Dependencys.IsoCoordinateAddressMap.html","topicUid":"Hi.NcParsers.Dependencys.IsoCoordinateAddressMap","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Fanuc","href":"Hi.NcParsers.Dependencys.Fanuc.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc","type":"Namespace","items":[{"name":"CutterCompensationType","href":"Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType","type":"Enum"},{"name":"FanucParameterTable","href":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable","type":"Class"},{"name":"FanucPositionVariableLookup","href":"Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup","type":"Class"},{"name":"FanucToolOffsetVariableLookup","href":"Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup","type":"Class"},{"name":"RetainedCommonVariableTable","href":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Generic","href":"Hi.NcParsers.Dependencys.Generic.html","topicHref":"Hi.NcParsers.Dependencys.Generic.html","topicUid":"Hi.NcParsers.Dependencys.Generic","type":"Namespace","items":[{"name":"FallbackConfig","href":"Hi.NcParsers.Dependencys.Generic.FallbackConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.FallbackConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.FallbackConfig","type":"Class"},{"name":"GenericBlockSkipConfig","href":"Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig","type":"Class"},{"name":"IsoCoordinateTable","href":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html","topicHref":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html","topicUid":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable","type":"Class"},{"name":"SubProgramFolderConfig","href":"Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig","type":"Class"},{"name":"ToolOffsetRow","href":"Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolOffsetRow","type":"Class"},{"name":"ToolOffsetTable","href":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable","type":"Class"},{"name":"ToolingMcConfig","href":"Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolingMcConfig","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Heidenhain","href":"Hi.NcParsers.Dependencys.Heidenhain.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainParameterTable","href":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Siemens","href":"Hi.NcParsers.Dependencys.Siemens.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.html","topicUid":"Hi.NcParsers.Dependencys.Siemens","type":"Namespace","items":[{"name":"ISiemensToolOffsetConfig","href":"Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig","type":"Interface"},{"name":"SiemensFrameTable","href":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable","type":"Class"},{"name":"SiemensMachineDataTable","href":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Syntec","href":"Hi.NcParsers.Dependencys.Syntec.html","topicHref":"Hi.NcParsers.Dependencys.Syntec.html","topicUid":"Hi.NcParsers.Dependencys.Syntec","type":"Namespace","items":[{"name":"SyntecParameterTable","href":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.SystemWired","href":"Hi.NcParsers.Dependencys.SystemWired.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired","type":"Namespace","items":[{"name":"FileIndexCounterDependency","href":"Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency","type":"Class"},{"name":"NcKinematicsDependency","href":"Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency","type":"Class"},{"name":"ProjectFolderDependency","href":"Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency","type":"Class"},{"name":"SegmenterDependency","href":"Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency","type":"Class"},{"name":"SyntaxPieceLayerDependency","href":"Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency","type":"Class"}]},{"name":"Hi.NcParsers.EvaluationSyntaxs","href":"Hi.NcParsers.EvaluationSyntaxs.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs","type":"Namespace","items":[{"name":"FanucSystemControlVariableSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax","type":"Class"},{"name":"RetainedCommonVariableReadingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax","type":"Class"},{"name":"SubProgramCallSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax","type":"Class"},{"name":"SubProgramReturnSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax","type":"Class"},{"name":"VariableEvaluatorSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax","type":"Class"},{"name":"VolatileVariableReadingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax","type":"Class"}]},{"name":"Hi.NcParsers.EvaluationSyntaxs.Evaluation","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation","type":"Namespace","items":[{"name":"EvalResult","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.EvalResult.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.EvalResult.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.EvalResult","type":"Struct"},{"name":"IRuntimeVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IRuntimeVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IRuntimeVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IRuntimeVariableLookup","type":"Interface"},{"name":"IVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IVariableLookup","type":"Interface"},{"name":"LocalVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup","type":"Class"},{"name":"NcBinaryExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr","type":"Class"},{"name":"NcBinaryOp","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp","type":"Enum"},{"name":"NcExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpr","type":"Class"},{"name":"NcExpressionEvaluator","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionEvaluator.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionEvaluator.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionEvaluator","type":"Class"},{"name":"NcExpressionParser","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionParser.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionParser.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionParser","type":"Class"},{"name":"NcFunctionExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcFunctionExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcFunctionExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcFunctionExpr","type":"Class"},{"name":"NcIndirectVariableExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcIndirectVariableExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcIndirectVariableExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcIndirectVariableExpr","type":"Class"},{"name":"NcLiteralExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcLiteralExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcLiteralExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcLiteralExpr","type":"Class"},{"name":"NcUnaryExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryExpr","type":"Class"},{"name":"NcUnaryOp","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryOp.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryOp.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryOp","type":"Enum"},{"name":"NcVariableExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcVariableExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcVariableExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcVariableExpr","type":"Class"},{"name":"VolatileVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup","type":"Class"}]},{"name":"Hi.NcParsers.Initializers","href":"Hi.NcParsers.Initializers.html","topicHref":"Hi.NcParsers.Initializers.html","topicUid":"Hi.NcParsers.Initializers","type":"Namespace","items":[{"name":"HomeMcInitializer","href":"Hi.NcParsers.Initializers.HomeMcInitializer.html","topicHref":"Hi.NcParsers.Initializers.HomeMcInitializer.html","topicUid":"Hi.NcParsers.Initializers.HomeMcInitializer","type":"Class"},{"name":"INcInitializer","href":"Hi.NcParsers.Initializers.INcInitializer.html","topicHref":"Hi.NcParsers.Initializers.INcInitializer.html","topicUid":"Hi.NcParsers.Initializers.INcInitializer","type":"Interface"},{"name":"StaticInitializer","href":"Hi.NcParsers.Initializers.StaticInitializer.html","topicHref":"Hi.NcParsers.Initializers.StaticInitializer.html","topicUid":"Hi.NcParsers.Initializers.StaticInitializer","type":"Class"}]},{"name":"Hi.NcParsers.InspectionSyntaxs","href":"Hi.NcParsers.InspectionSyntaxs.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.html","topicUid":"Hi.NcParsers.InspectionSyntaxs","type":"Namespace","items":[{"name":"CleanupSyntax","href":"Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.CleanupSyntax","type":"Class"},{"name":"ProgramXyzBackfillSyntax","href":"Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax","type":"Class"},{"name":"SnapshotSyntax","href":"Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax","type":"Class"},{"name":"UnconsumedCheckSyntax","href":"Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax","type":"Class"}]},{"name":"Hi.NcParsers.Keywords","href":"Hi.NcParsers.Keywords.html","topicHref":"Hi.NcParsers.Keywords.html","topicUid":"Hi.NcParsers.Keywords","type":"Namespace","items":[{"name":"BlockSkip","href":"Hi.NcParsers.Keywords.BlockSkip.html","topicHref":"Hi.NcParsers.Keywords.BlockSkip.html","topicUid":"Hi.NcParsers.Keywords.BlockSkip","type":"Class"},{"name":"CannedCycle","href":"Hi.NcParsers.Keywords.CannedCycle.html","topicHref":"Hi.NcParsers.Keywords.CannedCycle.html","topicUid":"Hi.NcParsers.Keywords.CannedCycle","type":"Class"},{"name":"Comment","href":"Hi.NcParsers.Keywords.Comment.html","topicHref":"Hi.NcParsers.Keywords.Comment.html","topicUid":"Hi.NcParsers.Keywords.Comment","type":"Class"},{"name":"CompoundMotion","href":"Hi.NcParsers.Keywords.CompoundMotion.html","topicHref":"Hi.NcParsers.Keywords.CompoundMotion.html","topicUid":"Hi.NcParsers.Keywords.CompoundMotion","type":"Class"},{"name":"Coolant","href":"Hi.NcParsers.Keywords.Coolant.html","topicHref":"Hi.NcParsers.Keywords.Coolant.html","topicUid":"Hi.NcParsers.Keywords.Coolant","type":"Class"},{"name":"CoordinateOffset","href":"Hi.NcParsers.Keywords.CoordinateOffset.html","topicHref":"Hi.NcParsers.Keywords.CoordinateOffset.html","topicUid":"Hi.NcParsers.Keywords.CoordinateOffset","type":"Class"},{"name":"CsScript","href":"Hi.NcParsers.Keywords.CsScript.html","topicHref":"Hi.NcParsers.Keywords.CsScript.html","topicUid":"Hi.NcParsers.Keywords.CsScript","type":"Class"},{"name":"Dwell","href":"Hi.NcParsers.Keywords.Dwell.html","topicHref":"Hi.NcParsers.Keywords.Dwell.html","topicUid":"Hi.NcParsers.Keywords.Dwell","type":"Class"},{"name":"FanucPathSmoothing","href":"Hi.NcParsers.Keywords.FanucPathSmoothing.html","topicHref":"Hi.NcParsers.Keywords.FanucPathSmoothing.html","topicUid":"Hi.NcParsers.Keywords.FanucPathSmoothing","type":"Class"},{"name":"FanucProgramNumber","href":"Hi.NcParsers.Keywords.FanucProgramNumber.html","topicHref":"Hi.NcParsers.Keywords.FanucProgramNumber.html","topicUid":"Hi.NcParsers.Keywords.FanucProgramNumber","type":"Class"},{"name":"Feedrate","href":"Hi.NcParsers.Keywords.Feedrate.html","topicHref":"Hi.NcParsers.Keywords.Feedrate.html","topicUid":"Hi.NcParsers.Keywords.Feedrate","type":"Class"},{"name":"IArcMotionDef","href":"Hi.NcParsers.Keywords.IArcMotionDef.html","topicHref":"Hi.NcParsers.Keywords.IArcMotionDef.html","topicUid":"Hi.NcParsers.Keywords.IArcMotionDef","type":"Interface"},{"name":"ICannedCycleDef","href":"Hi.NcParsers.Keywords.ICannedCycleDef.html","topicHref":"Hi.NcParsers.Keywords.ICannedCycleDef.html","topicUid":"Hi.NcParsers.Keywords.ICannedCycleDef","type":"Interface"},{"name":"ICompoundMotionDef","href":"Hi.NcParsers.Keywords.ICompoundMotionDef.html","topicHref":"Hi.NcParsers.Keywords.ICompoundMotionDef.html","topicUid":"Hi.NcParsers.Keywords.ICompoundMotionDef","type":"Interface"},{"name":"ICoolantDef","href":"Hi.NcParsers.Keywords.ICoolantDef.html","topicHref":"Hi.NcParsers.Keywords.ICoolantDef.html","topicUid":"Hi.NcParsers.Keywords.ICoolantDef","type":"Interface"},{"name":"IDwellDef","href":"Hi.NcParsers.Keywords.IDwellDef.html","topicHref":"Hi.NcParsers.Keywords.IDwellDef.html","topicUid":"Hi.NcParsers.Keywords.IDwellDef","type":"Interface"},{"name":"IFanucPathSmoothingDef","href":"Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html","topicHref":"Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html","topicUid":"Hi.NcParsers.Keywords.IFanucPathSmoothingDef","type":"Interface"},{"name":"IFeedrateDef","href":"Hi.NcParsers.Keywords.IFeedrateDef.html","topicHref":"Hi.NcParsers.Keywords.IFeedrateDef.html","topicUid":"Hi.NcParsers.Keywords.IFeedrateDef","type":"Interface"},{"name":"IFlagsDef","href":"Hi.NcParsers.Keywords.IFlagsDef.html","topicHref":"Hi.NcParsers.Keywords.IFlagsDef.html","topicUid":"Hi.NcParsers.Keywords.IFlagsDef","type":"Interface"},{"name":"IMachineCoordinateStateDef","href":"Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html","topicHref":"Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html","topicUid":"Hi.NcParsers.Keywords.IMachineCoordinateStateDef","type":"Interface"},{"name":"IMotionEventDef","href":"Hi.NcParsers.Keywords.IMotionEventDef.html","topicHref":"Hi.NcParsers.Keywords.IMotionEventDef.html","topicUid":"Hi.NcParsers.Keywords.IMotionEventDef","type":"Interface"},{"name":"IMotionStateDef","href":"Hi.NcParsers.Keywords.IMotionStateDef.html","topicHref":"Hi.NcParsers.Keywords.IMotionStateDef.html","topicUid":"Hi.NcParsers.Keywords.IMotionStateDef","type":"Interface"},{"name":"IParsingDef","href":"Hi.NcParsers.Keywords.IParsingDef.html","topicHref":"Hi.NcParsers.Keywords.IParsingDef.html","topicUid":"Hi.NcParsers.Keywords.IParsingDef","type":"Interface"},{"name":"IPathSmoothingDef","href":"Hi.NcParsers.Keywords.IPathSmoothingDef.html","topicHref":"Hi.NcParsers.Keywords.IPathSmoothingDef.html","topicUid":"Hi.NcParsers.Keywords.IPathSmoothingDef","type":"Interface"},{"name":"IPlaneSelectDef","href":"Hi.NcParsers.Keywords.IPlaneSelectDef.html","topicHref":"Hi.NcParsers.Keywords.IPlaneSelectDef.html","topicUid":"Hi.NcParsers.Keywords.IPlaneSelectDef","type":"Interface"},{"name":"IPositioningDef","href":"Hi.NcParsers.Keywords.IPositioningDef.html","topicHref":"Hi.NcParsers.Keywords.IPositioningDef.html","topicUid":"Hi.NcParsers.Keywords.IPositioningDef","type":"Interface"},{"name":"IProgramEndDef","href":"Hi.NcParsers.Keywords.IProgramEndDef.html","topicHref":"Hi.NcParsers.Keywords.IProgramEndDef.html","topicUid":"Hi.NcParsers.Keywords.IProgramEndDef","type":"Interface"},{"name":"IProgramStopDef","href":"Hi.NcParsers.Keywords.IProgramStopDef.html","topicHref":"Hi.NcParsers.Keywords.IProgramStopDef.html","topicUid":"Hi.NcParsers.Keywords.IProgramStopDef","type":"Interface"},{"name":"IProgramXyzDef","href":"Hi.NcParsers.Keywords.IProgramXyzDef.html","topicHref":"Hi.NcParsers.Keywords.IProgramXyzDef.html","topicUid":"Hi.NcParsers.Keywords.IProgramXyzDef","type":"Interface"},{"name":"IRadiusCompensationDef","href":"Hi.NcParsers.Keywords.IRadiusCompensationDef.html","topicHref":"Hi.NcParsers.Keywords.IRadiusCompensationDef.html","topicUid":"Hi.NcParsers.Keywords.IRadiusCompensationDef","type":"Interface"},{"name":"ISpindleControlDef","href":"Hi.NcParsers.Keywords.ISpindleControlDef.html","topicHref":"Hi.NcParsers.Keywords.ISpindleControlDef.html","topicUid":"Hi.NcParsers.Keywords.ISpindleControlDef","type":"Interface"},{"name":"ISpindleOrientationDef","href":"Hi.NcParsers.Keywords.ISpindleOrientationDef.html","topicHref":"Hi.NcParsers.Keywords.ISpindleOrientationDef.html","topicUid":"Hi.NcParsers.Keywords.ISpindleOrientationDef","type":"Interface"},{"name":"ISpindleSpeedDef","href":"Hi.NcParsers.Keywords.ISpindleSpeedDef.html","topicHref":"Hi.NcParsers.Keywords.ISpindleSpeedDef.html","topicUid":"Hi.NcParsers.Keywords.ISpindleSpeedDef","type":"Interface"},{"name":"ITiltTransformDef","href":"Hi.NcParsers.Keywords.ITiltTransformDef.html","topicHref":"Hi.NcParsers.Keywords.ITiltTransformDef.html","topicUid":"Hi.NcParsers.Keywords.ITiltTransformDef","type":"Interface"},{"name":"IToolHeightCompensationDef","href":"Hi.NcParsers.Keywords.IToolHeightCompensationDef.html","topicHref":"Hi.NcParsers.Keywords.IToolHeightCompensationDef.html","topicUid":"Hi.NcParsers.Keywords.IToolHeightCompensationDef","type":"Interface"},{"name":"ITransformationDef","href":"Hi.NcParsers.Keywords.ITransformationDef.html","topicHref":"Hi.NcParsers.Keywords.ITransformationDef.html","topicUid":"Hi.NcParsers.Keywords.ITransformationDef","type":"Interface"},{"name":"IUnitDef","href":"Hi.NcParsers.Keywords.IUnitDef.html","topicHref":"Hi.NcParsers.Keywords.IUnitDef.html","topicUid":"Hi.NcParsers.Keywords.IUnitDef","type":"Interface"},{"name":"IUnparsedTextDef","href":"Hi.NcParsers.Keywords.IUnparsedTextDef.html","topicHref":"Hi.NcParsers.Keywords.IUnparsedTextDef.html","topicUid":"Hi.NcParsers.Keywords.IUnparsedTextDef","type":"Interface"},{"name":"IndexNote","href":"Hi.NcParsers.Keywords.IndexNote.html","topicHref":"Hi.NcParsers.Keywords.IndexNote.html","topicUid":"Hi.NcParsers.Keywords.IndexNote","type":"Class"},{"name":"IsoLocalCoordinateOffset","href":"Hi.NcParsers.Keywords.IsoLocalCoordinateOffset.html","topicHref":"Hi.NcParsers.Keywords.IsoLocalCoordinateOffset.html","topicUid":"Hi.NcParsers.Keywords.IsoLocalCoordinateOffset","type":"Class"},{"name":"MachineCoordinateState","href":"Hi.NcParsers.Keywords.MachineCoordinateState.html","topicHref":"Hi.NcParsers.Keywords.MachineCoordinateState.html","topicUid":"Hi.NcParsers.Keywords.MachineCoordinateState","type":"Class"},{"name":"MotionEvent","href":"Hi.NcParsers.Keywords.MotionEvent.html","topicHref":"Hi.NcParsers.Keywords.MotionEvent.html","topicUid":"Hi.NcParsers.Keywords.MotionEvent","type":"Class"},{"name":"MotionState","href":"Hi.NcParsers.Keywords.MotionState.html","topicHref":"Hi.NcParsers.Keywords.MotionState.html","topicUid":"Hi.NcParsers.Keywords.MotionState","type":"Class"},{"name":"PathSmoothing","href":"Hi.NcParsers.Keywords.PathSmoothing.html","topicHref":"Hi.NcParsers.Keywords.PathSmoothing.html","topicUid":"Hi.NcParsers.Keywords.PathSmoothing","type":"Class"},{"name":"PlaneSelect","href":"Hi.NcParsers.Keywords.PlaneSelect.html","topicHref":"Hi.NcParsers.Keywords.PlaneSelect.html","topicUid":"Hi.NcParsers.Keywords.PlaneSelect","type":"Class"},{"name":"Positioning","href":"Hi.NcParsers.Keywords.Positioning.html","topicHref":"Hi.NcParsers.Keywords.Positioning.html","topicUid":"Hi.NcParsers.Keywords.Positioning","type":"Class"},{"name":"ProgramEnd","href":"Hi.NcParsers.Keywords.ProgramEnd.html","topicHref":"Hi.NcParsers.Keywords.ProgramEnd.html","topicUid":"Hi.NcParsers.Keywords.ProgramEnd","type":"Class"},{"name":"ProgramStop","href":"Hi.NcParsers.Keywords.ProgramStop.html","topicHref":"Hi.NcParsers.Keywords.ProgramStop.html","topicUid":"Hi.NcParsers.Keywords.ProgramStop","type":"Class"},{"name":"RadiusCompensation","href":"Hi.NcParsers.Keywords.RadiusCompensation.html","topicHref":"Hi.NcParsers.Keywords.RadiusCompensation.html","topicUid":"Hi.NcParsers.Keywords.RadiusCompensation","type":"Class"},{"name":"SpindleControl","href":"Hi.NcParsers.Keywords.SpindleControl.html","topicHref":"Hi.NcParsers.Keywords.SpindleControl.html","topicUid":"Hi.NcParsers.Keywords.SpindleControl","type":"Class"},{"name":"SpindleOrientation","href":"Hi.NcParsers.Keywords.SpindleOrientation.html","topicHref":"Hi.NcParsers.Keywords.SpindleOrientation.html","topicUid":"Hi.NcParsers.Keywords.SpindleOrientation","type":"Class"},{"name":"SpindleSpeed","href":"Hi.NcParsers.Keywords.SpindleSpeed.html","topicHref":"Hi.NcParsers.Keywords.SpindleSpeed.html","topicUid":"Hi.NcParsers.Keywords.SpindleSpeed","type":"Class"},{"name":"SubProgramCall","href":"Hi.NcParsers.Keywords.SubProgramCall.html","topicHref":"Hi.NcParsers.Keywords.SubProgramCall.html","topicUid":"Hi.NcParsers.Keywords.SubProgramCall","type":"Class"},{"name":"SubProgramReturn","href":"Hi.NcParsers.Keywords.SubProgramReturn.html","topicHref":"Hi.NcParsers.Keywords.SubProgramReturn.html","topicUid":"Hi.NcParsers.Keywords.SubProgramReturn","type":"Class"},{"name":"TapeBoundary","href":"Hi.NcParsers.Keywords.TapeBoundary.html","topicHref":"Hi.NcParsers.Keywords.TapeBoundary.html","topicUid":"Hi.NcParsers.Keywords.TapeBoundary","type":"Class"},{"name":"TiltTransform","href":"Hi.NcParsers.Keywords.TiltTransform.html","topicHref":"Hi.NcParsers.Keywords.TiltTransform.html","topicUid":"Hi.NcParsers.Keywords.TiltTransform","type":"Class"},{"name":"ToolHeightCompensation","href":"Hi.NcParsers.Keywords.ToolHeightCompensation.html","topicHref":"Hi.NcParsers.Keywords.ToolHeightCompensation.html","topicUid":"Hi.NcParsers.Keywords.ToolHeightCompensation","type":"Class"},{"name":"Unit","href":"Hi.NcParsers.Keywords.Unit.html","topicHref":"Hi.NcParsers.Keywords.Unit.html","topicUid":"Hi.NcParsers.Keywords.Unit","type":"Class"},{"name":"Vars","href":"Hi.NcParsers.Keywords.Vars.html","topicHref":"Hi.NcParsers.Keywords.Vars.html","topicUid":"Hi.NcParsers.Keywords.Vars","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Fanuc","href":"Hi.NcParsers.Keywords.Fanuc.html","topicHref":"Hi.NcParsers.Keywords.Fanuc.html","topicUid":"Hi.NcParsers.Keywords.Fanuc","type":"Namespace","items":[{"name":"FanucKeywords","href":"Hi.NcParsers.Keywords.Fanuc.FanucKeywords.html","topicHref":"Hi.NcParsers.Keywords.Fanuc.FanucKeywords.html","topicUid":"Hi.NcParsers.Keywords.Fanuc.FanucKeywords","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Generic","href":"Hi.NcParsers.Keywords.Generic.html","topicHref":"Hi.NcParsers.Keywords.Generic.html","topicUid":"Hi.NcParsers.Keywords.Generic","type":"Namespace","items":[{"name":"IsoKeywords","href":"Hi.NcParsers.Keywords.Generic.IsoKeywords.html","topicHref":"Hi.NcParsers.Keywords.Generic.IsoKeywords.html","topicUid":"Hi.NcParsers.Keywords.Generic.IsoKeywords","type":"Class"},{"name":"MotionForm","href":"Hi.NcParsers.Keywords.Generic.MotionForm.html","topicHref":"Hi.NcParsers.Keywords.Generic.MotionForm.html","topicUid":"Hi.NcParsers.Keywords.Generic.MotionForm","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Heidenhain","href":"Hi.NcParsers.Keywords.Heidenhain.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain","type":"Namespace","items":[{"name":"ICyclDef","href":"Hi.NcParsers.Keywords.Heidenhain.ICyclDef.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.ICyclDef.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain.ICyclDef","type":"Interface"}]},{"name":"Hi.NcParsers.Keywords.Siemens","href":"Hi.NcParsers.Keywords.Siemens.html","topicHref":"Hi.NcParsers.Keywords.Siemens.html","topicUid":"Hi.NcParsers.Keywords.Siemens","type":"Namespace","items":[{"name":"SiemensKeywords","href":"Hi.NcParsers.Keywords.Siemens.SiemensKeywords.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensKeywords.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensKeywords","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs","href":"Hi.NcParsers.LogicSyntaxs.html","topicHref":"Hi.NcParsers.LogicSyntaxs.html","topicUid":"Hi.NcParsers.LogicSyntaxs","type":"Namespace","items":[{"name":"BackBoringSyntax","href":"Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.BackBoringSyntax","type":"Class"},{"name":"BoringCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax","type":"Class"},{"name":"CannedCycleResolveSyntax","href":"Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax","type":"Class"},{"name":"CircularMotionSyntax","href":"Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax","type":"Class"},{"name":"CoolantSyntax","href":"Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CoolantSyntax","type":"Class"},{"name":"CoordinateOffsetUtil","href":"Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil","type":"Class"},{"name":"DrillingCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax","type":"Class"},{"name":"FanucPathSmoothingSyntax","href":"Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax","type":"Class"},{"name":"FeedrateSyntax","href":"Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.FeedrateSyntax","type":"Class"},{"name":"FineBoringSyntax","href":"Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.FineBoringSyntax","type":"Class"},{"name":"G43p4RtcpSyntax","href":"Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax","type":"Class"},{"name":"G53p1RotaryPositionSyntax","href":"Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax","type":"Class"},{"name":"HighSpeedPeckCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax","type":"Class"},{"name":"IncrementalResolveSyntax","href":"Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax","type":"Class"},{"name":"IsoCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax","type":"Class"},{"name":"IsoG68RotationSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax","type":"Class"},{"name":"IsoG68p2TiltSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax","type":"Class"},{"name":"IsoLocalCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax","type":"Class"},{"name":"LinearMotionSyntax","href":"Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax","type":"Class"},{"name":"MachineCoordSelectSyntax","href":"Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax","type":"Class"},{"name":"McAbcCyclicPathSyntax","href":"Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax","type":"Class"},{"name":"McAbcSyntax","href":"Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McAbcSyntax","type":"Class"},{"name":"McAbcXyzFallbackSyntax","href":"Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax","type":"Class"},{"name":"McXyzSyntax","href":"Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McXyzSyntax","type":"Class"},{"name":"PeckDrillingCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax","type":"Class"},{"name":"PivotTransformationSyntax","href":"Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax","type":"Class"},{"name":"PlaneSelectSyntax","href":"Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax","type":"Class"},{"name":"PositioningSyntax","href":"Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PositioningSyntax","type":"Class"},{"name":"ProgramEndCleanSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax","type":"Class"},{"name":"ProgramEndSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax","type":"Class"},{"name":"ProgramStopSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax","type":"Class"},{"name":"ProgramXyzSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax","type":"Class"},{"name":"ProgramXyzUtil","href":"Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil","type":"Class"},{"name":"ReferenceReturnSyntax","href":"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax","type":"Class"},{"name":"RotaryAxisUtil","href":"Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil","type":"Class"},{"name":"SpindleSpeedSyntax","href":"Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax","type":"Class"},{"name":"TappingCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax","type":"Class"},{"name":"TiltTransformUtil","href":"Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.TiltTransformUtil","type":"Class"},{"name":"ToolChangeSyntax","href":"Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax","type":"Class"},{"name":"ToolHeightOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax","type":"Class"},{"name":"UnitModeSyntax","href":"Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.UnitModeSyntax","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs.Heidenhain","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs.Siemens","href":"Hi.NcParsers.LogicSyntaxs.Siemens.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens","type":"Namespace","items":[{"name":"SiemensCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs","href":"Hi.NcParsers.ParsingSyntaxs.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.html","topicUid":"Hi.NcParsers.ParsingSyntaxs","type":"Namespace","items":[{"name":"BlockSkipSyntax","href":"Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax","type":"Class"},{"name":"CsScriptSyntax","href":"Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax","type":"Class"},{"name":"FanucProgramNumberSyntax","href":"Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax","type":"Class"},{"name":"FlagSyntax","href":"Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.FlagSyntax","type":"Class"},{"name":"FloatTagValueSyntax","href":"Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax","type":"Class"},{"name":"HeadIndexSyntax","href":"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax","type":"Class"},{"name":"IntegerTagValueSyntax","href":"Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax","type":"Class"},{"name":"NamedVarAssignmentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax","type":"Class"},{"name":"NumberedFlagSyntax","href":"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax","type":"Class"},{"name":"ParameterizedFlagSyntax","href":"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax","type":"Class"},{"name":"ShrinkIfNoDecimalPointSyntax","href":"Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax","type":"Class"},{"name":"TagAssignmentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax","type":"Class"},{"name":"TagValueSyntax","href":"Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.TagValueSyntax","type":"Class"},{"name":"TapeBoundarySyntax","href":"Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs","href":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs","type":"Namespace","items":[{"name":"QuoteCommentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax","type":"Class"},{"name":"TailCommentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.Heidenhain","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainBlkFormSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax","type":"Class"},{"name":"HeidenhainCallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax","type":"Class"},{"name":"HeidenhainCyclDefSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax","type":"Class"},{"name":"HeidenhainFnAssignmentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax","type":"Class"},{"name":"HeidenhainLSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax","type":"Class"},{"name":"HeidenhainLblSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax","type":"Class"},{"name":"HeidenhainPlaneSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax","type":"Class"},{"name":"HeidenhainProgramSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax","type":"Class"},{"name":"HeidenhainToolCallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs","type":"Namespace","items":[{"name":"HeidenhainDatumSettingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax","type":"Class"},{"name":"HeidenhainDatumShiftSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax","type":"Class"}]},{"name":"Hi.NcParsers.PostLogicSyntaxs","href":"Hi.NcParsers.PostLogicSyntaxs.html","topicHref":"Hi.NcParsers.PostLogicSyntaxs.html","topicUid":"Hi.NcParsers.PostLogicSyntaxs","type":"Namespace","items":[{"name":"ModalCarrySyntax","href":"Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html","topicHref":"Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html","topicUid":"Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax","type":"Class"},{"name":"RadiusCompensationSyntax","href":"Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html","topicHref":"Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html","topicUid":"Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax","type":"Class"}]},{"name":"Hi.NcParsers.Segmenters","href":"Hi.NcParsers.Segmenters.html","topicHref":"Hi.NcParsers.Segmenters.html","topicUid":"Hi.NcParsers.Segmenters","type":"Namespace","items":[{"name":"HeidenhainSegmenter","href":"Hi.NcParsers.Segmenters.HeidenhainSegmenter.html","topicHref":"Hi.NcParsers.Segmenters.HeidenhainSegmenter.html","topicUid":"Hi.NcParsers.Segmenters.HeidenhainSegmenter","type":"Class"},{"name":"ISegmenter","href":"Hi.NcParsers.Segmenters.ISegmenter.html","topicHref":"Hi.NcParsers.Segmenters.ISegmenter.html","topicUid":"Hi.NcParsers.Segmenters.ISegmenter","type":"Interface"},{"name":"InlineDelimiterSegmenter","href":"Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html","topicHref":"Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html","topicUid":"Hi.NcParsers.Segmenters.InlineDelimiterSegmenter","type":"Class"},{"name":"SingleLineSegmenter","href":"Hi.NcParsers.Segmenters.SingleLineSegmenter.html","topicHref":"Hi.NcParsers.Segmenters.SingleLineSegmenter.html","topicUid":"Hi.NcParsers.Segmenters.SingleLineSegmenter","type":"Class"}]},{"name":"Hi.NcParsers.Semantics","href":"Hi.NcParsers.Semantics.html","topicHref":"Hi.NcParsers.Semantics.html","topicUid":"Hi.NcParsers.Semantics","type":"Namespace","items":[{"name":"ClLinearMotionSemantic","href":"Hi.NcParsers.Semantics.ClLinearMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.ClLinearMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.ClLinearMotionSemantic","type":"Class"},{"name":"CompoundMotionSemantic","href":"Hi.NcParsers.Semantics.CompoundMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.CompoundMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.CompoundMotionSemantic","type":"Class"},{"name":"CoolantSemantic","href":"Hi.NcParsers.Semantics.CoolantSemantic.html","topicHref":"Hi.NcParsers.Semantics.CoolantSemantic.html","topicUid":"Hi.NcParsers.Semantics.CoolantSemantic","type":"Class"},{"name":"CsScriptBeginSemantic","href":"Hi.NcParsers.Semantics.CsScriptBeginSemantic.html","topicHref":"Hi.NcParsers.Semantics.CsScriptBeginSemantic.html","topicUid":"Hi.NcParsers.Semantics.CsScriptBeginSemantic","type":"Class"},{"name":"CsScriptEndSemantic","href":"Hi.NcParsers.Semantics.CsScriptEndSemantic.html","topicHref":"Hi.NcParsers.Semantics.CsScriptEndSemantic.html","topicUid":"Hi.NcParsers.Semantics.CsScriptEndSemantic","type":"Class"},{"name":"CsScriptSemantic","href":"Hi.NcParsers.Semantics.CsScriptSemantic.html","topicHref":"Hi.NcParsers.Semantics.CsScriptSemantic.html","topicUid":"Hi.NcParsers.Semantics.CsScriptSemantic","type":"Class"},{"name":"INcSemantic","href":"Hi.NcParsers.Semantics.INcSemantic.html","topicHref":"Hi.NcParsers.Semantics.INcSemantic.html","topicUid":"Hi.NcParsers.Semantics.INcSemantic","type":"Interface"},{"name":"MachineCoordinateStepSemantic","href":"Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html","topicHref":"Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html","topicUid":"Hi.NcParsers.Semantics.MachineCoordinateStepSemantic","type":"Class"},{"name":"McArcMotionSemantic","href":"Hi.NcParsers.Semantics.McArcMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.McArcMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.McArcMotionSemantic","type":"Class"},{"name":"McLinearMotionSemantic","href":"Hi.NcParsers.Semantics.McLinearMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.McLinearMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.McLinearMotionSemantic","type":"Class"},{"name":"SpindleSpeedSemantic","href":"Hi.NcParsers.Semantics.SpindleSpeedSemantic.html","topicHref":"Hi.NcParsers.Semantics.SpindleSpeedSemantic.html","topicUid":"Hi.NcParsers.Semantics.SpindleSpeedSemantic","type":"Class"},{"name":"StrokeLimitCheckSemantic","href":"Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html","topicHref":"Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html","topicUid":"Hi.NcParsers.Semantics.StrokeLimitCheckSemantic","type":"Class"},{"name":"ToolChangeSemantic","href":"Hi.NcParsers.Semantics.ToolChangeSemantic.html","topicHref":"Hi.NcParsers.Semantics.ToolChangeSemantic.html","topicUid":"Hi.NcParsers.Semantics.ToolChangeSemantic","type":"Class"}]},{"name":"Hi.NcParsers.Syntaxs","href":"Hi.NcParsers.Syntaxs.html","topicHref":"Hi.NcParsers.Syntaxs.html","topicUid":"Hi.NcParsers.Syntaxs","type":"Namespace","items":[{"name":"BundleSyntax","href":"Hi.NcParsers.Syntaxs.BundleSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.BundleSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.BundleSyntax","type":"Class"},{"name":"FanucSyntaxUtil","href":"Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.FanucSyntaxUtil","type":"Class"},{"name":"GenericSyntaxKit","href":"Hi.NcParsers.Syntaxs.GenericSyntaxKit.html","topicHref":"Hi.NcParsers.Syntaxs.GenericSyntaxKit.html","topicUid":"Hi.NcParsers.Syntaxs.GenericSyntaxKit","type":"Class"},{"name":"HeidenhainSyntaxUtil","href":"Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil","type":"Class"},{"name":"IExpandingNcSyntax","href":"Hi.NcParsers.Syntaxs.IExpandingNcSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.IExpandingNcSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.IExpandingNcSyntax","type":"Interface"},{"name":"INcSyntax","href":"Hi.NcParsers.Syntaxs.INcSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.INcSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.INcSyntax","type":"Interface"},{"name":"ISituNcSyntax","href":"Hi.NcParsers.Syntaxs.ISituNcSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.ISituNcSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.ISituNcSyntax","type":"Interface"},{"name":"MazakSyntaxUtil","href":"Hi.NcParsers.Syntaxs.MazakSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.MazakSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.MazakSyntaxUtil","type":"Class"},{"name":"NcSyntaxUtil","href":"Hi.NcParsers.Syntaxs.NcSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.NcSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.NcSyntaxUtil","type":"Class"},{"name":"SiemensSyntaxUtil","href":"Hi.NcParsers.Syntaxs.SiemensSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.SiemensSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.SiemensSyntaxUtil","type":"Class"},{"name":"SyntaxPiece","href":"Hi.NcParsers.Syntaxs.SyntaxPiece.html","topicHref":"Hi.NcParsers.Syntaxs.SyntaxPiece.html","topicUid":"Hi.NcParsers.Syntaxs.SyntaxPiece","type":"Class"},{"name":"SyntaxStageKeys","href":"Hi.NcParsers.Syntaxs.SyntaxStageKeys.html","topicHref":"Hi.NcParsers.Syntaxs.SyntaxStageKeys.html","topicUid":"Hi.NcParsers.Syntaxs.SyntaxStageKeys","type":"Class"},{"name":"SyntecSyntaxUtil","href":"Hi.NcParsers.Syntaxs.SyntecSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.SyntecSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.SyntecSyntaxUtil","type":"Class"},{"name":"TagValue","href":"Hi.NcParsers.Syntaxs.TagValue.html","topicHref":"Hi.NcParsers.Syntaxs.TagValue.html","topicUid":"Hi.NcParsers.Syntaxs.TagValue","type":"Class"},{"name":"TransformationUtil","href":"Hi.NcParsers.Syntaxs.TransformationUtil.html","topicHref":"Hi.NcParsers.Syntaxs.TransformationUtil.html","topicUid":"Hi.NcParsers.Syntaxs.TransformationUtil","type":"Class"}]},{"name":"Hi.Numerical","href":"Hi.Numerical.html","topicHref":"Hi.Numerical.html","topicUid":"Hi.Numerical","type":"Namespace","items":[{"name":"CncBrand","href":"Hi.Numerical.CncBrand.html","topicHref":"Hi.Numerical.CncBrand.html","topicUid":"Hi.Numerical.CncBrand","type":"Enum"},{"name":"CommentMark","href":"Hi.Numerical.CommentMark.html","topicHref":"Hi.Numerical.CommentMark.html","topicUid":"Hi.Numerical.CommentMark","type":"Enum"},{"name":"CoolantMode","href":"Hi.Numerical.CoolantMode.html","topicHref":"Hi.Numerical.CoolantMode.html","topicUid":"Hi.Numerical.CoolantMode","type":"Enum"},{"name":"CoordinateInterpolationMode","href":"Hi.Numerical.CoordinateInterpolationMode.html","topicHref":"Hi.Numerical.CoordinateInterpolationMode.html","topicUid":"Hi.Numerical.CoordinateInterpolationMode","type":"Enum"},{"name":"FlexDictionaryUtil","href":"Hi.Numerical.FlexDictionaryUtil.html","topicHref":"Hi.Numerical.FlexDictionaryUtil.html","topicUid":"Hi.Numerical.FlexDictionaryUtil","type":"Class"},{"name":"HardNcComment","href":"Hi.Numerical.HardNcComment.html","topicHref":"Hi.Numerical.HardNcComment.html","topicUid":"Hi.Numerical.HardNcComment","type":"Class"},{"name":"HardNcEnv","href":"Hi.Numerical.HardNcEnv.html","topicHref":"Hi.Numerical.HardNcEnv.html","topicUid":"Hi.Numerical.HardNcEnv","type":"Class"},{"name":"HardNcLine","href":"Hi.Numerical.HardNcLine.html","topicHref":"Hi.Numerical.HardNcLine.html","topicUid":"Hi.Numerical.HardNcLine","type":"Class"},{"name":"HardNcUtil","href":"Hi.Numerical.HardNcUtil.html","topicHref":"Hi.Numerical.HardNcUtil.html","topicUid":"Hi.Numerical.HardNcUtil","type":"Class"},{"name":"HeidenhainCoordinateEntryDisplayee","href":"Hi.Numerical.HeidenhainCoordinateEntryDisplayee.html","topicHref":"Hi.Numerical.HeidenhainCoordinateEntryDisplayee.html","topicUid":"Hi.Numerical.HeidenhainCoordinateEntryDisplayee","type":"Class"},{"name":"IControlRunner","href":"Hi.Numerical.IControlRunner.html","topicHref":"Hi.Numerical.IControlRunner.html","topicUid":"Hi.Numerical.IControlRunner","type":"Interface"},{"name":"IFlexDictionaryHost","href":"Hi.Numerical.IFlexDictionaryHost-1.html","topicHref":"Hi.Numerical.IFlexDictionaryHost-1.html","topicUid":"Hi.Numerical.IFlexDictionaryHost`1","type":"Interface"},{"name":"IGetFeedrate","href":"Hi.Numerical.IGetFeedrate.html","topicHref":"Hi.Numerical.IGetFeedrate.html","topicUid":"Hi.Numerical.IGetFeedrate","type":"Interface"},{"name":"IGetSpindleSpeed","href":"Hi.Numerical.IGetSpindleSpeed.html","topicHref":"Hi.Numerical.IGetSpindleSpeed.html","topicUid":"Hi.Numerical.IGetSpindleSpeed","type":"Interface"},{"name":"ISetFeedrate","href":"Hi.Numerical.ISetFeedrate.html","topicHref":"Hi.Numerical.ISetFeedrate.html","topicUid":"Hi.Numerical.ISetFeedrate","type":"Interface"},{"name":"ISetSpindleSpeed","href":"Hi.Numerical.ISetSpindleSpeed.html","topicHref":"Hi.Numerical.ISetSpindleSpeed.html","topicUid":"Hi.Numerical.ISetSpindleSpeed","type":"Interface"},{"name":"IsoCoordinateEntryDisplayee","href":"Hi.Numerical.IsoCoordinateEntryDisplayee.html","topicHref":"Hi.Numerical.IsoCoordinateEntryDisplayee.html","topicUid":"Hi.Numerical.IsoCoordinateEntryDisplayee","type":"Class"},{"name":"MechNcUtil","href":"Hi.Numerical.MechNcUtil.html","topicHref":"Hi.Numerical.MechNcUtil.html","topicUid":"Hi.Numerical.MechNcUtil","type":"Class"},{"name":"MillingToolOffsetTable","href":"Hi.Numerical.MillingToolOffsetTable.html","topicHref":"Hi.Numerical.MillingToolOffsetTable.html","topicUid":"Hi.Numerical.MillingToolOffsetTable","type":"Class"},{"name":"MillingToolOffsetTableRow","href":"Hi.Numerical.MillingToolOffsetTableRow.html","topicHref":"Hi.Numerical.MillingToolOffsetTableRow.html","topicUid":"Hi.Numerical.MillingToolOffsetTableRow","type":"Class"},{"name":"NcFlag","href":"Hi.Numerical.NcFlag.html","topicHref":"Hi.Numerical.NcFlag.html","topicUid":"Hi.Numerical.NcFlag","type":"Enum"},{"name":"NcFlagUtil","href":"Hi.Numerical.NcFlagUtil.html","topicHref":"Hi.Numerical.NcFlagUtil.html","topicUid":"Hi.Numerical.NcFlagUtil","type":"Class"},{"name":"NcGroup00","href":"Hi.Numerical.NcGroup00.html","topicHref":"Hi.Numerical.NcGroup00.html","topicUid":"Hi.Numerical.NcGroup00","type":"Enum"},{"name":"NcGroup01","href":"Hi.Numerical.NcGroup01.html","topicHref":"Hi.Numerical.NcGroup01.html","topicUid":"Hi.Numerical.NcGroup01","type":"Enum"},{"name":"NcGroup02","href":"Hi.Numerical.NcGroup02.html","topicHref":"Hi.Numerical.NcGroup02.html","topicUid":"Hi.Numerical.NcGroup02","type":"Enum"},{"name":"NcGroup03","href":"Hi.Numerical.NcGroup03.html","topicHref":"Hi.Numerical.NcGroup03.html","topicUid":"Hi.Numerical.NcGroup03","type":"Enum"},{"name":"NcGroup05","href":"Hi.Numerical.NcGroup05.html","topicHref":"Hi.Numerical.NcGroup05.html","topicUid":"Hi.Numerical.NcGroup05","type":"Enum"},{"name":"NcGroup06","href":"Hi.Numerical.NcGroup06.html","topicHref":"Hi.Numerical.NcGroup06.html","topicUid":"Hi.Numerical.NcGroup06","type":"Enum"},{"name":"NcGroup07","href":"Hi.Numerical.NcGroup07.html","topicHref":"Hi.Numerical.NcGroup07.html","topicUid":"Hi.Numerical.NcGroup07","type":"Enum"},{"name":"NcGroup08","href":"Hi.Numerical.NcGroup08.html","topicHref":"Hi.Numerical.NcGroup08.html","topicUid":"Hi.Numerical.NcGroup08","type":"Enum"},{"name":"NcGroup09","href":"Hi.Numerical.NcGroup09.html","topicHref":"Hi.Numerical.NcGroup09.html","topicUid":"Hi.Numerical.NcGroup09","type":"Enum"},{"name":"NcGroup10","href":"Hi.Numerical.NcGroup10.html","topicHref":"Hi.Numerical.NcGroup10.html","topicUid":"Hi.Numerical.NcGroup10","type":"Enum"},{"name":"NcGroup13","href":"Hi.Numerical.NcGroup13.html","topicHref":"Hi.Numerical.NcGroup13.html","topicUid":"Hi.Numerical.NcGroup13","type":"Enum"},{"name":"NcGroup14","href":"Hi.Numerical.NcGroup14.html","topicHref":"Hi.Numerical.NcGroup14.html","topicUid":"Hi.Numerical.NcGroup14","type":"Enum"},{"name":"NcGroup15","href":"Hi.Numerical.NcGroup15.html","topicHref":"Hi.Numerical.NcGroup15.html","topicUid":"Hi.Numerical.NcGroup15","type":"Enum"},{"name":"NcGroup16","href":"Hi.Numerical.NcGroup16.html","topicHref":"Hi.Numerical.NcGroup16.html","topicUid":"Hi.Numerical.NcGroup16","type":"Enum"},{"name":"NcGroup21","href":"Hi.Numerical.NcGroup21.html","topicHref":"Hi.Numerical.NcGroup21.html","topicUid":"Hi.Numerical.NcGroup21","type":"Enum"},{"name":"NcGroupAttribute","href":"Hi.Numerical.NcGroupAttribute.html","topicHref":"Hi.Numerical.NcGroupAttribute.html","topicUid":"Hi.Numerical.NcGroupAttribute","type":"Class"},{"name":"NcGroupHeidenhainM107M108","href":"Hi.Numerical.NcGroupHeidenhainM107M108.html","topicHref":"Hi.Numerical.NcGroupHeidenhainM107M108.html","topicUid":"Hi.Numerical.NcGroupHeidenhainM107M108","type":"Enum"},{"name":"NcGroupHeidenhainPlane","href":"Hi.Numerical.NcGroupHeidenhainPlane.html","topicHref":"Hi.Numerical.NcGroupHeidenhainPlane.html","topicUid":"Hi.Numerical.NcGroupHeidenhainPlane","type":"Enum"},{"name":"NcGroupHeidenhainShortestRotaryPath","href":"Hi.Numerical.NcGroupHeidenhainShortestRotaryPath.html","topicHref":"Hi.Numerical.NcGroupHeidenhainShortestRotaryPath.html","topicUid":"Hi.Numerical.NcGroupHeidenhainShortestRotaryPath","type":"Enum"},{"name":"NcGroupSpindleRotation","href":"Hi.Numerical.NcGroupSpindleRotation.html","topicHref":"Hi.Numerical.NcGroupSpindleRotation.html","topicUid":"Hi.Numerical.NcGroupSpindleRotation","type":"Enum"},{"name":"NcLifeCycleAttribute","href":"Hi.Numerical.NcLifeCycleAttribute.html","topicHref":"Hi.Numerical.NcLifeCycleAttribute.html","topicUid":"Hi.Numerical.NcLifeCycleAttribute","type":"Class"},{"name":"NcLifeCycleMode","href":"Hi.Numerical.NcLifeCycleMode.html","topicHref":"Hi.Numerical.NcLifeCycleMode.html","topicUid":"Hi.Numerical.NcLifeCycleMode","type":"Enum"},{"name":"NcNameAttribute","href":"Hi.Numerical.NcNameAttribute.html","topicHref":"Hi.Numerical.NcNameAttribute.html","topicUid":"Hi.Numerical.NcNameAttribute","type":"Class"},{"name":"NcNoteCache","href":"Hi.Numerical.NcNoteCache.html","topicHref":"Hi.Numerical.NcNoteCache.html","topicUid":"Hi.Numerical.NcNoteCache","type":"Class"},{"name":"NcProc","href":"Hi.Numerical.NcProc.html","topicHref":"Hi.Numerical.NcProc.html","topicUid":"Hi.Numerical.NcProc","type":"Class"},{"name":"NcWarningSceneEnum","href":"Hi.Numerical.NcWarningSceneEnum.html","topicHref":"Hi.Numerical.NcWarningSceneEnum.html","topicUid":"Hi.Numerical.NcWarningSceneEnum","type":"Enum"},{"name":"NumericUtil","href":"Hi.Numerical.NumericUtil.html","topicHref":"Hi.Numerical.NumericUtil.html","topicUid":"Hi.Numerical.NumericUtil","type":"Class"},{"name":"PolarEntry","href":"Hi.Numerical.PolarEntry.html","topicHref":"Hi.Numerical.PolarEntry.html","topicUid":"Hi.Numerical.PolarEntry","type":"Class"},{"name":"RadiusCompensationBuf","href":"Hi.Numerical.RadiusCompensationBuf.html","topicHref":"Hi.Numerical.RadiusCompensationBuf.html","topicUid":"Hi.Numerical.RadiusCompensationBuf","type":"Class"},{"name":"SourcedActEntry","href":"Hi.Numerical.SourcedActEntry.html","topicHref":"Hi.Numerical.SourcedActEntry.html","topicUid":"Hi.Numerical.SourcedActEntry","type":"Class"},{"name":"SpindleDirection","href":"Hi.Numerical.SpindleDirection.html","topicHref":"Hi.Numerical.SpindleDirection.html","topicUid":"Hi.Numerical.SpindleDirection","type":"Enum"},{"name":"SubStringKit","href":"Hi.Numerical.SubStringKit.html","topicHref":"Hi.Numerical.SubStringKit.html","topicUid":"Hi.Numerical.SubStringKit","type":"Class"},{"name":"SubStringKit.ActivationMode","href":"Hi.Numerical.SubStringKit.ActivationMode.html","topicHref":"Hi.Numerical.SubStringKit.ActivationMode.html","topicUid":"Hi.Numerical.SubStringKit.ActivationMode","type":"Enum"},{"name":"ToolConfigNotFoundException","href":"Hi.Numerical.ToolConfigNotFoundException.html","topicHref":"Hi.Numerical.ToolConfigNotFoundException.html","topicUid":"Hi.Numerical.ToolConfigNotFoundException","type":"Class"}]},{"name":"Hi.Numerical.Acts","href":"Hi.Numerical.Acts.html","topicHref":"Hi.Numerical.Acts.html","topicUid":"Hi.Numerical.Acts","type":"Namespace","items":[{"name":"ActActualTime","href":"Hi.Numerical.Acts.ActActualTime.html","topicHref":"Hi.Numerical.Acts.ActActualTime.html","topicUid":"Hi.Numerical.Acts.ActActualTime","type":"Class"},{"name":"ActClArc","href":"Hi.Numerical.Acts.ActClArc.html","topicHref":"Hi.Numerical.Acts.ActClArc.html","topicUid":"Hi.Numerical.Acts.ActClArc","type":"Class"},{"name":"ActClDerivedMcXyzabcContour","href":"Hi.Numerical.Acts.ActClDerivedMcXyzabcContour.html","topicHref":"Hi.Numerical.Acts.ActClDerivedMcXyzabcContour.html","topicUid":"Hi.Numerical.Acts.ActClDerivedMcXyzabcContour","type":"Class"},{"name":"ActClLinear","href":"Hi.Numerical.Acts.ActClLinear.html","topicHref":"Hi.Numerical.Acts.ActClLinear.html","topicUid":"Hi.Numerical.Acts.ActClLinear","type":"Class"},{"name":"ActClStep","href":"Hi.Numerical.Acts.ActClStep.html","topicHref":"Hi.Numerical.Acts.ActClStep.html","topicUid":"Hi.Numerical.Acts.ActClStep","type":"Class"},{"name":"ActClTeleport","href":"Hi.Numerical.Acts.ActClTeleport.html","topicHref":"Hi.Numerical.Acts.ActClTeleport.html","topicUid":"Hi.Numerical.Acts.ActClTeleport","type":"Class"},{"name":"ActCooling","href":"Hi.Numerical.Acts.ActCooling.html","topicHref":"Hi.Numerical.Acts.ActCooling.html","topicUid":"Hi.Numerical.Acts.ActCooling","type":"Class"},{"name":"ActData","href":"Hi.Numerical.Acts.ActData.html","topicHref":"Hi.Numerical.Acts.ActData.html","topicUid":"Hi.Numerical.Acts.ActData","type":"Class"},{"name":"ActDelay","href":"Hi.Numerical.Acts.ActDelay.html","topicHref":"Hi.Numerical.Acts.ActDelay.html","topicUid":"Hi.Numerical.Acts.ActDelay","type":"Class"},{"name":"ActFeedrate","href":"Hi.Numerical.Acts.ActFeedrate.html","topicHref":"Hi.Numerical.Acts.ActFeedrate.html","topicUid":"Hi.Numerical.Acts.ActFeedrate","type":"Class"},{"name":"ActHiddenStateChanged","href":"Hi.Numerical.Acts.ActHiddenStateChanged.html","topicHref":"Hi.Numerical.Acts.ActHiddenStateChanged.html","topicUid":"Hi.Numerical.Acts.ActHiddenStateChanged","type":"Class"},{"name":"ActIntentionalSkip","href":"Hi.Numerical.Acts.ActIntentionalSkip.html","topicHref":"Hi.Numerical.Acts.ActIntentionalSkip.html","topicUid":"Hi.Numerical.Acts.ActIntentionalSkip","type":"Class"},{"name":"ActLineBegin","href":"Hi.Numerical.Acts.ActLineBegin.html","topicHref":"Hi.Numerical.Acts.ActLineBegin.html","topicUid":"Hi.Numerical.Acts.ActLineBegin","type":"Class"},{"name":"ActLineCsScript","href":"Hi.Numerical.Acts.ActLineCsScript.html","topicHref":"Hi.Numerical.Acts.ActLineCsScript.html","topicUid":"Hi.Numerical.Acts.ActLineCsScript","type":"Class"},{"name":"ActLineEnd","href":"Hi.Numerical.Acts.ActLineEnd.html","topicHref":"Hi.Numerical.Acts.ActLineEnd.html","topicUid":"Hi.Numerical.Acts.ActLineEnd","type":"Class"},{"name":"ActMcPolarLinearContour","href":"Hi.Numerical.Acts.ActMcPolarLinearContour.html","topicHref":"Hi.Numerical.Acts.ActMcPolarLinearContour.html","topicUid":"Hi.Numerical.Acts.ActMcPolarLinearContour","type":"Class"},{"name":"ActMcXyzLinearContour","href":"Hi.Numerical.Acts.ActMcXyzLinearContour.html","topicHref":"Hi.Numerical.Acts.ActMcXyzLinearContour.html","topicUid":"Hi.Numerical.Acts.ActMcXyzLinearContour","type":"Class"},{"name":"ActMcXyzSpiralContour","href":"Hi.Numerical.Acts.ActMcXyzSpiralContour.html","topicHref":"Hi.Numerical.Acts.ActMcXyzSpiralContour.html","topicUid":"Hi.Numerical.Acts.ActMcXyzSpiralContour","type":"Class"},{"name":"ActMcXyzStep","href":"Hi.Numerical.Acts.ActMcXyzStep.html","topicHref":"Hi.Numerical.Acts.ActMcXyzStep.html","topicUid":"Hi.Numerical.Acts.ActMcXyzStep","type":"Class"},{"name":"ActMcXyzabcLinearContour","href":"Hi.Numerical.Acts.ActMcXyzabcLinearContour.html","topicHref":"Hi.Numerical.Acts.ActMcXyzabcLinearContour.html","topicUid":"Hi.Numerical.Acts.ActMcXyzabcLinearContour","type":"Class"},{"name":"ActMcXyzabcStep","href":"Hi.Numerical.Acts.ActMcXyzabcStep.html","topicHref":"Hi.Numerical.Acts.ActMcXyzabcStep.html","topicUid":"Hi.Numerical.Acts.ActMcXyzabcStep","type":"Class"},{"name":"ActRapid","href":"Hi.Numerical.Acts.ActRapid.html","topicHref":"Hi.Numerical.Acts.ActRapid.html","topicUid":"Hi.Numerical.Acts.ActRapid","type":"Class"},{"name":"ActSpindleDirection","href":"Hi.Numerical.Acts.ActSpindleDirection.html","topicHref":"Hi.Numerical.Acts.ActSpindleDirection.html","topicUid":"Hi.Numerical.Acts.ActSpindleDirection","type":"Class"},{"name":"ActSpindleOrientation","href":"Hi.Numerical.Acts.ActSpindleOrientation.html","topicHref":"Hi.Numerical.Acts.ActSpindleOrientation.html","topicUid":"Hi.Numerical.Acts.ActSpindleOrientation","type":"Class"},{"name":"ActSpindleSpeed","href":"Hi.Numerical.Acts.ActSpindleSpeed.html","topicHref":"Hi.Numerical.Acts.ActSpindleSpeed.html","topicUid":"Hi.Numerical.Acts.ActSpindleSpeed","type":"Class"},{"name":"ActToolingStep","href":"Hi.Numerical.Acts.ActToolingStep.html","topicHref":"Hi.Numerical.Acts.ActToolingStep.html","topicUid":"Hi.Numerical.Acts.ActToolingStep","type":"Class"},{"name":"ActToolingTeleport","href":"Hi.Numerical.Acts.ActToolingTeleport.html","topicHref":"Hi.Numerical.Acts.ActToolingTeleport.html","topicUid":"Hi.Numerical.Acts.ActToolingTeleport","type":"Class"},{"name":"ActUnknownSkip","href":"Hi.Numerical.Acts.ActUnknownSkip.html","topicHref":"Hi.Numerical.Acts.ActUnknownSkip.html","topicUid":"Hi.Numerical.Acts.ActUnknownSkip","type":"Class"},{"name":"ActUtil","href":"Hi.Numerical.Acts.ActUtil.html","topicHref":"Hi.Numerical.Acts.ActUtil.html","topicUid":"Hi.Numerical.Acts.ActUtil","type":"Class"},{"name":"IAct","href":"Hi.Numerical.Acts.IAct.html","topicHref":"Hi.Numerical.Acts.IAct.html","topicUid":"Hi.Numerical.Acts.IAct","type":"Interface"},{"name":"IActClMove","href":"Hi.Numerical.Acts.IActClMove.html","topicHref":"Hi.Numerical.Acts.IActClMove.html","topicUid":"Hi.Numerical.Acts.IActClMove","type":"Interface"},{"name":"IActDuration","href":"Hi.Numerical.Acts.IActDuration.html","topicHref":"Hi.Numerical.Acts.IActDuration.html","topicUid":"Hi.Numerical.Acts.IActDuration","type":"Interface"},{"name":"IActMachineStep","href":"Hi.Numerical.Acts.IActMachineStep.html","topicHref":"Hi.Numerical.Acts.IActMachineStep.html","topicUid":"Hi.Numerical.Acts.IActMachineStep","type":"Interface"},{"name":"IActMcXyzContour","href":"Hi.Numerical.Acts.IActMcXyzContour.html","topicHref":"Hi.Numerical.Acts.IActMcXyzContour.html","topicUid":"Hi.Numerical.Acts.IActMcXyzContour","type":"Interface"},{"name":"IActMcXyzabcContour","href":"Hi.Numerical.Acts.IActMcXyzabcContour.html","topicHref":"Hi.Numerical.Acts.IActMcXyzabcContour.html","topicUid":"Hi.Numerical.Acts.IActMcXyzabcContour","type":"Interface"},{"name":"IActSkip","href":"Hi.Numerical.Acts.IActSkip.html","topicHref":"Hi.Numerical.Acts.IActSkip.html","topicUid":"Hi.Numerical.Acts.IActSkip","type":"Interface"},{"name":"IActTooling","href":"Hi.Numerical.Acts.IActTooling.html","topicHref":"Hi.Numerical.Acts.IActTooling.html","topicUid":"Hi.Numerical.Acts.IActTooling","type":"Interface"},{"name":"IWorkTimeAttrib","href":"Hi.Numerical.Acts.IWorkTimeAttrib.html","topicHref":"Hi.Numerical.Acts.IWorkTimeAttrib.html","topicUid":"Hi.Numerical.Acts.IWorkTimeAttrib","type":"Interface"},{"name":"IWorkTimeGetter","href":"Hi.Numerical.Acts.IWorkTimeGetter.html","topicHref":"Hi.Numerical.Acts.IWorkTimeGetter.html","topicUid":"Hi.Numerical.Acts.IWorkTimeGetter","type":"Interface"},{"name":"IWorkTimeSetter","href":"Hi.Numerical.Acts.IWorkTimeSetter.html","topicHref":"Hi.Numerical.Acts.IWorkTimeSetter.html","topicUid":"Hi.Numerical.Acts.IWorkTimeSetter","type":"Interface"},{"name":"StateActRunner","href":"Hi.Numerical.Acts.StateActRunner.html","topicHref":"Hi.Numerical.Acts.StateActRunner.html","topicUid":"Hi.Numerical.Acts.StateActRunner","type":"Class"}]},{"name":"Hi.Numerical.Args","href":"Hi.Numerical.Args.html","topicHref":"Hi.Numerical.Args.html","topicUid":"Hi.Numerical.Args","type":"Namespace","items":[{"name":"OrthogonalPlaneFlag","href":"Hi.Numerical.Args.OrthogonalPlaneFlag.html","topicHref":"Hi.Numerical.Args.OrthogonalPlaneFlag.html","topicUid":"Hi.Numerical.Args.OrthogonalPlaneFlag","type":"Enum"},{"name":"PolarModeDirEnum","href":"Hi.Numerical.Args.PolarModeDirEnum.html","topicHref":"Hi.Numerical.Args.PolarModeDirEnum.html","topicUid":"Hi.Numerical.Args.PolarModeDirEnum","type":"Enum"}]},{"name":"Hi.Numerical.FilePlayers","href":"Hi.Numerical.FilePlayers.html","topicHref":"Hi.Numerical.FilePlayers.html","topicUid":"Hi.Numerical.FilePlayers","type":"Namespace","items":[{"name":"CsvRunner","href":"Hi.Numerical.FilePlayers.CsvRunner.html","topicHref":"Hi.Numerical.FilePlayers.CsvRunner.html","topicUid":"Hi.Numerical.FilePlayers.CsvRunner","type":"Class"},{"name":"CsvRunnerConfig","href":"Hi.Numerical.FilePlayers.CsvRunnerConfig.html","topicHref":"Hi.Numerical.FilePlayers.CsvRunnerConfig.html","topicUid":"Hi.Numerical.FilePlayers.CsvRunnerConfig","type":"Class"},{"name":"HardNcRunner","href":"Hi.Numerical.FilePlayers.HardNcRunner.html","topicHref":"Hi.Numerical.FilePlayers.HardNcRunner.html","topicUid":"Hi.Numerical.FilePlayers.HardNcRunner","type":"Class"}]},{"name":"Hi.Numerical.MachiningMotionResolutionUtils","href":"Hi.Numerical.MachiningMotionResolutionUtils.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils","type":"Namespace","items":[{"name":"FeedPerCycleMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution","type":"Class"},{"name":"FeedPerToothMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution","type":"Class"},{"name":"FixedMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution","type":"Class"},{"name":"IMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution","type":"Interface"}]},{"name":"Hi.Numerical.NcArgs","href":"Hi.Numerical.NcArgs.html","topicHref":"Hi.Numerical.NcArgs.html","topicUid":"Hi.Numerical.NcArgs","type":"Namespace","items":[{"name":"ArcNcArg","href":"Hi.Numerical.NcArgs.ArcNcArg.html","topicHref":"Hi.Numerical.NcArgs.ArcNcArg.html","topicUid":"Hi.Numerical.NcArgs.ArcNcArg","type":"Class"},{"name":"G28Arg","href":"Hi.Numerical.NcArgs.G28Arg.html","topicHref":"Hi.Numerical.NcArgs.G28Arg.html","topicUid":"Hi.Numerical.NcArgs.G28Arg","type":"Class"},{"name":"Group07NcArg","href":"Hi.Numerical.NcArgs.Group07NcArg.html","topicHref":"Hi.Numerical.NcArgs.Group07NcArg.html","topicUid":"Hi.Numerical.NcArgs.Group07NcArg","type":"Class"},{"name":"Group09NcArg","href":"Hi.Numerical.NcArgs.Group09NcArg.html","topicHref":"Hi.Numerical.NcArgs.Group09NcArg.html","topicUid":"Hi.Numerical.NcArgs.Group09NcArg","type":"Class"},{"name":"HeidenhainCycleDef7Arg","href":"Hi.Numerical.NcArgs.HeidenhainCycleDef7Arg.html","topicHref":"Hi.Numerical.NcArgs.HeidenhainCycleDef7Arg.html","topicUid":"Hi.Numerical.NcArgs.HeidenhainCycleDef7Arg","type":"Class"},{"name":"HeidenhainPlaneSpatialArg","href":"Hi.Numerical.NcArgs.HeidenhainPlaneSpatialArg.html","topicHref":"Hi.Numerical.NcArgs.HeidenhainPlaneSpatialArg.html","topicUid":"Hi.Numerical.NcArgs.HeidenhainPlaneSpatialArg","type":"Class"},{"name":"IHeidenhainBlockCacheArg","href":"Hi.Numerical.NcArgs.IHeidenhainBlockCacheArg.html","topicHref":"Hi.Numerical.NcArgs.IHeidenhainBlockCacheArg.html","topicUid":"Hi.Numerical.NcArgs.IHeidenhainBlockCacheArg","type":"Interface"},{"name":"IHeidenhainPlaneArg","href":"Hi.Numerical.NcArgs.IHeidenhainPlaneArg.html","topicHref":"Hi.Numerical.NcArgs.IHeidenhainPlaneArg.html","topicUid":"Hi.Numerical.NcArgs.IHeidenhainPlaneArg","type":"Interface"},{"name":"ITiltPlaneNcArg","href":"Hi.Numerical.NcArgs.ITiltPlaneNcArg.html","topicHref":"Hi.Numerical.NcArgs.ITiltPlaneNcArg.html","topicUid":"Hi.Numerical.NcArgs.ITiltPlaneNcArg","type":"Interface"},{"name":"NcArgCycle800","href":"Hi.Numerical.NcArgs.NcArgCycle800.html","topicHref":"Hi.Numerical.NcArgs.NcArgCycle800.html","topicUid":"Hi.Numerical.NcArgs.NcArgCycle800","type":"Class"},{"name":"NcArgG68","href":"Hi.Numerical.NcArgs.NcArgG68.html","topicHref":"Hi.Numerical.NcArgs.NcArgG68.html","topicUid":"Hi.Numerical.NcArgs.NcArgG68","type":"Class"},{"name":"NcArgG68p2","href":"Hi.Numerical.NcArgs.NcArgG68p2.html","topicHref":"Hi.Numerical.NcArgs.NcArgG68p2.html","topicUid":"Hi.Numerical.NcArgs.NcArgG68p2","type":"Class"},{"name":"NcArgSiemensFrame","href":"Hi.Numerical.NcArgs.NcArgSiemensFrame.html","topicHref":"Hi.Numerical.NcArgs.NcArgSiemensFrame.html","topicUid":"Hi.Numerical.NcArgs.NcArgSiemensFrame","type":"Class"},{"name":"PausingNcArg","href":"Hi.Numerical.NcArgs.PausingNcArg.html","topicHref":"Hi.Numerical.NcArgs.PausingNcArg.html","topicUid":"Hi.Numerical.NcArgs.PausingNcArg","type":"Class"}]},{"name":"Hi.Numerical.StepSelectionUtils","href":"Hi.Numerical.StepSelectionUtils.html","topicHref":"Hi.Numerical.StepSelectionUtils.html","topicUid":"Hi.Numerical.StepSelectionUtils","type":"Namespace","items":[{"name":"AnchorMode","href":"Hi.Numerical.StepSelectionUtils.AnchorMode.html","topicHref":"Hi.Numerical.StepSelectionUtils.AnchorMode.html","topicUid":"Hi.Numerical.StepSelectionUtils.AnchorMode","type":"Enum"},{"name":"BoundSelector","href":"Hi.Numerical.StepSelectionUtils.BoundSelector.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelector.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelector","type":"Class"},{"name":"BoundSelectorHost","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorHost","type":"Class"},{"name":"BoundSelectorPair","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair","type":"Class"},{"name":"BoundSelectorPair.BoundLocale","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale","type":"Enum"},{"name":"BoundSelectorStepSectionBundle","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle","type":"Class"},{"name":"BoundSelectorUtil","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorUtil.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorUtil.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorUtil","type":"Class"},{"name":"DistanceShift","href":"Hi.Numerical.StepSelectionUtils.DistanceShift.html","topicHref":"Hi.Numerical.StepSelectionUtils.DistanceShift.html","topicUid":"Hi.Numerical.StepSelectionUtils.DistanceShift","type":"Class"},{"name":"IStepShift","href":"Hi.Numerical.StepSelectionUtils.IStepShift.html","topicHref":"Hi.Numerical.StepSelectionUtils.IStepShift.html","topicUid":"Hi.Numerical.StepSelectionUtils.IStepShift","type":"Interface"},{"name":"TimeShift","href":"Hi.Numerical.StepSelectionUtils.TimeShift.html","topicHref":"Hi.Numerical.StepSelectionUtils.TimeShift.html","topicUid":"Hi.Numerical.StepSelectionUtils.TimeShift","type":"Class"}]},{"name":"Hi.Numerical.Xyzabc","href":"Hi.Numerical.Xyzabc.html","topicHref":"Hi.Numerical.Xyzabc.html","topicUid":"Hi.Numerical.Xyzabc","type":"Namespace","items":[{"name":"Abc","href":"Hi.Numerical.Xyzabc.Abc.html","topicHref":"Hi.Numerical.Xyzabc.Abc.html","topicUid":"Hi.Numerical.Xyzabc.Abc","type":"Struct"},{"name":"CodeXyzabcChain","href":"Hi.Numerical.Xyzabc.CodeXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.CodeXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.CodeXyzabcChain","type":"Class"},{"name":"GeneralXyzabcChain","href":"Hi.Numerical.Xyzabc.GeneralXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.GeneralXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.GeneralXyzabcChain","type":"Class"},{"name":"IGetMcXyzabc","href":"Hi.Numerical.Xyzabc.IGetMcXyzabc.html","topicHref":"Hi.Numerical.Xyzabc.IGetMcXyzabc.html","topicUid":"Hi.Numerical.Xyzabc.IGetMcXyzabc","type":"Interface"},{"name":"IGetXyzabcChain","href":"Hi.Numerical.Xyzabc.IGetXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.IGetXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.IGetXyzabcChain","type":"Interface"},{"name":"IMachineKinematics","href":"Hi.Numerical.Xyzabc.IMachineKinematics.html","topicHref":"Hi.Numerical.Xyzabc.IMachineKinematics.html","topicUid":"Hi.Numerical.Xyzabc.IMachineKinematics","type":"Interface"},{"name":"ISetMcXyzabc","href":"Hi.Numerical.Xyzabc.ISetMcXyzabc.html","topicHref":"Hi.Numerical.Xyzabc.ISetMcXyzabc.html","topicUid":"Hi.Numerical.Xyzabc.ISetMcXyzabc","type":"Interface"},{"name":"IXyzabcChain","href":"Hi.Numerical.Xyzabc.IXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.IXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.IXyzabcChain","type":"Interface"},{"name":"ReflectedXyzabcChain","href":"Hi.Numerical.Xyzabc.ReflectedXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.ReflectedXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.ReflectedXyzabcChain","type":"Class"},{"name":"XyzabcSolver","href":"Hi.Numerical.Xyzabc.XyzabcSolver.html","topicHref":"Hi.Numerical.Xyzabc.XyzabcSolver.html","topicUid":"Hi.Numerical.Xyzabc.XyzabcSolver","type":"Class"},{"name":"XyzabcUtil","href":"Hi.Numerical.Xyzabc.XyzabcUtil.html","topicHref":"Hi.Numerical.Xyzabc.XyzabcUtil.html","topicUid":"Hi.Numerical.Xyzabc.XyzabcUtil","type":"Class"}]},{"name":"Hi.PanelModels","href":"Hi.PanelModels.html","topicHref":"Hi.PanelModels.html","topicUid":"Hi.PanelModels","type":"Namespace","items":[{"name":"HiKey","href":"Hi.PanelModels.HiKey.html","topicHref":"Hi.PanelModels.HiKey.html","topicUid":"Hi.PanelModels.HiKey","type":"Enum"},{"name":"HiKeyEvent","href":"Hi.PanelModels.HiKeyEvent.html","topicHref":"Hi.PanelModels.HiKeyEvent.html","topicUid":"Hi.PanelModels.HiKeyEvent","type":"Class"},{"name":"HiModifierKeys","href":"Hi.PanelModels.HiModifierKeys.html","topicHref":"Hi.PanelModels.HiModifierKeys.html","topicUid":"Hi.PanelModels.HiModifierKeys","type":"Enum"},{"name":"HiMouseButton","href":"Hi.PanelModels.HiMouseButton.html","topicHref":"Hi.PanelModels.HiMouseButton.html","topicUid":"Hi.PanelModels.HiMouseButton","type":"Enum"},{"name":"HiMouseButtonEvent","href":"Hi.PanelModels.HiMouseButtonEvent.html","topicHref":"Hi.PanelModels.HiMouseButtonEvent.html","topicUid":"Hi.PanelModels.HiMouseButtonEvent","type":"Class"},{"name":"HiMouseButtonMask","href":"Hi.PanelModels.HiMouseButtonMask.html","topicHref":"Hi.PanelModels.HiMouseButtonMask.html","topicUid":"Hi.PanelModels.HiMouseButtonMask","type":"Enum"},{"name":"HiMouseButtonMaskUtil","href":"Hi.PanelModels.HiMouseButtonMaskUtil.html","topicHref":"Hi.PanelModels.HiMouseButtonMaskUtil.html","topicUid":"Hi.PanelModels.HiMouseButtonMaskUtil","type":"Class"},{"name":"HiMouseMoveEvent","href":"Hi.PanelModels.HiMouseMoveEvent.html","topicHref":"Hi.PanelModels.HiMouseMoveEvent.html","topicUid":"Hi.PanelModels.HiMouseMoveEvent","type":"Class"},{"name":"HiMouseWheelEvent","href":"Hi.PanelModels.HiMouseWheelEvent.html","topicHref":"Hi.PanelModels.HiMouseWheelEvent.html","topicUid":"Hi.PanelModels.HiMouseWheelEvent","type":"Class"},{"name":"PanelModel","href":"Hi.PanelModels.PanelModel.html","topicHref":"Hi.PanelModels.PanelModel.html","topicUid":"Hi.PanelModels.PanelModel","type":"Class"}]},{"name":"Hi.Parallels","href":"Hi.Parallels.html","topicHref":"Hi.Parallels.html","topicUid":"Hi.Parallels","type":"Namespace","items":[{"name":"CurrentThreadTaskScheduler","href":"Hi.Parallels.CurrentThreadTaskScheduler.html","topicHref":"Hi.Parallels.CurrentThreadTaskScheduler.html","topicUid":"Hi.Parallels.CurrentThreadTaskScheduler","type":"Class"},{"name":"DistributedQueueTaskScheduler","href":"Hi.Parallels.DistributedQueueTaskScheduler.html","topicHref":"Hi.Parallels.DistributedQueueTaskScheduler.html","topicUid":"Hi.Parallels.DistributedQueueTaskScheduler","type":"Class"},{"name":"DistributedQueueTaskStarter","href":"Hi.Parallels.DistributedQueueTaskStarter.html","topicHref":"Hi.Parallels.DistributedQueueTaskStarter.html","topicUid":"Hi.Parallels.DistributedQueueTaskStarter","type":"Class"},{"name":"LockUtil","href":"Hi.Parallels.LockUtil.html","topicHref":"Hi.Parallels.LockUtil.html","topicUid":"Hi.Parallels.LockUtil","type":"Class"},{"name":"PriorityTaskScheduler","href":"Hi.Parallels.PriorityTaskScheduler.html","topicHref":"Hi.Parallels.PriorityTaskScheduler.html","topicUid":"Hi.Parallels.PriorityTaskScheduler","type":"Class"},{"name":"QueueTaskScheduler","href":"Hi.Parallels.QueueTaskScheduler.html","topicHref":"Hi.Parallels.QueueTaskScheduler.html","topicUid":"Hi.Parallels.QueueTaskScheduler","type":"Class"},{"name":"ReaderWriterLockUtil","href":"Hi.Parallels.ReaderWriterLockUtil.html","topicHref":"Hi.Parallels.ReaderWriterLockUtil.html","topicUid":"Hi.Parallels.ReaderWriterLockUtil","type":"Class"},{"name":"SemaphoreUtil","href":"Hi.Parallels.SemaphoreUtil.html","topicHref":"Hi.Parallels.SemaphoreUtil.html","topicUid":"Hi.Parallels.SemaphoreUtil","type":"Class"},{"name":"ThreadSafeSet","href":"Hi.Parallels.ThreadSafeSet-1.html","topicHref":"Hi.Parallels.ThreadSafeSet-1.html","topicUid":"Hi.Parallels.ThreadSafeSet`1","type":"Class"}]},{"name":"Hi.Physics","href":"Hi.Physics.html","topicHref":"Hi.Physics.html","topicUid":"Hi.Physics","type":"Namespace","items":[{"name":"AmpPhase","href":"Hi.Physics.AmpPhase.html","topicHref":"Hi.Physics.AmpPhase.html","topicUid":"Hi.Physics.AmpPhase","type":"Class"},{"name":"CoatingMaterial","href":"Hi.Physics.CoatingMaterial.html","topicHref":"Hi.Physics.CoatingMaterial.html","topicUid":"Hi.Physics.CoatingMaterial","type":"Class"},{"name":"CoolantHeatCondition","href":"Hi.Physics.CoolantHeatCondition.html","topicHref":"Hi.Physics.CoolantHeatCondition.html","topicUid":"Hi.Physics.CoolantHeatCondition","type":"Class"},{"name":"CutterMaterial","href":"Hi.Physics.CutterMaterial.html","topicHref":"Hi.Physics.CutterMaterial.html","topicUid":"Hi.Physics.CutterMaterial","type":"Class"},{"name":"IGetThermalLayerList","href":"Hi.Physics.IGetThermalLayerList.html","topicHref":"Hi.Physics.IGetThermalLayerList.html","topicUid":"Hi.Physics.IGetThermalLayerList","type":"Interface"},{"name":"IStructureMaterial","href":"Hi.Physics.IStructureMaterial.html","topicHref":"Hi.Physics.IStructureMaterial.html","topicUid":"Hi.Physics.IStructureMaterial","type":"Interface"},{"name":"ISuccessivePhysicsBriefAccessor","href":"Hi.Physics.ISuccessivePhysicsBriefAccessor.html","topicHref":"Hi.Physics.ISuccessivePhysicsBriefAccessor.html","topicUid":"Hi.Physics.ISuccessivePhysicsBriefAccessor","type":"Interface"},{"name":"ISurfaceMaterial","href":"Hi.Physics.ISurfaceMaterial.html","topicHref":"Hi.Physics.ISurfaceMaterial.html","topicUid":"Hi.Physics.ISurfaceMaterial","type":"Interface"},{"name":"ITimeGetter","href":"Hi.Physics.ITimeGetter.html","topicHref":"Hi.Physics.ITimeGetter.html","topicUid":"Hi.Physics.ITimeGetter","type":"Interface"},{"name":"MillingTemperatureUtil","href":"Hi.Physics.MillingTemperatureUtil.html","topicHref":"Hi.Physics.MillingTemperatureUtil.html","topicUid":"Hi.Physics.MillingTemperatureUtil","type":"Class"},{"name":"SeqPhysicsBrief","href":"Hi.Physics.SeqPhysicsBrief.html","topicHref":"Hi.Physics.SeqPhysicsBrief.html","topicUid":"Hi.Physics.SeqPhysicsBrief","type":"Class"},{"name":"StructureMaterial","href":"Hi.Physics.StructureMaterial.html","topicHref":"Hi.Physics.StructureMaterial.html","topicUid":"Hi.Physics.StructureMaterial","type":"Class"},{"name":"TemperatureUtil","href":"Hi.Physics.TemperatureUtil.html","topicHref":"Hi.Physics.TemperatureUtil.html","topicUid":"Hi.Physics.TemperatureUtil","type":"Class"},{"name":"TemperatureVsHardness","href":"Hi.Physics.TemperatureVsHardness.html","topicHref":"Hi.Physics.TemperatureVsHardness.html","topicUid":"Hi.Physics.TemperatureVsHardness","type":"Class"},{"name":"ThermalLayer1D","href":"Hi.Physics.ThermalLayer1D.html","topicHref":"Hi.Physics.ThermalLayer1D.html","topicUid":"Hi.Physics.ThermalLayer1D","type":"Class"},{"name":"TimeSeriesUtil","href":"Hi.Physics.TimeSeriesUtil.html","topicHref":"Hi.Physics.TimeSeriesUtil.html","topicUid":"Hi.Physics.TimeSeriesUtil","type":"Class"},{"name":"TimeValue","href":"Hi.Physics.TimeValue.html","topicHref":"Hi.Physics.TimeValue.html","topicUid":"Hi.Physics.TimeValue","type":"Class"},{"name":"WorkpieceMaterial","href":"Hi.Physics.WorkpieceMaterial.html","topicHref":"Hi.Physics.WorkpieceMaterial.html","topicUid":"Hi.Physics.WorkpieceMaterial","type":"Class"}]},{"name":"Hi.SessionCommands","href":"Hi.SessionCommands.html","topicHref":"Hi.SessionCommands.html","topicUid":"Hi.SessionCommands","type":"Namespace","items":[{"name":"EnablingWrapper","href":"Hi.SessionCommands.EnablingWrapper.html","topicHref":"Hi.SessionCommands.EnablingWrapper.html","topicUid":"Hi.SessionCommands.EnablingWrapper","type":"Class"},{"name":"GeomDiffCommand","href":"Hi.SessionCommands.GeomDiffCommand.html","topicHref":"Hi.SessionCommands.GeomDiffCommand.html","topicUid":"Hi.SessionCommands.GeomDiffCommand","type":"Class"},{"name":"ISessionCommand","href":"Hi.SessionCommands.ISessionCommand.html","topicHref":"Hi.SessionCommands.ISessionCommand.html","topicUid":"Hi.SessionCommands.ISessionCommand","type":"Interface"},{"name":"ITitleCommand","href":"Hi.SessionCommands.ITitleCommand.html","topicHref":"Hi.SessionCommands.ITitleCommand.html","topicUid":"Hi.SessionCommands.ITitleCommand","type":"Interface"},{"name":"Lang","href":"Hi.SessionCommands.Lang.html","topicHref":"Hi.SessionCommands.Lang.html","topicUid":"Hi.SessionCommands.Lang","type":"Class"},{"name":"ListCommand","href":"Hi.SessionCommands.ListCommand.html","topicHref":"Hi.SessionCommands.ListCommand.html","topicUid":"Hi.SessionCommands.ListCommand","type":"Class"},{"name":"MachiningMotionResolutionCommand","href":"Hi.SessionCommands.MachiningMotionResolutionCommand.html","topicHref":"Hi.SessionCommands.MachiningMotionResolutionCommand.html","topicUid":"Hi.SessionCommands.MachiningMotionResolutionCommand","type":"Class"},{"name":"NcCodeCommand","href":"Hi.SessionCommands.NcCodeCommand.html","topicHref":"Hi.SessionCommands.NcCodeCommand.html","topicUid":"Hi.SessionCommands.NcCodeCommand","type":"Class"},{"name":"NcFileCommand","href":"Hi.SessionCommands.NcFileCommand.html","topicHref":"Hi.SessionCommands.NcFileCommand.html","topicUid":"Hi.SessionCommands.NcFileCommand","type":"Class"},{"name":"NcFileListCommand","href":"Hi.SessionCommands.NcFileListCommand.html","topicHref":"Hi.SessionCommands.NcFileListCommand.html","topicUid":"Hi.SessionCommands.NcFileListCommand","type":"Class"},{"name":"NcOptOptionCommand","href":"Hi.SessionCommands.NcOptOptionCommand.html","topicHref":"Hi.SessionCommands.NcOptOptionCommand.html","topicUid":"Hi.SessionCommands.NcOptOptionCommand","type":"Class"},{"name":"OptimizeToFilesCommand","href":"Hi.SessionCommands.OptimizeToFilesCommand.html","topicHref":"Hi.SessionCommands.OptimizeToFilesCommand.html","topicUid":"Hi.SessionCommands.OptimizeToFilesCommand","type":"Class"},{"name":"PostExecutionCommand","href":"Hi.SessionCommands.PostExecutionCommand.html","topicHref":"Hi.SessionCommands.PostExecutionCommand.html","topicUid":"Hi.SessionCommands.PostExecutionCommand","type":"Class"},{"name":"PreSettingCommand","href":"Hi.SessionCommands.PreSettingCommand.html","topicHref":"Hi.SessionCommands.PreSettingCommand.html","topicUid":"Hi.SessionCommands.PreSettingCommand","type":"Class"},{"name":"RecordRuntimeGeomActionEnum","href":"Hi.SessionCommands.RecordRuntimeGeomActionEnum.html","topicHref":"Hi.SessionCommands.RecordRuntimeGeomActionEnum.html","topicUid":"Hi.SessionCommands.RecordRuntimeGeomActionEnum","type":"Enum"},{"name":"RecordRuntimeGeomCommand","href":"Hi.SessionCommands.RecordRuntimeGeomCommand.html","topicHref":"Hi.SessionCommands.RecordRuntimeGeomCommand.html","topicUid":"Hi.SessionCommands.RecordRuntimeGeomCommand","type":"Class"},{"name":"ScriptCommand","href":"Hi.SessionCommands.ScriptCommand.html","topicHref":"Hi.SessionCommands.ScriptCommand.html","topicUid":"Hi.SessionCommands.ScriptCommand","type":"Class"},{"name":"SimpleSessionCommand","href":"Hi.SessionCommands.SimpleSessionCommand.html","topicHref":"Hi.SessionCommands.SimpleSessionCommand.html","topicUid":"Hi.SessionCommands.SimpleSessionCommand","type":"Class"},{"name":"WriteRuntimeGeomToStlCommand","href":"Hi.SessionCommands.WriteRuntimeGeomToStlCommand.html","topicHref":"Hi.SessionCommands.WriteRuntimeGeomToStlCommand.html","topicUid":"Hi.SessionCommands.WriteRuntimeGeomToStlCommand","type":"Class"},{"name":"WriteShotFilesCommand","href":"Hi.SessionCommands.WriteShotFilesCommand.html","topicHref":"Hi.SessionCommands.WriteShotFilesCommand.html","topicUid":"Hi.SessionCommands.WriteShotFilesCommand","type":"Class"},{"name":"WriteStepFilesCommand","href":"Hi.SessionCommands.WriteStepFilesCommand.html","topicHref":"Hi.SessionCommands.WriteStepFilesCommand.html","topicUid":"Hi.SessionCommands.WriteStepFilesCommand","type":"Class"}]},{"name":"Hi.SessionShellUtils","href":"Hi.SessionShellUtils.html","topicHref":"Hi.SessionShellUtils.html","topicUid":"Hi.SessionShellUtils","type":"Namespace","items":[{"name":"ISessionShell","href":"Hi.SessionShellUtils.ISessionShell.html","topicHref":"Hi.SessionShellUtils.ISessionShell.html","topicUid":"Hi.SessionShellUtils.ISessionShell","type":"Interface"},{"name":"JsAceAttribute","href":"Hi.SessionShellUtils.JsAceAttribute.html","topicHref":"Hi.SessionShellUtils.JsAceAttribute.html","topicUid":"Hi.SessionShellUtils.JsAceAttribute","type":"Class"}]},{"name":"Hi.SqliteUtils","href":"Hi.SqliteUtils.html","topicHref":"Hi.SqliteUtils.html","topicUid":"Hi.SqliteUtils","type":"Namespace","items":[{"name":"SqliteIdentityRole","href":"Hi.SqliteUtils.SqliteIdentityRole.html","topicHref":"Hi.SqliteUtils.SqliteIdentityRole.html","topicUid":"Hi.SqliteUtils.SqliteIdentityRole","type":"Class"},{"name":"SqliteIdentityStorage","href":"Hi.SqliteUtils.SqliteIdentityStorage.html","topicHref":"Hi.SqliteUtils.SqliteIdentityStorage.html","topicUid":"Hi.SqliteUtils.SqliteIdentityStorage","type":"Class"},{"name":"SqliteIdentityStorage.RoleRow","href":"Hi.SqliteUtils.SqliteIdentityStorage.RoleRow.html","topicHref":"Hi.SqliteUtils.SqliteIdentityStorage.RoleRow.html","topicUid":"Hi.SqliteUtils.SqliteIdentityStorage.RoleRow","type":"Class"},{"name":"SqliteIdentityStorage.UserRow","href":"Hi.SqliteUtils.SqliteIdentityStorage.UserRow.html","topicHref":"Hi.SqliteUtils.SqliteIdentityStorage.UserRow.html","topicUid":"Hi.SqliteUtils.SqliteIdentityStorage.UserRow","type":"Class"},{"name":"SqliteIdentityUser","href":"Hi.SqliteUtils.SqliteIdentityUser.html","topicHref":"Hi.SqliteUtils.SqliteIdentityUser.html","topicUid":"Hi.SqliteUtils.SqliteIdentityUser","type":"Class"},{"name":"SqliteRoleStore","href":"Hi.SqliteUtils.SqliteRoleStore-1.html","topicHref":"Hi.SqliteUtils.SqliteRoleStore-1.html","topicUid":"Hi.SqliteUtils.SqliteRoleStore`1","type":"Class"},{"name":"SqliteStepStorage","href":"Hi.SqliteUtils.SqliteStepStorage.html","topicHref":"Hi.SqliteUtils.SqliteStepStorage.html","topicUid":"Hi.SqliteUtils.SqliteStepStorage","type":"Class"},{"name":"SqliteStepStorage.MillingStepLuggageRow","href":"Hi.SqliteUtils.SqliteStepStorage.MillingStepLuggageRow.html","topicHref":"Hi.SqliteUtils.SqliteStepStorage.MillingStepLuggageRow.html","topicUid":"Hi.SqliteUtils.SqliteStepStorage.MillingStepLuggageRow","type":"Class"},{"name":"SqliteUserStore","href":"Hi.SqliteUtils.SqliteUserStore-1.html","topicHref":"Hi.SqliteUtils.SqliteUserStore-1.html","topicUid":"Hi.SqliteUtils.SqliteUserStore`1","type":"Class"}]},{"name":"Hi.Test","href":"Hi.Test.html","topicHref":"Hi.Test.html","topicUid":"Hi.Test","type":"Namespace","items":[{"name":"TestCollision","href":"Hi.Test.TestCollision.html","topicHref":"Hi.Test.TestCollision.html","topicUid":"Hi.Test.TestCollision","type":"Class"}]},{"name":"Hi.UiExtensions","href":"Hi.UiExtensions.html","topicHref":"Hi.UiExtensions.html","topicUid":"Hi.UiExtensions","type":"Namespace","items":[{"name":"ChartBoundary","href":"Hi.UiExtensions.ChartBoundary.html","topicHref":"Hi.UiExtensions.ChartBoundary.html","topicUid":"Hi.UiExtensions.ChartBoundary","type":"Class"},{"name":"ChartBoundaryEnum","href":"Hi.UiExtensions.ChartBoundaryEnum.html","topicHref":"Hi.UiExtensions.ChartBoundaryEnum.html","topicUid":"Hi.UiExtensions.ChartBoundaryEnum","type":"Enum"},{"name":"NativeVisibility","href":"Hi.UiExtensions.NativeVisibility.html","topicHref":"Hi.UiExtensions.NativeVisibility.html","topicUid":"Hi.UiExtensions.NativeVisibility","type":"Enum"},{"name":"UiUtil","href":"Hi.UiExtensions.UiUtil.html","topicHref":"Hi.UiExtensions.UiUtil.html","topicUid":"Hi.UiExtensions.UiUtil","type":"Class"},{"name":"UiUtil.InvokeFunc","href":"Hi.UiExtensions.UiUtil.InvokeFunc.html","topicHref":"Hi.UiExtensions.UiUtil.InvokeFunc.html","topicUid":"Hi.UiExtensions.UiUtil.InvokeFunc","type":"Delegate"}]},{"name":"Hi.UniversalNc","href":"Hi.UniversalNc.html","topicHref":"Hi.UniversalNc.html","topicUid":"Hi.UniversalNc","type":"Namespace","items":[{"name":"Lang","href":"Hi.UniversalNc.Lang.html","topicHref":"Hi.UniversalNc.Lang.html","topicUid":"Hi.UniversalNc.Lang","type":"Class"}]},{"name":"Hi.Vibrations","href":"Hi.Vibrations.html","topicHref":"Hi.Vibrations.html","topicUid":"Hi.Vibrations","type":"Namespace","items":[{"name":"AngularVelocityUtil","href":"Hi.Vibrations.AngularVelocityUtil.html","topicHref":"Hi.Vibrations.AngularVelocityUtil.html","topicUid":"Hi.Vibrations.AngularVelocityUtil","type":"Class"},{"name":"ForceAccelAmpPhase","href":"Hi.Vibrations.ForceAccelAmpPhase.html","topicHref":"Hi.Vibrations.ForceAccelAmpPhase.html","topicUid":"Hi.Vibrations.ForceAccelAmpPhase","type":"Class"},{"name":"ForceAccelFourierSeries","href":"Hi.Vibrations.ForceAccelFourierSeries.html","topicHref":"Hi.Vibrations.ForceAccelFourierSeries.html","topicUid":"Hi.Vibrations.ForceAccelFourierSeries","type":"Class"},{"name":"ForceAccelShot","href":"Hi.Vibrations.ForceAccelShot.html","topicHref":"Hi.Vibrations.ForceAccelShot.html","topicUid":"Hi.Vibrations.ForceAccelShot","type":"Class"},{"name":"ForceAccelUtil","href":"Hi.Vibrations.ForceAccelUtil.html","topicHref":"Hi.Vibrations.ForceAccelUtil.html","topicUid":"Hi.Vibrations.ForceAccelUtil","type":"Class"},{"name":"IAngularVelocityOwner","href":"Hi.Vibrations.IAngularVelocityOwner.html","topicHref":"Hi.Vibrations.IAngularVelocityOwner.html","topicUid":"Hi.Vibrations.IAngularVelocityOwner","type":"Interface"},{"name":"VibrationUtil","href":"Hi.Vibrations.VibrationUtil.html","topicHref":"Hi.Vibrations.VibrationUtil.html","topicUid":"Hi.Vibrations.VibrationUtil","type":"Class"},{"name":"WAmpPhase","href":"Hi.Vibrations.WAmpPhase.html","topicHref":"Hi.Vibrations.WAmpPhase.html","topicUid":"Hi.Vibrations.WAmpPhase","type":"Class"},{"name":"WAmpPhaseXyzTransformation","href":"Hi.Vibrations.WAmpPhaseXyzTransformation.html","topicHref":"Hi.Vibrations.WAmpPhaseXyzTransformation.html","topicUid":"Hi.Vibrations.WAmpPhaseXyzTransformation","type":"Class"}]},{"name":"Hi.WinForm.Disp","href":"Hi.WinForm.Disp.html","topicHref":"Hi.WinForm.Disp.html","topicUid":"Hi.WinForm.Disp","type":"Namespace","items":[{"name":"RenderingCanvas","href":"Hi.WinForm.Disp.RenderingCanvas.html","topicHref":"Hi.WinForm.Disp.RenderingCanvas.html","topicUid":"Hi.WinForm.Disp.RenderingCanvas","type":"Class"},{"name":"RenderingForm","href":"Hi.WinForm.Disp.RenderingForm.html","topicHref":"Hi.WinForm.Disp.RenderingForm.html","topicUid":"Hi.WinForm.Disp.RenderingForm","type":"Class"}]},{"name":"Hi.WpfPlus.Disp","href":"Hi.WpfPlus.Disp.html","topicHref":"Hi.WpfPlus.Disp.html","topicUid":"Hi.WpfPlus.Disp","type":"Namespace","items":[{"name":"RenderingCanvas","href":"Hi.WpfPlus.Disp.RenderingCanvas.html","topicHref":"Hi.WpfPlus.Disp.RenderingCanvas.html","topicUid":"Hi.WpfPlus.Disp.RenderingCanvas","type":"Class"},{"name":"RenderingWindow","href":"Hi.WpfPlus.Disp.RenderingWindow.html","topicHref":"Hi.WpfPlus.Disp.RenderingWindow.html","topicUid":"Hi.WpfPlus.Disp.RenderingWindow","type":"Class"},{"name":"WpfDispUtil","href":"Hi.WpfPlus.Disp.WpfDispUtil.html","topicHref":"Hi.WpfPlus.Disp.WpfDispUtil.html","topicUid":"Hi.WpfPlus.Disp.WpfDispUtil","type":"Class"}]},{"name":"HiMachining.Milling","href":"HiMachining.Milling.html","topicHref":"HiMachining.Milling.html","topicUid":"HiMachining.Milling","type":"Namespace","items":[{"name":"ClMillingDevice","href":"HiMachining.Milling.ClMillingDevice.html","topicHref":"HiMachining.Milling.ClMillingDevice.html","topicUid":"HiMachining.Milling.ClMillingDevice","type":"Class"}]},{"name":"HiNc.Grpcs","href":"HiNc.Grpcs.html","topicHref":"HiNc.Grpcs.html","topicUid":"HiNc.Grpcs","type":"Namespace","items":[{"name":"MachiningProjectGrpcServer","href":"HiNc.Grpcs.MachiningProjectGrpcServer.html","topicHref":"HiNc.Grpcs.MachiningProjectGrpcServer.html","topicUid":"HiNc.Grpcs.MachiningProjectGrpcServer","type":"Class"}]},{"name":"numerical","href":"numerical.html","topicHref":"numerical.html","topicUid":"numerical","type":"Namespace","items":[{"name":"Empty","href":"numerical.Empty.html","topicHref":"numerical.Empty.html","topicUid":"numerical.Empty","type":"Class"},{"name":"GrpcCsvRowDictionary","href":"numerical.GrpcCsvRowDictionary.html","topicHref":"numerical.GrpcCsvRowDictionary.html","topicUid":"numerical.GrpcCsvRowDictionary","type":"Class"},{"name":"GrpcNcStep","href":"numerical.GrpcNcStep.html","topicHref":"numerical.GrpcNcStep.html","topicUid":"numerical.GrpcNcStep","type":"Class"},{"name":"NumericalReflection","href":"numerical.NumericalReflection.html","topicHref":"numerical.NumericalReflection.html","topicUid":"numerical.NumericalReflection","type":"Class"},{"name":"NumericalService","href":"numerical.NumericalService.html","topicHref":"numerical.NumericalService.html","topicUid":"numerical.NumericalService","type":"Class"},{"name":"NumericalService.NumericalServiceBase","href":"numerical.NumericalService.NumericalServiceBase.html","topicHref":"numerical.NumericalService.NumericalServiceBase.html","topicUid":"numerical.NumericalService.NumericalServiceBase","type":"Class"},{"name":"NumericalService.NumericalServiceClient","href":"numerical.NumericalService.NumericalServiceClient.html","topicHref":"numerical.NumericalService.NumericalServiceClient.html","topicUid":"numerical.NumericalService.NumericalServiceClient","type":"Class"},{"name":"UniversalNcReflection","href":"numerical.UniversalNcReflection.html","topicHref":"numerical.UniversalNcReflection.html","topicUid":"numerical.UniversalNcReflection","type":"Class"},{"name":"UniversalNcService","href":"numerical.UniversalNcService.html","topicHref":"numerical.UniversalNcService.html","topicUid":"numerical.UniversalNcService","type":"Class"},{"name":"UniversalNcService.UniversalNcServiceBase","href":"numerical.UniversalNcService.UniversalNcServiceBase.html","topicHref":"numerical.UniversalNcService.UniversalNcServiceBase.html","topicUid":"numerical.UniversalNcService.UniversalNcServiceBase","type":"Class"},{"name":"UniversalNcService.UniversalNcServiceClient","href":"numerical.UniversalNcService.UniversalNcServiceClient.html","topicHref":"numerical.UniversalNcService.UniversalNcServiceClient.html","topicUid":"numerical.UniversalNcService.UniversalNcServiceClient","type":"Class"}]}],"memberLayout":"SamePage"} +{"items":[{"name":"Hi.Cbtr","href":"Hi.Cbtr.html","topicHref":"Hi.Cbtr.html","topicUid":"Hi.Cbtr","type":"Namespace","items":[{"name":"CachedTris","href":"Hi.Cbtr.CachedTris.html","topicHref":"Hi.Cbtr.CachedTris.html","topicUid":"Hi.Cbtr.CachedTris","type":"Class"},{"name":"CachedTris.SweepingMode","href":"Hi.Cbtr.CachedTris.SweepingMode.html","topicHref":"Hi.Cbtr.CachedTris.SweepingMode.html","topicUid":"Hi.Cbtr.CachedTris.SweepingMode","type":"Enum"},{"name":"CbtrPickable","href":"Hi.Cbtr.CbtrPickable.html","topicHref":"Hi.Cbtr.CbtrPickable.html","topicUid":"Hi.Cbtr.CbtrPickable","type":"Class"},{"name":"ConstructionDefectDisplayee","href":"Hi.Cbtr.ConstructionDefectDisplayee.html","topicHref":"Hi.Cbtr.ConstructionDefectDisplayee.html","topicUid":"Hi.Cbtr.ConstructionDefectDisplayee","type":"Class"},{"name":"CubeTree","href":"Hi.Cbtr.CubeTree.html","topicHref":"Hi.Cbtr.CubeTree.html","topicUid":"Hi.Cbtr.CubeTree","type":"Class"},{"name":"CubeTree.DefectNodeInfo","href":"Hi.Cbtr.CubeTree.DefectNodeInfo.html","topicHref":"Hi.Cbtr.CubeTree.DefectNodeInfo.html","topicUid":"Hi.Cbtr.CubeTree.DefectNodeInfo","type":"Class"},{"name":"CubeTree.DefectNodeInfo.TriWireInfo","href":"Hi.Cbtr.CubeTree.DefectNodeInfo.TriWireInfo.html","topicHref":"Hi.Cbtr.CubeTree.DefectNodeInfo.TriWireInfo.html","topicUid":"Hi.Cbtr.CubeTree.DefectNodeInfo.TriWireInfo","type":"Class"},{"name":"CubeTree.DefectTriWireInfoInterop","href":"Hi.Cbtr.CubeTree.DefectTriWireInfoInterop.html","topicHref":"Hi.Cbtr.CubeTree.DefectTriWireInfoInterop.html","topicUid":"Hi.Cbtr.CubeTree.DefectTriWireInfoInterop","type":"Struct"},{"name":"CubeTree.InfNodeInfo","href":"Hi.Cbtr.CubeTree.InfNodeInfo.html","topicHref":"Hi.Cbtr.CubeTree.InfNodeInfo.html","topicUid":"Hi.Cbtr.CubeTree.InfNodeInfo","type":"Class"},{"name":"CubeTree.TriWireRelationInterop","href":"Hi.Cbtr.CubeTree.TriWireRelationInterop.html","topicHref":"Hi.Cbtr.CubeTree.TriWireRelationInterop.html","topicUid":"Hi.Cbtr.CubeTree.TriWireRelationInterop","type":"Struct"},{"name":"CubeTree.diff_response_func_t","href":"Hi.Cbtr.CubeTree.diff_response_func_t.html","topicHref":"Hi.Cbtr.CubeTree.diff_response_func_t.html","topicUid":"Hi.Cbtr.CubeTree.diff_response_func_t","type":"Delegate"},{"name":"CubeTreeExportExtensions","href":"Hi.Cbtr.CubeTreeExportExtensions.html","topicHref":"Hi.Cbtr.CubeTreeExportExtensions.html","topicUid":"Hi.Cbtr.CubeTreeExportExtensions","type":"Class"},{"name":"CubeTreeFile","href":"Hi.Cbtr.CubeTreeFile.html","topicHref":"Hi.Cbtr.CubeTreeFile.html","topicUid":"Hi.Cbtr.CubeTreeFile","type":"Class"},{"name":"DiffAttachment","href":"Hi.Cbtr.DiffAttachment.html","topicHref":"Hi.Cbtr.DiffAttachment.html","topicUid":"Hi.Cbtr.DiffAttachment","type":"Class"},{"name":"GeomBoolCache","href":"Hi.Cbtr.GeomBoolCache.html","topicHref":"Hi.Cbtr.GeomBoolCache.html","topicUid":"Hi.Cbtr.GeomBoolCache","type":"Class"},{"name":"GeomBoolCacheEnum","href":"Hi.Cbtr.GeomBoolCacheEnum.html","topicHref":"Hi.Cbtr.GeomBoolCacheEnum.html","topicUid":"Hi.Cbtr.GeomBoolCacheEnum","type":"Enum"},{"name":"IGetInitStickConvex","href":"Hi.Cbtr.IGetInitStickConvex.html","topicHref":"Hi.Cbtr.IGetInitStickConvex.html","topicUid":"Hi.Cbtr.IGetInitStickConvex","type":"Interface"},{"name":"InfDefectDisplayee","href":"Hi.Cbtr.InfDefectDisplayee.html","topicHref":"Hi.Cbtr.InfDefectDisplayee.html","topicUid":"Hi.Cbtr.InfDefectDisplayee","type":"Class"},{"name":"InitStickConvex","href":"Hi.Cbtr.InitStickConvex.html","topicHref":"Hi.Cbtr.InitStickConvex.html","topicUid":"Hi.Cbtr.InitStickConvex","type":"Class"},{"name":"LsStl","href":"Hi.Cbtr.LsStl.html","topicHref":"Hi.Cbtr.LsStl.html","topicUid":"Hi.Cbtr.LsStl","type":"Class"},{"name":"Substraction","href":"Hi.Cbtr.Substraction.html","topicHref":"Hi.Cbtr.Substraction.html","topicUid":"Hi.Cbtr.Substraction","type":"Class"},{"name":"UnhighlightablePickable","href":"Hi.Cbtr.UnhighlightablePickable.html","topicHref":"Hi.Cbtr.UnhighlightablePickable.html","topicUid":"Hi.Cbtr.UnhighlightablePickable","type":"Class"},{"name":"UnmanagedSubstraction","href":"Hi.Cbtr.UnmanagedSubstraction.html","topicHref":"Hi.Cbtr.UnmanagedSubstraction.html","topicUid":"Hi.Cbtr.UnmanagedSubstraction","type":"Class"},{"name":"WireCube","href":"Hi.Cbtr.WireCube.html","topicHref":"Hi.Cbtr.WireCube.html","topicUid":"Hi.Cbtr.WireCube","type":"Class"},{"name":"node_diff_t","href":"Hi.Cbtr.node_diff_t.html","topicHref":"Hi.Cbtr.node_diff_t.html","topicUid":"Hi.Cbtr.node_diff_t","type":"Struct"}]},{"name":"Hi.Collision","href":"Hi.Collision.html","topicHref":"Hi.Collision.html","topicUid":"Hi.Collision","type":"Namespace","items":[{"name":"AnchoredCollidableLeaf","href":"Hi.Collision.AnchoredCollidableLeaf.html","topicHref":"Hi.Collision.AnchoredCollidableLeaf.html","topicUid":"Hi.Collision.AnchoredCollidableLeaf","type":"Class"},{"name":"AnchoredCollidablePair","href":"Hi.Collision.AnchoredCollidablePair.html","topicHref":"Hi.Collision.AnchoredCollidablePair.html","topicUid":"Hi.Collision.AnchoredCollidablePair","type":"Class"},{"name":"CollidableStl","href":"Hi.Collision.CollidableStl.html","topicHref":"Hi.Collision.CollidableStl.html","topicUid":"Hi.Collision.CollidableStl","type":"Class"},{"name":"CollisionFlag","href":"Hi.Collision.CollisionFlag.html","topicHref":"Hi.Collision.CollisionFlag.html","topicUid":"Hi.Collision.CollisionFlag","type":"Enum"},{"name":"CollisionIndexPair","href":"Hi.Collision.CollisionIndexPair.html","topicHref":"Hi.Collision.CollisionIndexPair.html","topicUid":"Hi.Collision.CollisionIndexPair","type":"Class"},{"name":"CollisionUtil","href":"Hi.Collision.CollisionUtil.html","topicHref":"Hi.Collision.CollisionUtil.html","topicUid":"Hi.Collision.CollisionUtil","type":"Class"},{"name":"FuncAnchoredCollidable","href":"Hi.Collision.FuncAnchoredCollidable.html","topicHref":"Hi.Collision.FuncAnchoredCollidable.html","topicUid":"Hi.Collision.FuncAnchoredCollidable","type":"Class"},{"name":"IAnchoredCollidableBased","href":"Hi.Collision.IAnchoredCollidableBased.html","topicHref":"Hi.Collision.IAnchoredCollidableBased.html","topicUid":"Hi.Collision.IAnchoredCollidableBased","type":"Interface"},{"name":"IAnchoredCollidableLeaf","href":"Hi.Collision.IAnchoredCollidableLeaf.html","topicHref":"Hi.Collision.IAnchoredCollidableLeaf.html","topicUid":"Hi.Collision.IAnchoredCollidableLeaf","type":"Interface"},{"name":"IAnchoredCollidableNode","href":"Hi.Collision.IAnchoredCollidableNode.html","topicHref":"Hi.Collision.IAnchoredCollidableNode.html","topicUid":"Hi.Collision.IAnchoredCollidableNode","type":"Interface"},{"name":"IAnchoredCollidableStem","href":"Hi.Collision.IAnchoredCollidableStem.html","topicHref":"Hi.Collision.IAnchoredCollidableStem.html","topicUid":"Hi.Collision.IAnchoredCollidableStem","type":"Interface"},{"name":"ICollidable","href":"Hi.Collision.ICollidable.html","topicHref":"Hi.Collision.ICollidable.html","topicUid":"Hi.Collision.ICollidable","type":"Interface"},{"name":"ICollidee","href":"Hi.Collision.ICollidee.html","topicHref":"Hi.Collision.ICollidee.html","topicUid":"Hi.Collision.ICollidee","type":"Interface"},{"name":"ICollisionArena","href":"Hi.Collision.ICollisionArena.html","topicHref":"Hi.Collision.ICollisionArena.html","topicUid":"Hi.Collision.ICollisionArena","type":"Interface"},{"name":"ICollisionIndex","href":"Hi.Collision.ICollisionIndex.html","topicHref":"Hi.Collision.ICollisionIndex.html","topicUid":"Hi.Collision.ICollisionIndex","type":"Interface"},{"name":"IGetAnchoredCollidablePairs","href":"Hi.Collision.IGetAnchoredCollidablePairs.html","topicHref":"Hi.Collision.IGetAnchoredCollidablePairs.html","topicUid":"Hi.Collision.IGetAnchoredCollidablePairs","type":"Interface"},{"name":"IGetCollidable","href":"Hi.Collision.IGetCollidable.html","topicHref":"Hi.Collision.IGetCollidable.html","topicUid":"Hi.Collision.IGetCollidable","type":"Interface"},{"name":"IGetCollisionIndexPairs","href":"Hi.Collision.IGetCollisionIndexPairs.html","topicHref":"Hi.Collision.IGetCollisionIndexPairs.html","topicUid":"Hi.Collision.IGetCollisionIndexPairs","type":"Interface"},{"name":"IGetDefaultCollidablePairs","href":"Hi.Collision.IGetDefaultCollidablePairs.html","topicHref":"Hi.Collision.IGetDefaultCollidablePairs.html","topicUid":"Hi.Collision.IGetDefaultCollidablePairs","type":"Interface"},{"name":"IGetTriTree","href":"Hi.Collision.IGetTriTree.html","topicHref":"Hi.Collision.IGetTriTree.html","topicUid":"Hi.Collision.IGetTriTree","type":"Interface"},{"name":"MechCollisionResult","href":"Hi.Collision.MechCollisionResult.html","topicHref":"Hi.Collision.MechCollisionResult.html","topicUid":"Hi.Collision.MechCollisionResult","type":"Class"},{"name":"MechCollisionUtil","href":"Hi.Collision.MechCollisionUtil.html","topicHref":"Hi.Collision.MechCollisionUtil.html","topicUid":"Hi.Collision.MechCollisionUtil","type":"Class"},{"name":"TriTree","href":"Hi.Collision.TriTree.html","topicHref":"Hi.Collision.TriTree.html","topicUid":"Hi.Collision.TriTree","type":"Class"}]},{"name":"Hi.Collisions","href":"Hi.Collisions.html","topicHref":"Hi.Collisions.html","topicUid":"Hi.Collisions","type":"Namespace","items":[{"name":"AnchoredCollidabled","href":"Hi.Collisions.AnchoredCollidabled.html","topicHref":"Hi.Collisions.AnchoredCollidabled.html","topicUid":"Hi.Collisions.AnchoredCollidabled","type":"Class"},{"name":"IAnchoredCollidabled","href":"Hi.Collisions.IAnchoredCollidabled.html","topicHref":"Hi.Collisions.IAnchoredCollidabled.html","topicUid":"Hi.Collisions.IAnchoredCollidabled","type":"Interface"}]},{"name":"Hi.Coloring","href":"Hi.Coloring.html","topicHref":"Hi.Coloring.html","topicUid":"Hi.Coloring","type":"Namespace","items":[{"name":"ColorUtil","href":"Hi.Coloring.ColorUtil.html","topicHref":"Hi.Coloring.ColorUtil.html","topicUid":"Hi.Coloring.ColorUtil","type":"Class"},{"name":"DictionaryColorGuide","href":"Hi.Coloring.DictionaryColorGuide.html","topicHref":"Hi.Coloring.DictionaryColorGuide.html","topicUid":"Hi.Coloring.DictionaryColorGuide","type":"Class"},{"name":"DiscreteQuantityColorGuide","href":"Hi.Coloring.DiscreteQuantityColorGuide.html","topicHref":"Hi.Coloring.DiscreteQuantityColorGuide.html","topicUid":"Hi.Coloring.DiscreteQuantityColorGuide","type":"Class"},{"name":"FilteredColorGuide","href":"Hi.Coloring.FilteredColorGuide.html","topicHref":"Hi.Coloring.FilteredColorGuide.html","topicUid":"Hi.Coloring.FilteredColorGuide","type":"Class"},{"name":"FuncRangeColorGuide","href":"Hi.Coloring.FuncRangeColorGuide.html","topicHref":"Hi.Coloring.FuncRangeColorGuide.html","topicUid":"Hi.Coloring.FuncRangeColorGuide","type":"Class"},{"name":"IColorGuide","href":"Hi.Coloring.IColorGuide.html","topicHref":"Hi.Coloring.IColorGuide.html","topicUid":"Hi.Coloring.IColorGuide","type":"Interface"},{"name":"IColorGuideProperty","href":"Hi.Coloring.IColorGuideProperty.html","topicHref":"Hi.Coloring.IColorGuideProperty.html","topicUid":"Hi.Coloring.IColorGuideProperty","type":"Interface"},{"name":"IGetColorGuide","href":"Hi.Coloring.IGetColorGuide.html","topicHref":"Hi.Coloring.IGetColorGuide.html","topicUid":"Hi.Coloring.IGetColorGuide","type":"Interface"},{"name":"IGetRangeColorRule","href":"Hi.Coloring.IGetRangeColorRule.html","topicHref":"Hi.Coloring.IGetRangeColorRule.html","topicUid":"Hi.Coloring.IGetRangeColorRule","type":"Interface"},{"name":"IGetRgb","href":"Hi.Coloring.IGetRgb.html","topicHref":"Hi.Coloring.IGetRgb.html","topicUid":"Hi.Coloring.IGetRgb","type":"Interface"},{"name":"IGetRgbWithPriority","href":"Hi.Coloring.IGetRgbWithPriority.html","topicHref":"Hi.Coloring.IGetRgbWithPriority.html","topicUid":"Hi.Coloring.IGetRgbWithPriority","type":"Interface"},{"name":"PlainColorGuide","href":"Hi.Coloring.PlainColorGuide.html","topicHref":"Hi.Coloring.PlainColorGuide.html","topicUid":"Hi.Coloring.PlainColorGuide","type":"Class"},{"name":"QuantityColorGuide","href":"Hi.Coloring.QuantityColorGuide.html","topicHref":"Hi.Coloring.QuantityColorGuide.html","topicUid":"Hi.Coloring.QuantityColorGuide","type":"Class"},{"name":"RangeColorRule","href":"Hi.Coloring.RangeColorRule.html","topicHref":"Hi.Coloring.RangeColorRule.html","topicUid":"Hi.Coloring.RangeColorRule","type":"Class"},{"name":"RatioRgbFuncEnum","href":"Hi.Coloring.RatioRgbFuncEnum.html","topicHref":"Hi.Coloring.RatioRgbFuncEnum.html","topicUid":"Hi.Coloring.RatioRgbFuncEnum","type":"Enum"},{"name":"RgbSeed","href":"Hi.Coloring.RgbSeed.html","topicHref":"Hi.Coloring.RgbSeed.html","topicUid":"Hi.Coloring.RgbSeed","type":"Class"}]},{"name":"Hi.Common","href":"Hi.Common.html","topicHref":"Hi.Common.html","topicUid":"Hi.Common","type":"Namespace","items":[{"name":"BinIoUtil","href":"Hi.Common.BinIoUtil.html","topicHref":"Hi.Common.BinIoUtil.html","topicUid":"Hi.Common.BinIoUtil","type":"Class"},{"name":"BitUtil","href":"Hi.Common.BitUtil.html","topicHref":"Hi.Common.BitUtil.html","topicUid":"Hi.Common.BitUtil","type":"Class"},{"name":"BlockingTimer","href":"Hi.Common.BlockingTimer.html","topicHref":"Hi.Common.BlockingTimer.html","topicUid":"Hi.Common.BlockingTimer","type":"Class"},{"name":"BytesUtil","href":"Hi.Common.BytesUtil.html","topicHref":"Hi.Common.BytesUtil.html","topicUid":"Hi.Common.BytesUtil","type":"Class"},{"name":"ConcurrentTimeCounter","href":"Hi.Common.ConcurrentTimeCounter.html","topicHref":"Hi.Common.ConcurrentTimeCounter.html","topicUid":"Hi.Common.ConcurrentTimeCounter","type":"Class"},{"name":"ConsoleUtil","href":"Hi.Common.ConsoleUtil.html","topicHref":"Hi.Common.ConsoleUtil.html","topicUid":"Hi.Common.ConsoleUtil","type":"Class"},{"name":"CppLogUtil","href":"Hi.Common.CppLogUtil.html","topicHref":"Hi.Common.CppLogUtil.html","topicUid":"Hi.Common.CppLogUtil","type":"Class"},{"name":"CppLogUtil.LogDelegate","href":"Hi.Common.CppLogUtil.LogDelegate.html","topicHref":"Hi.Common.CppLogUtil.LogDelegate.html","topicUid":"Hi.Common.CppLogUtil.LogDelegate","type":"Delegate"},{"name":"CultureUtil","href":"Hi.Common.CultureUtil.html","topicHref":"Hi.Common.CultureUtil.html","topicUid":"Hi.Common.CultureUtil","type":"Class"},{"name":"DuplicateUtil","href":"Hi.Common.DuplicateUtil.html","topicHref":"Hi.Common.DuplicateUtil.html","topicUid":"Hi.Common.DuplicateUtil","type":"Class"},{"name":"EnumUtil","href":"Hi.Common.EnumUtil.html","topicHref":"Hi.Common.EnumUtil.html","topicUid":"Hi.Common.EnumUtil","type":"Class"},{"name":"EnumerablePlayer","href":"Hi.Common.EnumerablePlayer.html","topicHref":"Hi.Common.EnumerablePlayer.html","topicUid":"Hi.Common.EnumerablePlayer","type":"Class"},{"name":"IAbstractNote","href":"Hi.Common.IAbstractNote.html","topicHref":"Hi.Common.IAbstractNote.html","topicUid":"Hi.Common.IAbstractNote","type":"Interface"},{"name":"IBinaryIo","href":"Hi.Common.IBinaryIo.html","topicHref":"Hi.Common.IBinaryIo.html","topicUid":"Hi.Common.IBinaryIo","type":"Interface"},{"name":"IClearCache","href":"Hi.Common.IClearCache.html","topicHref":"Hi.Common.IClearCache.html","topicUid":"Hi.Common.IClearCache","type":"Interface"},{"name":"IDuplicate","href":"Hi.Common.IDuplicate.html","topicHref":"Hi.Common.IDuplicate.html","topicUid":"Hi.Common.IDuplicate","type":"Interface"},{"name":"IGetQuantityByKey","href":"Hi.Common.IGetQuantityByKey.html","topicHref":"Hi.Common.IGetQuantityByKey.html","topicUid":"Hi.Common.IGetQuantityByKey","type":"Interface"},{"name":"IGetSelectionName","href":"Hi.Common.IGetSelectionName.html","topicHref":"Hi.Common.IGetSelectionName.html","topicUid":"Hi.Common.IGetSelectionName","type":"Interface"},{"name":"INameNote","href":"Hi.Common.INameNote.html","topicHref":"Hi.Common.INameNote.html","topicUid":"Hi.Common.INameNote","type":"Interface"},{"name":"IPreferredFileName","href":"Hi.Common.IPreferredFileName.html","topicHref":"Hi.Common.IPreferredFileName.html","topicUid":"Hi.Common.IPreferredFileName","type":"Interface"},{"name":"IProgressFraction","href":"Hi.Common.IProgressFraction.html","topicHref":"Hi.Common.IProgressFraction.html","topicUid":"Hi.Common.IProgressFraction","type":"Interface"},{"name":"ISourceFile","href":"Hi.Common.ISourceFile.html","topicHref":"Hi.Common.ISourceFile.html","topicUid":"Hi.Common.ISourceFile","type":"Interface"},{"name":"IToPresentDto","href":"Hi.Common.IToPresentDto.html","topicHref":"Hi.Common.IToPresentDto.html","topicUid":"Hi.Common.IToPresentDto","type":"Interface"},{"name":"IUpdateByContent","href":"Hi.Common.IUpdateByContent.html","topicHref":"Hi.Common.IUpdateByContent.html","topicUid":"Hi.Common.IUpdateByContent","type":"Interface"},{"name":"IUriGetter","href":"Hi.Common.IUriGetter.html","topicHref":"Hi.Common.IUriGetter.html","topicUid":"Hi.Common.IUriGetter","type":"Interface"},{"name":"IWriteBin","href":"Hi.Common.IWriteBin.html","topicHref":"Hi.Common.IWriteBin.html","topicUid":"Hi.Common.IWriteBin","type":"Interface"},{"name":"IndexSegment","href":"Hi.Common.IndexSegment.html","topicHref":"Hi.Common.IndexSegment.html","topicUid":"Hi.Common.IndexSegment","type":"Class"},{"name":"IntegerKeyDictionaryConverter","href":"Hi.Common.IntegerKeyDictionaryConverter.html","topicHref":"Hi.Common.IntegerKeyDictionaryConverter.html","topicUid":"Hi.Common.IntegerKeyDictionaryConverter","type":"Class"},{"name":"IntegerKeyDictionaryConverter","href":"Hi.Common.IntegerKeyDictionaryConverter-1.html","topicHref":"Hi.Common.IntegerKeyDictionaryConverter-1.html","topicUid":"Hi.Common.IntegerKeyDictionaryConverter`1","type":"Class"},{"name":"InternalException","href":"Hi.Common.InternalException.html","topicHref":"Hi.Common.InternalException.html","topicUid":"Hi.Common.InternalException","type":"Class"},{"name":"InvokeUtil","href":"Hi.Common.InvokeUtil.html","topicHref":"Hi.Common.InvokeUtil.html","topicUid":"Hi.Common.InvokeUtil","type":"Class"},{"name":"JsonUtil","href":"Hi.Common.JsonUtil.html","topicHref":"Hi.Common.JsonUtil.html","topicUid":"Hi.Common.JsonUtil","type":"Class"},{"name":"LooseRunner","href":"Hi.Common.LooseRunner.html","topicHref":"Hi.Common.LooseRunner.html","topicUid":"Hi.Common.LooseRunner","type":"Class"},{"name":"LooseRunner.MergedCancellationTokenRun","href":"Hi.Common.LooseRunner.MergedCancellationTokenRun.html","topicHref":"Hi.Common.LooseRunner.MergedCancellationTokenRun.html","topicUid":"Hi.Common.LooseRunner.MergedCancellationTokenRun","type":"Delegate"},{"name":"ManualUtil","href":"Hi.Common.ManualUtil.html","topicHref":"Hi.Common.ManualUtil.html","topicUid":"Hi.Common.ManualUtil","type":"Class"},{"name":"MaskUtil","href":"Hi.Common.MaskUtil.html","topicHref":"Hi.Common.MaskUtil.html","topicUid":"Hi.Common.MaskUtil","type":"Class"},{"name":"NameUtil","href":"Hi.Common.NameUtil.html","topicHref":"Hi.Common.NameUtil.html","topicUid":"Hi.Common.NameUtil","type":"Class"},{"name":"PacePlayee","href":"Hi.Common.PacePlayee.html","topicHref":"Hi.Common.PacePlayee.html","topicUid":"Hi.Common.PacePlayee","type":"Class"},{"name":"PacePlayer","href":"Hi.Common.PacePlayer.html","topicHref":"Hi.Common.PacePlayer.html","topicUid":"Hi.Common.PacePlayer","type":"Class"},{"name":"Pair","href":"Hi.Common.Pair-2.html","topicHref":"Hi.Common.Pair-2.html","topicUid":"Hi.Common.Pair`2","type":"Class"},{"name":"ProgressFraction","href":"Hi.Common.ProgressFraction.html","topicHref":"Hi.Common.ProgressFraction.html","topicUid":"Hi.Common.ProgressFraction","type":"Class"},{"name":"Range","href":"Hi.Common.Range-1.html","topicHref":"Hi.Common.Range-1.html","topicUid":"Hi.Common.Range`1","type":"Class"},{"name":"ResourceUtil","href":"Hi.Common.ResourceUtil.html","topicHref":"Hi.Common.ResourceUtil.html","topicUid":"Hi.Common.ResourceUtil","type":"Class"},{"name":"RoutineBlocker","href":"Hi.Common.RoutineBlocker.html","topicHref":"Hi.Common.RoutineBlocker.html","topicUid":"Hi.Common.RoutineBlocker","type":"Class"},{"name":"SearchResult","href":"Hi.Common.SearchResult.html","topicHref":"Hi.Common.SearchResult.html","topicUid":"Hi.Common.SearchResult","type":"Enum"},{"name":"SeqPairUtil","href":"Hi.Common.SeqPairUtil.html","topicHref":"Hi.Common.SeqPairUtil.html","topicUid":"Hi.Common.SeqPairUtil","type":"Class"},{"name":"SeqPair","href":"Hi.Common.SeqPair-1.html","topicHref":"Hi.Common.SeqPair-1.html","topicUid":"Hi.Common.SeqPair`1","type":"Class"},{"name":"ServerFileExplorerConfig","href":"Hi.Common.ServerFileExplorerConfig.html","topicHref":"Hi.Common.ServerFileExplorerConfig.html","topicUid":"Hi.Common.ServerFileExplorerConfig","type":"Class"},{"name":"StringLocalizer","href":"Hi.Common.StringLocalizer.html","topicHref":"Hi.Common.StringLocalizer.html","topicUid":"Hi.Common.StringLocalizer","type":"Class"},{"name":"StringUtil","href":"Hi.Common.StringUtil.html","topicHref":"Hi.Common.StringUtil.html","topicUid":"Hi.Common.StringUtil","type":"Class"},{"name":"TaskUtil","href":"Hi.Common.TaskUtil.html","topicHref":"Hi.Common.TaskUtil.html","topicUid":"Hi.Common.TaskUtil","type":"Class"},{"name":"TimeCounter","href":"Hi.Common.TimeCounter.html","topicHref":"Hi.Common.TimeCounter.html","topicUid":"Hi.Common.TimeCounter","type":"Class"}]},{"name":"Hi.Common.Collections","href":"Hi.Common.Collections.html","topicHref":"Hi.Common.Collections.html","topicUid":"Hi.Common.Collections","type":"Namespace","items":[{"name":"DictionaryUtil","href":"Hi.Common.Collections.DictionaryUtil.html","topicHref":"Hi.Common.Collections.DictionaryUtil.html","topicUid":"Hi.Common.Collections.DictionaryUtil","type":"Class"},{"name":"EnumerableUtil","href":"Hi.Common.Collections.EnumerableUtil.html","topicHref":"Hi.Common.Collections.EnumerableUtil.html","topicUid":"Hi.Common.Collections.EnumerableUtil","type":"Class"},{"name":"FixedSizeConcurrentLinkedListUtil","href":"Hi.Common.Collections.FixedSizeConcurrentLinkedListUtil.html","topicHref":"Hi.Common.Collections.FixedSizeConcurrentLinkedListUtil.html","topicUid":"Hi.Common.Collections.FixedSizeConcurrentLinkedListUtil","type":"Class"},{"name":"LazyLinkedListNode","href":"Hi.Common.Collections.LazyLinkedListNode-1.html","topicHref":"Hi.Common.Collections.LazyLinkedListNode-1.html","topicUid":"Hi.Common.Collections.LazyLinkedListNode`1","type":"Class"},{"name":"LazyLinkedList","href":"Hi.Common.Collections.LazyLinkedList-1.html","topicHref":"Hi.Common.Collections.LazyLinkedList-1.html","topicUid":"Hi.Common.Collections.LazyLinkedList`1","type":"Class"},{"name":"LinkedListUtil","href":"Hi.Common.Collections.LinkedListUtil.html","topicHref":"Hi.Common.Collections.LinkedListUtil.html","topicUid":"Hi.Common.Collections.LinkedListUtil","type":"Class"},{"name":"ListIndexBasedEnumerable","href":"Hi.Common.Collections.ListIndexBasedEnumerable-1.html","topicHref":"Hi.Common.Collections.ListIndexBasedEnumerable-1.html","topicUid":"Hi.Common.Collections.ListIndexBasedEnumerable`1","type":"Class"},{"name":"ListIndexBasedIEnumerator","href":"Hi.Common.Collections.ListIndexBasedIEnumerator-1.html","topicHref":"Hi.Common.Collections.ListIndexBasedIEnumerator-1.html","topicUid":"Hi.Common.Collections.ListIndexBasedIEnumerator`1","type":"Class"},{"name":"ListUtil","href":"Hi.Common.Collections.ListUtil.html","topicHref":"Hi.Common.Collections.ListUtil.html","topicUid":"Hi.Common.Collections.ListUtil","type":"Class"},{"name":"ListUtil.OuterPolationMode","href":"Hi.Common.Collections.ListUtil.OuterPolationMode.html","topicHref":"Hi.Common.Collections.ListUtil.OuterPolationMode.html","topicUid":"Hi.Common.Collections.ListUtil.OuterPolationMode","type":"Enum"},{"name":"SearchTargetMode","href":"Hi.Common.Collections.SearchTargetMode.html","topicHref":"Hi.Common.Collections.SearchTargetMode.html","topicUid":"Hi.Common.Collections.SearchTargetMode","type":"Enum"},{"name":"SeekDirection","href":"Hi.Common.Collections.SeekDirection.html","topicHref":"Hi.Common.Collections.SeekDirection.html","topicUid":"Hi.Common.Collections.SeekDirection","type":"Enum"},{"name":"SortedListUtil","href":"Hi.Common.Collections.SortedListUtil.html","topicHref":"Hi.Common.Collections.SortedListUtil.html","topicUid":"Hi.Common.Collections.SortedListUtil","type":"Class"},{"name":"SubList","href":"Hi.Common.Collections.SubList-1.html","topicHref":"Hi.Common.Collections.SubList-1.html","topicUid":"Hi.Common.Collections.SubList`1","type":"Class"},{"name":"SynList","href":"Hi.Common.Collections.SynList-1.html","topicHref":"Hi.Common.Collections.SynList-1.html","topicUid":"Hi.Common.Collections.SynList`1","type":"Class"}]},{"name":"Hi.Common.CsvUtils","href":"Hi.Common.CsvUtils.html","topicHref":"Hi.Common.CsvUtils.html","topicUid":"Hi.Common.CsvUtils","type":"Namespace","items":[{"name":"CsvInputKit","href":"Hi.Common.CsvUtils.CsvInputKit.html","topicHref":"Hi.Common.CsvUtils.CsvInputKit.html","topicUid":"Hi.Common.CsvUtils.CsvInputKit","type":"Class"},{"name":"CsvOutputKit","href":"Hi.Common.CsvUtils.CsvOutputKit.html","topicHref":"Hi.Common.CsvUtils.CsvOutputKit.html","topicUid":"Hi.Common.CsvUtils.CsvOutputKit","type":"Class"},{"name":"CsvUtil","href":"Hi.Common.CsvUtils.CsvUtil.html","topicHref":"Hi.Common.CsvUtils.CsvUtil.html","topicUid":"Hi.Common.CsvUtils.CsvUtil","type":"Class"},{"name":"ICsvRowIo","href":"Hi.Common.CsvUtils.ICsvRowIo.html","topicHref":"Hi.Common.CsvUtils.ICsvRowIo.html","topicUid":"Hi.Common.CsvUtils.ICsvRowIo","type":"Interface"},{"name":"IGetCsvDictionary","href":"Hi.Common.CsvUtils.IGetCsvDictionary.html","topicHref":"Hi.Common.CsvUtils.IGetCsvDictionary.html","topicUid":"Hi.Common.CsvUtils.IGetCsvDictionary","type":"Interface"}]},{"name":"Hi.Common.FileLines","href":"Hi.Common.FileLines.html","topicHref":"Hi.Common.FileLines.html","topicUid":"Hi.Common.FileLines","type":"Namespace","items":[{"name":"FileBeginEventArgs","href":"Hi.Common.FileLines.FileBeginEventArgs.html","topicHref":"Hi.Common.FileLines.FileBeginEventArgs.html","topicUid":"Hi.Common.FileLines.FileBeginEventArgs","type":"Class"},{"name":"FileEndEventArgs","href":"Hi.Common.FileLines.FileEndEventArgs.html","topicHref":"Hi.Common.FileLines.FileEndEventArgs.html","topicUid":"Hi.Common.FileLines.FileEndEventArgs","type":"Class"},{"name":"FileLineCharIndex","href":"Hi.Common.FileLines.FileLineCharIndex.html","topicHref":"Hi.Common.FileLines.FileLineCharIndex.html","topicUid":"Hi.Common.FileLines.FileLineCharIndex","type":"Class"},{"name":"FileLineCharIndexSegment","href":"Hi.Common.FileLines.FileLineCharIndexSegment.html","topicHref":"Hi.Common.FileLines.FileLineCharIndexSegment.html","topicUid":"Hi.Common.FileLines.FileLineCharIndexSegment","type":"Class"},{"name":"FileLineIndex","href":"Hi.Common.FileLines.FileLineIndex.html","topicHref":"Hi.Common.FileLines.FileLineIndex.html","topicUid":"Hi.Common.FileLines.FileLineIndex","type":"Class"},{"name":"FileLineUtil","href":"Hi.Common.FileLines.FileLineUtil.html","topicHref":"Hi.Common.FileLines.FileLineUtil.html","topicUid":"Hi.Common.FileLines.FileLineUtil","type":"Class"},{"name":"FileUtil","href":"Hi.Common.FileLines.FileUtil.html","topicHref":"Hi.Common.FileLines.FileUtil.html","topicUid":"Hi.Common.FileLines.FileUtil","type":"Class"},{"name":"IFileChangedEventSupport","href":"Hi.Common.FileLines.IFileChangedEventSupport.html","topicHref":"Hi.Common.FileLines.IFileChangedEventSupport.html","topicUid":"Hi.Common.FileLines.IFileChangedEventSupport","type":"Interface"},{"name":"IFileLine","href":"Hi.Common.FileLines.IFileLine.html","topicHref":"Hi.Common.FileLines.IFileLine.html","topicUid":"Hi.Common.FileLines.IFileLine","type":"Interface"},{"name":"IFileLineCharIndex","href":"Hi.Common.FileLines.IFileLineCharIndex.html","topicHref":"Hi.Common.FileLines.IFileLineCharIndex.html","topicUid":"Hi.Common.FileLines.IFileLineCharIndex","type":"Interface"},{"name":"IFileLineIndex","href":"Hi.Common.FileLines.IFileLineIndex.html","topicHref":"Hi.Common.FileLines.IFileLineIndex.html","topicUid":"Hi.Common.FileLines.IFileLineIndex","type":"Interface"},{"name":"IGetFileLineIndex","href":"Hi.Common.FileLines.IGetFileLineIndex.html","topicHref":"Hi.Common.FileLines.IGetFileLineIndex.html","topicUid":"Hi.Common.FileLines.IGetFileLineIndex","type":"Interface"},{"name":"IGetIndexedFileLine","href":"Hi.Common.FileLines.IGetIndexedFileLine.html","topicHref":"Hi.Common.FileLines.IGetIndexedFileLine.html","topicUid":"Hi.Common.FileLines.IGetIndexedFileLine","type":"Interface"},{"name":"IIndexedFileLine","href":"Hi.Common.FileLines.IIndexedFileLine.html","topicHref":"Hi.Common.FileLines.IIndexedFileLine.html","topicUid":"Hi.Common.FileLines.IIndexedFileLine","type":"Interface"},{"name":"ILineChangedEventSupport","href":"Hi.Common.FileLines.ILineChangedEventSupport.html","topicHref":"Hi.Common.FileLines.ILineChangedEventSupport.html","topicUid":"Hi.Common.FileLines.ILineChangedEventSupport","type":"Interface"},{"name":"IndexedFile","href":"Hi.Common.FileLines.IndexedFile.html","topicHref":"Hi.Common.FileLines.IndexedFile.html","topicUid":"Hi.Common.FileLines.IndexedFile","type":"Class"},{"name":"IndexedFileLine","href":"Hi.Common.FileLines.IndexedFileLine.html","topicHref":"Hi.Common.FileLines.IndexedFileLine.html","topicUid":"Hi.Common.FileLines.IndexedFileLine","type":"Class"},{"name":"IndexedFileLineChar","href":"Hi.Common.FileLines.IndexedFileLineChar.html","topicHref":"Hi.Common.FileLines.IndexedFileLineChar.html","topicUid":"Hi.Common.FileLines.IndexedFileLineChar","type":"Class"},{"name":"LineBeginEventArgs","href":"Hi.Common.FileLines.LineBeginEventArgs.html","topicHref":"Hi.Common.FileLines.LineBeginEventArgs.html","topicUid":"Hi.Common.FileLines.LineBeginEventArgs","type":"Class"},{"name":"LineEndEventArgs","href":"Hi.Common.FileLines.LineEndEventArgs.html","topicHref":"Hi.Common.FileLines.LineEndEventArgs.html","topicUid":"Hi.Common.FileLines.LineEndEventArgs","type":"Class"}]},{"name":"Hi.Common.Messages","href":"Hi.Common.Messages.html","topicHref":"Hi.Common.Messages.html","topicUid":"Hi.Common.Messages","type":"Namespace","items":[{"name":"ActionProgress","href":"Hi.Common.Messages.ActionProgress-1.html","topicHref":"Hi.Common.Messages.ActionProgress-1.html","topicUid":"Hi.Common.Messages.ActionProgress`1","type":"Class"},{"name":"BootstrapTheme","href":"Hi.Common.Messages.BootstrapTheme.html","topicHref":"Hi.Common.Messages.BootstrapTheme.html","topicUid":"Hi.Common.Messages.BootstrapTheme","type":"Enum"},{"name":"DebugUtil","href":"Hi.Common.Messages.DebugUtil.html","topicHref":"Hi.Common.Messages.DebugUtil.html","topicUid":"Hi.Common.Messages.DebugUtil","type":"Class"},{"name":"ExceptionUtil","href":"Hi.Common.Messages.ExceptionUtil.html","topicHref":"Hi.Common.Messages.ExceptionUtil.html","topicUid":"Hi.Common.Messages.ExceptionUtil","type":"Class"},{"name":"MessageBoardUtil","href":"Hi.Common.Messages.MessageBoardUtil.html","topicHref":"Hi.Common.Messages.MessageBoardUtil.html","topicUid":"Hi.Common.Messages.MessageBoardUtil","type":"Class"},{"name":"MessageFlag","href":"Hi.Common.Messages.MessageFlag.html","topicHref":"Hi.Common.Messages.MessageFlag.html","topicUid":"Hi.Common.Messages.MessageFlag","type":"Enum"},{"name":"MultiTagMessage","href":"Hi.Common.Messages.MultiTagMessage.html","topicHref":"Hi.Common.Messages.MultiTagMessage.html","topicUid":"Hi.Common.Messages.MultiTagMessage","type":"Class"},{"name":"MultiTagMessageUtil","href":"Hi.Common.Messages.MultiTagMessageUtil.html","topicHref":"Hi.Common.Messages.MultiTagMessageUtil.html","topicUid":"Hi.Common.Messages.MultiTagMessageUtil","type":"Class"},{"name":"ShowMessageBoardDelegate","href":"Hi.Common.Messages.ShowMessageBoardDelegate.html","topicHref":"Hi.Common.Messages.ShowMessageBoardDelegate.html","topicUid":"Hi.Common.Messages.ShowMessageBoardDelegate","type":"Delegate"}]},{"name":"Hi.Common.MinMaxUtils","href":"Hi.Common.MinMaxUtils.html","topicHref":"Hi.Common.MinMaxUtils.html","topicUid":"Hi.Common.MinMaxUtils","type":"Namespace","items":[{"name":"IndexedMinMaxPos","href":"Hi.Common.MinMaxUtils.IndexedMinMaxPos-2.html","topicHref":"Hi.Common.MinMaxUtils.IndexedMinMaxPos-2.html","topicUid":"Hi.Common.MinMaxUtils.IndexedMinMaxPos`2","type":"Class"},{"name":"MinMaxUtil","href":"Hi.Common.MinMaxUtils.MinMaxUtil.html","topicHref":"Hi.Common.MinMaxUtils.MinMaxUtil.html","topicUid":"Hi.Common.MinMaxUtils.MinMaxUtil","type":"Class"}]},{"name":"Hi.Common.NativeProgresses","href":"Hi.Common.NativeProgresses.html","topicHref":"Hi.Common.NativeProgresses.html","topicUid":"Hi.Common.NativeProgresses","type":"Namespace","items":[{"name":"NativeProgressFraction","href":"Hi.Common.NativeProgresses.NativeProgressFraction.html","topicHref":"Hi.Common.NativeProgresses.NativeProgressFraction.html","topicUid":"Hi.Common.NativeProgresses.NativeProgressFraction","type":"Class"},{"name":"progress_monitor_t","href":"Hi.Common.NativeProgresses.progress_monitor_t.html","topicHref":"Hi.Common.NativeProgresses.progress_monitor_t.html","topicUid":"Hi.Common.NativeProgresses.progress_monitor_t","type":"Struct"},{"name":"report_progress_func_t","href":"Hi.Common.NativeProgresses.report_progress_func_t.html","topicHref":"Hi.Common.NativeProgresses.report_progress_func_t.html","topicUid":"Hi.Common.NativeProgresses.report_progress_func_t","type":"Delegate"}]},{"name":"Hi.Common.ParallelBulkUtils","href":"Hi.Common.ParallelBulkUtils.html","topicHref":"Hi.Common.ParallelBulkUtils.html","topicUid":"Hi.Common.ParallelBulkUtils","type":"Namespace","items":[{"name":"ParallelBulkReader","href":"Hi.Common.ParallelBulkUtils.ParallelBulkReader-1.html","topicHref":"Hi.Common.ParallelBulkUtils.ParallelBulkReader-1.html","topicUid":"Hi.Common.ParallelBulkUtils.ParallelBulkReader`1","type":"Class"},{"name":"ParallelBulkWriter","href":"Hi.Common.ParallelBulkUtils.ParallelBulkWriter-1.html","topicHref":"Hi.Common.ParallelBulkUtils.ParallelBulkWriter-1.html","topicUid":"Hi.Common.ParallelBulkUtils.ParallelBulkWriter`1","type":"Class"},{"name":"ReadBulkDelegate","href":"Hi.Common.ParallelBulkUtils.ReadBulkDelegate-1.html","topicHref":"Hi.Common.ParallelBulkUtils.ReadBulkDelegate-1.html","topicUid":"Hi.Common.ParallelBulkUtils.ReadBulkDelegate`1","type":"Delegate"},{"name":"SequentialBulkReader","href":"Hi.Common.ParallelBulkUtils.SequentialBulkReader-1.html","topicHref":"Hi.Common.ParallelBulkUtils.SequentialBulkReader-1.html","topicUid":"Hi.Common.ParallelBulkUtils.SequentialBulkReader`1","type":"Class"}]},{"name":"Hi.Common.PathUtils","href":"Hi.Common.PathUtils.html","topicHref":"Hi.Common.PathUtils.html","topicUid":"Hi.Common.PathUtils","type":"Namespace","items":[{"name":"ExtendedNamedPath","href":"Hi.Common.PathUtils.ExtendedNamedPath.html","topicHref":"Hi.Common.PathUtils.ExtendedNamedPath.html","topicUid":"Hi.Common.PathUtils.ExtendedNamedPath","type":"Class"},{"name":"HttpUtil","href":"Hi.Common.PathUtils.HttpUtil.html","topicHref":"Hi.Common.PathUtils.HttpUtil.html","topicUid":"Hi.Common.PathUtils.HttpUtil","type":"Class"},{"name":"Lang","href":"Hi.Common.PathUtils.Lang.html","topicHref":"Hi.Common.PathUtils.Lang.html","topicUid":"Hi.Common.PathUtils.Lang","type":"Class"},{"name":"NamedPath","href":"Hi.Common.PathUtils.NamedPath.html","topicHref":"Hi.Common.PathUtils.NamedPath.html","topicUid":"Hi.Common.PathUtils.NamedPath","type":"Class"},{"name":"PathUtil","href":"Hi.Common.PathUtils.PathUtil.html","topicHref":"Hi.Common.PathUtils.PathUtil.html","topicUid":"Hi.Common.PathUtils.PathUtil","type":"Class"}]},{"name":"Hi.Common.QueueCacheUtils","href":"Hi.Common.QueueCacheUtils.html","topicHref":"Hi.Common.QueueCacheUtils.html","topicUid":"Hi.Common.QueueCacheUtils","type":"Namespace","items":[{"name":"QueueCacherHost","href":"Hi.Common.QueueCacheUtils.QueueCacherHost-1.html","topicHref":"Hi.Common.QueueCacheUtils.QueueCacherHost-1.html","topicUid":"Hi.Common.QueueCacheUtils.QueueCacherHost`1","type":"Class"},{"name":"QueueCacher","href":"Hi.Common.QueueCacheUtils.QueueCacher-1.html","topicHref":"Hi.Common.QueueCacheUtils.QueueCacher-1.html","topicUid":"Hi.Common.QueueCacheUtils.QueueCacher`1","type":"Class"}]},{"name":"Hi.Common.XmlUtils","href":"Hi.Common.XmlUtils.html","topicHref":"Hi.Common.XmlUtils.html","topicUid":"Hi.Common.XmlUtils","type":"Namespace","items":[{"name":"FileRefSource","href":"Hi.Common.XmlUtils.FileRefSource-1.html","topicHref":"Hi.Common.XmlUtils.FileRefSource-1.html","topicUid":"Hi.Common.XmlUtils.FileRefSource`1","type":"Class"},{"name":"IMakeXmlSource","href":"Hi.Common.XmlUtils.IMakeXmlSource.html","topicHref":"Hi.Common.XmlUtils.IMakeXmlSource.html","topicUid":"Hi.Common.XmlUtils.IMakeXmlSource","type":"Interface"},{"name":"IToXElement","href":"Hi.Common.XmlUtils.IToXElement.html","topicHref":"Hi.Common.XmlUtils.IToXElement.html","topicUid":"Hi.Common.XmlUtils.IToXElement","type":"Interface"},{"name":"ProjectApiVersion","href":"Hi.Common.XmlUtils.ProjectApiVersion.html","topicHref":"Hi.Common.XmlUtils.ProjectApiVersion.html","topicUid":"Hi.Common.XmlUtils.ProjectApiVersion","type":"Class"},{"name":"SetFileDelegate","href":"Hi.Common.XmlUtils.SetFileDelegate.html","topicHref":"Hi.Common.XmlUtils.SetFileDelegate.html","topicUid":"Hi.Common.XmlUtils.SetFileDelegate","type":"Delegate"},{"name":"XFactory","href":"Hi.Common.XmlUtils.XFactory.html","topicHref":"Hi.Common.XmlUtils.XFactory.html","topicUid":"Hi.Common.XmlUtils.XFactory","type":"Class"},{"name":"XFactory.XGeneratorDelegate","href":"Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.html","topicHref":"Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.html","topicUid":"Hi.Common.XmlUtils.XFactory.XGeneratorDelegate","type":"Delegate"},{"name":"XFactory.XmlExceptionDelegate","href":"Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html","topicHref":"Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html","topicUid":"Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate","type":"Delegate"},{"name":"XmlUtil","href":"Hi.Common.XmlUtils.XmlUtil.html","topicHref":"Hi.Common.XmlUtils.XmlUtil.html","topicUid":"Hi.Common.XmlUtils.XmlUtil","type":"Class"}]},{"name":"Hi.CutterLocations","href":"Hi.CutterLocations.html","topicHref":"Hi.CutterLocations.html","topicUid":"Hi.CutterLocations","type":"Namespace","items":[{"name":"IGetProgramCl","href":"Hi.CutterLocations.IGetProgramCl.html","topicHref":"Hi.CutterLocations.IGetProgramCl.html","topicUid":"Hi.CutterLocations.IGetProgramCl","type":"Interface"},{"name":"SimpleCl","href":"Hi.CutterLocations.SimpleCl.html","topicHref":"Hi.CutterLocations.SimpleCl.html","topicUid":"Hi.CutterLocations.SimpleCl","type":"Class"}]},{"name":"Hi.CutterLocations.ClPath","href":"Hi.CutterLocations.ClPath.html","topicHref":"Hi.CutterLocations.ClPath.html","topicUid":"Hi.CutterLocations.ClPath","type":"Namespace","items":[{"name":"ClCircleArc","href":"Hi.CutterLocations.ClPath.ClCircleArc.html","topicHref":"Hi.CutterLocations.ClPath.ClCircleArc.html","topicUid":"Hi.CutterLocations.ClPath.ClCircleArc","type":"Class"},{"name":"ClLinear","href":"Hi.CutterLocations.ClPath.ClLinear.html","topicHref":"Hi.CutterLocations.ClPath.ClLinear.html","topicUid":"Hi.CutterLocations.ClPath.ClLinear","type":"Class"},{"name":"IClPath","href":"Hi.CutterLocations.ClPath.IClPath.html","topicHref":"Hi.CutterLocations.ClPath.IClPath.html","topicUid":"Hi.CutterLocations.ClPath.IClPath","type":"Interface"}]},{"name":"Hi.CutterLocations.ClStrips","href":"Hi.CutterLocations.ClStrips.html","topicHref":"Hi.CutterLocations.ClStrips.html","topicUid":"Hi.CutterLocations.ClStrips","type":"Namespace","items":[{"name":"ClStrip","href":"Hi.CutterLocations.ClStrips.ClStrip.html","topicHref":"Hi.CutterLocations.ClStrips.ClStrip.html","topicUid":"Hi.CutterLocations.ClStrips.ClStrip","type":"Class"},{"name":"ClStripPos","href":"Hi.CutterLocations.ClStrips.ClStripPos.html","topicHref":"Hi.CutterLocations.ClStrips.ClStripPos.html","topicUid":"Hi.CutterLocations.ClStrips.ClStripPos","type":"Class"},{"name":"RgbFunc","href":"Hi.CutterLocations.ClStrips.RgbFunc.html","topicHref":"Hi.CutterLocations.ClStrips.RgbFunc.html","topicUid":"Hi.CutterLocations.ClStrips.RgbFunc","type":"Delegate"}]},{"name":"Hi.Disp","href":"Hi.Disp.html","topicHref":"Hi.Disp.html","topicUid":"Hi.Disp","type":"Namespace","items":[{"name":"Bind","href":"Hi.Disp.Bind.html","topicHref":"Hi.Disp.Bind.html","topicUid":"Hi.Disp.Bind","type":"Class"},{"name":"Box3dDispUtil","href":"Hi.Disp.Box3dDispUtil.html","topicHref":"Hi.Disp.Box3dDispUtil.html","topicUid":"Hi.Disp.Box3dDispUtil","type":"Class"},{"name":"Box3dDispUtil.BoxableExpandToBox3dDel","href":"Hi.Disp.Box3dDispUtil.BoxableExpandToBox3dDel.html","topicHref":"Hi.Disp.Box3dDispUtil.BoxableExpandToBox3dDel.html","topicUid":"Hi.Disp.Box3dDispUtil.BoxableExpandToBox3dDel","type":"Delegate"},{"name":"DelegateFuncDisplayee","href":"Hi.Disp.DelegateFuncDisplayee.html","topicHref":"Hi.Disp.DelegateFuncDisplayee.html","topicUid":"Hi.Disp.DelegateFuncDisplayee","type":"Class"},{"name":"DispEngine","href":"Hi.Disp.DispEngine.html","topicHref":"Hi.Disp.DispEngine.html","topicUid":"Hi.Disp.DispEngine","type":"Class"},{"name":"DispEngine.ImageRequestedDelegate","href":"Hi.Disp.DispEngine.ImageRequestedDelegate.html","topicHref":"Hi.Disp.DispEngine.ImageRequestedDelegate.html","topicUid":"Hi.Disp.DispEngine.ImageRequestedDelegate","type":"Delegate"},{"name":"DispEngineConfig","href":"Hi.Disp.DispEngineConfig.html","topicHref":"Hi.Disp.DispEngineConfig.html","topicUid":"Hi.Disp.DispEngineConfig","type":"Class"},{"name":"DispFrameUtil","href":"Hi.Disp.DispFrameUtil.html","topicHref":"Hi.Disp.DispFrameUtil.html","topicUid":"Hi.Disp.DispFrameUtil","type":"Class"},{"name":"DispList","href":"Hi.Disp.DispList.html","topicHref":"Hi.Disp.DispList.html","topicUid":"Hi.Disp.DispList","type":"Class"},{"name":"DispUtil","href":"Hi.Disp.DispUtil.html","topicHref":"Hi.Disp.DispUtil.html","topicUid":"Hi.Disp.DispUtil","type":"Class"},{"name":"Drawing","href":"Hi.Disp.Drawing.html","topicHref":"Hi.Disp.Drawing.html","topicUid":"Hi.Disp.Drawing","type":"Class"},{"name":"FuncDisplayee","href":"Hi.Disp.FuncDisplayee.html","topicHref":"Hi.Disp.FuncDisplayee.html","topicUid":"Hi.Disp.FuncDisplayee","type":"Class"},{"name":"GL","href":"Hi.Disp.GL.html","topicHref":"Hi.Disp.GL.html","topicUid":"Hi.Disp.GL","type":"Class"},{"name":"IDisplayee","href":"Hi.Disp.IDisplayee.html","topicHref":"Hi.Disp.IDisplayee.html","topicUid":"Hi.Disp.IDisplayee","type":"Interface"},{"name":"IGetDispEngine","href":"Hi.Disp.IGetDispEngine.html","topicHref":"Hi.Disp.IGetDispEngine.html","topicUid":"Hi.Disp.IGetDispEngine","type":"Interface"},{"name":"IGetPickable","href":"Hi.Disp.IGetPickable.html","topicHref":"Hi.Disp.IGetPickable.html","topicUid":"Hi.Disp.IGetPickable","type":"Interface"},{"name":"IGlContextDirver","href":"Hi.Disp.IGlContextDirver.html","topicHref":"Hi.Disp.IGlContextDirver.html","topicUid":"Hi.Disp.IGlContextDirver","type":"Interface"},{"name":"MatStack","href":"Hi.Disp.MatStack.html","topicHref":"Hi.Disp.MatStack.html","topicUid":"Hi.Disp.MatStack","type":"Class"},{"name":"MatStack.ItemDisposable","href":"Hi.Disp.MatStack.ItemDisposable.html","topicHref":"Hi.Disp.MatStack.ItemDisposable.html","topicUid":"Hi.Disp.MatStack.ItemDisposable","type":"Class"},{"name":"MvpBoxRelation","href":"Hi.Disp.MvpBoxRelation.html","topicHref":"Hi.Disp.MvpBoxRelation.html","topicUid":"Hi.Disp.MvpBoxRelation","type":"Enum"},{"name":"Pickable","href":"Hi.Disp.Pickable.html","topicHref":"Hi.Disp.Pickable.html","topicUid":"Hi.Disp.Pickable","type":"Class"},{"name":"PopModelMat","href":"Hi.Disp.PopModelMat.html","topicHref":"Hi.Disp.PopModelMat.html","topicUid":"Hi.Disp.PopModelMat","type":"Class"},{"name":"PushModelMat","href":"Hi.Disp.PushModelMat.html","topicHref":"Hi.Disp.PushModelMat.html","topicUid":"Hi.Disp.PushModelMat","type":"Class"},{"name":"Segment3dDispUtil","href":"Hi.Disp.Segment3dDispUtil.html","topicHref":"Hi.Disp.Segment3dDispUtil.html","topicUid":"Hi.Disp.Segment3dDispUtil","type":"Class"},{"name":"ShowEventPickable","href":"Hi.Disp.ShowEventPickable.html","topicHref":"Hi.Disp.ShowEventPickable.html","topicUid":"Hi.Disp.ShowEventPickable","type":"Class"},{"name":"Stamp","href":"Hi.Disp.Stamp.html","topicHref":"Hi.Disp.Stamp.html","topicUid":"Hi.Disp.Stamp","type":"Enum"},{"name":"StringDrawing","href":"Hi.Disp.StringDrawing.html","topicHref":"Hi.Disp.StringDrawing.html","topicUid":"Hi.Disp.StringDrawing","type":"Class"},{"name":"Tri3dDispUtil","href":"Hi.Disp.Tri3dDispUtil.html","topicHref":"Hi.Disp.Tri3dDispUtil.html","topicUid":"Hi.Disp.Tri3dDispUtil","type":"Class"},{"name":"Vec3dDispUtil","href":"Hi.Disp.Vec3dDispUtil.html","topicHref":"Hi.Disp.Vec3dDispUtil.html","topicUid":"Hi.Disp.Vec3dDispUtil","type":"Class"},{"name":"WrappedDisplayee","href":"Hi.Disp.WrappedDisplayee.html","topicHref":"Hi.Disp.WrappedDisplayee.html","topicUid":"Hi.Disp.WrappedDisplayee","type":"Class"}]},{"name":"Hi.Disp.Flag","href":"Hi.Disp.Flag.html","topicHref":"Hi.Disp.Flag.html","topicUid":"Hi.Disp.Flag","type":"Namespace","items":[{"name":"ColorScaleBar","href":"Hi.Disp.Flag.ColorScaleBar.html","topicHref":"Hi.Disp.Flag.ColorScaleBar.html","topicUid":"Hi.Disp.Flag.ColorScaleBar","type":"Class"},{"name":"CoordinateDrawing","href":"Hi.Disp.Flag.CoordinateDrawing.html","topicHref":"Hi.Disp.Flag.CoordinateDrawing.html","topicUid":"Hi.Disp.Flag.CoordinateDrawing","type":"Class"},{"name":"CubicalFlagDrawing","href":"Hi.Disp.Flag.CubicalFlagDrawing.html","topicHref":"Hi.Disp.Flag.CubicalFlagDrawing.html","topicUid":"Hi.Disp.Flag.CubicalFlagDrawing","type":"Class"},{"name":"DimensionBar","href":"Hi.Disp.Flag.DimensionBar.html","topicHref":"Hi.Disp.Flag.DimensionBar.html","topicUid":"Hi.Disp.Flag.DimensionBar","type":"Class"},{"name":"DispCoverUtil","href":"Hi.Disp.Flag.DispCoverUtil.html","topicHref":"Hi.Disp.Flag.DispCoverUtil.html","topicUid":"Hi.Disp.Flag.DispCoverUtil","type":"Class"}]},{"name":"Hi.Disp.Treat","href":"Hi.Disp.Treat.html","topicHref":"Hi.Disp.Treat.html","topicUid":"Hi.Disp.Treat","type":"Namespace","items":[{"name":"LineWidthSwap","href":"Hi.Disp.Treat.LineWidthSwap.html","topicHref":"Hi.Disp.Treat.LineWidthSwap.html","topicUid":"Hi.Disp.Treat.LineWidthSwap","type":"Class"},{"name":"LineWidthTreat","href":"Hi.Disp.Treat.LineWidthTreat.html","topicHref":"Hi.Disp.Treat.LineWidthTreat.html","topicUid":"Hi.Disp.Treat.LineWidthTreat","type":"Class"},{"name":"PointSizeSwap","href":"Hi.Disp.Treat.PointSizeSwap.html","topicHref":"Hi.Disp.Treat.PointSizeSwap.html","topicUid":"Hi.Disp.Treat.PointSizeSwap","type":"Class"},{"name":"PointSizeTreat","href":"Hi.Disp.Treat.PointSizeTreat.html","topicHref":"Hi.Disp.Treat.PointSizeTreat.html","topicUid":"Hi.Disp.Treat.PointSizeTreat","type":"Class"},{"name":"RgbSwap","href":"Hi.Disp.Treat.RgbSwap.html","topicHref":"Hi.Disp.Treat.RgbSwap.html","topicUid":"Hi.Disp.Treat.RgbSwap","type":"Class"},{"name":"RgbTreat","href":"Hi.Disp.Treat.RgbTreat.html","topicHref":"Hi.Disp.Treat.RgbTreat.html","topicUid":"Hi.Disp.Treat.RgbTreat","type":"Class"},{"name":"RgbWrapper","href":"Hi.Disp.Treat.RgbWrapper.html","topicHref":"Hi.Disp.Treat.RgbWrapper.html","topicUid":"Hi.Disp.Treat.RgbWrapper","type":"Class"},{"name":"TransformationWrapper","href":"Hi.Disp.Treat.TransformationWrapper.html","topicHref":"Hi.Disp.Treat.TransformationWrapper.html","topicUid":"Hi.Disp.Treat.TransformationWrapper","type":"Class"}]},{"name":"Hi.Fanuc","href":"Hi.Fanuc.html","topicHref":"Hi.Fanuc.html","topicUid":"Hi.Fanuc","type":"Namespace","items":[{"name":"FanucVarTable","href":"Hi.Fanuc.FanucVarTable.html","topicHref":"Hi.Fanuc.FanucVarTable.html","topicUid":"Hi.Fanuc.FanucVarTable","type":"Class"},{"name":"FanucVarValue","href":"Hi.Fanuc.FanucVarValue.html","topicHref":"Hi.Fanuc.FanucVarValue.html","topicUid":"Hi.Fanuc.FanucVarValue","type":"Struct"}]},{"name":"Hi.Geom","href":"Hi.Geom.html","topicHref":"Hi.Geom.html","topicUid":"Hi.Geom","type":"Namespace","items":[{"name":"ArrayUtil","href":"Hi.Geom.ArrayUtil.html","topicHref":"Hi.Geom.ArrayUtil.html","topicUid":"Hi.Geom.ArrayUtil","type":"Class"},{"name":"AxisAngle4d","href":"Hi.Geom.AxisAngle4d.html","topicHref":"Hi.Geom.AxisAngle4d.html","topicUid":"Hi.Geom.AxisAngle4d","type":"Class"},{"name":"Box2d","href":"Hi.Geom.Box2d.html","topicHref":"Hi.Geom.Box2d.html","topicUid":"Hi.Geom.Box2d","type":"Class"},{"name":"Box2d.NoInit","href":"Hi.Geom.Box2d.NoInit.html","topicHref":"Hi.Geom.Box2d.NoInit.html","topicUid":"Hi.Geom.Box2d.NoInit","type":"Class"},{"name":"Box3d","href":"Hi.Geom.Box3d.html","topicHref":"Hi.Geom.Box3d.html","topicUid":"Hi.Geom.Box3d","type":"Class"},{"name":"Box3d.NoInit","href":"Hi.Geom.Box3d.NoInit.html","topicHref":"Hi.Geom.Box3d.NoInit.html","topicUid":"Hi.Geom.Box3d.NoInit","type":"Class"},{"name":"Cylindroid","href":"Hi.Geom.Cylindroid.html","topicHref":"Hi.Geom.Cylindroid.html","topicUid":"Hi.Geom.Cylindroid","type":"Class"},{"name":"DVec3d","href":"Hi.Geom.DVec3d.html","topicHref":"Hi.Geom.DVec3d.html","topicUid":"Hi.Geom.DVec3d","type":"Class"},{"name":"Dir","href":"Hi.Geom.Dir.html","topicHref":"Hi.Geom.Dir.html","topicUid":"Hi.Geom.Dir","type":"Enum"},{"name":"ExtendedCylinder","href":"Hi.Geom.ExtendedCylinder.html","topicHref":"Hi.Geom.ExtendedCylinder.html","topicUid":"Hi.Geom.ExtendedCylinder","type":"Class"},{"name":"Flat3d","href":"Hi.Geom.Flat3d.html","topicHref":"Hi.Geom.Flat3d.html","topicUid":"Hi.Geom.Flat3d","type":"Class"},{"name":"FractionStatus","href":"Hi.Geom.FractionStatus.html","topicHref":"Hi.Geom.FractionStatus.html","topicUid":"Hi.Geom.FractionStatus","type":"Enum"},{"name":"Fraction","href":"Hi.Geom.Fraction-1.html","topicHref":"Hi.Geom.Fraction-1.html","topicUid":"Hi.Geom.Fraction`1","type":"Struct"},{"name":"GeomCombination","href":"Hi.Geom.GeomCombination.html","topicHref":"Hi.Geom.GeomCombination.html","topicUid":"Hi.Geom.GeomCombination","type":"Class"},{"name":"GeomUtil","href":"Hi.Geom.GeomUtil.html","topicHref":"Hi.Geom.GeomUtil.html","topicUid":"Hi.Geom.GeomUtil","type":"Class"},{"name":"IExpandToBox2d","href":"Hi.Geom.IExpandToBox2d.html","topicHref":"Hi.Geom.IExpandToBox2d.html","topicUid":"Hi.Geom.IExpandToBox2d","type":"Interface"},{"name":"IExpandToBox3d","href":"Hi.Geom.IExpandToBox3d.html","topicHref":"Hi.Geom.IExpandToBox3d.html","topicUid":"Hi.Geom.IExpandToBox3d","type":"Interface"},{"name":"IFlat3d","href":"Hi.Geom.IFlat3d.html","topicHref":"Hi.Geom.IFlat3d.html","topicUid":"Hi.Geom.IFlat3d","type":"Interface"},{"name":"IGenStl","href":"Hi.Geom.IGenStl.html","topicHref":"Hi.Geom.IGenStl.html","topicUid":"Hi.Geom.IGenStl","type":"Interface"},{"name":"IGeomProperty","href":"Hi.Geom.IGeomProperty.html","topicHref":"Hi.Geom.IGeomProperty.html","topicUid":"Hi.Geom.IGeomProperty","type":"Interface"},{"name":"IGetStl","href":"Hi.Geom.IGetStl.html","topicHref":"Hi.Geom.IGetStl.html","topicUid":"Hi.Geom.IGetStl","type":"Interface"},{"name":"IGetZrContour","href":"Hi.Geom.IGetZrContour.html","topicHref":"Hi.Geom.IGetZrContour.html","topicUid":"Hi.Geom.IGetZrContour","type":"Interface"},{"name":"IGetZrList","href":"Hi.Geom.IGetZrList.html","topicHref":"Hi.Geom.IGetZrList.html","topicUid":"Hi.Geom.IGetZrList","type":"Interface"},{"name":"IStlSource","href":"Hi.Geom.IStlSource.html","topicHref":"Hi.Geom.IStlSource.html","topicUid":"Hi.Geom.IStlSource","type":"Interface"},{"name":"ITri3d","href":"Hi.Geom.ITri3d.html","topicHref":"Hi.Geom.ITri3d.html","topicUid":"Hi.Geom.ITri3d","type":"Interface"},{"name":"IVec","href":"Hi.Geom.IVec-1.html","topicHref":"Hi.Geom.IVec-1.html","topicUid":"Hi.Geom.IVec`1","type":"Interface"},{"name":"IZrListSourceProperty","href":"Hi.Geom.IZrListSourceProperty.html","topicHref":"Hi.Geom.IZrListSourceProperty.html","topicUid":"Hi.Geom.IZrListSourceProperty","type":"Interface"},{"name":"Mat4d","href":"Hi.Geom.Mat4d.html","topicHref":"Hi.Geom.Mat4d.html","topicUid":"Hi.Geom.Mat4d","type":"Class"},{"name":"Mat4d.IndexFlag","href":"Hi.Geom.Mat4d.IndexFlag.html","topicHref":"Hi.Geom.Mat4d.IndexFlag.html","topicUid":"Hi.Geom.Mat4d.IndexFlag","type":"Enum"},{"name":"MathNetUtil","href":"Hi.Geom.MathNetUtil.html","topicHref":"Hi.Geom.MathNetUtil.html","topicUid":"Hi.Geom.MathNetUtil","type":"Class"},{"name":"MathUtil","href":"Hi.Geom.MathUtil.html","topicHref":"Hi.Geom.MathUtil.html","topicUid":"Hi.Geom.MathUtil","type":"Class"},{"name":"NativeFraction","href":"Hi.Geom.NativeFraction.html","topicHref":"Hi.Geom.NativeFraction.html","topicUid":"Hi.Geom.NativeFraction","type":"Class"},{"name":"NativeStl","href":"Hi.Geom.NativeStl.html","topicHref":"Hi.Geom.NativeStl.html","topicUid":"Hi.Geom.NativeStl","type":"Class"},{"name":"NativeTopoStld","href":"Hi.Geom.NativeTopoStld.html","topicHref":"Hi.Geom.NativeTopoStld.html","topicUid":"Hi.Geom.NativeTopoStld","type":"Class"},{"name":"NativeTopoStlfr","href":"Hi.Geom.NativeTopoStlfr.html","topicHref":"Hi.Geom.NativeTopoStlfr.html","topicUid":"Hi.Geom.NativeTopoStlfr","type":"Class"},{"name":"ObjUtil","href":"Hi.Geom.ObjUtil.html","topicHref":"Hi.Geom.ObjUtil.html","topicUid":"Hi.Geom.ObjUtil","type":"Class"},{"name":"PairZr","href":"Hi.Geom.PairZr.html","topicHref":"Hi.Geom.PairZr.html","topicUid":"Hi.Geom.PairZr","type":"Class"},{"name":"PairZrUtil","href":"Hi.Geom.PairZrUtil.html","topicHref":"Hi.Geom.PairZrUtil.html","topicUid":"Hi.Geom.PairZrUtil","type":"Class"},{"name":"PlyUtil","href":"Hi.Geom.PlyUtil.html","topicHref":"Hi.Geom.PlyUtil.html","topicUid":"Hi.Geom.PlyUtil","type":"Class"},{"name":"Polar3d","href":"Hi.Geom.Polar3d.html","topicHref":"Hi.Geom.Polar3d.html","topicUid":"Hi.Geom.Polar3d","type":"Class"},{"name":"Segment3d","href":"Hi.Geom.Segment3d.html","topicHref":"Hi.Geom.Segment3d.html","topicUid":"Hi.Geom.Segment3d","type":"Class"},{"name":"Stl","href":"Hi.Geom.Stl.html","topicHref":"Hi.Geom.Stl.html","topicUid":"Hi.Geom.Stl","type":"Class"},{"name":"Stl.StlType","href":"Hi.Geom.Stl.StlType.html","topicHref":"Hi.Geom.Stl.StlType.html","topicUid":"Hi.Geom.Stl.StlType","type":"Enum"},{"name":"StlFile","href":"Hi.Geom.StlFile.html","topicHref":"Hi.Geom.StlFile.html","topicUid":"Hi.Geom.StlFile","type":"Class"},{"name":"StlFuncHost","href":"Hi.Geom.StlFuncHost.html","topicHref":"Hi.Geom.StlFuncHost.html","topicUid":"Hi.Geom.StlFuncHost","type":"Class"},{"name":"StlUtil","href":"Hi.Geom.StlUtil.html","topicHref":"Hi.Geom.StlUtil.html","topicUid":"Hi.Geom.StlUtil","type":"Class"},{"name":"TransformationGeom","href":"Hi.Geom.TransformationGeom.html","topicHref":"Hi.Geom.TransformationGeom.html","topicUid":"Hi.Geom.TransformationGeom","type":"Class"},{"name":"Tri3d","href":"Hi.Geom.Tri3d.html","topicHref":"Hi.Geom.Tri3d.html","topicUid":"Hi.Geom.Tri3d","type":"Class"},{"name":"Tri3dUtil","href":"Hi.Geom.Tri3dUtil.html","topicHref":"Hi.Geom.Tri3dUtil.html","topicUid":"Hi.Geom.Tri3dUtil","type":"Class"},{"name":"Vec2d","href":"Hi.Geom.Vec2d.html","topicHref":"Hi.Geom.Vec2d.html","topicUid":"Hi.Geom.Vec2d","type":"Class"},{"name":"Vec2i","href":"Hi.Geom.Vec2i.html","topicHref":"Hi.Geom.Vec2i.html","topicUid":"Hi.Geom.Vec2i","type":"Class"},{"name":"Vec3d","href":"Hi.Geom.Vec3d.html","topicHref":"Hi.Geom.Vec3d.html","topicUid":"Hi.Geom.Vec3d","type":"Class"}]},{"name":"Hi.Geom.Resolution","href":"Hi.Geom.Resolution.html","topicHref":"Hi.Geom.Resolution.html","topicUid":"Hi.Geom.Resolution","type":"Namespace","items":[{"name":"IPolarResolution2d","href":"Hi.Geom.Resolution.IPolarResolution2d.html","topicHref":"Hi.Geom.Resolution.IPolarResolution2d.html","topicUid":"Hi.Geom.Resolution.IPolarResolution2d","type":"Interface"},{"name":"IPolarResolution2dSourceProperty","href":"Hi.Geom.Resolution.IPolarResolution2dSourceProperty.html","topicHref":"Hi.Geom.Resolution.IPolarResolution2dSourceProperty.html","topicUid":"Hi.Geom.Resolution.IPolarResolution2dSourceProperty","type":"Interface"},{"name":"PolarResolution2d","href":"Hi.Geom.Resolution.PolarResolution2d.html","topicHref":"Hi.Geom.Resolution.PolarResolution2d.html","topicUid":"Hi.Geom.Resolution.PolarResolution2d","type":"Class"}]},{"name":"Hi.Geom.Solvers","href":"Hi.Geom.Solvers.html","topicHref":"Hi.Geom.Solvers.html","topicUid":"Hi.Geom.Solvers","type":"Namespace","items":[{"name":"BinarySolverUtil","href":"Hi.Geom.Solvers.BinarySolverUtil.html","topicHref":"Hi.Geom.Solvers.BinarySolverUtil.html","topicUid":"Hi.Geom.Solvers.BinarySolverUtil","type":"Class"},{"name":"BinarySolvingEntry","href":"Hi.Geom.Solvers.BinarySolvingEntry.html","topicHref":"Hi.Geom.Solvers.BinarySolvingEntry.html","topicUid":"Hi.Geom.Solvers.BinarySolvingEntry","type":"Class"},{"name":"DeepSolvingStatus","href":"Hi.Geom.Solvers.DeepSolvingStatus.html","topicHref":"Hi.Geom.Solvers.DeepSolvingStatus.html","topicUid":"Hi.Geom.Solvers.DeepSolvingStatus","type":"Class"},{"name":"NumericalSolver","href":"Hi.Geom.Solvers.NumericalSolver.html","topicHref":"Hi.Geom.Solvers.NumericalSolver.html","topicUid":"Hi.Geom.Solvers.NumericalSolver","type":"Class"},{"name":"NumericalSolver.GetRepondsDelegate","href":"Hi.Geom.Solvers.NumericalSolver.GetRepondsDelegate.html","topicHref":"Hi.Geom.Solvers.NumericalSolver.GetRepondsDelegate.html","topicUid":"Hi.Geom.Solvers.NumericalSolver.GetRepondsDelegate","type":"Delegate"},{"name":"NumericalSolver.SetParasDelegate","href":"Hi.Geom.Solvers.NumericalSolver.SetParasDelegate.html","topicHref":"Hi.Geom.Solvers.NumericalSolver.SetParasDelegate.html","topicUid":"Hi.Geom.Solvers.NumericalSolver.SetParasDelegate","type":"Delegate"},{"name":"SolverUtil","href":"Hi.Geom.Solvers.SolverUtil.html","topicHref":"Hi.Geom.Solvers.SolverUtil.html","topicUid":"Hi.Geom.Solvers.SolverUtil","type":"Class"},{"name":"SolvingResult","href":"Hi.Geom.Solvers.SolvingResult.html","topicHref":"Hi.Geom.Solvers.SolvingResult.html","topicUid":"Hi.Geom.Solvers.SolvingResult","type":"Class"},{"name":"SolvingStatus","href":"Hi.Geom.Solvers.SolvingStatus.html","topicHref":"Hi.Geom.Solvers.SolvingStatus.html","topicUid":"Hi.Geom.Solvers.SolvingStatus","type":"Enum"},{"name":"SolvingTerm","href":"Hi.Geom.Solvers.SolvingTerm.html","topicHref":"Hi.Geom.Solvers.SolvingTerm.html","topicUid":"Hi.Geom.Solvers.SolvingTerm","type":"Enum"}]},{"name":"Hi.Geom.Topo","href":"Hi.Geom.Topo.html","topicHref":"Hi.Geom.Topo.html","topicUid":"Hi.Geom.Topo","type":"Namespace","items":[{"name":"TopoLine3Hfr","href":"Hi.Geom.Topo.TopoLine3Hfr.html","topicHref":"Hi.Geom.Topo.TopoLine3Hfr.html","topicUid":"Hi.Geom.Topo.TopoLine3Hfr","type":"Class"},{"name":"TopoLine3StockHfr","href":"Hi.Geom.Topo.TopoLine3StockHfr.html","topicHref":"Hi.Geom.Topo.TopoLine3StockHfr.html","topicUid":"Hi.Geom.Topo.TopoLine3StockHfr","type":"Class"},{"name":"TopoPoint3Hfr","href":"Hi.Geom.Topo.TopoPoint3Hfr.html","topicHref":"Hi.Geom.Topo.TopoPoint3Hfr.html","topicUid":"Hi.Geom.Topo.TopoPoint3Hfr","type":"Class"},{"name":"TopoPoint3StockHfr","href":"Hi.Geom.Topo.TopoPoint3StockHfr.html","topicHref":"Hi.Geom.Topo.TopoPoint3StockHfr.html","topicUid":"Hi.Geom.Topo.TopoPoint3StockHfr","type":"Class"},{"name":"TopoStl3Hfr","href":"Hi.Geom.Topo.TopoStl3Hfr.html","topicHref":"Hi.Geom.Topo.TopoStl3Hfr.html","topicUid":"Hi.Geom.Topo.TopoStl3Hfr","type":"Class"},{"name":"TopoStl3HfrFlatDisplayee","href":"Hi.Geom.Topo.TopoStl3HfrFlatDisplayee.html","topicHref":"Hi.Geom.Topo.TopoStl3HfrFlatDisplayee.html","topicUid":"Hi.Geom.Topo.TopoStl3HfrFlatDisplayee","type":"Class"},{"name":"TopoStl3HfrSmoothDisplayee","href":"Hi.Geom.Topo.TopoStl3HfrSmoothDisplayee.html","topicHref":"Hi.Geom.Topo.TopoStl3HfrSmoothDisplayee.html","topicUid":"Hi.Geom.Topo.TopoStl3HfrSmoothDisplayee","type":"Class"},{"name":"TopoTri3Hfr","href":"Hi.Geom.Topo.TopoTri3Hfr.html","topicHref":"Hi.Geom.Topo.TopoTri3Hfr.html","topicUid":"Hi.Geom.Topo.TopoTri3Hfr","type":"Class"},{"name":"TopoTri3StockHfr","href":"Hi.Geom.Topo.TopoTri3StockHfr.html","topicHref":"Hi.Geom.Topo.TopoTri3StockHfr.html","topicUid":"Hi.Geom.Topo.TopoTri3StockHfr","type":"Class"},{"name":"Vec3Hfr","href":"Hi.Geom.Topo.Vec3Hfr.html","topicHref":"Hi.Geom.Topo.Vec3Hfr.html","topicUid":"Hi.Geom.Topo.Vec3Hfr","type":"Struct"}]},{"name":"Hi.Geom.UnitUtils","href":"Hi.Geom.UnitUtils.html","topicHref":"Hi.Geom.UnitUtils.html","topicUid":"Hi.Geom.UnitUtils","type":"Namespace","items":[{"name":"PhysicsUnit","href":"Hi.Geom.UnitUtils.PhysicsUnit.html","topicHref":"Hi.Geom.UnitUtils.PhysicsUnit.html","topicUid":"Hi.Geom.UnitUtils.PhysicsUnit","type":"Enum"},{"name":"StringValueAttribute","href":"Hi.Geom.UnitUtils.StringValueAttribute.html","topicHref":"Hi.Geom.UnitUtils.StringValueAttribute.html","topicUid":"Hi.Geom.UnitUtils.StringValueAttribute","type":"Class"},{"name":"UnitConvertUtil","href":"Hi.Geom.UnitUtils.UnitConvertUtil.html","topicHref":"Hi.Geom.UnitUtils.UnitConvertUtil.html","topicUid":"Hi.Geom.UnitUtils.UnitConvertUtil","type":"Class"}]},{"name":"Hi.Grpcs","href":"Hi.Grpcs.html","topicHref":"Hi.Grpcs.html","topicUid":"Hi.Grpcs","type":"Namespace","items":[{"name":"ClStripService","href":"Hi.Grpcs.ClStripService.html","topicHref":"Hi.Grpcs.ClStripService.html","topicUid":"Hi.Grpcs.ClStripService","type":"Class"},{"name":"ClStripService.ClStripServiceBase","href":"Hi.Grpcs.ClStripService.ClStripServiceBase.html","topicHref":"Hi.Grpcs.ClStripService.ClStripServiceBase.html","topicUid":"Hi.Grpcs.ClStripService.ClStripServiceBase","type":"Class"},{"name":"ClStripService.ClStripServiceClient","href":"Hi.Grpcs.ClStripService.ClStripServiceClient.html","topicHref":"Hi.Grpcs.ClStripService.ClStripServiceClient.html","topicUid":"Hi.Grpcs.ClStripService.ClStripServiceClient","type":"Class"},{"name":"ClStripServiceReflection","href":"Hi.Grpcs.ClStripServiceReflection.html","topicHref":"Hi.Grpcs.ClStripServiceReflection.html","topicUid":"Hi.Grpcs.ClStripServiceReflection","type":"Class"},{"name":"ClStripServiceRunner","href":"Hi.Grpcs.ClStripServiceRunner.html","topicHref":"Hi.Grpcs.ClStripServiceRunner.html","topicUid":"Hi.Grpcs.ClStripServiceRunner","type":"Class"},{"name":"DictionaryStep","href":"Hi.Grpcs.DictionaryStep.html","topicHref":"Hi.Grpcs.DictionaryStep.html","topicUid":"Hi.Grpcs.DictionaryStep","type":"Class"},{"name":"PlayerService","href":"Hi.Grpcs.PlayerService.html","topicHref":"Hi.Grpcs.PlayerService.html","topicUid":"Hi.Grpcs.PlayerService","type":"Class"},{"name":"PlayerService.PlayerServiceBase","href":"Hi.Grpcs.PlayerService.PlayerServiceBase.html","topicHref":"Hi.Grpcs.PlayerService.PlayerServiceBase.html","topicUid":"Hi.Grpcs.PlayerService.PlayerServiceBase","type":"Class"},{"name":"PlayerService.PlayerServiceClient","href":"Hi.Grpcs.PlayerService.PlayerServiceClient.html","topicHref":"Hi.Grpcs.PlayerService.PlayerServiceClient.html","topicUid":"Hi.Grpcs.PlayerService.PlayerServiceClient","type":"Class"},{"name":"PlayerServiceReflection","href":"Hi.Grpcs.PlayerServiceReflection.html","topicHref":"Hi.Grpcs.PlayerServiceReflection.html","topicUid":"Hi.Grpcs.PlayerServiceReflection","type":"Class"},{"name":"PlayerServiceRunner","href":"Hi.Grpcs.PlayerServiceRunner.html","topicHref":"Hi.Grpcs.PlayerServiceRunner.html","topicUid":"Hi.Grpcs.PlayerServiceRunner","type":"Class"}]},{"name":"Hi.HiNcKits","href":"Hi.HiNcKits.html","topicHref":"Hi.HiNcKits.html","topicUid":"Hi.HiNcKits","type":"Namespace","items":[{"name":"BasePathEnum","href":"Hi.HiNcKits.BasePathEnum.html","topicHref":"Hi.HiNcKits.BasePathEnum.html","topicUid":"Hi.HiNcKits.BasePathEnum","type":"Enum"},{"name":"HiNcHost","href":"Hi.HiNcKits.HiNcHost.html","topicHref":"Hi.HiNcKits.HiNcHost.html","topicUid":"Hi.HiNcKits.HiNcHost","type":"Class"},{"name":"LocalApp","href":"Hi.HiNcKits.LocalApp.html","topicHref":"Hi.HiNcKits.LocalApp.html","topicUid":"Hi.HiNcKits.LocalApp","type":"Class"},{"name":"LocalAppConfig","href":"Hi.HiNcKits.LocalAppConfig.html","topicHref":"Hi.HiNcKits.LocalAppConfig.html","topicUid":"Hi.HiNcKits.LocalAppConfig","type":"Class"},{"name":"PlayerDivConfig","href":"Hi.HiNcKits.PlayerDivConfig.html","topicHref":"Hi.HiNcKits.PlayerDivConfig.html","topicUid":"Hi.HiNcKits.PlayerDivConfig","type":"Class"},{"name":"ProxyConfig","href":"Hi.HiNcKits.ProxyConfig.html","topicHref":"Hi.HiNcKits.ProxyConfig.html","topicUid":"Hi.HiNcKits.ProxyConfig","type":"Class"},{"name":"UserConfig","href":"Hi.HiNcKits.UserConfig.html","topicHref":"Hi.HiNcKits.UserConfig.html","topicUid":"Hi.HiNcKits.UserConfig","type":"Class"},{"name":"UserService","href":"Hi.HiNcKits.UserService.html","topicHref":"Hi.HiNcKits.UserService.html","topicUid":"Hi.HiNcKits.UserService","type":"Class"}]},{"name":"Hi.Licenses","href":"Hi.Licenses.html","topicHref":"Hi.Licenses.html","topicUid":"Hi.Licenses","type":"Namespace","items":[{"name":"AuthFeature","href":"Hi.Licenses.AuthFeature.html","topicHref":"Hi.Licenses.AuthFeature.html","topicUid":"Hi.Licenses.AuthFeature","type":"Enum"},{"name":"AuthorizationFailedEventArgs","href":"Hi.Licenses.AuthorizationFailedEventArgs.html","topicHref":"Hi.Licenses.AuthorizationFailedEventArgs.html","topicUid":"Hi.Licenses.AuthorizationFailedEventArgs","type":"Class"},{"name":"BlockType","href":"Hi.Licenses.BlockType.html","topicHref":"Hi.Licenses.BlockType.html","topicUid":"Hi.Licenses.BlockType","type":"Enum"},{"name":"License","href":"Hi.Licenses.License.html","topicHref":"Hi.Licenses.License.html","topicUid":"Hi.Licenses.License","type":"Class"},{"name":"LicenseType","href":"Hi.Licenses.LicenseType.html","topicHref":"Hi.Licenses.LicenseType.html","topicUid":"Hi.Licenses.LicenseType","type":"Enum"}]},{"name":"Hi.Machining","href":"Hi.Machining.html","topicHref":"Hi.Machining.html","topicUid":"Hi.Machining","type":"Namespace","items":[{"name":"FreeformRemover","href":"Hi.Machining.FreeformRemover.html","topicHref":"Hi.Machining.FreeformRemover.html","topicUid":"Hi.Machining.FreeformRemover","type":"Class"},{"name":"ICutter","href":"Hi.Machining.ICutter.html","topicHref":"Hi.Machining.ICutter.html","topicUid":"Hi.Machining.ICutter","type":"Interface"},{"name":"ICutterAnchorable","href":"Hi.Machining.ICutterAnchorable.html","topicHref":"Hi.Machining.ICutterAnchorable.html","topicUid":"Hi.Machining.ICutterAnchorable","type":"Interface"},{"name":"IGetSweptable","href":"Hi.Machining.IGetSweptable.html","topicHref":"Hi.Machining.IGetSweptable.html","topicUid":"Hi.Machining.IGetSweptable","type":"Interface"},{"name":"IMachiningTool","href":"Hi.Machining.IMachiningTool.html","topicHref":"Hi.Machining.IMachiningTool.html","topicUid":"Hi.Machining.IMachiningTool","type":"Interface"},{"name":"IVolumeRemover","href":"Hi.Machining.IVolumeRemover.html","topicHref":"Hi.Machining.IVolumeRemover.html","topicUid":"Hi.Machining.IVolumeRemover","type":"Interface"},{"name":"MachiningToolHouse","href":"Hi.Machining.MachiningToolHouse.html","topicHref":"Hi.Machining.MachiningToolHouse.html","topicUid":"Hi.Machining.MachiningToolHouse","type":"Class"},{"name":"MachiningVolumeRemovalProc","href":"Hi.Machining.MachiningVolumeRemovalProc.html","topicHref":"Hi.Machining.MachiningVolumeRemovalProc.html","topicUid":"Hi.Machining.MachiningVolumeRemovalProc","type":"Class"},{"name":"MachiningVolumeRemovalProc.StepMotionSnapshot","href":"Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html","topicHref":"Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html","topicUid":"Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot","type":"Class"},{"name":"MatInterpolationKit","href":"Hi.Machining.MatInterpolationKit.html","topicHref":"Hi.Machining.MatInterpolationKit.html","topicUid":"Hi.Machining.MatInterpolationKit","type":"Class"},{"name":"MatRelation","href":"Hi.Machining.MatRelation.html","topicHref":"Hi.Machining.MatRelation.html","topicUid":"Hi.Machining.MatRelation","type":"Enum"},{"name":"MatRelationUtil","href":"Hi.Machining.MatRelationUtil.html","topicHref":"Hi.Machining.MatRelationUtil.html","topicUid":"Hi.Machining.MatRelationUtil","type":"Class"},{"name":"Sweptable","href":"Hi.Machining.Sweptable.html","topicHref":"Hi.Machining.Sweptable.html","topicUid":"Hi.Machining.Sweptable","type":"Class"},{"name":"SweptableUtil","href":"Hi.Machining.SweptableUtil.html","topicHref":"Hi.Machining.SweptableUtil.html","topicUid":"Hi.Machining.SweptableUtil","type":"Class"},{"name":"ToolNotFoundException","href":"Hi.Machining.ToolNotFoundException.html","topicHref":"Hi.Machining.ToolNotFoundException.html","topicUid":"Hi.Machining.ToolNotFoundException","type":"Class"}]},{"name":"Hi.Machining.MachiningEquipmentUtils","href":"Hi.Machining.MachiningEquipmentUtils.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.html","topicUid":"Hi.Machining.MachiningEquipmentUtils","type":"Namespace","items":[{"name":"CollidableComponentEnum","href":"Hi.Machining.MachiningEquipmentUtils.CollidableComponentEnum.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.CollidableComponentEnum.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.CollidableComponentEnum","type":"Enum"},{"name":"IGetMachiningEquipment","href":"Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment","type":"Interface"},{"name":"IMachiningEquipment","href":"Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment","type":"Interface"},{"name":"MachiningEquipment","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipment","type":"Class"},{"name":"MachiningEquipmentCollisionIndex","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex","type":"Class"},{"name":"MachiningEquipmentCollisionIndexPairsSource","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource","type":"Class"},{"name":"MachiningEquipmentUtil","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil","type":"Class"}]},{"name":"Hi.MachiningProcs","href":"Hi.MachiningProcs.html","topicHref":"Hi.MachiningProcs.html","topicUid":"Hi.MachiningProcs","type":"Namespace","items":[{"name":"ConfigStepFunc","href":"Hi.MachiningProcs.ConfigStepFunc.html","topicHref":"Hi.MachiningProcs.ConfigStepFunc.html","topicUid":"Hi.MachiningProcs.ConfigStepFunc","type":"Delegate"},{"name":"IMachiningProjectGetter","href":"Hi.MachiningProcs.IMachiningProjectGetter.html","topicHref":"Hi.MachiningProcs.IMachiningProjectGetter.html","topicUid":"Hi.MachiningProcs.IMachiningProjectGetter","type":"Interface"},{"name":"IProjectService","href":"Hi.MachiningProcs.IProjectService.html","topicHref":"Hi.MachiningProcs.IProjectService.html","topicUid":"Hi.MachiningProcs.IProjectService","type":"Interface"},{"name":"LocalProjectService","href":"Hi.MachiningProcs.LocalProjectService.html","topicHref":"Hi.MachiningProcs.LocalProjectService.html","topicUid":"Hi.MachiningProcs.LocalProjectService","type":"Class"},{"name":"LocalProjectService.MachiningProjectChangedDelegate","href":"Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate.html","topicHref":"Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate.html","topicUid":"Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate","type":"Delegate"},{"name":"MachiningActRunner","href":"Hi.MachiningProcs.MachiningActRunner.html","topicHref":"Hi.MachiningProcs.MachiningActRunner.html","topicUid":"Hi.MachiningProcs.MachiningActRunner","type":"Class"},{"name":"MachiningActRunner.MachiningStepBuiltDelegate","href":"Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate.html","topicHref":"Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate.html","topicUid":"Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate","type":"Delegate"},{"name":"MachiningActRunnerConfig","href":"Hi.MachiningProcs.MachiningActRunnerConfig.html","topicHref":"Hi.MachiningProcs.MachiningActRunnerConfig.html","topicUid":"Hi.MachiningProcs.MachiningActRunnerConfig","type":"Class"},{"name":"MachiningParallelProc","href":"Hi.MachiningProcs.MachiningParallelProc.html","topicHref":"Hi.MachiningProcs.MachiningParallelProc.html","topicUid":"Hi.MachiningProcs.MachiningParallelProc","type":"Class"},{"name":"MachiningParallelProc.StepTaskBundle","href":"Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle.html","topicHref":"Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle.html","topicUid":"Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle","type":"Class"},{"name":"MachiningParallelProc.SubstractionResult","href":"Hi.MachiningProcs.MachiningParallelProc.SubstractionResult.html","topicHref":"Hi.MachiningProcs.MachiningParallelProc.SubstractionResult.html","topicUid":"Hi.MachiningProcs.MachiningParallelProc.SubstractionResult","type":"Class"},{"name":"MachiningProject","href":"Hi.MachiningProcs.MachiningProject.html","topicHref":"Hi.MachiningProcs.MachiningProject.html","topicUid":"Hi.MachiningProcs.MachiningProject","type":"Class"},{"name":"MachiningProjectDisplayee","href":"Hi.MachiningProcs.MachiningProjectDisplayee.html","topicHref":"Hi.MachiningProcs.MachiningProjectDisplayee.html","topicUid":"Hi.MachiningProcs.MachiningProjectDisplayee","type":"Class"},{"name":"MachiningSession","href":"Hi.MachiningProcs.MachiningSession.html","topicHref":"Hi.MachiningProcs.MachiningSession.html","topicUid":"Hi.MachiningProcs.MachiningSession","type":"Class"},{"name":"MillingUtil","href":"Hi.MachiningProcs.MillingUtil.html","topicHref":"Hi.MachiningProcs.MillingUtil.html","topicUid":"Hi.MachiningProcs.MillingUtil","type":"Class"},{"name":"NcRunnerSessionState","href":"Hi.MachiningProcs.NcRunnerSessionState.html","topicHref":"Hi.MachiningProcs.NcRunnerSessionState.html","topicUid":"Hi.MachiningProcs.NcRunnerSessionState","type":"Class"},{"name":"ProxyProjectService","href":"Hi.MachiningProcs.ProxyProjectService.html","topicHref":"Hi.MachiningProcs.ProxyProjectService.html","topicUid":"Hi.MachiningProcs.ProxyProjectService","type":"Class"},{"name":"RenderingFlag","href":"Hi.MachiningProcs.RenderingFlag.html","topicHref":"Hi.MachiningProcs.RenderingFlag.html","topicUid":"Hi.MachiningProcs.RenderingFlag","type":"Enum"},{"name":"SessionMessage","href":"Hi.MachiningProcs.SessionMessage.html","topicHref":"Hi.MachiningProcs.SessionMessage.html","topicUid":"Hi.MachiningProcs.SessionMessage","type":"Class"},{"name":"SessionMessagePack","href":"Hi.MachiningProcs.SessionMessagePack.html","topicHref":"Hi.MachiningProcs.SessionMessagePack.html","topicUid":"Hi.MachiningProcs.SessionMessagePack","type":"Class"},{"name":"SessionProgress","href":"Hi.MachiningProcs.SessionProgress.html","topicHref":"Hi.MachiningProcs.SessionProgress.html","topicUid":"Hi.MachiningProcs.SessionProgress","type":"Class"},{"name":"SessionProgress.FilterFlag","href":"Hi.MachiningProcs.SessionProgress.FilterFlag.html","topicHref":"Hi.MachiningProcs.SessionProgress.FilterFlag.html","topicUid":"Hi.MachiningProcs.SessionProgress.FilterFlag","type":"Enum"},{"name":"SessionShell","href":"Hi.MachiningProcs.SessionShell.html","topicHref":"Hi.MachiningProcs.SessionShell.html","topicUid":"Hi.MachiningProcs.SessionShell","type":"Class"},{"name":"SessionShellController","href":"Hi.MachiningProcs.SessionShellController.html","topicHref":"Hi.MachiningProcs.SessionShellController.html","topicUid":"Hi.MachiningProcs.SessionShellController","type":"Class"},{"name":"SetupController","href":"Hi.MachiningProcs.SetupController.html","topicHref":"Hi.MachiningProcs.SetupController.html","topicUid":"Hi.MachiningProcs.SetupController","type":"Class"},{"name":"SpindleSpeedCache","href":"Hi.MachiningProcs.SpindleSpeedCache.html","topicHref":"Hi.MachiningProcs.SpindleSpeedCache.html","topicUid":"Hi.MachiningProcs.SpindleSpeedCache","type":"Class"}]},{"name":"Hi.MachiningSteps","href":"Hi.MachiningSteps.html","topicHref":"Hi.MachiningSteps.html","topicUid":"Hi.MachiningSteps","type":"Namespace","items":[{"name":"IFlagText","href":"Hi.MachiningSteps.IFlagText.html","topicHref":"Hi.MachiningSteps.IFlagText.html","topicUid":"Hi.MachiningSteps.IFlagText","type":"Interface"},{"name":"IMachiningService","href":"Hi.MachiningSteps.IMachiningService.html","topicHref":"Hi.MachiningSteps.IMachiningService.html","topicUid":"Hi.MachiningSteps.IMachiningService","type":"Interface"},{"name":"MachineMotionStep","href":"Hi.MachiningSteps.MachineMotionStep.html","topicHref":"Hi.MachiningSteps.MachineMotionStep.html","topicUid":"Hi.MachiningSteps.MachineMotionStep","type":"Class"},{"name":"MachiningStep","href":"Hi.MachiningSteps.MachiningStep.html","topicHref":"Hi.MachiningSteps.MachiningStep.html","topicUid":"Hi.MachiningSteps.MachiningStep","type":"Class"},{"name":"MachiningStep.CollidedKeyPair","href":"Hi.MachiningSteps.MachiningStep.CollidedKeyPair.html","topicHref":"Hi.MachiningSteps.MachiningStep.CollidedKeyPair.html","topicUid":"Hi.MachiningSteps.MachiningStep.CollidedKeyPair","type":"Class"},{"name":"MachiningStepUtil","href":"Hi.MachiningSteps.MachiningStepUtil.html","topicHref":"Hi.MachiningSteps.MachiningStepUtil.html","topicUid":"Hi.MachiningSteps.MachiningStepUtil","type":"Class"},{"name":"PresentAccess","href":"Hi.MachiningSteps.PresentAccess.html","topicHref":"Hi.MachiningSteps.PresentAccess.html","topicUid":"Hi.MachiningSteps.PresentAccess","type":"Class"},{"name":"PresentAttribute","href":"Hi.MachiningSteps.PresentAttribute.html","topicHref":"Hi.MachiningSteps.PresentAttribute.html","topicUid":"Hi.MachiningSteps.PresentAttribute","type":"Class"},{"name":"PropertyAccess","href":"Hi.MachiningSteps.PropertyAccess-1.html","topicHref":"Hi.MachiningSteps.PropertyAccess-1.html","topicUid":"Hi.MachiningSteps.PropertyAccess`1","type":"Class"}]},{"name":"Hi.Mapping","href":"Hi.Mapping.html","topicHref":"Hi.Mapping.html","topicUid":"Hi.Mapping","type":"Namespace","items":[{"name":"CsvNcStep","href":"Hi.Mapping.CsvNcStep.html","topicHref":"Hi.Mapping.CsvNcStep.html","topicUid":"Hi.Mapping.CsvNcStep","type":"Class"},{"name":"FileToTimeShotMapping","href":"Hi.Mapping.FileToTimeShotMapping.html","topicHref":"Hi.Mapping.FileToTimeShotMapping.html","topicUid":"Hi.Mapping.FileToTimeShotMapping","type":"Class"},{"name":"IAccelerationShot","href":"Hi.Mapping.IAccelerationShot.html","topicHref":"Hi.Mapping.IAccelerationShot.html","topicUid":"Hi.Mapping.IAccelerationShot","type":"Interface"},{"name":"IForceShot","href":"Hi.Mapping.IForceShot.html","topicHref":"Hi.Mapping.IForceShot.html","topicUid":"Hi.Mapping.IForceShot","type":"Interface"},{"name":"IMomentShot","href":"Hi.Mapping.IMomentShot.html","topicHref":"Hi.Mapping.IMomentShot.html","topicUid":"Hi.Mapping.IMomentShot","type":"Interface"},{"name":"ITimeShot","href":"Hi.Mapping.ITimeShot.html","topicHref":"Hi.Mapping.ITimeShot.html","topicUid":"Hi.Mapping.ITimeShot","type":"Interface"},{"name":"MappingUtil","href":"Hi.Mapping.MappingUtil.html","topicHref":"Hi.Mapping.MappingUtil.html","topicUid":"Hi.Mapping.MappingUtil","type":"Class"},{"name":"StepTimeShotUtil","href":"Hi.Mapping.StepTimeShotUtil.html","topicHref":"Hi.Mapping.StepTimeShotUtil.html","topicUid":"Hi.Mapping.StepTimeShotUtil","type":"Class"},{"name":"StepTimeShotUtil.CycleSamplingMode","href":"Hi.Mapping.StepTimeShotUtil.CycleSamplingMode.html","topicHref":"Hi.Mapping.StepTimeShotUtil.CycleSamplingMode.html","topicUid":"Hi.Mapping.StepTimeShotUtil.CycleSamplingMode","type":"Enum"},{"name":"StepTimeShotUtil.GetTimeShotByFileDelegate","href":"Hi.Mapping.StepTimeShotUtil.GetTimeShotByFileDelegate.html","topicHref":"Hi.Mapping.StepTimeShotUtil.GetTimeShotByFileDelegate.html","topicUid":"Hi.Mapping.StepTimeShotUtil.GetTimeShotByFileDelegate","type":"Delegate"},{"name":"TimeMapping","href":"Hi.Mapping.TimeMapping.html","topicHref":"Hi.Mapping.TimeMapping.html","topicUid":"Hi.Mapping.TimeMapping","type":"Class"}]},{"name":"Hi.Mappings","href":"Hi.Mappings.html","topicHref":"Hi.Mappings.html","topicUid":"Hi.Mappings","type":"Namespace","items":[{"name":"FileTimeSection","href":"Hi.Mappings.FileTimeSection.html","topicHref":"Hi.Mappings.FileTimeSection.html","topicUid":"Hi.Mappings.FileTimeSection","type":"Class"},{"name":"FileTimeSection.TimeOption","href":"Hi.Mappings.FileTimeSection.TimeOption.html","topicHref":"Hi.Mappings.FileTimeSection.TimeOption.html","topicUid":"Hi.Mappings.FileTimeSection.TimeOption","type":"Enum"}]},{"name":"Hi.Mech","href":"Hi.Mech.html","topicHref":"Hi.Mech.html","topicUid":"Hi.Mech","type":"Namespace","items":[{"name":"GeneralMechanism","href":"Hi.Mech.GeneralMechanism.html","topicHref":"Hi.Mech.GeneralMechanism.html","topicUid":"Hi.Mech.GeneralMechanism","type":"Class"},{"name":"IGetAnchorToSolidDictionary","href":"Hi.Mech.IGetAnchorToSolidDictionary.html","topicHref":"Hi.Mech.IGetAnchorToSolidDictionary.html","topicUid":"Hi.Mech.IGetAnchorToSolidDictionary","type":"Interface"},{"name":"IGetMachiningChain","href":"Hi.Mech.IGetMachiningChain.html","topicHref":"Hi.Mech.IGetMachiningChain.html","topicUid":"Hi.Mech.IGetMachiningChain","type":"Interface"},{"name":"IMachiningChain","href":"Hi.Mech.IMachiningChain.html","topicHref":"Hi.Mech.IMachiningChain.html","topicUid":"Hi.Mech.IMachiningChain","type":"Interface"},{"name":"IMachiningChainSource","href":"Hi.Mech.IMachiningChainSource.html","topicHref":"Hi.Mech.IMachiningChainSource.html","topicUid":"Hi.Mech.IMachiningChainSource","type":"Interface"},{"name":"MachiningChainUtil","href":"Hi.Mech.MachiningChainUtil.html","topicHref":"Hi.Mech.MachiningChainUtil.html","topicUid":"Hi.Mech.MachiningChainUtil","type":"Class"}]},{"name":"Hi.Mech.Topo","href":"Hi.Mech.Topo.html","topicHref":"Hi.Mech.Topo.html","topicUid":"Hi.Mech.Topo","type":"Namespace","items":[{"name":"Anchor","href":"Hi.Mech.Topo.Anchor.html","topicHref":"Hi.Mech.Topo.Anchor.html","topicUid":"Hi.Mech.Topo.Anchor","type":"Class"},{"name":"AnchorFuncSource","href":"Hi.Mech.Topo.AnchorFuncSource.html","topicHref":"Hi.Mech.Topo.AnchorFuncSource.html","topicUid":"Hi.Mech.Topo.AnchorFuncSource","type":"Class"},{"name":"AnchoredBoxable","href":"Hi.Mech.Topo.AnchoredBoxable.html","topicHref":"Hi.Mech.Topo.AnchoredBoxable.html","topicUid":"Hi.Mech.Topo.AnchoredBoxable","type":"Class"},{"name":"AnchoredDisplayee","href":"Hi.Mech.Topo.AnchoredDisplayee.html","topicHref":"Hi.Mech.Topo.AnchoredDisplayee.html","topicUid":"Hi.Mech.Topo.AnchoredDisplayee","type":"Class"},{"name":"Asmb","href":"Hi.Mech.Topo.Asmb.html","topicHref":"Hi.Mech.Topo.Asmb.html","topicUid":"Hi.Mech.Topo.Asmb","type":"Class"},{"name":"AsmbDraw","href":"Hi.Mech.Topo.AsmbDraw.html","topicHref":"Hi.Mech.Topo.AsmbDraw.html","topicUid":"Hi.Mech.Topo.AsmbDraw","type":"Class"},{"name":"Branch","href":"Hi.Mech.Topo.Branch.html","topicHref":"Hi.Mech.Topo.Branch.html","topicUid":"Hi.Mech.Topo.Branch","type":"Class"},{"name":"DirectionBranchEntry","href":"Hi.Mech.Topo.DirectionBranchEntry.html","topicHref":"Hi.Mech.Topo.DirectionBranchEntry.html","topicUid":"Hi.Mech.Topo.DirectionBranchEntry","type":"Class"},{"name":"DirectionBranchPackUtil","href":"Hi.Mech.Topo.DirectionBranchPackUtil.html","topicHref":"Hi.Mech.Topo.DirectionBranchPackUtil.html","topicUid":"Hi.Mech.Topo.DirectionBranchPackUtil","type":"Class"},{"name":"DynamicFreeform","href":"Hi.Mech.Topo.DynamicFreeform.html","topicHref":"Hi.Mech.Topo.DynamicFreeform.html","topicUid":"Hi.Mech.Topo.DynamicFreeform","type":"Class"},{"name":"DynamicRotation","href":"Hi.Mech.Topo.DynamicRotation.html","topicHref":"Hi.Mech.Topo.DynamicRotation.html","topicUid":"Hi.Mech.Topo.DynamicRotation","type":"Class"},{"name":"DynamicTranslation","href":"Hi.Mech.Topo.DynamicTranslation.html","topicHref":"Hi.Mech.Topo.DynamicTranslation.html","topicUid":"Hi.Mech.Topo.DynamicTranslation","type":"Class"},{"name":"GeneralTransform","href":"Hi.Mech.Topo.GeneralTransform.html","topicHref":"Hi.Mech.Topo.GeneralTransform.html","topicUid":"Hi.Mech.Topo.GeneralTransform","type":"Class"},{"name":"IAnchoredDisplayee","href":"Hi.Mech.Topo.IAnchoredDisplayee.html","topicHref":"Hi.Mech.Topo.IAnchoredDisplayee.html","topicUid":"Hi.Mech.Topo.IAnchoredDisplayee","type":"Interface"},{"name":"IDynamicRegular","href":"Hi.Mech.Topo.IDynamicRegular.html","topicHref":"Hi.Mech.Topo.IDynamicRegular.html","topicUid":"Hi.Mech.Topo.IDynamicRegular","type":"Interface"},{"name":"IDynamicRotation","href":"Hi.Mech.Topo.IDynamicRotation.html","topicHref":"Hi.Mech.Topo.IDynamicRotation.html","topicUid":"Hi.Mech.Topo.IDynamicRotation","type":"Interface"},{"name":"IDynamicTransformer","href":"Hi.Mech.Topo.IDynamicTransformer.html","topicHref":"Hi.Mech.Topo.IDynamicTransformer.html","topicUid":"Hi.Mech.Topo.IDynamicTransformer","type":"Interface"},{"name":"IGetAnchor","href":"Hi.Mech.Topo.IGetAnchor.html","topicHref":"Hi.Mech.Topo.IGetAnchor.html","topicUid":"Hi.Mech.Topo.IGetAnchor","type":"Interface"},{"name":"IGetAnchoredDisplayeeList","href":"Hi.Mech.Topo.IGetAnchoredDisplayeeList.html","topicHref":"Hi.Mech.Topo.IGetAnchoredDisplayeeList.html","topicUid":"Hi.Mech.Topo.IGetAnchoredDisplayeeList","type":"Interface"},{"name":"IGetAsmb","href":"Hi.Mech.Topo.IGetAsmb.html","topicHref":"Hi.Mech.Topo.IGetAsmb.html","topicUid":"Hi.Mech.Topo.IGetAsmb","type":"Interface"},{"name":"IGetFletchBuckle","href":"Hi.Mech.Topo.IGetFletchBuckle.html","topicHref":"Hi.Mech.Topo.IGetFletchBuckle.html","topicUid":"Hi.Mech.Topo.IGetFletchBuckle","type":"Interface"},{"name":"IGetInverseTransformer","href":"Hi.Mech.Topo.IGetInverseTransformer.html","topicHref":"Hi.Mech.Topo.IGetInverseTransformer.html","topicUid":"Hi.Mech.Topo.IGetInverseTransformer","type":"Interface"},{"name":"IGetTopoIndex","href":"Hi.Mech.Topo.IGetTopoIndex.html","topicHref":"Hi.Mech.Topo.IGetTopoIndex.html","topicUid":"Hi.Mech.Topo.IGetTopoIndex","type":"Interface"},{"name":"IStaticTransformer","href":"Hi.Mech.Topo.IStaticTransformer.html","topicHref":"Hi.Mech.Topo.IStaticTransformer.html","topicUid":"Hi.Mech.Topo.IStaticTransformer","type":"Interface"},{"name":"ITopo","href":"Hi.Mech.Topo.ITopo.html","topicHref":"Hi.Mech.Topo.ITopo.html","topicUid":"Hi.Mech.Topo.ITopo","type":"Interface"},{"name":"ITopoDisplayee","href":"Hi.Mech.Topo.ITopoDisplayee.html","topicHref":"Hi.Mech.Topo.ITopoDisplayee.html","topicUid":"Hi.Mech.Topo.ITopoDisplayee","type":"Interface"},{"name":"ITransformer","href":"Hi.Mech.Topo.ITransformer.html","topicHref":"Hi.Mech.Topo.ITransformer.html","topicUid":"Hi.Mech.Topo.ITransformer","type":"Interface"},{"name":"ITransformerProperty","href":"Hi.Mech.Topo.ITransformerProperty.html","topicHref":"Hi.Mech.Topo.ITransformerProperty.html","topicUid":"Hi.Mech.Topo.ITransformerProperty","type":"Interface"},{"name":"NoTransform","href":"Hi.Mech.Topo.NoTransform.html","topicHref":"Hi.Mech.Topo.NoTransform.html","topicUid":"Hi.Mech.Topo.NoTransform","type":"Class"},{"name":"StackTransformer","href":"Hi.Mech.Topo.StackTransformer.html","topicHref":"Hi.Mech.Topo.StackTransformer.html","topicUid":"Hi.Mech.Topo.StackTransformer","type":"Class"},{"name":"StaticFreeform","href":"Hi.Mech.Topo.StaticFreeform.html","topicHref":"Hi.Mech.Topo.StaticFreeform.html","topicUid":"Hi.Mech.Topo.StaticFreeform","type":"Class"},{"name":"StaticRotation","href":"Hi.Mech.Topo.StaticRotation.html","topicHref":"Hi.Mech.Topo.StaticRotation.html","topicUid":"Hi.Mech.Topo.StaticRotation","type":"Class"},{"name":"StaticTranslation","href":"Hi.Mech.Topo.StaticTranslation.html","topicHref":"Hi.Mech.Topo.StaticTranslation.html","topicUid":"Hi.Mech.Topo.StaticTranslation","type":"Class"},{"name":"TopoDisplayee","href":"Hi.Mech.Topo.TopoDisplayee.html","topicHref":"Hi.Mech.Topo.TopoDisplayee.html","topicUid":"Hi.Mech.Topo.TopoDisplayee","type":"Class"},{"name":"TopoDisplayeeUtil","href":"Hi.Mech.Topo.TopoDisplayeeUtil.html","topicHref":"Hi.Mech.Topo.TopoDisplayeeUtil.html","topicUid":"Hi.Mech.Topo.TopoDisplayeeUtil","type":"Class"},{"name":"TopoReflection","href":"Hi.Mech.Topo.TopoReflection.html","topicHref":"Hi.Mech.Topo.TopoReflection.html","topicUid":"Hi.Mech.Topo.TopoReflection","type":"Class"},{"name":"TopoUtil","href":"Hi.Mech.Topo.TopoUtil.html","topicHref":"Hi.Mech.Topo.TopoUtil.html","topicUid":"Hi.Mech.Topo.TopoUtil","type":"Class"},{"name":"TransformerUtil","href":"Hi.Mech.Topo.TransformerUtil.html","topicHref":"Hi.Mech.Topo.TransformerUtil.html","topicUid":"Hi.Mech.Topo.TransformerUtil","type":"Class"}]},{"name":"Hi.Milling","href":"Hi.Milling.html","topicHref":"Hi.Milling.html","topicUid":"Hi.Milling","type":"Namespace","items":[{"name":"IGetDiameter","href":"Hi.Milling.IGetDiameter.html","topicHref":"Hi.Milling.IGetDiameter.html","topicUid":"Hi.Milling.IGetDiameter","type":"Interface"},{"name":"IGetFluteHeight","href":"Hi.Milling.IGetFluteHeight.html","topicHref":"Hi.Milling.IGetFluteHeight.html","topicUid":"Hi.Milling.IGetFluteHeight","type":"Interface"},{"name":"IGetMillingGeomBrief","href":"Hi.Milling.IGetMillingGeomBrief.html","topicHref":"Hi.Milling.IGetMillingGeomBrief.html","topicUid":"Hi.Milling.IGetMillingGeomBrief","type":"Interface"},{"name":"IGetRadialReliefAngle","href":"Hi.Milling.IGetRadialReliefAngle.html","topicHref":"Hi.Milling.IGetRadialReliefAngle.html","topicUid":"Hi.Milling.IGetRadialReliefAngle","type":"Interface"},{"name":"IMillingGeomBriefAccessor","href":"Hi.Milling.IMillingGeomBriefAccessor.html","topicHref":"Hi.Milling.IMillingGeomBriefAccessor.html","topicUid":"Hi.Milling.IMillingGeomBriefAccessor","type":"Interface"},{"name":"MillingGeomBrief","href":"Hi.Milling.MillingGeomBrief.html","topicHref":"Hi.Milling.MillingGeomBrief.html","topicUid":"Hi.Milling.MillingGeomBrief","type":"Class"},{"name":"MillingRemovalUtil","href":"Hi.Milling.MillingRemovalUtil.html","topicHref":"Hi.Milling.MillingRemovalUtil.html","topicUid":"Hi.Milling.MillingRemovalUtil","type":"Class"},{"name":"SpindleCapability","href":"Hi.Milling.SpindleCapability.html","topicHref":"Hi.Milling.SpindleCapability.html","topicUid":"Hi.Milling.SpindleCapability","type":"Class"}]},{"name":"Hi.Milling.Apts","href":"Hi.Milling.Apts.html","topicHref":"Hi.Milling.Apts.html","topicUid":"Hi.Milling.Apts","type":"Namespace","items":[{"name":"AptDerivative","href":"Hi.Milling.Apts.AptDerivative.html","topicHref":"Hi.Milling.Apts.AptDerivative.html","topicUid":"Hi.Milling.Apts.AptDerivative","type":"Class"},{"name":"BallApt","href":"Hi.Milling.Apts.BallApt.html","topicHref":"Hi.Milling.Apts.BallApt.html","topicUid":"Hi.Milling.Apts.BallApt","type":"Class"},{"name":"BullNoseApt","href":"Hi.Milling.Apts.BullNoseApt.html","topicHref":"Hi.Milling.Apts.BullNoseApt.html","topicUid":"Hi.Milling.Apts.BullNoseApt","type":"Class"},{"name":"ColumnApt","href":"Hi.Milling.Apts.ColumnApt.html","topicHref":"Hi.Milling.Apts.ColumnApt.html","topicUid":"Hi.Milling.Apts.ColumnApt","type":"Class"},{"name":"ConeApt","href":"Hi.Milling.Apts.ConeApt.html","topicHref":"Hi.Milling.Apts.ConeApt.html","topicUid":"Hi.Milling.Apts.ConeApt","type":"Class"},{"name":"ExactColumnApt","href":"Hi.Milling.Apts.ExactColumnApt.html","topicHref":"Hi.Milling.Apts.ExactColumnApt.html","topicUid":"Hi.Milling.Apts.ExactColumnApt","type":"Class"},{"name":"GeneralApt","href":"Hi.Milling.Apts.GeneralApt.html","topicHref":"Hi.Milling.Apts.GeneralApt.html","topicUid":"Hi.Milling.Apts.GeneralApt","type":"Class"},{"name":"IAptAlpha","href":"Hi.Milling.Apts.IAptAlpha.html","topicHref":"Hi.Milling.Apts.IAptAlpha.html","topicUid":"Hi.Milling.Apts.IAptAlpha","type":"Interface"},{"name":"IAptBased","href":"Hi.Milling.Apts.IAptBased.html","topicHref":"Hi.Milling.Apts.IAptBased.html","topicUid":"Hi.Milling.Apts.IAptBased","type":"Interface"},{"name":"IAptBeta","href":"Hi.Milling.Apts.IAptBeta.html","topicHref":"Hi.Milling.Apts.IAptBeta.html","topicUid":"Hi.Milling.Apts.IAptBeta","type":"Interface"},{"name":"IAptRc","href":"Hi.Milling.Apts.IAptRc.html","topicHref":"Hi.Milling.Apts.IAptRc.html","topicUid":"Hi.Milling.Apts.IAptRc","type":"Interface"},{"name":"IAptRr","href":"Hi.Milling.Apts.IAptRr.html","topicHref":"Hi.Milling.Apts.IAptRr.html","topicUid":"Hi.Milling.Apts.IAptRr","type":"Interface"},{"name":"IAptRz","href":"Hi.Milling.Apts.IAptRz.html","topicHref":"Hi.Milling.Apts.IAptRz.html","topicUid":"Hi.Milling.Apts.IAptRz","type":"Interface"},{"name":"IGetApt","href":"Hi.Milling.Apts.IGetApt.html","topicHref":"Hi.Milling.Apts.IGetApt.html","topicUid":"Hi.Milling.Apts.IGetApt","type":"Interface"},{"name":"IGetGeneralApt","href":"Hi.Milling.Apts.IGetGeneralApt.html","topicHref":"Hi.Milling.Apts.IGetGeneralApt.html","topicUid":"Hi.Milling.Apts.IGetGeneralApt","type":"Interface"},{"name":"TaperApt","href":"Hi.Milling.Apts.TaperApt.html","topicHref":"Hi.Milling.Apts.TaperApt.html","topicUid":"Hi.Milling.Apts.TaperApt","type":"Class"},{"name":"apt_t","href":"Hi.Milling.Apts.apt_t.html","topicHref":"Hi.Milling.Apts.apt_t.html","topicUid":"Hi.Milling.Apts.apt_t","type":"Struct"}]},{"name":"Hi.Milling.Cutters","href":"Hi.Milling.Cutters.html","topicHref":"Hi.Milling.Cutters.html","topicUid":"Hi.Milling.Cutters","type":"Namespace","items":[{"name":"AptProfile","href":"Hi.Milling.Cutters.AptProfile.html","topicHref":"Hi.Milling.Cutters.AptProfile.html","topicUid":"Hi.Milling.Cutters.AptProfile","type":"Class"},{"name":"ConstRatioProfile","href":"Hi.Milling.Cutters.ConstRatioProfile.html","topicHref":"Hi.Milling.Cutters.ConstRatioProfile.html","topicUid":"Hi.Milling.Cutters.ConstRatioProfile","type":"Class"},{"name":"CustomSpinningProfile","href":"Hi.Milling.Cutters.CustomSpinningProfile.html","topicHref":"Hi.Milling.Cutters.CustomSpinningProfile.html","topicUid":"Hi.Milling.Cutters.CustomSpinningProfile","type":"Class"},{"name":"CutterUtil","href":"Hi.Milling.Cutters.CutterUtil.html","topicHref":"Hi.Milling.Cutters.CutterUtil.html","topicUid":"Hi.Milling.Cutters.CutterUtil","type":"Class"},{"name":"FluteContourDisplayee","href":"Hi.Milling.Cutters.FluteContourDisplayee.html","topicHref":"Hi.Milling.Cutters.FluteContourDisplayee.html","topicUid":"Hi.Milling.Cutters.FluteContourDisplayee","type":"Class"},{"name":"FluteDependentRatioProfile","href":"Hi.Milling.Cutters.FluteDependentRatioProfile.html","topicHref":"Hi.Milling.Cutters.FluteDependentRatioProfile.html","topicUid":"Hi.Milling.Cutters.FluteDependentRatioProfile","type":"Class"},{"name":"IShaperProfile","href":"Hi.Milling.Cutters.IShaperProfile.html","topicHref":"Hi.Milling.Cutters.IShaperProfile.html","topicUid":"Hi.Milling.Cutters.IShaperProfile","type":"Interface"},{"name":"MillingCutter","href":"Hi.Milling.Cutters.MillingCutter.html","topicHref":"Hi.Milling.Cutters.MillingCutter.html","topicUid":"Hi.Milling.Cutters.MillingCutter","type":"Class"},{"name":"MillingCutter.IntegralModeEnum","href":"Hi.Milling.Cutters.MillingCutter.IntegralModeEnum.html","topicHref":"Hi.Milling.Cutters.MillingCutter.IntegralModeEnum.html","topicUid":"Hi.Milling.Cutters.MillingCutter.IntegralModeEnum","type":"Enum"},{"name":"MillingCutter.MassAssignmentMode","href":"Hi.Milling.Cutters.MillingCutter.MassAssignmentMode.html","topicHref":"Hi.Milling.Cutters.MillingCutter.MassAssignmentMode.html","topicUid":"Hi.Milling.Cutters.MillingCutter.MassAssignmentMode","type":"Enum"},{"name":"MillingCutterEditorDisplayee","href":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.html","topicHref":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.html","topicUid":"Hi.Milling.Cutters.MillingCutterEditorDisplayee","type":"Class"},{"name":"MillingCutterEditorDisplayee.ShapeModeEnum","href":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum.html","topicHref":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum.html","topicUid":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum","type":"Enum"}]},{"name":"Hi.Milling.Engagements","href":"Hi.Milling.Engagements.html","topicHref":"Hi.Milling.Engagements.html","topicUid":"Hi.Milling.Engagements","type":"Namespace","items":[{"name":"BitwiseMillingEngagement","href":"Hi.Milling.Engagements.BitwiseMillingEngagement.html","topicHref":"Hi.Milling.Engagements.BitwiseMillingEngagement.html","topicUid":"Hi.Milling.Engagements.BitwiseMillingEngagement","type":"Class"},{"name":"EngagementLayer","href":"Hi.Milling.Engagements.EngagementLayer.html","topicHref":"Hi.Milling.Engagements.EngagementLayer.html","topicUid":"Hi.Milling.Engagements.EngagementLayer","type":"Class"},{"name":"EngagementSlice","href":"Hi.Milling.Engagements.EngagementSlice.html","topicHref":"Hi.Milling.Engagements.EngagementSlice.html","topicUid":"Hi.Milling.Engagements.EngagementSlice","type":"Class"},{"name":"IBitwiseMillingEngagementSupport","href":"Hi.Milling.Engagements.IBitwiseMillingEngagementSupport.html","topicHref":"Hi.Milling.Engagements.IBitwiseMillingEngagementSupport.html","topicUid":"Hi.Milling.Engagements.IBitwiseMillingEngagementSupport","type":"Interface"},{"name":"IGetLayerMillingEngagement","href":"Hi.Milling.Engagements.IGetLayerMillingEngagement.html","topicHref":"Hi.Milling.Engagements.IGetLayerMillingEngagement.html","topicUid":"Hi.Milling.Engagements.IGetLayerMillingEngagement","type":"Interface"},{"name":"LayerMillingEngagement","href":"Hi.Milling.Engagements.LayerMillingEngagement.html","topicHref":"Hi.Milling.Engagements.LayerMillingEngagement.html","topicUid":"Hi.Milling.Engagements.LayerMillingEngagement","type":"Class"},{"name":"MillingEngagementUtil","href":"Hi.Milling.Engagements.MillingEngagementUtil.html","topicHref":"Hi.Milling.Engagements.MillingEngagementUtil.html","topicUid":"Hi.Milling.Engagements.MillingEngagementUtil","type":"Class"}]},{"name":"Hi.Milling.FluteContours","href":"Hi.Milling.FluteContours.html","topicHref":"Hi.Milling.FluteContours.html","topicUid":"Hi.Milling.FluteContours","type":"Namespace","items":[{"name":"ConstHelixSideContour","href":"Hi.Milling.FluteContours.ConstHelixSideContour.html","topicHref":"Hi.Milling.FluteContours.ConstHelixSideContour.html","topicUid":"Hi.Milling.FluteContours.ConstHelixSideContour","type":"Class"},{"name":"FluteContour","href":"Hi.Milling.FluteContours.FluteContour.html","topicHref":"Hi.Milling.FluteContours.FluteContour.html","topicUid":"Hi.Milling.FluteContours.FluteContour","type":"Class"},{"name":"FluteContourUtil","href":"Hi.Milling.FluteContours.FluteContourUtil.html","topicHref":"Hi.Milling.FluteContours.FluteContourUtil.html","topicUid":"Hi.Milling.FluteContours.FluteContourUtil","type":"Class"},{"name":"FreeContourTray","href":"Hi.Milling.FluteContours.FreeContourTray.html","topicHref":"Hi.Milling.FluteContours.FreeContourTray.html","topicUid":"Hi.Milling.FluteContours.FreeContourTray","type":"Class"},{"name":"FreeformSideContour","href":"Hi.Milling.FluteContours.FreeformSideContour.html","topicHref":"Hi.Milling.FluteContours.FreeformSideContour.html","topicUid":"Hi.Milling.FluteContours.FreeformSideContour","type":"Class"},{"name":"IBottomContour","href":"Hi.Milling.FluteContours.IBottomContour.html","topicHref":"Hi.Milling.FluteContours.IBottomContour.html","topicUid":"Hi.Milling.FluteContours.IBottomContour","type":"Interface"},{"name":"IContourTray","href":"Hi.Milling.FluteContours.IContourTray.html","topicHref":"Hi.Milling.FluteContours.IContourTray.html","topicUid":"Hi.Milling.FluteContours.IContourTray","type":"Interface"},{"name":"IFluteNumSourceProperty","href":"Hi.Milling.FluteContours.IFluteNumSourceProperty.html","topicHref":"Hi.Milling.FluteContours.IFluteNumSourceProperty.html","topicUid":"Hi.Milling.FluteContours.IFluteNumSourceProperty","type":"Interface"},{"name":"IGetFluteNum","href":"Hi.Milling.FluteContours.IGetFluteNum.html","topicHref":"Hi.Milling.FluteContours.IGetFluteNum.html","topicUid":"Hi.Milling.FluteContours.IGetFluteNum","type":"Interface"},{"name":"ISideContour","href":"Hi.Milling.FluteContours.ISideContour.html","topicHref":"Hi.Milling.FluteContours.ISideContour.html","topicUid":"Hi.Milling.FluteContours.ISideContour","type":"Interface"},{"name":"IWorkingContour","href":"Hi.Milling.FluteContours.IWorkingContour.html","topicHref":"Hi.Milling.FluteContours.IWorkingContour.html","topicUid":"Hi.Milling.FluteContours.IWorkingContour","type":"Interface"},{"name":"ShiftedWorkingContour","href":"Hi.Milling.FluteContours.ShiftedWorkingContour.html","topicHref":"Hi.Milling.FluteContours.ShiftedWorkingContour.html","topicUid":"Hi.Milling.FluteContours.ShiftedWorkingContour","type":"Class"},{"name":"SideContourDisplayee","href":"Hi.Milling.FluteContours.SideContourDisplayee.html","topicHref":"Hi.Milling.FluteContours.SideContourDisplayee.html","topicUid":"Hi.Milling.FluteContours.SideContourDisplayee","type":"Class"},{"name":"SlideBottomContour","href":"Hi.Milling.FluteContours.SlideBottomContour.html","topicHref":"Hi.Milling.FluteContours.SlideBottomContour.html","topicUid":"Hi.Milling.FluteContours.SlideBottomContour","type":"Class"},{"name":"SpanContourPos4d","href":"Hi.Milling.FluteContours.SpanContourPos4d.html","topicHref":"Hi.Milling.FluteContours.SpanContourPos4d.html","topicUid":"Hi.Milling.FluteContours.SpanContourPos4d","type":"Class"},{"name":"UniformContourTray","href":"Hi.Milling.FluteContours.UniformContourTray.html","topicHref":"Hi.Milling.FluteContours.UniformContourTray.html","topicUid":"Hi.Milling.FluteContours.UniformContourTray","type":"Class"}]},{"name":"Hi.Milling.MillingTools","href":"Hi.Milling.MillingTools.html","topicHref":"Hi.Milling.MillingTools.html","topicUid":"Hi.Milling.MillingTools","type":"Namespace","items":[{"name":"MillingTool","href":"Hi.Milling.MillingTools.MillingTool.html","topicHref":"Hi.Milling.MillingTools.MillingTool.html","topicUid":"Hi.Milling.MillingTools.MillingTool","type":"Class"},{"name":"MillingToolAnchorReference","href":"Hi.Milling.MillingTools.MillingToolAnchorReference.html","topicHref":"Hi.Milling.MillingTools.MillingToolAnchorReference.html","topicUid":"Hi.Milling.MillingTools.MillingToolAnchorReference","type":"Enum"},{"name":"MillingToolEditorDisplayee","href":"Hi.Milling.MillingTools.MillingToolEditorDisplayee.html","topicHref":"Hi.Milling.MillingTools.MillingToolEditorDisplayee.html","topicUid":"Hi.Milling.MillingTools.MillingToolEditorDisplayee","type":"Class"},{"name":"MillingToolUtil","href":"Hi.Milling.MillingTools.MillingToolUtil.html","topicHref":"Hi.Milling.MillingTools.MillingToolUtil.html","topicUid":"Hi.Milling.MillingTools.MillingToolUtil","type":"Class"}]},{"name":"Hi.MillingForces","href":"Hi.MillingForces.html","topicHref":"Hi.MillingForces.html","topicUid":"Hi.MillingForces","type":"Namespace","items":[{"name":"FluteZData","href":"Hi.MillingForces.FluteZData.html","topicHref":"Hi.MillingForces.FluteZData.html","topicUid":"Hi.MillingForces.FluteZData","type":"Class"},{"name":"IGetMillingForce","href":"Hi.MillingForces.IGetMillingForce.html","topicHref":"Hi.MillingForces.IGetMillingForce.html","topicUid":"Hi.MillingForces.IGetMillingForce","type":"Interface"},{"name":"IMillingForceAccessor","href":"Hi.MillingForces.IMillingForceAccessor.html","topicHref":"Hi.MillingForces.IMillingForceAccessor.html","topicUid":"Hi.MillingForces.IMillingForceAccessor","type":"Interface"},{"name":"MillingForce","href":"Hi.MillingForces.MillingForce.html","topicHref":"Hi.MillingForces.MillingForce.html","topicUid":"Hi.MillingForces.MillingForce","type":"Class"},{"name":"MillingForceLicense","href":"Hi.MillingForces.MillingForceLicense.html","topicHref":"Hi.MillingForces.MillingForceLicense.html","topicUid":"Hi.MillingForces.MillingForceLicense","type":"Class"},{"name":"MillingForceLuggage","href":"Hi.MillingForces.MillingForceLuggage.html","topicHref":"Hi.MillingForces.MillingForceLuggage.html","topicUid":"Hi.MillingForces.MillingForceLuggage","type":"Class"},{"name":"MillingForceUtil","href":"Hi.MillingForces.MillingForceUtil.html","topicHref":"Hi.MillingForces.MillingForceUtil.html","topicUid":"Hi.MillingForces.MillingForceUtil","type":"Class"},{"name":"MillingForceUtil.AnglePack","href":"Hi.MillingForces.MillingForceUtil.AnglePack.html","topicHref":"Hi.MillingForces.MillingForceUtil.AnglePack.html","topicUid":"Hi.MillingForces.MillingForceUtil.AnglePack","type":"Class"},{"name":"MillingPhysicsBrief","href":"Hi.MillingForces.MillingPhysicsBrief.html","topicHref":"Hi.MillingForces.MillingPhysicsBrief.html","topicUid":"Hi.MillingForces.MillingPhysicsBrief","type":"Class"},{"name":"PhysicsUtil","href":"Hi.MillingForces.PhysicsUtil.html","topicHref":"Hi.MillingForces.PhysicsUtil.html","topicUid":"Hi.MillingForces.PhysicsUtil","type":"Class"},{"name":"ToolObservationReference","href":"Hi.MillingForces.ToolObservationReference.html","topicHref":"Hi.MillingForces.ToolObservationReference.html","topicUid":"Hi.MillingForces.ToolObservationReference","type":"Enum"}]},{"name":"Hi.MillingForces.Fittings","href":"Hi.MillingForces.Fittings.html","topicHref":"Hi.MillingForces.Fittings.html","topicUid":"Hi.MillingForces.Fittings","type":"Namespace","items":[{"name":"CuttingParaUtil","href":"Hi.MillingForces.Fittings.CuttingParaUtil.html","topicHref":"Hi.MillingForces.Fittings.CuttingParaUtil.html","topicUid":"Hi.MillingForces.Fittings.CuttingParaUtil","type":"Class"},{"name":"ICuttingPara","href":"Hi.MillingForces.Fittings.ICuttingPara.html","topicHref":"Hi.MillingForces.Fittings.ICuttingPara.html","topicUid":"Hi.MillingForces.Fittings.ICuttingPara","type":"Interface"},{"name":"IGetCuttingPara","href":"Hi.MillingForces.Fittings.IGetCuttingPara.html","topicHref":"Hi.MillingForces.Fittings.IGetCuttingPara.html","topicUid":"Hi.MillingForces.Fittings.IGetCuttingPara","type":"Interface"},{"name":"SampleCategory","href":"Hi.MillingForces.Fittings.SampleCategory.html","topicHref":"Hi.MillingForces.Fittings.SampleCategory.html","topicUid":"Hi.MillingForces.Fittings.SampleCategory","type":"Class"},{"name":"SampleFlag","href":"Hi.MillingForces.Fittings.SampleFlag.html","topicHref":"Hi.MillingForces.Fittings.SampleFlag.html","topicUid":"Hi.MillingForces.Fittings.SampleFlag","type":"Enum"},{"name":"SampleFlagUtil","href":"Hi.MillingForces.Fittings.SampleFlagUtil.html","topicHref":"Hi.MillingForces.Fittings.SampleFlagUtil.html","topicUid":"Hi.MillingForces.Fittings.SampleFlagUtil","type":"Class"},{"name":"SampleInstance","href":"Hi.MillingForces.Fittings.SampleInstance.html","topicHref":"Hi.MillingForces.Fittings.SampleInstance.html","topicUid":"Hi.MillingForces.Fittings.SampleInstance","type":"Class"},{"name":"TimeForce","href":"Hi.MillingForces.Fittings.TimeForce.html","topicHref":"Hi.MillingForces.Fittings.TimeForce.html","topicUid":"Hi.MillingForces.Fittings.TimeForce","type":"Class"},{"name":"TimeForceFrequencyDomain","href":"Hi.MillingForces.Fittings.TimeForceFrequencyDomain.html","topicHref":"Hi.MillingForces.Fittings.TimeForceFrequencyDomain.html","topicUid":"Hi.MillingForces.Fittings.TimeForceFrequencyDomain","type":"Class"},{"name":"TimeForceSeries","href":"Hi.MillingForces.Fittings.TimeForceSeries.html","topicHref":"Hi.MillingForces.Fittings.TimeForceSeries.html","topicUid":"Hi.MillingForces.Fittings.TimeForceSeries","type":"Class"},{"name":"TimeForceUtil","href":"Hi.MillingForces.Fittings.TimeForceUtil.html","topicHref":"Hi.MillingForces.Fittings.TimeForceUtil.html","topicUid":"Hi.MillingForces.Fittings.TimeForceUtil","type":"Class"},{"name":"TimeVsForceSeries","href":"Hi.MillingForces.Fittings.TimeVsForceSeries.html","topicHref":"Hi.MillingForces.Fittings.TimeVsForceSeries.html","topicUid":"Hi.MillingForces.Fittings.TimeVsForceSeries","type":"Class"},{"name":"TimeVsTorqueSeries","href":"Hi.MillingForces.Fittings.TimeVsTorqueSeries.html","topicHref":"Hi.MillingForces.Fittings.TimeVsTorqueSeries.html","topicUid":"Hi.MillingForces.Fittings.TimeVsTorqueSeries","type":"Class"},{"name":"TrainingSample","href":"Hi.MillingForces.Fittings.TrainingSample.html","topicHref":"Hi.MillingForces.Fittings.TrainingSample.html","topicUid":"Hi.MillingForces.Fittings.TrainingSample","type":"Class"}]},{"name":"Hi.MillingForces.ProfileMillingParas","href":"Hi.MillingForces.ProfileMillingParas.html","topicHref":"Hi.MillingForces.ProfileMillingParas.html","topicUid":"Hi.MillingForces.ProfileMillingParas","type":"Namespace","items":[{"name":"IGetLocalProfileMillingPara","href":"Hi.MillingForces.ProfileMillingParas.IGetLocalProfileMillingPara.html","topicHref":"Hi.MillingForces.ProfileMillingParas.IGetLocalProfileMillingPara.html","topicUid":"Hi.MillingForces.ProfileMillingParas.IGetLocalProfileMillingPara","type":"Interface"},{"name":"LocalProfileMillingPara","href":"Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html","topicHref":"Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html","topicUid":"Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara","type":"Class"},{"name":"ProfileMillingParaMap","href":"Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html","topicHref":"Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html","topicUid":"Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap","type":"Class"},{"name":"RtaMillingParaKey","href":"Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey.html","topicHref":"Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey.html","topicUid":"Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey","type":"Enum"}]},{"name":"Hi.MillingForces.RakeFaceCuttingParas","href":"Hi.MillingForces.RakeFaceCuttingParas.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas","type":"Namespace","items":[{"name":"IRakeFaceCuttingPara","href":"Hi.MillingForces.RakeFaceCuttingParas.IRakeFaceCuttingPara.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.IRakeFaceCuttingPara.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.IRakeFaceCuttingPara","type":"Interface"},{"name":"MillingPhysicsUtil","href":"Hi.MillingForces.RakeFaceCuttingParas.MillingPhysicsUtil.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.MillingPhysicsUtil.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.MillingPhysicsUtil","type":"Class"},{"name":"MultiFormRakeFaceCuttingPara","href":"Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara","type":"Class"},{"name":"RakeFaceCuttingPara2d","href":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d","type":"Class"},{"name":"RakeFaceCuttingPara3d","href":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d","type":"Class"},{"name":"RakeFaceCuttingParaMap","href":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap","type":"Class"}]},{"name":"Hi.MillingForces.Training","href":"Hi.MillingForces.Training.html","topicHref":"Hi.MillingForces.Training.html","topicUid":"Hi.MillingForces.Training","type":"Namespace","items":[{"name":"MillingTraining","href":"Hi.MillingForces.Training.MillingTraining.html","topicHref":"Hi.MillingForces.Training.MillingTraining.html","topicUid":"Hi.MillingForces.Training.MillingTraining","type":"Class"}]},{"name":"Hi.MillingProcs","href":"Hi.MillingProcs.html","topicHref":"Hi.MillingProcs.html","topicUid":"Hi.MillingProcs","type":"Namespace","items":[{"name":"MillingGuide","href":"Hi.MillingProcs.MillingGuide.html","topicHref":"Hi.MillingProcs.MillingGuide.html","topicUid":"Hi.MillingProcs.MillingGuide","type":"Class"}]},{"name":"Hi.MillingStepUtils","href":"Hi.MillingStepUtils.html","topicHref":"Hi.MillingStepUtils.html","topicUid":"Hi.MillingStepUtils","type":"Namespace","items":[{"name":"ClStripChartConfig","href":"Hi.MillingStepUtils.ClStripChartConfig.html","topicHref":"Hi.MillingStepUtils.ClStripChartConfig.html","topicUid":"Hi.MillingStepUtils.ClStripChartConfig","type":"Class"},{"name":"ClStripChartItemConfig","href":"Hi.MillingStepUtils.ClStripChartItemConfig.html","topicHref":"Hi.MillingStepUtils.ClStripChartItemConfig.html","topicUid":"Hi.MillingStepUtils.ClStripChartItemConfig","type":"Class"},{"name":"ForceCycleFlag","href":"Hi.MillingStepUtils.ForceCycleFlag.html","topicHref":"Hi.MillingStepUtils.ForceCycleFlag.html","topicUid":"Hi.MillingStepUtils.ForceCycleFlag","type":"Enum"},{"name":"ForceCycleLineDivConfig","href":"Hi.MillingStepUtils.ForceCycleLineDivConfig.html","topicHref":"Hi.MillingStepUtils.ForceCycleLineDivConfig.html","topicUid":"Hi.MillingStepUtils.ForceCycleLineDivConfig","type":"Class"},{"name":"LineChartVRangeMode","href":"Hi.MillingStepUtils.LineChartVRangeMode.html","topicHref":"Hi.MillingStepUtils.LineChartVRangeMode.html","topicUid":"Hi.MillingStepUtils.LineChartVRangeMode","type":"Enum"},{"name":"SpindleMomentCycleLineDivConfig","href":"Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html","topicHref":"Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html","topicUid":"Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig","type":"Class"},{"name":"TimeChartYConfig","href":"Hi.MillingStepUtils.TimeChartYConfig.html","topicHref":"Hi.MillingStepUtils.TimeChartYConfig.html","topicUid":"Hi.MillingStepUtils.TimeChartYConfig","type":"Class"}]},{"name":"Hi.MillingSteps","href":"Hi.MillingSteps.html","topicHref":"Hi.MillingSteps.html","topicUid":"Hi.MillingSteps","type":"Namespace","items":[{"name":"MillingInstance","href":"Hi.MillingSteps.MillingInstance.html","topicHref":"Hi.MillingSteps.MillingInstance.html","topicUid":"Hi.MillingSteps.MillingInstance","type":"Class"},{"name":"MillingStepLuggage","href":"Hi.MillingSteps.MillingStepLuggage.html","topicHref":"Hi.MillingSteps.MillingStepLuggage.html","topicUid":"Hi.MillingSteps.MillingStepLuggage","type":"Class"}]},{"name":"Hi.Motion","href":"Hi.Motion.html","topicHref":"Hi.Motion.html","topicUid":"Hi.Motion","type":"Namespace","items":[{"name":"MotionUtil","href":"Hi.Motion.MotionUtil.html","topicHref":"Hi.Motion.MotionUtil.html","topicUid":"Hi.Motion.MotionUtil","type":"Class"}]},{"name":"Hi.Motion.MatValves","href":"Hi.Motion.MatValves.html","topicHref":"Hi.Motion.MatValves.html","topicUid":"Hi.Motion.MatValves","type":"Namespace","items":[{"name":"ClMachiningValve","href":"Hi.Motion.MatValves.ClMachiningValve.html","topicHref":"Hi.Motion.MatValves.ClMachiningValve.html","topicUid":"Hi.Motion.MatValves.ClMachiningValve","type":"Class"},{"name":"IMotionValve","href":"Hi.Motion.MatValves.IMotionValve.html","topicHref":"Hi.Motion.MatValves.IMotionValve.html","topicUid":"Hi.Motion.MatValves.IMotionValve","type":"Interface"},{"name":"MacroMotionValve","href":"Hi.Motion.MatValves.MacroMotionValve.html","topicHref":"Hi.Motion.MatValves.MacroMotionValve.html","topicUid":"Hi.Motion.MatValves.MacroMotionValve","type":"Class"},{"name":"StepMotionValve","href":"Hi.Motion.MatValves.StepMotionValve.html","topicHref":"Hi.Motion.MatValves.StepMotionValve.html","topicUid":"Hi.Motion.MatValves.StepMotionValve","type":"Class"}]},{"name":"Hi.Native","href":"Hi.Native.html","topicHref":"Hi.Native.html","topicUid":"Hi.Native","type":"Namespace","items":[{"name":"StopSource","href":"Hi.Native.StopSource.html","topicHref":"Hi.Native.StopSource.html","topicUid":"Hi.Native.StopSource","type":"Class"},{"name":"StopToken","href":"Hi.Native.StopToken.html","topicHref":"Hi.Native.StopToken.html","topicUid":"Hi.Native.StopToken","type":"Class"},{"name":"StopTokenKit","href":"Hi.Native.StopTokenKit.html","topicHref":"Hi.Native.StopTokenKit.html","topicUid":"Hi.Native.StopTokenKit","type":"Class"},{"name":"StopTokenUtil","href":"Hi.Native.StopTokenUtil.html","topicHref":"Hi.Native.StopTokenUtil.html","topicUid":"Hi.Native.StopTokenUtil","type":"Class"},{"name":"bind_t","href":"Hi.Native.bind_t.html","topicHref":"Hi.Native.bind_t.html","topicUid":"Hi.Native.bind_t","type":"Struct"},{"name":"box2d","href":"Hi.Native.box2d.html","topicHref":"Hi.Native.box2d.html","topicUid":"Hi.Native.box2d","type":"Struct"},{"name":"box3d","href":"Hi.Native.box3d.html","topicHref":"Hi.Native.box3d.html","topicUid":"Hi.Native.box3d","type":"Struct"},{"name":"expand_to_box3d_func_t","href":"Hi.Native.expand_to_box3d_func_t.html","topicHref":"Hi.Native.expand_to_box3d_func_t.html","topicUid":"Hi.Native.expand_to_box3d_func_t","type":"Delegate"},{"name":"key_event_t","href":"Hi.Native.key_event_t.html","topicHref":"Hi.Native.key_event_t.html","topicUid":"Hi.Native.key_event_t","type":"Struct"},{"name":"key_table__transform_view_by_key_pressing_t","href":"Hi.Native.key_table__transform_view_by_key_pressing_t.html","topicHref":"Hi.Native.key_table__transform_view_by_key_pressing_t.html","topicUid":"Hi.Native.key_table__transform_view_by_key_pressing_t","type":"Struct"},{"name":"mat4d","href":"Hi.Native.mat4d.html","topicHref":"Hi.Native.mat4d.html","topicUid":"Hi.Native.mat4d","type":"Struct"},{"name":"mat_stack_t","href":"Hi.Native.mat_stack_t.html","topicHref":"Hi.Native.mat_stack_t.html","topicUid":"Hi.Native.mat_stack_t","type":"Struct"},{"name":"mouse_button_event_t","href":"Hi.Native.mouse_button_event_t.html","topicHref":"Hi.Native.mouse_button_event_t.html","topicUid":"Hi.Native.mouse_button_event_t","type":"Struct"},{"name":"mouse_button_table__transform_view_by_mouse_drag_t","href":"Hi.Native.mouse_button_table__transform_view_by_mouse_drag_t.html","topicHref":"Hi.Native.mouse_button_table__transform_view_by_mouse_drag_t.html","topicUid":"Hi.Native.mouse_button_table__transform_view_by_mouse_drag_t","type":"Struct"},{"name":"mouse_move_event_t","href":"Hi.Native.mouse_move_event_t.html","topicHref":"Hi.Native.mouse_move_event_t.html","topicUid":"Hi.Native.mouse_move_event_t","type":"Struct"},{"name":"mouse_wheel_event_t","href":"Hi.Native.mouse_wheel_event_t.html","topicHref":"Hi.Native.mouse_wheel_event_t.html","topicUid":"Hi.Native.mouse_wheel_event_t","type":"Struct"},{"name":"panel_state_t","href":"Hi.Native.panel_state_t.html","topicHref":"Hi.Native.panel_state_t.html","topicUid":"Hi.Native.panel_state_t","type":"Struct"},{"name":"picking_event_t","href":"Hi.Native.picking_event_t.html","topicHref":"Hi.Native.picking_event_t.html","topicUid":"Hi.Native.picking_event_t","type":"Struct"},{"name":"picking_mark_t","href":"Hi.Native.picking_mark_t.html","topicHref":"Hi.Native.picking_mark_t.html","topicUid":"Hi.Native.picking_mark_t","type":"Struct"},{"name":"tri3d","href":"Hi.Native.tri3d.html","topicHref":"Hi.Native.tri3d.html","topicUid":"Hi.Native.tri3d","type":"Struct"},{"name":"ui_event_type","href":"Hi.Native.ui_event_type.html","topicHref":"Hi.Native.ui_event_type.html","topicUid":"Hi.Native.ui_event_type","type":"Enum"},{"name":"vec2d","href":"Hi.Native.vec2d.html","topicHref":"Hi.Native.vec2d.html","topicUid":"Hi.Native.vec2d","type":"Struct"},{"name":"vec3d","href":"Hi.Native.vec3d.html","topicHref":"Hi.Native.vec3d.html","topicUid":"Hi.Native.vec3d","type":"Struct"},{"name":"vec3f","href":"Hi.Native.vec3f.html","topicHref":"Hi.Native.vec3f.html","topicUid":"Hi.Native.vec3f","type":"Struct"}]},{"name":"Hi.NcMech","href":"Hi.NcMech.html","topicHref":"Hi.NcMech.html","topicUid":"Hi.NcMech","type":"Namespace","items":[{"name":"ICollisionIndexPairsSource","href":"Hi.NcMech.ICollisionIndexPairsSource.html","topicHref":"Hi.NcMech.ICollisionIndexPairsSource.html","topicUid":"Hi.NcMech.ICollisionIndexPairsSource","type":"Interface"}]},{"name":"Hi.NcMech.Fixtures","href":"Hi.NcMech.Fixtures.html","topicHref":"Hi.NcMech.Fixtures.html","topicUid":"Hi.NcMech.Fixtures","type":"Namespace","items":[{"name":"Fixture","href":"Hi.NcMech.Fixtures.Fixture.html","topicHref":"Hi.NcMech.Fixtures.Fixture.html","topicUid":"Hi.NcMech.Fixtures.Fixture","type":"Class"},{"name":"FixtureEditorDisplayee","href":"Hi.NcMech.Fixtures.FixtureEditorDisplayee.html","topicHref":"Hi.NcMech.Fixtures.FixtureEditorDisplayee.html","topicUid":"Hi.NcMech.Fixtures.FixtureEditorDisplayee","type":"Class"},{"name":"FixtureEditorDisplayeeConfig","href":"Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html","topicHref":"Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html","topicUid":"Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig","type":"Class"}]},{"name":"Hi.NcMech.Holders","href":"Hi.NcMech.Holders.html","topicHref":"Hi.NcMech.Holders.html","topicUid":"Hi.NcMech.Holders","type":"Namespace","items":[{"name":"CylindroidHolder","href":"Hi.NcMech.Holders.CylindroidHolder.html","topicHref":"Hi.NcMech.Holders.CylindroidHolder.html","topicUid":"Hi.NcMech.Holders.CylindroidHolder","type":"Class"},{"name":"FreeformHolder","href":"Hi.NcMech.Holders.FreeformHolder.html","topicHref":"Hi.NcMech.Holders.FreeformHolder.html","topicUid":"Hi.NcMech.Holders.FreeformHolder","type":"Class"},{"name":"HolderEditorDisplayee","href":"Hi.NcMech.Holders.HolderEditorDisplayee.html","topicHref":"Hi.NcMech.Holders.HolderEditorDisplayee.html","topicUid":"Hi.NcMech.Holders.HolderEditorDisplayee","type":"Class"},{"name":"IHolder","href":"Hi.NcMech.Holders.IHolder.html","topicHref":"Hi.NcMech.Holders.IHolder.html","topicUid":"Hi.NcMech.Holders.IHolder","type":"Interface"}]},{"name":"Hi.NcMech.Solids","href":"Hi.NcMech.Solids.html","topicHref":"Hi.NcMech.Solids.html","topicUid":"Hi.NcMech.Solids","type":"Namespace","items":[{"name":"IGetSolid","href":"Hi.NcMech.Solids.IGetSolid.html","topicHref":"Hi.NcMech.Solids.IGetSolid.html","topicUid":"Hi.NcMech.Solids.IGetSolid","type":"Interface"},{"name":"Solid","href":"Hi.NcMech.Solids.Solid.html","topicHref":"Hi.NcMech.Solids.Solid.html","topicUid":"Hi.NcMech.Solids.Solid","type":"Class"},{"name":"Solid.RenderingModeEnum","href":"Hi.NcMech.Solids.Solid.RenderingModeEnum.html","topicHref":"Hi.NcMech.Solids.Solid.RenderingModeEnum.html","topicUid":"Hi.NcMech.Solids.Solid.RenderingModeEnum","type":"Enum"},{"name":"SolidFuncSource","href":"Hi.NcMech.Solids.SolidFuncSource.html","topicHref":"Hi.NcMech.Solids.SolidFuncSource.html","topicUid":"Hi.NcMech.Solids.SolidFuncSource","type":"Class"}]},{"name":"Hi.NcMech.Topo","href":"Hi.NcMech.Topo.html","topicHref":"Hi.NcMech.Topo.html","topicUid":"Hi.NcMech.Topo","type":"Namespace","items":[{"name":"INcStroke","href":"Hi.NcMech.Topo.INcStroke.html","topicHref":"Hi.NcMech.Topo.INcStroke.html","topicUid":"Hi.NcMech.Topo.INcStroke","type":"Interface"},{"name":"INcTransformer","href":"Hi.NcMech.Topo.INcTransformer.html","topicHref":"Hi.NcMech.Topo.INcTransformer.html","topicUid":"Hi.NcMech.Topo.INcTransformer","type":"Interface"},{"name":"ITopoBrick","href":"Hi.NcMech.Topo.ITopoBrick.html","topicHref":"Hi.NcMech.Topo.ITopoBrick.html","topicUid":"Hi.NcMech.Topo.ITopoBrick","type":"Interface"},{"name":"NcRotation","href":"Hi.NcMech.Topo.NcRotation.html","topicHref":"Hi.NcMech.Topo.NcRotation.html","topicUid":"Hi.NcMech.Topo.NcRotation","type":"Class"},{"name":"NcTranslation","href":"Hi.NcMech.Topo.NcTranslation.html","topicHref":"Hi.NcMech.Topo.NcTranslation.html","topicUid":"Hi.NcMech.Topo.NcTranslation","type":"Class"},{"name":"SolidSourceTopoBrick","href":"Hi.NcMech.Topo.SolidSourceTopoBrick.html","topicHref":"Hi.NcMech.Topo.SolidSourceTopoBrick.html","topicUid":"Hi.NcMech.Topo.SolidSourceTopoBrick","type":"Class"},{"name":"StlSourceTopoBrick","href":"Hi.NcMech.Topo.StlSourceTopoBrick.html","topicHref":"Hi.NcMech.Topo.StlSourceTopoBrick.html","topicUid":"Hi.NcMech.Topo.StlSourceTopoBrick","type":"Class"}]},{"name":"Hi.NcMech.Workpieces","href":"Hi.NcMech.Workpieces.html","topicHref":"Hi.NcMech.Workpieces.html","topicUid":"Hi.NcMech.Workpieces","type":"Namespace","items":[{"name":"Workpiece","href":"Hi.NcMech.Workpieces.Workpiece.html","topicHref":"Hi.NcMech.Workpieces.Workpiece.html","topicUid":"Hi.NcMech.Workpieces.Workpiece","type":"Class"},{"name":"WorkpieceEditorDisplayee","href":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html","topicHref":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html","topicUid":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayee","type":"Class"},{"name":"WorkpieceEditorDisplayeeConfig","href":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html","topicHref":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html","topicUid":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig","type":"Class"},{"name":"WorkpieceService","href":"Hi.NcMech.Workpieces.WorkpieceService.html","topicHref":"Hi.NcMech.Workpieces.WorkpieceService.html","topicUid":"Hi.NcMech.Workpieces.WorkpieceService","type":"Class"}]},{"name":"Hi.NcMech.Xyzabc","href":"Hi.NcMech.Xyzabc.html","topicHref":"Hi.NcMech.Xyzabc.html","topicUid":"Hi.NcMech.Xyzabc","type":"Namespace","items":[{"name":"CodeXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.CodeXyzabcMachineTool","type":"Class"},{"name":"CodeXyzabcMachineToolUri","href":"Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.html","topicHref":"Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.html","topicUid":"Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri","type":"Class"},{"name":"GeneralXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool","type":"Class"},{"name":"IGetCodeXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.IGetCodeXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.IGetCodeXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.IGetCodeXyzabcMachineTool","type":"Interface"},{"name":"IXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.IXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.IXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.IXyzabcMachineTool","type":"Interface"}]},{"name":"Hi.NcOpt","href":"Hi.NcOpt.html","topicHref":"Hi.NcOpt.html","topicUid":"Hi.NcOpt","type":"Namespace","items":[{"name":"CuttingVelocityOptLimit","href":"Hi.NcOpt.CuttingVelocityOptLimit.html","topicHref":"Hi.NcOpt.CuttingVelocityOptLimit.html","topicUid":"Hi.NcOpt.CuttingVelocityOptLimit","type":"Class"},{"name":"FixedFeedPerCycleOptLimit","href":"Hi.NcOpt.FixedFeedPerCycleOptLimit.html","topicHref":"Hi.NcOpt.FixedFeedPerCycleOptLimit.html","topicUid":"Hi.NcOpt.FixedFeedPerCycleOptLimit","type":"Class"},{"name":"FixedFeedPerToothOptLimit","href":"Hi.NcOpt.FixedFeedPerToothOptLimit.html","topicHref":"Hi.NcOpt.FixedFeedPerToothOptLimit.html","topicUid":"Hi.NcOpt.FixedFeedPerToothOptLimit","type":"Class"},{"name":"ICutterOptLimitHost","href":"Hi.NcOpt.ICutterOptLimitHost.html","topicHref":"Hi.NcOpt.ICutterOptLimitHost.html","topicUid":"Hi.NcOpt.ICutterOptLimitHost","type":"Interface"},{"name":"ICutterOptOption","href":"Hi.NcOpt.ICutterOptOption.html","topicHref":"Hi.NcOpt.ICutterOptOption.html","topicUid":"Hi.NcOpt.ICutterOptOption","type":"Interface"},{"name":"ICuttingVelocityOptLimit","href":"Hi.NcOpt.ICuttingVelocityOptLimit.html","topicHref":"Hi.NcOpt.ICuttingVelocityOptLimit.html","topicUid":"Hi.NcOpt.ICuttingVelocityOptLimit","type":"Interface"},{"name":"IFeedPerToothOptLimit","href":"Hi.NcOpt.IFeedPerToothOptLimit.html","topicHref":"Hi.NcOpt.IFeedPerToothOptLimit.html","topicUid":"Hi.NcOpt.IFeedPerToothOptLimit","type":"Interface"},{"name":"MillingCutterOptOption","href":"Hi.NcOpt.MillingCutterOptOption.html","topicHref":"Hi.NcOpt.MillingCutterOptOption.html","topicUid":"Hi.NcOpt.MillingCutterOptOption","type":"Class"},{"name":"NcOptOption","href":"Hi.NcOpt.NcOptOption.html","topicHref":"Hi.NcOpt.NcOptOption.html","topicUid":"Hi.NcOpt.NcOptOption","type":"Class"},{"name":"NcOptProc","href":"Hi.NcOpt.NcOptProc.html","topicHref":"Hi.NcOpt.NcOptProc.html","topicUid":"Hi.NcOpt.NcOptProc","type":"Class"},{"name":"NcOptimizationEmbeddedLogMode","href":"Hi.NcOpt.NcOptimizationEmbeddedLogMode.html","topicHref":"Hi.NcOpt.NcOptimizationEmbeddedLogMode.html","topicUid":"Hi.NcOpt.NcOptimizationEmbeddedLogMode","type":"Enum"},{"name":"ShapeBasedCutterOptLimit","href":"Hi.NcOpt.ShapeBasedCutterOptLimit.html","topicHref":"Hi.NcOpt.ShapeBasedCutterOptLimit.html","topicUid":"Hi.NcOpt.ShapeBasedCutterOptLimit","type":"Class"}]},{"name":"Hi.NcParsers","href":"Hi.NcParsers.html","topicHref":"Hi.NcParsers.html","topicUid":"Hi.NcParsers","type":"Namespace","items":[{"name":"IGetSentence","href":"Hi.NcParsers.IGetSentence.html","topicHref":"Hi.NcParsers.IGetSentence.html","topicUid":"Hi.NcParsers.IGetSentence","type":"Interface"},{"name":"ISentenceCarrier","href":"Hi.NcParsers.ISentenceCarrier.html","topicHref":"Hi.NcParsers.ISentenceCarrier.html","topicUid":"Hi.NcParsers.ISentenceCarrier","type":"Interface"},{"name":"ISentenceIndexed","href":"Hi.NcParsers.ISentenceIndexed.html","topicHref":"Hi.NcParsers.ISentenceIndexed.html","topicUid":"Hi.NcParsers.ISentenceIndexed","type":"Interface"},{"name":"IndexedSentence","href":"Hi.NcParsers.IndexedSentence.html","topicHref":"Hi.NcParsers.IndexedSentence.html","topicUid":"Hi.NcParsers.IndexedSentence","type":"Class"},{"name":"NcDiagnostic","href":"Hi.NcParsers.NcDiagnostic.html","topicHref":"Hi.NcParsers.NcDiagnostic.html","topicUid":"Hi.NcParsers.NcDiagnostic","type":"Class"},{"name":"NcDiagnosticCategory","href":"Hi.NcParsers.NcDiagnosticCategory.html","topicHref":"Hi.NcParsers.NcDiagnosticCategory.html","topicUid":"Hi.NcParsers.NcDiagnosticCategory","type":"Enum"},{"name":"NcDiagnosticProgress","href":"Hi.NcParsers.NcDiagnosticProgress.html","topicHref":"Hi.NcParsers.NcDiagnosticProgress.html","topicUid":"Hi.NcParsers.NcDiagnosticProgress","type":"Class"},{"name":"NcDiagnosticSeverity","href":"Hi.NcParsers.NcDiagnosticSeverity.html","topicHref":"Hi.NcParsers.NcDiagnosticSeverity.html","topicUid":"Hi.NcParsers.NcDiagnosticSeverity","type":"Enum"},{"name":"Sentence","href":"Hi.NcParsers.Sentence.html","topicHref":"Hi.NcParsers.Sentence.html","topicUid":"Hi.NcParsers.Sentence","type":"Class"},{"name":"SoftNcRunner","href":"Hi.NcParsers.SoftNcRunner.html","topicHref":"Hi.NcParsers.SoftNcRunner.html","topicUid":"Hi.NcParsers.SoftNcRunner","type":"Class"},{"name":"SoftNcUtil","href":"Hi.NcParsers.SoftNcUtil.html","topicHref":"Hi.NcParsers.SoftNcUtil.html","topicUid":"Hi.NcParsers.SoftNcUtil","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys","href":"Hi.NcParsers.Dependencys.html","topicHref":"Hi.NcParsers.Dependencys.html","topicUid":"Hi.NcParsers.Dependencys","type":"Namespace","items":[{"name":"AxisType","href":"Hi.NcParsers.Dependencys.AxisType.html","topicHref":"Hi.NcParsers.Dependencys.AxisType.html","topicUid":"Hi.NcParsers.Dependencys.AxisType","type":"Enum"},{"name":"CncBrandDependency","href":"Hi.NcParsers.Dependencys.CncBrandDependency.html","topicHref":"Hi.NcParsers.Dependencys.CncBrandDependency.html","topicUid":"Hi.NcParsers.Dependencys.CncBrandDependency","type":"Class"},{"name":"ControllerParameterTableBase","href":"Hi.NcParsers.Dependencys.ControllerParameterTableBase.html","topicHref":"Hi.NcParsers.Dependencys.ControllerParameterTableBase.html","topicUid":"Hi.NcParsers.Dependencys.ControllerParameterTableBase","type":"Class"},{"name":"HeidenhainDatumTable","href":"Hi.NcParsers.Dependencys.HeidenhainDatumTable.html","topicHref":"Hi.NcParsers.Dependencys.HeidenhainDatumTable.html","topicUid":"Hi.NcParsers.Dependencys.HeidenhainDatumTable","type":"Class"},{"name":"IBlockSkipConfig","href":"Hi.NcParsers.Dependencys.IBlockSkipConfig.html","topicHref":"Hi.NcParsers.Dependencys.IBlockSkipConfig.html","topicUid":"Hi.NcParsers.Dependencys.IBlockSkipConfig","type":"Interface"},{"name":"ICannedCycleConfig","href":"Hi.NcParsers.Dependencys.ICannedCycleConfig.html","topicHref":"Hi.NcParsers.Dependencys.ICannedCycleConfig.html","topicUid":"Hi.NcParsers.Dependencys.ICannedCycleConfig","type":"Interface"},{"name":"IHomeMcConfig","href":"Hi.NcParsers.Dependencys.IHomeMcConfig.html","topicHref":"Hi.NcParsers.Dependencys.IHomeMcConfig.html","topicUid":"Hi.NcParsers.Dependencys.IHomeMcConfig","type":"Interface"},{"name":"IIsoCoordinateConfig","href":"Hi.NcParsers.Dependencys.IIsoCoordinateConfig.html","topicHref":"Hi.NcParsers.Dependencys.IIsoCoordinateConfig.html","topicUid":"Hi.NcParsers.Dependencys.IIsoCoordinateConfig","type":"Interface"},{"name":"IMachineAxisConfig","href":"Hi.NcParsers.Dependencys.IMachineAxisConfig.html","topicHref":"Hi.NcParsers.Dependencys.IMachineAxisConfig.html","topicUid":"Hi.NcParsers.Dependencys.IMachineAxisConfig","type":"Interface"},{"name":"INcDependency","href":"Hi.NcParsers.Dependencys.INcDependency.html","topicHref":"Hi.NcParsers.Dependencys.INcDependency.html","topicUid":"Hi.NcParsers.Dependencys.INcDependency","type":"Interface"},{"name":"IPowerResettable","href":"Hi.NcParsers.Dependencys.IPowerResettable.html","topicHref":"Hi.NcParsers.Dependencys.IPowerResettable.html","topicUid":"Hi.NcParsers.Dependencys.IPowerResettable","type":"Interface"},{"name":"IRapidFeedrateConfig","href":"Hi.NcParsers.Dependencys.IRapidFeedrateConfig.html","topicHref":"Hi.NcParsers.Dependencys.IRapidFeedrateConfig.html","topicUid":"Hi.NcParsers.Dependencys.IRapidFeedrateConfig","type":"Interface"},{"name":"IStrokeLimitConfig","href":"Hi.NcParsers.Dependencys.IStrokeLimitConfig.html","topicHref":"Hi.NcParsers.Dependencys.IStrokeLimitConfig.html","topicUid":"Hi.NcParsers.Dependencys.IStrokeLimitConfig","type":"Interface"},{"name":"IToolOffsetConfig","href":"Hi.NcParsers.Dependencys.IToolOffsetConfig.html","topicHref":"Hi.NcParsers.Dependencys.IToolOffsetConfig.html","topicUid":"Hi.NcParsers.Dependencys.IToolOffsetConfig","type":"Interface"},{"name":"IToolingMcConfig","href":"Hi.NcParsers.Dependencys.IToolingMcConfig.html","topicHref":"Hi.NcParsers.Dependencys.IToolingMcConfig.html","topicUid":"Hi.NcParsers.Dependencys.IToolingMcConfig","type":"Interface"},{"name":"IsoCoordinateAddressMap","href":"Hi.NcParsers.Dependencys.IsoCoordinateAddressMap.html","topicHref":"Hi.NcParsers.Dependencys.IsoCoordinateAddressMap.html","topicUid":"Hi.NcParsers.Dependencys.IsoCoordinateAddressMap","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Fanuc","href":"Hi.NcParsers.Dependencys.Fanuc.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc","type":"Namespace","items":[{"name":"CutterCompensationType","href":"Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType","type":"Enum"},{"name":"FanucGotoIterationDependency","href":"Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency","type":"Class"},{"name":"FanucParameterTable","href":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable","type":"Class"},{"name":"FanucPositionVariableLookup","href":"Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup","type":"Class"},{"name":"FanucToolOffsetVariableLookup","href":"Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup","type":"Class"},{"name":"RetainedCommonVariableTable","href":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Generic","href":"Hi.NcParsers.Dependencys.Generic.html","topicHref":"Hi.NcParsers.Dependencys.Generic.html","topicUid":"Hi.NcParsers.Dependencys.Generic","type":"Namespace","items":[{"name":"FallbackConfig","href":"Hi.NcParsers.Dependencys.Generic.FallbackConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.FallbackConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.FallbackConfig","type":"Class"},{"name":"GenericBlockSkipConfig","href":"Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig","type":"Class"},{"name":"IsoCoordinateTable","href":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html","topicHref":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html","topicUid":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable","type":"Class"},{"name":"SubProgramFolderConfig","href":"Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig","type":"Class"},{"name":"ToolOffsetRow","href":"Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolOffsetRow","type":"Class"},{"name":"ToolOffsetTable","href":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable","type":"Class"},{"name":"ToolingMcConfig","href":"Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolingMcConfig","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Heidenhain","href":"Hi.NcParsers.Dependencys.Heidenhain.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainParameterTable","href":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Siemens","href":"Hi.NcParsers.Dependencys.Siemens.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.html","topicUid":"Hi.NcParsers.Dependencys.Siemens","type":"Namespace","items":[{"name":"ISiemensToolOffsetConfig","href":"Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig","type":"Interface"},{"name":"SiemensFrameTable","href":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable","type":"Class"},{"name":"SiemensMachineDataTable","href":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Syntec","href":"Hi.NcParsers.Dependencys.Syntec.html","topicHref":"Hi.NcParsers.Dependencys.Syntec.html","topicUid":"Hi.NcParsers.Dependencys.Syntec","type":"Namespace","items":[{"name":"SyntecParameterTable","href":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.SystemWired","href":"Hi.NcParsers.Dependencys.SystemWired.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired","type":"Namespace","items":[{"name":"FileIndexCounterDependency","href":"Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency","type":"Class"},{"name":"NcKinematicsDependency","href":"Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency","type":"Class"},{"name":"ProjectFolderDependency","href":"Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency","type":"Class"},{"name":"SegmenterDependency","href":"Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency","type":"Class"},{"name":"SyntaxPieceLayerDependency","href":"Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency","type":"Class"}]},{"name":"Hi.NcParsers.EvaluationSyntaxs","href":"Hi.NcParsers.EvaluationSyntaxs.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs","type":"Namespace","items":[{"name":"CallStackUtil","href":"Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.CallStackUtil","type":"Class"},{"name":"LabelScanUtil","href":"Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil","type":"Class"},{"name":"MacroFileResolver","href":"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver","type":"Class"},{"name":"MacroFileResolver.ResolvedFile","href":"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile","type":"Struct"},{"name":"MacroInlineUtil","href":"Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil","type":"Class"},{"name":"RetainedCommonVariableReadingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax","type":"Class"},{"name":"SubProgramCallSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax","type":"Class"},{"name":"SubProgramReturnSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax","type":"Class"},{"name":"VariableEvaluatorSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax","type":"Class"},{"name":"VolatileVariableReadingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax","type":"Class"}]},{"name":"Hi.NcParsers.EvaluationSyntaxs.Evaluation","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation","type":"Namespace","items":[{"name":"EvalResult","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.EvalResult.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.EvalResult.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.EvalResult","type":"Struct"},{"name":"IRuntimeVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IRuntimeVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IRuntimeVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IRuntimeVariableLookup","type":"Interface"},{"name":"IVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IVariableLookup","type":"Interface"},{"name":"LocalVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup","type":"Class"},{"name":"NcBinaryExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr","type":"Class"},{"name":"NcBinaryOp","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp","type":"Enum"},{"name":"NcExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpr","type":"Class"},{"name":"NcExpressionEvaluator","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionEvaluator.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionEvaluator.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionEvaluator","type":"Class"},{"name":"NcExpressionParser","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionParser.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionParser.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionParser","type":"Class"},{"name":"NcFunctionExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcFunctionExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcFunctionExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcFunctionExpr","type":"Class"},{"name":"NcIndirectVariableExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcIndirectVariableExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcIndirectVariableExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcIndirectVariableExpr","type":"Class"},{"name":"NcLiteralExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcLiteralExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcLiteralExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcLiteralExpr","type":"Class"},{"name":"NcUnaryExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryExpr","type":"Class"},{"name":"NcUnaryOp","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryOp.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryOp.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryOp","type":"Enum"},{"name":"NcVariableExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcVariableExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcVariableExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcVariableExpr","type":"Class"},{"name":"VolatileVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup","type":"Class"}]},{"name":"Hi.NcParsers.EvaluationSyntaxs.Fanuc","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc","type":"Namespace","items":[{"name":"FanucGotoSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax","type":"Class"},{"name":"FanucIfThenSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax","type":"Class"},{"name":"FanucLocalVariableReadingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax","type":"Class"},{"name":"FanucMacroArgumentMap","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap","type":"Class"},{"name":"FanucMacroCallSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax","type":"Class"},{"name":"FanucModalMacroSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax","type":"Class"},{"name":"FanucModalMacroSyntax.SyntaxPhase","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase","type":"Enum"},{"name":"FanucSystemControlVariableSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax","type":"Class"}]},{"name":"Hi.NcParsers.Initializers","href":"Hi.NcParsers.Initializers.html","topicHref":"Hi.NcParsers.Initializers.html","topicUid":"Hi.NcParsers.Initializers","type":"Namespace","items":[{"name":"HomeMcInitializer","href":"Hi.NcParsers.Initializers.HomeMcInitializer.html","topicHref":"Hi.NcParsers.Initializers.HomeMcInitializer.html","topicUid":"Hi.NcParsers.Initializers.HomeMcInitializer","type":"Class"},{"name":"INcInitializer","href":"Hi.NcParsers.Initializers.INcInitializer.html","topicHref":"Hi.NcParsers.Initializers.INcInitializer.html","topicUid":"Hi.NcParsers.Initializers.INcInitializer","type":"Interface"},{"name":"StaticInitializer","href":"Hi.NcParsers.Initializers.StaticInitializer.html","topicHref":"Hi.NcParsers.Initializers.StaticInitializer.html","topicUid":"Hi.NcParsers.Initializers.StaticInitializer","type":"Class"}]},{"name":"Hi.NcParsers.InspectionSyntaxs","href":"Hi.NcParsers.InspectionSyntaxs.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.html","topicUid":"Hi.NcParsers.InspectionSyntaxs","type":"Namespace","items":[{"name":"CleanupSyntax","href":"Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.CleanupSyntax","type":"Class"},{"name":"ProgramXyzBackfillSyntax","href":"Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax","type":"Class"},{"name":"SnapshotSyntax","href":"Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax","type":"Class"},{"name":"UnconsumedCheckSyntax","href":"Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax","type":"Class"}]},{"name":"Hi.NcParsers.Keywords","href":"Hi.NcParsers.Keywords.html","topicHref":"Hi.NcParsers.Keywords.html","topicUid":"Hi.NcParsers.Keywords","type":"Namespace","items":[{"name":"BlockSkip","href":"Hi.NcParsers.Keywords.BlockSkip.html","topicHref":"Hi.NcParsers.Keywords.BlockSkip.html","topicUid":"Hi.NcParsers.Keywords.BlockSkip","type":"Class"},{"name":"CallFrame","href":"Hi.NcParsers.Keywords.CallFrame.html","topicHref":"Hi.NcParsers.Keywords.CallFrame.html","topicUid":"Hi.NcParsers.Keywords.CallFrame","type":"Class"},{"name":"CallStack","href":"Hi.NcParsers.Keywords.CallStack.html","topicHref":"Hi.NcParsers.Keywords.CallStack.html","topicUid":"Hi.NcParsers.Keywords.CallStack","type":"Class"},{"name":"CannedCycle","href":"Hi.NcParsers.Keywords.CannedCycle.html","topicHref":"Hi.NcParsers.Keywords.CannedCycle.html","topicUid":"Hi.NcParsers.Keywords.CannedCycle","type":"Class"},{"name":"Comment","href":"Hi.NcParsers.Keywords.Comment.html","topicHref":"Hi.NcParsers.Keywords.Comment.html","topicUid":"Hi.NcParsers.Keywords.Comment","type":"Class"},{"name":"CompoundMotion","href":"Hi.NcParsers.Keywords.CompoundMotion.html","topicHref":"Hi.NcParsers.Keywords.CompoundMotion.html","topicUid":"Hi.NcParsers.Keywords.CompoundMotion","type":"Class"},{"name":"Coolant","href":"Hi.NcParsers.Keywords.Coolant.html","topicHref":"Hi.NcParsers.Keywords.Coolant.html","topicUid":"Hi.NcParsers.Keywords.Coolant","type":"Class"},{"name":"CoordinateOffset","href":"Hi.NcParsers.Keywords.CoordinateOffset.html","topicHref":"Hi.NcParsers.Keywords.CoordinateOffset.html","topicUid":"Hi.NcParsers.Keywords.CoordinateOffset","type":"Class"},{"name":"CsScript","href":"Hi.NcParsers.Keywords.CsScript.html","topicHref":"Hi.NcParsers.Keywords.CsScript.html","topicUid":"Hi.NcParsers.Keywords.CsScript","type":"Class"},{"name":"Dwell","href":"Hi.NcParsers.Keywords.Dwell.html","topicHref":"Hi.NcParsers.Keywords.Dwell.html","topicUid":"Hi.NcParsers.Keywords.Dwell","type":"Class"},{"name":"FanucGoto","href":"Hi.NcParsers.Keywords.FanucGoto.html","topicHref":"Hi.NcParsers.Keywords.FanucGoto.html","topicUid":"Hi.NcParsers.Keywords.FanucGoto","type":"Class"},{"name":"FanucIfThen","href":"Hi.NcParsers.Keywords.FanucIfThen.html","topicHref":"Hi.NcParsers.Keywords.FanucIfThen.html","topicUid":"Hi.NcParsers.Keywords.FanucIfThen","type":"Class"},{"name":"FanucMacroCall","href":"Hi.NcParsers.Keywords.FanucMacroCall.html","topicHref":"Hi.NcParsers.Keywords.FanucMacroCall.html","topicUid":"Hi.NcParsers.Keywords.FanucMacroCall","type":"Class"},{"name":"FanucModalMacro","href":"Hi.NcParsers.Keywords.FanucModalMacro.html","topicHref":"Hi.NcParsers.Keywords.FanucModalMacro.html","topicUid":"Hi.NcParsers.Keywords.FanucModalMacro","type":"Class"},{"name":"FanucPathSmoothing","href":"Hi.NcParsers.Keywords.FanucPathSmoothing.html","topicHref":"Hi.NcParsers.Keywords.FanucPathSmoothing.html","topicUid":"Hi.NcParsers.Keywords.FanucPathSmoothing","type":"Class"},{"name":"FanucProgramNumber","href":"Hi.NcParsers.Keywords.FanucProgramNumber.html","topicHref":"Hi.NcParsers.Keywords.FanucProgramNumber.html","topicUid":"Hi.NcParsers.Keywords.FanucProgramNumber","type":"Class"},{"name":"Feedrate","href":"Hi.NcParsers.Keywords.Feedrate.html","topicHref":"Hi.NcParsers.Keywords.Feedrate.html","topicUid":"Hi.NcParsers.Keywords.Feedrate","type":"Class"},{"name":"IArcMotionDef","href":"Hi.NcParsers.Keywords.IArcMotionDef.html","topicHref":"Hi.NcParsers.Keywords.IArcMotionDef.html","topicUid":"Hi.NcParsers.Keywords.IArcMotionDef","type":"Interface"},{"name":"ICannedCycleDef","href":"Hi.NcParsers.Keywords.ICannedCycleDef.html","topicHref":"Hi.NcParsers.Keywords.ICannedCycleDef.html","topicUid":"Hi.NcParsers.Keywords.ICannedCycleDef","type":"Interface"},{"name":"ICompoundMotionDef","href":"Hi.NcParsers.Keywords.ICompoundMotionDef.html","topicHref":"Hi.NcParsers.Keywords.ICompoundMotionDef.html","topicUid":"Hi.NcParsers.Keywords.ICompoundMotionDef","type":"Interface"},{"name":"ICoolantDef","href":"Hi.NcParsers.Keywords.ICoolantDef.html","topicHref":"Hi.NcParsers.Keywords.ICoolantDef.html","topicUid":"Hi.NcParsers.Keywords.ICoolantDef","type":"Interface"},{"name":"IDwellDef","href":"Hi.NcParsers.Keywords.IDwellDef.html","topicHref":"Hi.NcParsers.Keywords.IDwellDef.html","topicUid":"Hi.NcParsers.Keywords.IDwellDef","type":"Interface"},{"name":"IFanucPathSmoothingDef","href":"Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html","topicHref":"Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html","topicUid":"Hi.NcParsers.Keywords.IFanucPathSmoothingDef","type":"Interface"},{"name":"IFeedrateDef","href":"Hi.NcParsers.Keywords.IFeedrateDef.html","topicHref":"Hi.NcParsers.Keywords.IFeedrateDef.html","topicUid":"Hi.NcParsers.Keywords.IFeedrateDef","type":"Interface"},{"name":"IFlagsDef","href":"Hi.NcParsers.Keywords.IFlagsDef.html","topicHref":"Hi.NcParsers.Keywords.IFlagsDef.html","topicUid":"Hi.NcParsers.Keywords.IFlagsDef","type":"Interface"},{"name":"IMachineCoordinateStateDef","href":"Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html","topicHref":"Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html","topicUid":"Hi.NcParsers.Keywords.IMachineCoordinateStateDef","type":"Interface"},{"name":"IMotionEventDef","href":"Hi.NcParsers.Keywords.IMotionEventDef.html","topicHref":"Hi.NcParsers.Keywords.IMotionEventDef.html","topicUid":"Hi.NcParsers.Keywords.IMotionEventDef","type":"Interface"},{"name":"IMotionStateDef","href":"Hi.NcParsers.Keywords.IMotionStateDef.html","topicHref":"Hi.NcParsers.Keywords.IMotionStateDef.html","topicUid":"Hi.NcParsers.Keywords.IMotionStateDef","type":"Interface"},{"name":"IParsingDef","href":"Hi.NcParsers.Keywords.IParsingDef.html","topicHref":"Hi.NcParsers.Keywords.IParsingDef.html","topicUid":"Hi.NcParsers.Keywords.IParsingDef","type":"Interface"},{"name":"IPathSmoothingDef","href":"Hi.NcParsers.Keywords.IPathSmoothingDef.html","topicHref":"Hi.NcParsers.Keywords.IPathSmoothingDef.html","topicUid":"Hi.NcParsers.Keywords.IPathSmoothingDef","type":"Interface"},{"name":"IPlaneSelectDef","href":"Hi.NcParsers.Keywords.IPlaneSelectDef.html","topicHref":"Hi.NcParsers.Keywords.IPlaneSelectDef.html","topicUid":"Hi.NcParsers.Keywords.IPlaneSelectDef","type":"Interface"},{"name":"IPositioningDef","href":"Hi.NcParsers.Keywords.IPositioningDef.html","topicHref":"Hi.NcParsers.Keywords.IPositioningDef.html","topicUid":"Hi.NcParsers.Keywords.IPositioningDef","type":"Interface"},{"name":"IProgramEndDef","href":"Hi.NcParsers.Keywords.IProgramEndDef.html","topicHref":"Hi.NcParsers.Keywords.IProgramEndDef.html","topicUid":"Hi.NcParsers.Keywords.IProgramEndDef","type":"Interface"},{"name":"IProgramStopDef","href":"Hi.NcParsers.Keywords.IProgramStopDef.html","topicHref":"Hi.NcParsers.Keywords.IProgramStopDef.html","topicUid":"Hi.NcParsers.Keywords.IProgramStopDef","type":"Interface"},{"name":"IProgramXyzDef","href":"Hi.NcParsers.Keywords.IProgramXyzDef.html","topicHref":"Hi.NcParsers.Keywords.IProgramXyzDef.html","topicUid":"Hi.NcParsers.Keywords.IProgramXyzDef","type":"Interface"},{"name":"IRadiusCompensationDef","href":"Hi.NcParsers.Keywords.IRadiusCompensationDef.html","topicHref":"Hi.NcParsers.Keywords.IRadiusCompensationDef.html","topicUid":"Hi.NcParsers.Keywords.IRadiusCompensationDef","type":"Interface"},{"name":"ISpindleControlDef","href":"Hi.NcParsers.Keywords.ISpindleControlDef.html","topicHref":"Hi.NcParsers.Keywords.ISpindleControlDef.html","topicUid":"Hi.NcParsers.Keywords.ISpindleControlDef","type":"Interface"},{"name":"ISpindleOrientationDef","href":"Hi.NcParsers.Keywords.ISpindleOrientationDef.html","topicHref":"Hi.NcParsers.Keywords.ISpindleOrientationDef.html","topicUid":"Hi.NcParsers.Keywords.ISpindleOrientationDef","type":"Interface"},{"name":"ISpindleSpeedDef","href":"Hi.NcParsers.Keywords.ISpindleSpeedDef.html","topicHref":"Hi.NcParsers.Keywords.ISpindleSpeedDef.html","topicUid":"Hi.NcParsers.Keywords.ISpindleSpeedDef","type":"Interface"},{"name":"ITiltTransformDef","href":"Hi.NcParsers.Keywords.ITiltTransformDef.html","topicHref":"Hi.NcParsers.Keywords.ITiltTransformDef.html","topicUid":"Hi.NcParsers.Keywords.ITiltTransformDef","type":"Interface"},{"name":"IToolHeightCompensationDef","href":"Hi.NcParsers.Keywords.IToolHeightCompensationDef.html","topicHref":"Hi.NcParsers.Keywords.IToolHeightCompensationDef.html","topicUid":"Hi.NcParsers.Keywords.IToolHeightCompensationDef","type":"Interface"},{"name":"ITransformationDef","href":"Hi.NcParsers.Keywords.ITransformationDef.html","topicHref":"Hi.NcParsers.Keywords.ITransformationDef.html","topicUid":"Hi.NcParsers.Keywords.ITransformationDef","type":"Interface"},{"name":"IUnitDef","href":"Hi.NcParsers.Keywords.IUnitDef.html","topicHref":"Hi.NcParsers.Keywords.IUnitDef.html","topicUid":"Hi.NcParsers.Keywords.IUnitDef","type":"Interface"},{"name":"IUnparsedTextDef","href":"Hi.NcParsers.Keywords.IUnparsedTextDef.html","topicHref":"Hi.NcParsers.Keywords.IUnparsedTextDef.html","topicUid":"Hi.NcParsers.Keywords.IUnparsedTextDef","type":"Interface"},{"name":"IndexNote","href":"Hi.NcParsers.Keywords.IndexNote.html","topicHref":"Hi.NcParsers.Keywords.IndexNote.html","topicUid":"Hi.NcParsers.Keywords.IndexNote","type":"Class"},{"name":"IsoLocalCoordinateOffset","href":"Hi.NcParsers.Keywords.IsoLocalCoordinateOffset.html","topicHref":"Hi.NcParsers.Keywords.IsoLocalCoordinateOffset.html","topicUid":"Hi.NcParsers.Keywords.IsoLocalCoordinateOffset","type":"Class"},{"name":"MachineCoordinateState","href":"Hi.NcParsers.Keywords.MachineCoordinateState.html","topicHref":"Hi.NcParsers.Keywords.MachineCoordinateState.html","topicUid":"Hi.NcParsers.Keywords.MachineCoordinateState","type":"Class"},{"name":"MacroFrame","href":"Hi.NcParsers.Keywords.MacroFrame.html","topicHref":"Hi.NcParsers.Keywords.MacroFrame.html","topicUid":"Hi.NcParsers.Keywords.MacroFrame","type":"Class"},{"name":"MotionEvent","href":"Hi.NcParsers.Keywords.MotionEvent.html","topicHref":"Hi.NcParsers.Keywords.MotionEvent.html","topicUid":"Hi.NcParsers.Keywords.MotionEvent","type":"Class"},{"name":"MotionState","href":"Hi.NcParsers.Keywords.MotionState.html","topicHref":"Hi.NcParsers.Keywords.MotionState.html","topicUid":"Hi.NcParsers.Keywords.MotionState","type":"Class"},{"name":"PathSmoothing","href":"Hi.NcParsers.Keywords.PathSmoothing.html","topicHref":"Hi.NcParsers.Keywords.PathSmoothing.html","topicUid":"Hi.NcParsers.Keywords.PathSmoothing","type":"Class"},{"name":"PlaneSelect","href":"Hi.NcParsers.Keywords.PlaneSelect.html","topicHref":"Hi.NcParsers.Keywords.PlaneSelect.html","topicUid":"Hi.NcParsers.Keywords.PlaneSelect","type":"Class"},{"name":"Positioning","href":"Hi.NcParsers.Keywords.Positioning.html","topicHref":"Hi.NcParsers.Keywords.Positioning.html","topicUid":"Hi.NcParsers.Keywords.Positioning","type":"Class"},{"name":"ProgramEnd","href":"Hi.NcParsers.Keywords.ProgramEnd.html","topicHref":"Hi.NcParsers.Keywords.ProgramEnd.html","topicUid":"Hi.NcParsers.Keywords.ProgramEnd","type":"Class"},{"name":"ProgramStop","href":"Hi.NcParsers.Keywords.ProgramStop.html","topicHref":"Hi.NcParsers.Keywords.ProgramStop.html","topicUid":"Hi.NcParsers.Keywords.ProgramStop","type":"Class"},{"name":"RadiusCompensation","href":"Hi.NcParsers.Keywords.RadiusCompensation.html","topicHref":"Hi.NcParsers.Keywords.RadiusCompensation.html","topicUid":"Hi.NcParsers.Keywords.RadiusCompensation","type":"Class"},{"name":"SpindleControl","href":"Hi.NcParsers.Keywords.SpindleControl.html","topicHref":"Hi.NcParsers.Keywords.SpindleControl.html","topicUid":"Hi.NcParsers.Keywords.SpindleControl","type":"Class"},{"name":"SpindleOrientation","href":"Hi.NcParsers.Keywords.SpindleOrientation.html","topicHref":"Hi.NcParsers.Keywords.SpindleOrientation.html","topicUid":"Hi.NcParsers.Keywords.SpindleOrientation","type":"Class"},{"name":"SpindleSpeed","href":"Hi.NcParsers.Keywords.SpindleSpeed.html","topicHref":"Hi.NcParsers.Keywords.SpindleSpeed.html","topicUid":"Hi.NcParsers.Keywords.SpindleSpeed","type":"Class"},{"name":"SubProgramCall","href":"Hi.NcParsers.Keywords.SubProgramCall.html","topicHref":"Hi.NcParsers.Keywords.SubProgramCall.html","topicUid":"Hi.NcParsers.Keywords.SubProgramCall","type":"Class"},{"name":"SubProgramReturn","href":"Hi.NcParsers.Keywords.SubProgramReturn.html","topicHref":"Hi.NcParsers.Keywords.SubProgramReturn.html","topicUid":"Hi.NcParsers.Keywords.SubProgramReturn","type":"Class"},{"name":"TapeBoundary","href":"Hi.NcParsers.Keywords.TapeBoundary.html","topicHref":"Hi.NcParsers.Keywords.TapeBoundary.html","topicUid":"Hi.NcParsers.Keywords.TapeBoundary","type":"Class"},{"name":"TiltTransform","href":"Hi.NcParsers.Keywords.TiltTransform.html","topicHref":"Hi.NcParsers.Keywords.TiltTransform.html","topicUid":"Hi.NcParsers.Keywords.TiltTransform","type":"Class"},{"name":"ToolHeightCompensation","href":"Hi.NcParsers.Keywords.ToolHeightCompensation.html","topicHref":"Hi.NcParsers.Keywords.ToolHeightCompensation.html","topicUid":"Hi.NcParsers.Keywords.ToolHeightCompensation","type":"Class"},{"name":"Unit","href":"Hi.NcParsers.Keywords.Unit.html","topicHref":"Hi.NcParsers.Keywords.Unit.html","topicUid":"Hi.NcParsers.Keywords.Unit","type":"Class"},{"name":"Vars","href":"Hi.NcParsers.Keywords.Vars.html","topicHref":"Hi.NcParsers.Keywords.Vars.html","topicUid":"Hi.NcParsers.Keywords.Vars","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Fanuc","href":"Hi.NcParsers.Keywords.Fanuc.html","topicHref":"Hi.NcParsers.Keywords.Fanuc.html","topicUid":"Hi.NcParsers.Keywords.Fanuc","type":"Namespace","items":[{"name":"FanucKeywords","href":"Hi.NcParsers.Keywords.Fanuc.FanucKeywords.html","topicHref":"Hi.NcParsers.Keywords.Fanuc.FanucKeywords.html","topicUid":"Hi.NcParsers.Keywords.Fanuc.FanucKeywords","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Generic","href":"Hi.NcParsers.Keywords.Generic.html","topicHref":"Hi.NcParsers.Keywords.Generic.html","topicUid":"Hi.NcParsers.Keywords.Generic","type":"Namespace","items":[{"name":"IsoKeywords","href":"Hi.NcParsers.Keywords.Generic.IsoKeywords.html","topicHref":"Hi.NcParsers.Keywords.Generic.IsoKeywords.html","topicUid":"Hi.NcParsers.Keywords.Generic.IsoKeywords","type":"Class"},{"name":"MotionForm","href":"Hi.NcParsers.Keywords.Generic.MotionForm.html","topicHref":"Hi.NcParsers.Keywords.Generic.MotionForm.html","topicUid":"Hi.NcParsers.Keywords.Generic.MotionForm","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Heidenhain","href":"Hi.NcParsers.Keywords.Heidenhain.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain","type":"Namespace","items":[{"name":"ICyclDef","href":"Hi.NcParsers.Keywords.Heidenhain.ICyclDef.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.ICyclDef.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain.ICyclDef","type":"Interface"}]},{"name":"Hi.NcParsers.Keywords.Siemens","href":"Hi.NcParsers.Keywords.Siemens.html","topicHref":"Hi.NcParsers.Keywords.Siemens.html","topicUid":"Hi.NcParsers.Keywords.Siemens","type":"Namespace","items":[{"name":"SiemensKeywords","href":"Hi.NcParsers.Keywords.Siemens.SiemensKeywords.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensKeywords.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensKeywords","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs","href":"Hi.NcParsers.LogicSyntaxs.html","topicHref":"Hi.NcParsers.LogicSyntaxs.html","topicUid":"Hi.NcParsers.LogicSyntaxs","type":"Namespace","items":[{"name":"BackBoringSyntax","href":"Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.BackBoringSyntax","type":"Class"},{"name":"BareG28Behavior","href":"Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html","topicHref":"Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html","topicUid":"Hi.NcParsers.LogicSyntaxs.BareG28Behavior","type":"Enum"},{"name":"BoringCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax","type":"Class"},{"name":"CannedCycleResolveSyntax","href":"Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax","type":"Class"},{"name":"CircularMotionSyntax","href":"Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax","type":"Class"},{"name":"CoolantSyntax","href":"Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CoolantSyntax","type":"Class"},{"name":"CoordinateOffsetUtil","href":"Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil","type":"Class"},{"name":"DrillingCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax","type":"Class"},{"name":"FanucPathSmoothingSyntax","href":"Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax","type":"Class"},{"name":"FeedrateSyntax","href":"Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.FeedrateSyntax","type":"Class"},{"name":"FineBoringSyntax","href":"Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.FineBoringSyntax","type":"Class"},{"name":"G43p4RtcpSyntax","href":"Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax","type":"Class"},{"name":"G53p1RotaryPositionSyntax","href":"Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax","type":"Class"},{"name":"HighSpeedPeckCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax","type":"Class"},{"name":"IncrementalResolveSyntax","href":"Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax","type":"Class"},{"name":"IsoCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax","type":"Class"},{"name":"IsoG68RotationSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax","type":"Class"},{"name":"IsoG68p2TiltSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax","type":"Class"},{"name":"IsoLocalCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax","type":"Class"},{"name":"LinearMotionSyntax","href":"Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax","type":"Class"},{"name":"MachineCoordSelectSyntax","href":"Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax","type":"Class"},{"name":"McAbcCyclicPathSyntax","href":"Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax","type":"Class"},{"name":"McAbcSyntax","href":"Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McAbcSyntax","type":"Class"},{"name":"McAbcXyzFallbackSyntax","href":"Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax","type":"Class"},{"name":"McXyzSyntax","href":"Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McXyzSyntax","type":"Class"},{"name":"PeckDrillingCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax","type":"Class"},{"name":"PivotTransformationSyntax","href":"Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax","type":"Class"},{"name":"PlaneSelectSyntax","href":"Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax","type":"Class"},{"name":"PositioningSyntax","href":"Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PositioningSyntax","type":"Class"},{"name":"ProgramEndCleanSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax","type":"Class"},{"name":"ProgramEndSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax","type":"Class"},{"name":"ProgramStopSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax","type":"Class"},{"name":"ProgramXyzSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax","type":"Class"},{"name":"ProgramXyzUtil","href":"Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil","type":"Class"},{"name":"ReferenceReturnSyntax","href":"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax","type":"Class"},{"name":"RotaryAxisUtil","href":"Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil","type":"Class"},{"name":"SpindleSpeedSyntax","href":"Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax","type":"Class"},{"name":"TappingCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax","type":"Class"},{"name":"TiltTransformUtil","href":"Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.TiltTransformUtil","type":"Class"},{"name":"ToolChangeSyntax","href":"Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax","type":"Class"},{"name":"ToolHeightOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax","type":"Class"},{"name":"UnitModeSyntax","href":"Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.UnitModeSyntax","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs.Heidenhain","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs.Siemens","href":"Hi.NcParsers.LogicSyntaxs.Siemens.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens","type":"Namespace","items":[{"name":"SiemensCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs","href":"Hi.NcParsers.ParsingSyntaxs.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.html","topicUid":"Hi.NcParsers.ParsingSyntaxs","type":"Namespace","items":[{"name":"BlockSkipSyntax","href":"Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax","type":"Class"},{"name":"CsScriptSyntax","href":"Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax","type":"Class"},{"name":"FlagSyntax","href":"Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.FlagSyntax","type":"Class"},{"name":"FloatTagValueSyntax","href":"Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax","type":"Class"},{"name":"HeadIndexSyntax","href":"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax","type":"Class"},{"name":"IntegerTagValueSyntax","href":"Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax","type":"Class"},{"name":"NamedVarAssignmentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax","type":"Class"},{"name":"NumberedFlagSyntax","href":"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax","type":"Class"},{"name":"ParameterizedFlagSyntax","href":"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax","type":"Class"},{"name":"ShrinkIfNoDecimalPointSyntax","href":"Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax","type":"Class"},{"name":"TagAssignmentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax","type":"Class"},{"name":"TagValueSyntax","href":"Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.TagValueSyntax","type":"Class"},{"name":"TapeBoundarySyntax","href":"Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs","href":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs","type":"Namespace","items":[{"name":"QuoteCommentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax","type":"Class"},{"name":"TailCommentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.Fanuc","href":"Hi.NcParsers.ParsingSyntaxs.Fanuc.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Fanuc.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Fanuc","type":"Namespace","items":[{"name":"FanucGotoParsingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax","type":"Class"},{"name":"FanucIfThenParsingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax","type":"Class"},{"name":"FanucProgramNumberSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.Heidenhain","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainBlkFormSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax","type":"Class"},{"name":"HeidenhainCallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax","type":"Class"},{"name":"HeidenhainCyclDefSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax","type":"Class"},{"name":"HeidenhainFnAssignmentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax","type":"Class"},{"name":"HeidenhainLSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax","type":"Class"},{"name":"HeidenhainLblSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax","type":"Class"},{"name":"HeidenhainPlaneSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax","type":"Class"},{"name":"HeidenhainProgramSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax","type":"Class"},{"name":"HeidenhainToolCallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs","type":"Namespace","items":[{"name":"HeidenhainDatumSettingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax","type":"Class"},{"name":"HeidenhainDatumShiftSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax","type":"Class"}]},{"name":"Hi.NcParsers.PostLogicSyntaxs","href":"Hi.NcParsers.PostLogicSyntaxs.html","topicHref":"Hi.NcParsers.PostLogicSyntaxs.html","topicUid":"Hi.NcParsers.PostLogicSyntaxs","type":"Namespace","items":[{"name":"ModalCarrySyntax","href":"Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html","topicHref":"Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html","topicUid":"Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax","type":"Class"},{"name":"RadiusCompensationSyntax","href":"Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html","topicHref":"Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html","topicUid":"Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax","type":"Class"}]},{"name":"Hi.NcParsers.Segmenters","href":"Hi.NcParsers.Segmenters.html","topicHref":"Hi.NcParsers.Segmenters.html","topicUid":"Hi.NcParsers.Segmenters","type":"Namespace","items":[{"name":"HeidenhainSegmenter","href":"Hi.NcParsers.Segmenters.HeidenhainSegmenter.html","topicHref":"Hi.NcParsers.Segmenters.HeidenhainSegmenter.html","topicUid":"Hi.NcParsers.Segmenters.HeidenhainSegmenter","type":"Class"},{"name":"ISegmenter","href":"Hi.NcParsers.Segmenters.ISegmenter.html","topicHref":"Hi.NcParsers.Segmenters.ISegmenter.html","topicUid":"Hi.NcParsers.Segmenters.ISegmenter","type":"Interface"},{"name":"InlineDelimiterSegmenter","href":"Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html","topicHref":"Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html","topicUid":"Hi.NcParsers.Segmenters.InlineDelimiterSegmenter","type":"Class"},{"name":"SingleLineSegmenter","href":"Hi.NcParsers.Segmenters.SingleLineSegmenter.html","topicHref":"Hi.NcParsers.Segmenters.SingleLineSegmenter.html","topicUid":"Hi.NcParsers.Segmenters.SingleLineSegmenter","type":"Class"}]},{"name":"Hi.NcParsers.Semantics","href":"Hi.NcParsers.Semantics.html","topicHref":"Hi.NcParsers.Semantics.html","topicUid":"Hi.NcParsers.Semantics","type":"Namespace","items":[{"name":"ClLinearMotionSemantic","href":"Hi.NcParsers.Semantics.ClLinearMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.ClLinearMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.ClLinearMotionSemantic","type":"Class"},{"name":"CompoundMotionSemantic","href":"Hi.NcParsers.Semantics.CompoundMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.CompoundMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.CompoundMotionSemantic","type":"Class"},{"name":"CoolantSemantic","href":"Hi.NcParsers.Semantics.CoolantSemantic.html","topicHref":"Hi.NcParsers.Semantics.CoolantSemantic.html","topicUid":"Hi.NcParsers.Semantics.CoolantSemantic","type":"Class"},{"name":"CsScriptBeginSemantic","href":"Hi.NcParsers.Semantics.CsScriptBeginSemantic.html","topicHref":"Hi.NcParsers.Semantics.CsScriptBeginSemantic.html","topicUid":"Hi.NcParsers.Semantics.CsScriptBeginSemantic","type":"Class"},{"name":"CsScriptEndSemantic","href":"Hi.NcParsers.Semantics.CsScriptEndSemantic.html","topicHref":"Hi.NcParsers.Semantics.CsScriptEndSemantic.html","topicUid":"Hi.NcParsers.Semantics.CsScriptEndSemantic","type":"Class"},{"name":"CsScriptSemantic","href":"Hi.NcParsers.Semantics.CsScriptSemantic.html","topicHref":"Hi.NcParsers.Semantics.CsScriptSemantic.html","topicUid":"Hi.NcParsers.Semantics.CsScriptSemantic","type":"Class"},{"name":"INcSemantic","href":"Hi.NcParsers.Semantics.INcSemantic.html","topicHref":"Hi.NcParsers.Semantics.INcSemantic.html","topicUid":"Hi.NcParsers.Semantics.INcSemantic","type":"Interface"},{"name":"MachineCoordinateStepSemantic","href":"Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html","topicHref":"Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html","topicUid":"Hi.NcParsers.Semantics.MachineCoordinateStepSemantic","type":"Class"},{"name":"McArcMotionSemantic","href":"Hi.NcParsers.Semantics.McArcMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.McArcMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.McArcMotionSemantic","type":"Class"},{"name":"McLinearMotionSemantic","href":"Hi.NcParsers.Semantics.McLinearMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.McLinearMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.McLinearMotionSemantic","type":"Class"},{"name":"SpindleSpeedSemantic","href":"Hi.NcParsers.Semantics.SpindleSpeedSemantic.html","topicHref":"Hi.NcParsers.Semantics.SpindleSpeedSemantic.html","topicUid":"Hi.NcParsers.Semantics.SpindleSpeedSemantic","type":"Class"},{"name":"StrokeLimitCheckSemantic","href":"Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html","topicHref":"Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html","topicUid":"Hi.NcParsers.Semantics.StrokeLimitCheckSemantic","type":"Class"},{"name":"ToolChangeSemantic","href":"Hi.NcParsers.Semantics.ToolChangeSemantic.html","topicHref":"Hi.NcParsers.Semantics.ToolChangeSemantic.html","topicUid":"Hi.NcParsers.Semantics.ToolChangeSemantic","type":"Class"}]},{"name":"Hi.NcParsers.Syntaxs","href":"Hi.NcParsers.Syntaxs.html","topicHref":"Hi.NcParsers.Syntaxs.html","topicUid":"Hi.NcParsers.Syntaxs","type":"Namespace","items":[{"name":"BundleSyntax","href":"Hi.NcParsers.Syntaxs.BundleSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.BundleSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.BundleSyntax","type":"Class"},{"name":"FanucSyntaxUtil","href":"Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.FanucSyntaxUtil","type":"Class"},{"name":"GenericSyntaxKit","href":"Hi.NcParsers.Syntaxs.GenericSyntaxKit.html","topicHref":"Hi.NcParsers.Syntaxs.GenericSyntaxKit.html","topicUid":"Hi.NcParsers.Syntaxs.GenericSyntaxKit","type":"Class"},{"name":"HeidenhainSyntaxUtil","href":"Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil","type":"Class"},{"name":"IExpandingNcSyntax","href":"Hi.NcParsers.Syntaxs.IExpandingNcSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.IExpandingNcSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.IExpandingNcSyntax","type":"Interface"},{"name":"INcSyntax","href":"Hi.NcParsers.Syntaxs.INcSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.INcSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.INcSyntax","type":"Interface"},{"name":"ISituNcSyntax","href":"Hi.NcParsers.Syntaxs.ISituNcSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.ISituNcSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.ISituNcSyntax","type":"Interface"},{"name":"MazakSyntaxUtil","href":"Hi.NcParsers.Syntaxs.MazakSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.MazakSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.MazakSyntaxUtil","type":"Class"},{"name":"NcSyntaxUtil","href":"Hi.NcParsers.Syntaxs.NcSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.NcSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.NcSyntaxUtil","type":"Class"},{"name":"SiemensSyntaxUtil","href":"Hi.NcParsers.Syntaxs.SiemensSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.SiemensSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.SiemensSyntaxUtil","type":"Class"},{"name":"SyntaxPiece","href":"Hi.NcParsers.Syntaxs.SyntaxPiece.html","topicHref":"Hi.NcParsers.Syntaxs.SyntaxPiece.html","topicUid":"Hi.NcParsers.Syntaxs.SyntaxPiece","type":"Class"},{"name":"SyntaxStageKeys","href":"Hi.NcParsers.Syntaxs.SyntaxStageKeys.html","topicHref":"Hi.NcParsers.Syntaxs.SyntaxStageKeys.html","topicUid":"Hi.NcParsers.Syntaxs.SyntaxStageKeys","type":"Class"},{"name":"SyntecSyntaxUtil","href":"Hi.NcParsers.Syntaxs.SyntecSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.SyntecSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.SyntecSyntaxUtil","type":"Class"},{"name":"TagValue","href":"Hi.NcParsers.Syntaxs.TagValue.html","topicHref":"Hi.NcParsers.Syntaxs.TagValue.html","topicUid":"Hi.NcParsers.Syntaxs.TagValue","type":"Class"},{"name":"TransformationUtil","href":"Hi.NcParsers.Syntaxs.TransformationUtil.html","topicHref":"Hi.NcParsers.Syntaxs.TransformationUtil.html","topicUid":"Hi.NcParsers.Syntaxs.TransformationUtil","type":"Class"}]},{"name":"Hi.Numerical","href":"Hi.Numerical.html","topicHref":"Hi.Numerical.html","topicUid":"Hi.Numerical","type":"Namespace","items":[{"name":"CncBrand","href":"Hi.Numerical.CncBrand.html","topicHref":"Hi.Numerical.CncBrand.html","topicUid":"Hi.Numerical.CncBrand","type":"Enum"},{"name":"CommentMark","href":"Hi.Numerical.CommentMark.html","topicHref":"Hi.Numerical.CommentMark.html","topicUid":"Hi.Numerical.CommentMark","type":"Enum"},{"name":"CoolantMode","href":"Hi.Numerical.CoolantMode.html","topicHref":"Hi.Numerical.CoolantMode.html","topicUid":"Hi.Numerical.CoolantMode","type":"Enum"},{"name":"CoordinateInterpolationMode","href":"Hi.Numerical.CoordinateInterpolationMode.html","topicHref":"Hi.Numerical.CoordinateInterpolationMode.html","topicUid":"Hi.Numerical.CoordinateInterpolationMode","type":"Enum"},{"name":"FlexDictionaryUtil","href":"Hi.Numerical.FlexDictionaryUtil.html","topicHref":"Hi.Numerical.FlexDictionaryUtil.html","topicUid":"Hi.Numerical.FlexDictionaryUtil","type":"Class"},{"name":"HardNcComment","href":"Hi.Numerical.HardNcComment.html","topicHref":"Hi.Numerical.HardNcComment.html","topicUid":"Hi.Numerical.HardNcComment","type":"Class"},{"name":"HardNcEnv","href":"Hi.Numerical.HardNcEnv.html","topicHref":"Hi.Numerical.HardNcEnv.html","topicUid":"Hi.Numerical.HardNcEnv","type":"Class"},{"name":"HardNcLine","href":"Hi.Numerical.HardNcLine.html","topicHref":"Hi.Numerical.HardNcLine.html","topicUid":"Hi.Numerical.HardNcLine","type":"Class"},{"name":"HardNcUtil","href":"Hi.Numerical.HardNcUtil.html","topicHref":"Hi.Numerical.HardNcUtil.html","topicUid":"Hi.Numerical.HardNcUtil","type":"Class"},{"name":"HeidenhainCoordinateEntryDisplayee","href":"Hi.Numerical.HeidenhainCoordinateEntryDisplayee.html","topicHref":"Hi.Numerical.HeidenhainCoordinateEntryDisplayee.html","topicUid":"Hi.Numerical.HeidenhainCoordinateEntryDisplayee","type":"Class"},{"name":"IControlRunner","href":"Hi.Numerical.IControlRunner.html","topicHref":"Hi.Numerical.IControlRunner.html","topicUid":"Hi.Numerical.IControlRunner","type":"Interface"},{"name":"IFlexDictionaryHost","href":"Hi.Numerical.IFlexDictionaryHost-1.html","topicHref":"Hi.Numerical.IFlexDictionaryHost-1.html","topicUid":"Hi.Numerical.IFlexDictionaryHost`1","type":"Interface"},{"name":"IGetFeedrate","href":"Hi.Numerical.IGetFeedrate.html","topicHref":"Hi.Numerical.IGetFeedrate.html","topicUid":"Hi.Numerical.IGetFeedrate","type":"Interface"},{"name":"IGetSpindleSpeed","href":"Hi.Numerical.IGetSpindleSpeed.html","topicHref":"Hi.Numerical.IGetSpindleSpeed.html","topicUid":"Hi.Numerical.IGetSpindleSpeed","type":"Interface"},{"name":"ISetFeedrate","href":"Hi.Numerical.ISetFeedrate.html","topicHref":"Hi.Numerical.ISetFeedrate.html","topicUid":"Hi.Numerical.ISetFeedrate","type":"Interface"},{"name":"ISetSpindleSpeed","href":"Hi.Numerical.ISetSpindleSpeed.html","topicHref":"Hi.Numerical.ISetSpindleSpeed.html","topicUid":"Hi.Numerical.ISetSpindleSpeed","type":"Interface"},{"name":"IsoCoordinateEntryDisplayee","href":"Hi.Numerical.IsoCoordinateEntryDisplayee.html","topicHref":"Hi.Numerical.IsoCoordinateEntryDisplayee.html","topicUid":"Hi.Numerical.IsoCoordinateEntryDisplayee","type":"Class"},{"name":"MechNcUtil","href":"Hi.Numerical.MechNcUtil.html","topicHref":"Hi.Numerical.MechNcUtil.html","topicUid":"Hi.Numerical.MechNcUtil","type":"Class"},{"name":"MillingToolOffsetTable","href":"Hi.Numerical.MillingToolOffsetTable.html","topicHref":"Hi.Numerical.MillingToolOffsetTable.html","topicUid":"Hi.Numerical.MillingToolOffsetTable","type":"Class"},{"name":"MillingToolOffsetTableRow","href":"Hi.Numerical.MillingToolOffsetTableRow.html","topicHref":"Hi.Numerical.MillingToolOffsetTableRow.html","topicUid":"Hi.Numerical.MillingToolOffsetTableRow","type":"Class"},{"name":"NcFlag","href":"Hi.Numerical.NcFlag.html","topicHref":"Hi.Numerical.NcFlag.html","topicUid":"Hi.Numerical.NcFlag","type":"Enum"},{"name":"NcFlagUtil","href":"Hi.Numerical.NcFlagUtil.html","topicHref":"Hi.Numerical.NcFlagUtil.html","topicUid":"Hi.Numerical.NcFlagUtil","type":"Class"},{"name":"NcGroup00","href":"Hi.Numerical.NcGroup00.html","topicHref":"Hi.Numerical.NcGroup00.html","topicUid":"Hi.Numerical.NcGroup00","type":"Enum"},{"name":"NcGroup01","href":"Hi.Numerical.NcGroup01.html","topicHref":"Hi.Numerical.NcGroup01.html","topicUid":"Hi.Numerical.NcGroup01","type":"Enum"},{"name":"NcGroup02","href":"Hi.Numerical.NcGroup02.html","topicHref":"Hi.Numerical.NcGroup02.html","topicUid":"Hi.Numerical.NcGroup02","type":"Enum"},{"name":"NcGroup03","href":"Hi.Numerical.NcGroup03.html","topicHref":"Hi.Numerical.NcGroup03.html","topicUid":"Hi.Numerical.NcGroup03","type":"Enum"},{"name":"NcGroup05","href":"Hi.Numerical.NcGroup05.html","topicHref":"Hi.Numerical.NcGroup05.html","topicUid":"Hi.Numerical.NcGroup05","type":"Enum"},{"name":"NcGroup06","href":"Hi.Numerical.NcGroup06.html","topicHref":"Hi.Numerical.NcGroup06.html","topicUid":"Hi.Numerical.NcGroup06","type":"Enum"},{"name":"NcGroup07","href":"Hi.Numerical.NcGroup07.html","topicHref":"Hi.Numerical.NcGroup07.html","topicUid":"Hi.Numerical.NcGroup07","type":"Enum"},{"name":"NcGroup08","href":"Hi.Numerical.NcGroup08.html","topicHref":"Hi.Numerical.NcGroup08.html","topicUid":"Hi.Numerical.NcGroup08","type":"Enum"},{"name":"NcGroup09","href":"Hi.Numerical.NcGroup09.html","topicHref":"Hi.Numerical.NcGroup09.html","topicUid":"Hi.Numerical.NcGroup09","type":"Enum"},{"name":"NcGroup10","href":"Hi.Numerical.NcGroup10.html","topicHref":"Hi.Numerical.NcGroup10.html","topicUid":"Hi.Numerical.NcGroup10","type":"Enum"},{"name":"NcGroup13","href":"Hi.Numerical.NcGroup13.html","topicHref":"Hi.Numerical.NcGroup13.html","topicUid":"Hi.Numerical.NcGroup13","type":"Enum"},{"name":"NcGroup14","href":"Hi.Numerical.NcGroup14.html","topicHref":"Hi.Numerical.NcGroup14.html","topicUid":"Hi.Numerical.NcGroup14","type":"Enum"},{"name":"NcGroup15","href":"Hi.Numerical.NcGroup15.html","topicHref":"Hi.Numerical.NcGroup15.html","topicUid":"Hi.Numerical.NcGroup15","type":"Enum"},{"name":"NcGroup16","href":"Hi.Numerical.NcGroup16.html","topicHref":"Hi.Numerical.NcGroup16.html","topicUid":"Hi.Numerical.NcGroup16","type":"Enum"},{"name":"NcGroup21","href":"Hi.Numerical.NcGroup21.html","topicHref":"Hi.Numerical.NcGroup21.html","topicUid":"Hi.Numerical.NcGroup21","type":"Enum"},{"name":"NcGroupAttribute","href":"Hi.Numerical.NcGroupAttribute.html","topicHref":"Hi.Numerical.NcGroupAttribute.html","topicUid":"Hi.Numerical.NcGroupAttribute","type":"Class"},{"name":"NcGroupHeidenhainM107M108","href":"Hi.Numerical.NcGroupHeidenhainM107M108.html","topicHref":"Hi.Numerical.NcGroupHeidenhainM107M108.html","topicUid":"Hi.Numerical.NcGroupHeidenhainM107M108","type":"Enum"},{"name":"NcGroupHeidenhainPlane","href":"Hi.Numerical.NcGroupHeidenhainPlane.html","topicHref":"Hi.Numerical.NcGroupHeidenhainPlane.html","topicUid":"Hi.Numerical.NcGroupHeidenhainPlane","type":"Enum"},{"name":"NcGroupHeidenhainShortestRotaryPath","href":"Hi.Numerical.NcGroupHeidenhainShortestRotaryPath.html","topicHref":"Hi.Numerical.NcGroupHeidenhainShortestRotaryPath.html","topicUid":"Hi.Numerical.NcGroupHeidenhainShortestRotaryPath","type":"Enum"},{"name":"NcGroupSpindleRotation","href":"Hi.Numerical.NcGroupSpindleRotation.html","topicHref":"Hi.Numerical.NcGroupSpindleRotation.html","topicUid":"Hi.Numerical.NcGroupSpindleRotation","type":"Enum"},{"name":"NcLifeCycleAttribute","href":"Hi.Numerical.NcLifeCycleAttribute.html","topicHref":"Hi.Numerical.NcLifeCycleAttribute.html","topicUid":"Hi.Numerical.NcLifeCycleAttribute","type":"Class"},{"name":"NcLifeCycleMode","href":"Hi.Numerical.NcLifeCycleMode.html","topicHref":"Hi.Numerical.NcLifeCycleMode.html","topicUid":"Hi.Numerical.NcLifeCycleMode","type":"Enum"},{"name":"NcNameAttribute","href":"Hi.Numerical.NcNameAttribute.html","topicHref":"Hi.Numerical.NcNameAttribute.html","topicUid":"Hi.Numerical.NcNameAttribute","type":"Class"},{"name":"NcNoteCache","href":"Hi.Numerical.NcNoteCache.html","topicHref":"Hi.Numerical.NcNoteCache.html","topicUid":"Hi.Numerical.NcNoteCache","type":"Class"},{"name":"NcProc","href":"Hi.Numerical.NcProc.html","topicHref":"Hi.Numerical.NcProc.html","topicUid":"Hi.Numerical.NcProc","type":"Class"},{"name":"NcWarningSceneEnum","href":"Hi.Numerical.NcWarningSceneEnum.html","topicHref":"Hi.Numerical.NcWarningSceneEnum.html","topicUid":"Hi.Numerical.NcWarningSceneEnum","type":"Enum"},{"name":"NumericUtil","href":"Hi.Numerical.NumericUtil.html","topicHref":"Hi.Numerical.NumericUtil.html","topicUid":"Hi.Numerical.NumericUtil","type":"Class"},{"name":"PolarEntry","href":"Hi.Numerical.PolarEntry.html","topicHref":"Hi.Numerical.PolarEntry.html","topicUid":"Hi.Numerical.PolarEntry","type":"Class"},{"name":"RadiusCompensationBuf","href":"Hi.Numerical.RadiusCompensationBuf.html","topicHref":"Hi.Numerical.RadiusCompensationBuf.html","topicUid":"Hi.Numerical.RadiusCompensationBuf","type":"Class"},{"name":"SourcedActEntry","href":"Hi.Numerical.SourcedActEntry.html","topicHref":"Hi.Numerical.SourcedActEntry.html","topicUid":"Hi.Numerical.SourcedActEntry","type":"Class"},{"name":"SpindleDirection","href":"Hi.Numerical.SpindleDirection.html","topicHref":"Hi.Numerical.SpindleDirection.html","topicUid":"Hi.Numerical.SpindleDirection","type":"Enum"},{"name":"SubStringKit","href":"Hi.Numerical.SubStringKit.html","topicHref":"Hi.Numerical.SubStringKit.html","topicUid":"Hi.Numerical.SubStringKit","type":"Class"},{"name":"SubStringKit.ActivationMode","href":"Hi.Numerical.SubStringKit.ActivationMode.html","topicHref":"Hi.Numerical.SubStringKit.ActivationMode.html","topicUid":"Hi.Numerical.SubStringKit.ActivationMode","type":"Enum"},{"name":"ToolConfigNotFoundException","href":"Hi.Numerical.ToolConfigNotFoundException.html","topicHref":"Hi.Numerical.ToolConfigNotFoundException.html","topicUid":"Hi.Numerical.ToolConfigNotFoundException","type":"Class"}]},{"name":"Hi.Numerical.Acts","href":"Hi.Numerical.Acts.html","topicHref":"Hi.Numerical.Acts.html","topicUid":"Hi.Numerical.Acts","type":"Namespace","items":[{"name":"ActActualTime","href":"Hi.Numerical.Acts.ActActualTime.html","topicHref":"Hi.Numerical.Acts.ActActualTime.html","topicUid":"Hi.Numerical.Acts.ActActualTime","type":"Class"},{"name":"ActClArc","href":"Hi.Numerical.Acts.ActClArc.html","topicHref":"Hi.Numerical.Acts.ActClArc.html","topicUid":"Hi.Numerical.Acts.ActClArc","type":"Class"},{"name":"ActClDerivedMcXyzabcContour","href":"Hi.Numerical.Acts.ActClDerivedMcXyzabcContour.html","topicHref":"Hi.Numerical.Acts.ActClDerivedMcXyzabcContour.html","topicUid":"Hi.Numerical.Acts.ActClDerivedMcXyzabcContour","type":"Class"},{"name":"ActClLinear","href":"Hi.Numerical.Acts.ActClLinear.html","topicHref":"Hi.Numerical.Acts.ActClLinear.html","topicUid":"Hi.Numerical.Acts.ActClLinear","type":"Class"},{"name":"ActClStep","href":"Hi.Numerical.Acts.ActClStep.html","topicHref":"Hi.Numerical.Acts.ActClStep.html","topicUid":"Hi.Numerical.Acts.ActClStep","type":"Class"},{"name":"ActClTeleport","href":"Hi.Numerical.Acts.ActClTeleport.html","topicHref":"Hi.Numerical.Acts.ActClTeleport.html","topicUid":"Hi.Numerical.Acts.ActClTeleport","type":"Class"},{"name":"ActCooling","href":"Hi.Numerical.Acts.ActCooling.html","topicHref":"Hi.Numerical.Acts.ActCooling.html","topicUid":"Hi.Numerical.Acts.ActCooling","type":"Class"},{"name":"ActData","href":"Hi.Numerical.Acts.ActData.html","topicHref":"Hi.Numerical.Acts.ActData.html","topicUid":"Hi.Numerical.Acts.ActData","type":"Class"},{"name":"ActDelay","href":"Hi.Numerical.Acts.ActDelay.html","topicHref":"Hi.Numerical.Acts.ActDelay.html","topicUid":"Hi.Numerical.Acts.ActDelay","type":"Class"},{"name":"ActFeedrate","href":"Hi.Numerical.Acts.ActFeedrate.html","topicHref":"Hi.Numerical.Acts.ActFeedrate.html","topicUid":"Hi.Numerical.Acts.ActFeedrate","type":"Class"},{"name":"ActHiddenStateChanged","href":"Hi.Numerical.Acts.ActHiddenStateChanged.html","topicHref":"Hi.Numerical.Acts.ActHiddenStateChanged.html","topicUid":"Hi.Numerical.Acts.ActHiddenStateChanged","type":"Class"},{"name":"ActIntentionalSkip","href":"Hi.Numerical.Acts.ActIntentionalSkip.html","topicHref":"Hi.Numerical.Acts.ActIntentionalSkip.html","topicUid":"Hi.Numerical.Acts.ActIntentionalSkip","type":"Class"},{"name":"ActLineBegin","href":"Hi.Numerical.Acts.ActLineBegin.html","topicHref":"Hi.Numerical.Acts.ActLineBegin.html","topicUid":"Hi.Numerical.Acts.ActLineBegin","type":"Class"},{"name":"ActLineCsScript","href":"Hi.Numerical.Acts.ActLineCsScript.html","topicHref":"Hi.Numerical.Acts.ActLineCsScript.html","topicUid":"Hi.Numerical.Acts.ActLineCsScript","type":"Class"},{"name":"ActLineEnd","href":"Hi.Numerical.Acts.ActLineEnd.html","topicHref":"Hi.Numerical.Acts.ActLineEnd.html","topicUid":"Hi.Numerical.Acts.ActLineEnd","type":"Class"},{"name":"ActMcPolarLinearContour","href":"Hi.Numerical.Acts.ActMcPolarLinearContour.html","topicHref":"Hi.Numerical.Acts.ActMcPolarLinearContour.html","topicUid":"Hi.Numerical.Acts.ActMcPolarLinearContour","type":"Class"},{"name":"ActMcXyzLinearContour","href":"Hi.Numerical.Acts.ActMcXyzLinearContour.html","topicHref":"Hi.Numerical.Acts.ActMcXyzLinearContour.html","topicUid":"Hi.Numerical.Acts.ActMcXyzLinearContour","type":"Class"},{"name":"ActMcXyzSpiralContour","href":"Hi.Numerical.Acts.ActMcXyzSpiralContour.html","topicHref":"Hi.Numerical.Acts.ActMcXyzSpiralContour.html","topicUid":"Hi.Numerical.Acts.ActMcXyzSpiralContour","type":"Class"},{"name":"ActMcXyzStep","href":"Hi.Numerical.Acts.ActMcXyzStep.html","topicHref":"Hi.Numerical.Acts.ActMcXyzStep.html","topicUid":"Hi.Numerical.Acts.ActMcXyzStep","type":"Class"},{"name":"ActMcXyzabcLinearContour","href":"Hi.Numerical.Acts.ActMcXyzabcLinearContour.html","topicHref":"Hi.Numerical.Acts.ActMcXyzabcLinearContour.html","topicUid":"Hi.Numerical.Acts.ActMcXyzabcLinearContour","type":"Class"},{"name":"ActMcXyzabcStep","href":"Hi.Numerical.Acts.ActMcXyzabcStep.html","topicHref":"Hi.Numerical.Acts.ActMcXyzabcStep.html","topicUid":"Hi.Numerical.Acts.ActMcXyzabcStep","type":"Class"},{"name":"ActRapid","href":"Hi.Numerical.Acts.ActRapid.html","topicHref":"Hi.Numerical.Acts.ActRapid.html","topicUid":"Hi.Numerical.Acts.ActRapid","type":"Class"},{"name":"ActSpindleDirection","href":"Hi.Numerical.Acts.ActSpindleDirection.html","topicHref":"Hi.Numerical.Acts.ActSpindleDirection.html","topicUid":"Hi.Numerical.Acts.ActSpindleDirection","type":"Class"},{"name":"ActSpindleOrientation","href":"Hi.Numerical.Acts.ActSpindleOrientation.html","topicHref":"Hi.Numerical.Acts.ActSpindleOrientation.html","topicUid":"Hi.Numerical.Acts.ActSpindleOrientation","type":"Class"},{"name":"ActSpindleSpeed","href":"Hi.Numerical.Acts.ActSpindleSpeed.html","topicHref":"Hi.Numerical.Acts.ActSpindleSpeed.html","topicUid":"Hi.Numerical.Acts.ActSpindleSpeed","type":"Class"},{"name":"ActToolingStep","href":"Hi.Numerical.Acts.ActToolingStep.html","topicHref":"Hi.Numerical.Acts.ActToolingStep.html","topicUid":"Hi.Numerical.Acts.ActToolingStep","type":"Class"},{"name":"ActToolingTeleport","href":"Hi.Numerical.Acts.ActToolingTeleport.html","topicHref":"Hi.Numerical.Acts.ActToolingTeleport.html","topicUid":"Hi.Numerical.Acts.ActToolingTeleport","type":"Class"},{"name":"ActUnknownSkip","href":"Hi.Numerical.Acts.ActUnknownSkip.html","topicHref":"Hi.Numerical.Acts.ActUnknownSkip.html","topicUid":"Hi.Numerical.Acts.ActUnknownSkip","type":"Class"},{"name":"ActUtil","href":"Hi.Numerical.Acts.ActUtil.html","topicHref":"Hi.Numerical.Acts.ActUtil.html","topicUid":"Hi.Numerical.Acts.ActUtil","type":"Class"},{"name":"IAct","href":"Hi.Numerical.Acts.IAct.html","topicHref":"Hi.Numerical.Acts.IAct.html","topicUid":"Hi.Numerical.Acts.IAct","type":"Interface"},{"name":"IActClMove","href":"Hi.Numerical.Acts.IActClMove.html","topicHref":"Hi.Numerical.Acts.IActClMove.html","topicUid":"Hi.Numerical.Acts.IActClMove","type":"Interface"},{"name":"IActDuration","href":"Hi.Numerical.Acts.IActDuration.html","topicHref":"Hi.Numerical.Acts.IActDuration.html","topicUid":"Hi.Numerical.Acts.IActDuration","type":"Interface"},{"name":"IActMachineStep","href":"Hi.Numerical.Acts.IActMachineStep.html","topicHref":"Hi.Numerical.Acts.IActMachineStep.html","topicUid":"Hi.Numerical.Acts.IActMachineStep","type":"Interface"},{"name":"IActMcXyzContour","href":"Hi.Numerical.Acts.IActMcXyzContour.html","topicHref":"Hi.Numerical.Acts.IActMcXyzContour.html","topicUid":"Hi.Numerical.Acts.IActMcXyzContour","type":"Interface"},{"name":"IActMcXyzabcContour","href":"Hi.Numerical.Acts.IActMcXyzabcContour.html","topicHref":"Hi.Numerical.Acts.IActMcXyzabcContour.html","topicUid":"Hi.Numerical.Acts.IActMcXyzabcContour","type":"Interface"},{"name":"IActSkip","href":"Hi.Numerical.Acts.IActSkip.html","topicHref":"Hi.Numerical.Acts.IActSkip.html","topicUid":"Hi.Numerical.Acts.IActSkip","type":"Interface"},{"name":"IActTooling","href":"Hi.Numerical.Acts.IActTooling.html","topicHref":"Hi.Numerical.Acts.IActTooling.html","topicUid":"Hi.Numerical.Acts.IActTooling","type":"Interface"},{"name":"IWorkTimeAttrib","href":"Hi.Numerical.Acts.IWorkTimeAttrib.html","topicHref":"Hi.Numerical.Acts.IWorkTimeAttrib.html","topicUid":"Hi.Numerical.Acts.IWorkTimeAttrib","type":"Interface"},{"name":"IWorkTimeGetter","href":"Hi.Numerical.Acts.IWorkTimeGetter.html","topicHref":"Hi.Numerical.Acts.IWorkTimeGetter.html","topicUid":"Hi.Numerical.Acts.IWorkTimeGetter","type":"Interface"},{"name":"IWorkTimeSetter","href":"Hi.Numerical.Acts.IWorkTimeSetter.html","topicHref":"Hi.Numerical.Acts.IWorkTimeSetter.html","topicUid":"Hi.Numerical.Acts.IWorkTimeSetter","type":"Interface"},{"name":"StateActRunner","href":"Hi.Numerical.Acts.StateActRunner.html","topicHref":"Hi.Numerical.Acts.StateActRunner.html","topicUid":"Hi.Numerical.Acts.StateActRunner","type":"Class"}]},{"name":"Hi.Numerical.Args","href":"Hi.Numerical.Args.html","topicHref":"Hi.Numerical.Args.html","topicUid":"Hi.Numerical.Args","type":"Namespace","items":[{"name":"OrthogonalPlaneFlag","href":"Hi.Numerical.Args.OrthogonalPlaneFlag.html","topicHref":"Hi.Numerical.Args.OrthogonalPlaneFlag.html","topicUid":"Hi.Numerical.Args.OrthogonalPlaneFlag","type":"Enum"},{"name":"PolarModeDirEnum","href":"Hi.Numerical.Args.PolarModeDirEnum.html","topicHref":"Hi.Numerical.Args.PolarModeDirEnum.html","topicUid":"Hi.Numerical.Args.PolarModeDirEnum","type":"Enum"}]},{"name":"Hi.Numerical.FilePlayers","href":"Hi.Numerical.FilePlayers.html","topicHref":"Hi.Numerical.FilePlayers.html","topicUid":"Hi.Numerical.FilePlayers","type":"Namespace","items":[{"name":"CsvRunner","href":"Hi.Numerical.FilePlayers.CsvRunner.html","topicHref":"Hi.Numerical.FilePlayers.CsvRunner.html","topicUid":"Hi.Numerical.FilePlayers.CsvRunner","type":"Class"},{"name":"CsvRunnerConfig","href":"Hi.Numerical.FilePlayers.CsvRunnerConfig.html","topicHref":"Hi.Numerical.FilePlayers.CsvRunnerConfig.html","topicUid":"Hi.Numerical.FilePlayers.CsvRunnerConfig","type":"Class"},{"name":"HardNcRunner","href":"Hi.Numerical.FilePlayers.HardNcRunner.html","topicHref":"Hi.Numerical.FilePlayers.HardNcRunner.html","topicUid":"Hi.Numerical.FilePlayers.HardNcRunner","type":"Class"}]},{"name":"Hi.Numerical.MachiningMotionResolutionUtils","href":"Hi.Numerical.MachiningMotionResolutionUtils.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils","type":"Namespace","items":[{"name":"FeedPerCycleMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution","type":"Class"},{"name":"FeedPerToothMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution","type":"Class"},{"name":"FixedMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution","type":"Class"},{"name":"IMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution","type":"Interface"}]},{"name":"Hi.Numerical.NcArgs","href":"Hi.Numerical.NcArgs.html","topicHref":"Hi.Numerical.NcArgs.html","topicUid":"Hi.Numerical.NcArgs","type":"Namespace","items":[{"name":"ArcNcArg","href":"Hi.Numerical.NcArgs.ArcNcArg.html","topicHref":"Hi.Numerical.NcArgs.ArcNcArg.html","topicUid":"Hi.Numerical.NcArgs.ArcNcArg","type":"Class"},{"name":"G28Arg","href":"Hi.Numerical.NcArgs.G28Arg.html","topicHref":"Hi.Numerical.NcArgs.G28Arg.html","topicUid":"Hi.Numerical.NcArgs.G28Arg","type":"Class"},{"name":"Group07NcArg","href":"Hi.Numerical.NcArgs.Group07NcArg.html","topicHref":"Hi.Numerical.NcArgs.Group07NcArg.html","topicUid":"Hi.Numerical.NcArgs.Group07NcArg","type":"Class"},{"name":"Group09NcArg","href":"Hi.Numerical.NcArgs.Group09NcArg.html","topicHref":"Hi.Numerical.NcArgs.Group09NcArg.html","topicUid":"Hi.Numerical.NcArgs.Group09NcArg","type":"Class"},{"name":"HeidenhainCycleDef7Arg","href":"Hi.Numerical.NcArgs.HeidenhainCycleDef7Arg.html","topicHref":"Hi.Numerical.NcArgs.HeidenhainCycleDef7Arg.html","topicUid":"Hi.Numerical.NcArgs.HeidenhainCycleDef7Arg","type":"Class"},{"name":"HeidenhainPlaneSpatialArg","href":"Hi.Numerical.NcArgs.HeidenhainPlaneSpatialArg.html","topicHref":"Hi.Numerical.NcArgs.HeidenhainPlaneSpatialArg.html","topicUid":"Hi.Numerical.NcArgs.HeidenhainPlaneSpatialArg","type":"Class"},{"name":"IHeidenhainBlockCacheArg","href":"Hi.Numerical.NcArgs.IHeidenhainBlockCacheArg.html","topicHref":"Hi.Numerical.NcArgs.IHeidenhainBlockCacheArg.html","topicUid":"Hi.Numerical.NcArgs.IHeidenhainBlockCacheArg","type":"Interface"},{"name":"IHeidenhainPlaneArg","href":"Hi.Numerical.NcArgs.IHeidenhainPlaneArg.html","topicHref":"Hi.Numerical.NcArgs.IHeidenhainPlaneArg.html","topicUid":"Hi.Numerical.NcArgs.IHeidenhainPlaneArg","type":"Interface"},{"name":"ITiltPlaneNcArg","href":"Hi.Numerical.NcArgs.ITiltPlaneNcArg.html","topicHref":"Hi.Numerical.NcArgs.ITiltPlaneNcArg.html","topicUid":"Hi.Numerical.NcArgs.ITiltPlaneNcArg","type":"Interface"},{"name":"NcArgCycle800","href":"Hi.Numerical.NcArgs.NcArgCycle800.html","topicHref":"Hi.Numerical.NcArgs.NcArgCycle800.html","topicUid":"Hi.Numerical.NcArgs.NcArgCycle800","type":"Class"},{"name":"NcArgG68","href":"Hi.Numerical.NcArgs.NcArgG68.html","topicHref":"Hi.Numerical.NcArgs.NcArgG68.html","topicUid":"Hi.Numerical.NcArgs.NcArgG68","type":"Class"},{"name":"NcArgG68p2","href":"Hi.Numerical.NcArgs.NcArgG68p2.html","topicHref":"Hi.Numerical.NcArgs.NcArgG68p2.html","topicUid":"Hi.Numerical.NcArgs.NcArgG68p2","type":"Class"},{"name":"NcArgSiemensFrame","href":"Hi.Numerical.NcArgs.NcArgSiemensFrame.html","topicHref":"Hi.Numerical.NcArgs.NcArgSiemensFrame.html","topicUid":"Hi.Numerical.NcArgs.NcArgSiemensFrame","type":"Class"},{"name":"PausingNcArg","href":"Hi.Numerical.NcArgs.PausingNcArg.html","topicHref":"Hi.Numerical.NcArgs.PausingNcArg.html","topicUid":"Hi.Numerical.NcArgs.PausingNcArg","type":"Class"}]},{"name":"Hi.Numerical.StepSelectionUtils","href":"Hi.Numerical.StepSelectionUtils.html","topicHref":"Hi.Numerical.StepSelectionUtils.html","topicUid":"Hi.Numerical.StepSelectionUtils","type":"Namespace","items":[{"name":"AnchorMode","href":"Hi.Numerical.StepSelectionUtils.AnchorMode.html","topicHref":"Hi.Numerical.StepSelectionUtils.AnchorMode.html","topicUid":"Hi.Numerical.StepSelectionUtils.AnchorMode","type":"Enum"},{"name":"BoundSelector","href":"Hi.Numerical.StepSelectionUtils.BoundSelector.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelector.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelector","type":"Class"},{"name":"BoundSelectorHost","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorHost","type":"Class"},{"name":"BoundSelectorPair","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair","type":"Class"},{"name":"BoundSelectorPair.BoundLocale","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale","type":"Enum"},{"name":"BoundSelectorStepSectionBundle","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle","type":"Class"},{"name":"BoundSelectorUtil","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorUtil.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorUtil.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorUtil","type":"Class"},{"name":"DistanceShift","href":"Hi.Numerical.StepSelectionUtils.DistanceShift.html","topicHref":"Hi.Numerical.StepSelectionUtils.DistanceShift.html","topicUid":"Hi.Numerical.StepSelectionUtils.DistanceShift","type":"Class"},{"name":"IStepShift","href":"Hi.Numerical.StepSelectionUtils.IStepShift.html","topicHref":"Hi.Numerical.StepSelectionUtils.IStepShift.html","topicUid":"Hi.Numerical.StepSelectionUtils.IStepShift","type":"Interface"},{"name":"TimeShift","href":"Hi.Numerical.StepSelectionUtils.TimeShift.html","topicHref":"Hi.Numerical.StepSelectionUtils.TimeShift.html","topicUid":"Hi.Numerical.StepSelectionUtils.TimeShift","type":"Class"}]},{"name":"Hi.Numerical.Xyzabc","href":"Hi.Numerical.Xyzabc.html","topicHref":"Hi.Numerical.Xyzabc.html","topicUid":"Hi.Numerical.Xyzabc","type":"Namespace","items":[{"name":"Abc","href":"Hi.Numerical.Xyzabc.Abc.html","topicHref":"Hi.Numerical.Xyzabc.Abc.html","topicUid":"Hi.Numerical.Xyzabc.Abc","type":"Struct"},{"name":"CodeXyzabcChain","href":"Hi.Numerical.Xyzabc.CodeXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.CodeXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.CodeXyzabcChain","type":"Class"},{"name":"GeneralXyzabcChain","href":"Hi.Numerical.Xyzabc.GeneralXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.GeneralXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.GeneralXyzabcChain","type":"Class"},{"name":"IGetMcXyzabc","href":"Hi.Numerical.Xyzabc.IGetMcXyzabc.html","topicHref":"Hi.Numerical.Xyzabc.IGetMcXyzabc.html","topicUid":"Hi.Numerical.Xyzabc.IGetMcXyzabc","type":"Interface"},{"name":"IGetXyzabcChain","href":"Hi.Numerical.Xyzabc.IGetXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.IGetXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.IGetXyzabcChain","type":"Interface"},{"name":"IMachineKinematics","href":"Hi.Numerical.Xyzabc.IMachineKinematics.html","topicHref":"Hi.Numerical.Xyzabc.IMachineKinematics.html","topicUid":"Hi.Numerical.Xyzabc.IMachineKinematics","type":"Interface"},{"name":"ISetMcXyzabc","href":"Hi.Numerical.Xyzabc.ISetMcXyzabc.html","topicHref":"Hi.Numerical.Xyzabc.ISetMcXyzabc.html","topicUid":"Hi.Numerical.Xyzabc.ISetMcXyzabc","type":"Interface"},{"name":"IXyzabcChain","href":"Hi.Numerical.Xyzabc.IXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.IXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.IXyzabcChain","type":"Interface"},{"name":"ReflectedXyzabcChain","href":"Hi.Numerical.Xyzabc.ReflectedXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.ReflectedXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.ReflectedXyzabcChain","type":"Class"},{"name":"XyzabcSolver","href":"Hi.Numerical.Xyzabc.XyzabcSolver.html","topicHref":"Hi.Numerical.Xyzabc.XyzabcSolver.html","topicUid":"Hi.Numerical.Xyzabc.XyzabcSolver","type":"Class"},{"name":"XyzabcUtil","href":"Hi.Numerical.Xyzabc.XyzabcUtil.html","topicHref":"Hi.Numerical.Xyzabc.XyzabcUtil.html","topicUid":"Hi.Numerical.Xyzabc.XyzabcUtil","type":"Class"}]},{"name":"Hi.PanelModels","href":"Hi.PanelModels.html","topicHref":"Hi.PanelModels.html","topicUid":"Hi.PanelModels","type":"Namespace","items":[{"name":"HiKey","href":"Hi.PanelModels.HiKey.html","topicHref":"Hi.PanelModels.HiKey.html","topicUid":"Hi.PanelModels.HiKey","type":"Enum"},{"name":"HiKeyEvent","href":"Hi.PanelModels.HiKeyEvent.html","topicHref":"Hi.PanelModels.HiKeyEvent.html","topicUid":"Hi.PanelModels.HiKeyEvent","type":"Class"},{"name":"HiModifierKeys","href":"Hi.PanelModels.HiModifierKeys.html","topicHref":"Hi.PanelModels.HiModifierKeys.html","topicUid":"Hi.PanelModels.HiModifierKeys","type":"Enum"},{"name":"HiMouseButton","href":"Hi.PanelModels.HiMouseButton.html","topicHref":"Hi.PanelModels.HiMouseButton.html","topicUid":"Hi.PanelModels.HiMouseButton","type":"Enum"},{"name":"HiMouseButtonEvent","href":"Hi.PanelModels.HiMouseButtonEvent.html","topicHref":"Hi.PanelModels.HiMouseButtonEvent.html","topicUid":"Hi.PanelModels.HiMouseButtonEvent","type":"Class"},{"name":"HiMouseButtonMask","href":"Hi.PanelModels.HiMouseButtonMask.html","topicHref":"Hi.PanelModels.HiMouseButtonMask.html","topicUid":"Hi.PanelModels.HiMouseButtonMask","type":"Enum"},{"name":"HiMouseButtonMaskUtil","href":"Hi.PanelModels.HiMouseButtonMaskUtil.html","topicHref":"Hi.PanelModels.HiMouseButtonMaskUtil.html","topicUid":"Hi.PanelModels.HiMouseButtonMaskUtil","type":"Class"},{"name":"HiMouseMoveEvent","href":"Hi.PanelModels.HiMouseMoveEvent.html","topicHref":"Hi.PanelModels.HiMouseMoveEvent.html","topicUid":"Hi.PanelModels.HiMouseMoveEvent","type":"Class"},{"name":"HiMouseWheelEvent","href":"Hi.PanelModels.HiMouseWheelEvent.html","topicHref":"Hi.PanelModels.HiMouseWheelEvent.html","topicUid":"Hi.PanelModels.HiMouseWheelEvent","type":"Class"},{"name":"PanelModel","href":"Hi.PanelModels.PanelModel.html","topicHref":"Hi.PanelModels.PanelModel.html","topicUid":"Hi.PanelModels.PanelModel","type":"Class"}]},{"name":"Hi.Parallels","href":"Hi.Parallels.html","topicHref":"Hi.Parallels.html","topicUid":"Hi.Parallels","type":"Namespace","items":[{"name":"CurrentThreadTaskScheduler","href":"Hi.Parallels.CurrentThreadTaskScheduler.html","topicHref":"Hi.Parallels.CurrentThreadTaskScheduler.html","topicUid":"Hi.Parallels.CurrentThreadTaskScheduler","type":"Class"},{"name":"DistributedQueueTaskScheduler","href":"Hi.Parallels.DistributedQueueTaskScheduler.html","topicHref":"Hi.Parallels.DistributedQueueTaskScheduler.html","topicUid":"Hi.Parallels.DistributedQueueTaskScheduler","type":"Class"},{"name":"DistributedQueueTaskStarter","href":"Hi.Parallels.DistributedQueueTaskStarter.html","topicHref":"Hi.Parallels.DistributedQueueTaskStarter.html","topicUid":"Hi.Parallels.DistributedQueueTaskStarter","type":"Class"},{"name":"LockUtil","href":"Hi.Parallels.LockUtil.html","topicHref":"Hi.Parallels.LockUtil.html","topicUid":"Hi.Parallels.LockUtil","type":"Class"},{"name":"PriorityTaskScheduler","href":"Hi.Parallels.PriorityTaskScheduler.html","topicHref":"Hi.Parallels.PriorityTaskScheduler.html","topicUid":"Hi.Parallels.PriorityTaskScheduler","type":"Class"},{"name":"QueueTaskScheduler","href":"Hi.Parallels.QueueTaskScheduler.html","topicHref":"Hi.Parallels.QueueTaskScheduler.html","topicUid":"Hi.Parallels.QueueTaskScheduler","type":"Class"},{"name":"ReaderWriterLockUtil","href":"Hi.Parallels.ReaderWriterLockUtil.html","topicHref":"Hi.Parallels.ReaderWriterLockUtil.html","topicUid":"Hi.Parallels.ReaderWriterLockUtil","type":"Class"},{"name":"SemaphoreUtil","href":"Hi.Parallels.SemaphoreUtil.html","topicHref":"Hi.Parallels.SemaphoreUtil.html","topicUid":"Hi.Parallels.SemaphoreUtil","type":"Class"},{"name":"ThreadSafeSet","href":"Hi.Parallels.ThreadSafeSet-1.html","topicHref":"Hi.Parallels.ThreadSafeSet-1.html","topicUid":"Hi.Parallels.ThreadSafeSet`1","type":"Class"}]},{"name":"Hi.Physics","href":"Hi.Physics.html","topicHref":"Hi.Physics.html","topicUid":"Hi.Physics","type":"Namespace","items":[{"name":"AmpPhase","href":"Hi.Physics.AmpPhase.html","topicHref":"Hi.Physics.AmpPhase.html","topicUid":"Hi.Physics.AmpPhase","type":"Class"},{"name":"CoatingMaterial","href":"Hi.Physics.CoatingMaterial.html","topicHref":"Hi.Physics.CoatingMaterial.html","topicUid":"Hi.Physics.CoatingMaterial","type":"Class"},{"name":"CoolantHeatCondition","href":"Hi.Physics.CoolantHeatCondition.html","topicHref":"Hi.Physics.CoolantHeatCondition.html","topicUid":"Hi.Physics.CoolantHeatCondition","type":"Class"},{"name":"CutterMaterial","href":"Hi.Physics.CutterMaterial.html","topicHref":"Hi.Physics.CutterMaterial.html","topicUid":"Hi.Physics.CutterMaterial","type":"Class"},{"name":"IGetThermalLayerList","href":"Hi.Physics.IGetThermalLayerList.html","topicHref":"Hi.Physics.IGetThermalLayerList.html","topicUid":"Hi.Physics.IGetThermalLayerList","type":"Interface"},{"name":"IStructureMaterial","href":"Hi.Physics.IStructureMaterial.html","topicHref":"Hi.Physics.IStructureMaterial.html","topicUid":"Hi.Physics.IStructureMaterial","type":"Interface"},{"name":"ISuccessivePhysicsBriefAccessor","href":"Hi.Physics.ISuccessivePhysicsBriefAccessor.html","topicHref":"Hi.Physics.ISuccessivePhysicsBriefAccessor.html","topicUid":"Hi.Physics.ISuccessivePhysicsBriefAccessor","type":"Interface"},{"name":"ISurfaceMaterial","href":"Hi.Physics.ISurfaceMaterial.html","topicHref":"Hi.Physics.ISurfaceMaterial.html","topicUid":"Hi.Physics.ISurfaceMaterial","type":"Interface"},{"name":"ITimeGetter","href":"Hi.Physics.ITimeGetter.html","topicHref":"Hi.Physics.ITimeGetter.html","topicUid":"Hi.Physics.ITimeGetter","type":"Interface"},{"name":"MillingTemperatureUtil","href":"Hi.Physics.MillingTemperatureUtil.html","topicHref":"Hi.Physics.MillingTemperatureUtil.html","topicUid":"Hi.Physics.MillingTemperatureUtil","type":"Class"},{"name":"SeqPhysicsBrief","href":"Hi.Physics.SeqPhysicsBrief.html","topicHref":"Hi.Physics.SeqPhysicsBrief.html","topicUid":"Hi.Physics.SeqPhysicsBrief","type":"Class"},{"name":"StructureMaterial","href":"Hi.Physics.StructureMaterial.html","topicHref":"Hi.Physics.StructureMaterial.html","topicUid":"Hi.Physics.StructureMaterial","type":"Class"},{"name":"TemperatureUtil","href":"Hi.Physics.TemperatureUtil.html","topicHref":"Hi.Physics.TemperatureUtil.html","topicUid":"Hi.Physics.TemperatureUtil","type":"Class"},{"name":"TemperatureVsHardness","href":"Hi.Physics.TemperatureVsHardness.html","topicHref":"Hi.Physics.TemperatureVsHardness.html","topicUid":"Hi.Physics.TemperatureVsHardness","type":"Class"},{"name":"ThermalLayer1D","href":"Hi.Physics.ThermalLayer1D.html","topicHref":"Hi.Physics.ThermalLayer1D.html","topicUid":"Hi.Physics.ThermalLayer1D","type":"Class"},{"name":"TimeSeriesUtil","href":"Hi.Physics.TimeSeriesUtil.html","topicHref":"Hi.Physics.TimeSeriesUtil.html","topicUid":"Hi.Physics.TimeSeriesUtil","type":"Class"},{"name":"TimeValue","href":"Hi.Physics.TimeValue.html","topicHref":"Hi.Physics.TimeValue.html","topicUid":"Hi.Physics.TimeValue","type":"Class"},{"name":"WorkpieceMaterial","href":"Hi.Physics.WorkpieceMaterial.html","topicHref":"Hi.Physics.WorkpieceMaterial.html","topicUid":"Hi.Physics.WorkpieceMaterial","type":"Class"}]},{"name":"Hi.SessionCommands","href":"Hi.SessionCommands.html","topicHref":"Hi.SessionCommands.html","topicUid":"Hi.SessionCommands","type":"Namespace","items":[{"name":"EnablingWrapper","href":"Hi.SessionCommands.EnablingWrapper.html","topicHref":"Hi.SessionCommands.EnablingWrapper.html","topicUid":"Hi.SessionCommands.EnablingWrapper","type":"Class"},{"name":"GeomDiffCommand","href":"Hi.SessionCommands.GeomDiffCommand.html","topicHref":"Hi.SessionCommands.GeomDiffCommand.html","topicUid":"Hi.SessionCommands.GeomDiffCommand","type":"Class"},{"name":"ISessionCommand","href":"Hi.SessionCommands.ISessionCommand.html","topicHref":"Hi.SessionCommands.ISessionCommand.html","topicUid":"Hi.SessionCommands.ISessionCommand","type":"Interface"},{"name":"ITitleCommand","href":"Hi.SessionCommands.ITitleCommand.html","topicHref":"Hi.SessionCommands.ITitleCommand.html","topicUid":"Hi.SessionCommands.ITitleCommand","type":"Interface"},{"name":"Lang","href":"Hi.SessionCommands.Lang.html","topicHref":"Hi.SessionCommands.Lang.html","topicUid":"Hi.SessionCommands.Lang","type":"Class"},{"name":"ListCommand","href":"Hi.SessionCommands.ListCommand.html","topicHref":"Hi.SessionCommands.ListCommand.html","topicUid":"Hi.SessionCommands.ListCommand","type":"Class"},{"name":"MachiningMotionResolutionCommand","href":"Hi.SessionCommands.MachiningMotionResolutionCommand.html","topicHref":"Hi.SessionCommands.MachiningMotionResolutionCommand.html","topicUid":"Hi.SessionCommands.MachiningMotionResolutionCommand","type":"Class"},{"name":"NcCodeCommand","href":"Hi.SessionCommands.NcCodeCommand.html","topicHref":"Hi.SessionCommands.NcCodeCommand.html","topicUid":"Hi.SessionCommands.NcCodeCommand","type":"Class"},{"name":"NcFileCommand","href":"Hi.SessionCommands.NcFileCommand.html","topicHref":"Hi.SessionCommands.NcFileCommand.html","topicUid":"Hi.SessionCommands.NcFileCommand","type":"Class"},{"name":"NcFileListCommand","href":"Hi.SessionCommands.NcFileListCommand.html","topicHref":"Hi.SessionCommands.NcFileListCommand.html","topicUid":"Hi.SessionCommands.NcFileListCommand","type":"Class"},{"name":"NcOptOptionCommand","href":"Hi.SessionCommands.NcOptOptionCommand.html","topicHref":"Hi.SessionCommands.NcOptOptionCommand.html","topicUid":"Hi.SessionCommands.NcOptOptionCommand","type":"Class"},{"name":"OptimizeToFilesCommand","href":"Hi.SessionCommands.OptimizeToFilesCommand.html","topicHref":"Hi.SessionCommands.OptimizeToFilesCommand.html","topicUid":"Hi.SessionCommands.OptimizeToFilesCommand","type":"Class"},{"name":"PostExecutionCommand","href":"Hi.SessionCommands.PostExecutionCommand.html","topicHref":"Hi.SessionCommands.PostExecutionCommand.html","topicUid":"Hi.SessionCommands.PostExecutionCommand","type":"Class"},{"name":"PreSettingCommand","href":"Hi.SessionCommands.PreSettingCommand.html","topicHref":"Hi.SessionCommands.PreSettingCommand.html","topicUid":"Hi.SessionCommands.PreSettingCommand","type":"Class"},{"name":"RecordRuntimeGeomActionEnum","href":"Hi.SessionCommands.RecordRuntimeGeomActionEnum.html","topicHref":"Hi.SessionCommands.RecordRuntimeGeomActionEnum.html","topicUid":"Hi.SessionCommands.RecordRuntimeGeomActionEnum","type":"Enum"},{"name":"RecordRuntimeGeomCommand","href":"Hi.SessionCommands.RecordRuntimeGeomCommand.html","topicHref":"Hi.SessionCommands.RecordRuntimeGeomCommand.html","topicUid":"Hi.SessionCommands.RecordRuntimeGeomCommand","type":"Class"},{"name":"ScriptCommand","href":"Hi.SessionCommands.ScriptCommand.html","topicHref":"Hi.SessionCommands.ScriptCommand.html","topicUid":"Hi.SessionCommands.ScriptCommand","type":"Class"},{"name":"SimpleSessionCommand","href":"Hi.SessionCommands.SimpleSessionCommand.html","topicHref":"Hi.SessionCommands.SimpleSessionCommand.html","topicUid":"Hi.SessionCommands.SimpleSessionCommand","type":"Class"},{"name":"WriteRuntimeGeomToStlCommand","href":"Hi.SessionCommands.WriteRuntimeGeomToStlCommand.html","topicHref":"Hi.SessionCommands.WriteRuntimeGeomToStlCommand.html","topicUid":"Hi.SessionCommands.WriteRuntimeGeomToStlCommand","type":"Class"},{"name":"WriteShotFilesCommand","href":"Hi.SessionCommands.WriteShotFilesCommand.html","topicHref":"Hi.SessionCommands.WriteShotFilesCommand.html","topicUid":"Hi.SessionCommands.WriteShotFilesCommand","type":"Class"},{"name":"WriteStepFilesCommand","href":"Hi.SessionCommands.WriteStepFilesCommand.html","topicHref":"Hi.SessionCommands.WriteStepFilesCommand.html","topicUid":"Hi.SessionCommands.WriteStepFilesCommand","type":"Class"}]},{"name":"Hi.SessionShellUtils","href":"Hi.SessionShellUtils.html","topicHref":"Hi.SessionShellUtils.html","topicUid":"Hi.SessionShellUtils","type":"Namespace","items":[{"name":"ISessionShell","href":"Hi.SessionShellUtils.ISessionShell.html","topicHref":"Hi.SessionShellUtils.ISessionShell.html","topicUid":"Hi.SessionShellUtils.ISessionShell","type":"Interface"},{"name":"JsAceAttribute","href":"Hi.SessionShellUtils.JsAceAttribute.html","topicHref":"Hi.SessionShellUtils.JsAceAttribute.html","topicUid":"Hi.SessionShellUtils.JsAceAttribute","type":"Class"}]},{"name":"Hi.SqliteUtils","href":"Hi.SqliteUtils.html","topicHref":"Hi.SqliteUtils.html","topicUid":"Hi.SqliteUtils","type":"Namespace","items":[{"name":"SqliteIdentityRole","href":"Hi.SqliteUtils.SqliteIdentityRole.html","topicHref":"Hi.SqliteUtils.SqliteIdentityRole.html","topicUid":"Hi.SqliteUtils.SqliteIdentityRole","type":"Class"},{"name":"SqliteIdentityStorage","href":"Hi.SqliteUtils.SqliteIdentityStorage.html","topicHref":"Hi.SqliteUtils.SqliteIdentityStorage.html","topicUid":"Hi.SqliteUtils.SqliteIdentityStorage","type":"Class"},{"name":"SqliteIdentityStorage.RoleRow","href":"Hi.SqliteUtils.SqliteIdentityStorage.RoleRow.html","topicHref":"Hi.SqliteUtils.SqliteIdentityStorage.RoleRow.html","topicUid":"Hi.SqliteUtils.SqliteIdentityStorage.RoleRow","type":"Class"},{"name":"SqliteIdentityStorage.UserRow","href":"Hi.SqliteUtils.SqliteIdentityStorage.UserRow.html","topicHref":"Hi.SqliteUtils.SqliteIdentityStorage.UserRow.html","topicUid":"Hi.SqliteUtils.SqliteIdentityStorage.UserRow","type":"Class"},{"name":"SqliteIdentityUser","href":"Hi.SqliteUtils.SqliteIdentityUser.html","topicHref":"Hi.SqliteUtils.SqliteIdentityUser.html","topicUid":"Hi.SqliteUtils.SqliteIdentityUser","type":"Class"},{"name":"SqliteRoleStore","href":"Hi.SqliteUtils.SqliteRoleStore-1.html","topicHref":"Hi.SqliteUtils.SqliteRoleStore-1.html","topicUid":"Hi.SqliteUtils.SqliteRoleStore`1","type":"Class"},{"name":"SqliteStepStorage","href":"Hi.SqliteUtils.SqliteStepStorage.html","topicHref":"Hi.SqliteUtils.SqliteStepStorage.html","topicUid":"Hi.SqliteUtils.SqliteStepStorage","type":"Class"},{"name":"SqliteStepStorage.MillingStepLuggageRow","href":"Hi.SqliteUtils.SqliteStepStorage.MillingStepLuggageRow.html","topicHref":"Hi.SqliteUtils.SqliteStepStorage.MillingStepLuggageRow.html","topicUid":"Hi.SqliteUtils.SqliteStepStorage.MillingStepLuggageRow","type":"Class"},{"name":"SqliteUserStore","href":"Hi.SqliteUtils.SqliteUserStore-1.html","topicHref":"Hi.SqliteUtils.SqliteUserStore-1.html","topicUid":"Hi.SqliteUtils.SqliteUserStore`1","type":"Class"}]},{"name":"Hi.Test","href":"Hi.Test.html","topicHref":"Hi.Test.html","topicUid":"Hi.Test","type":"Namespace","items":[{"name":"TestCollision","href":"Hi.Test.TestCollision.html","topicHref":"Hi.Test.TestCollision.html","topicUid":"Hi.Test.TestCollision","type":"Class"}]},{"name":"Hi.UiExtensions","href":"Hi.UiExtensions.html","topicHref":"Hi.UiExtensions.html","topicUid":"Hi.UiExtensions","type":"Namespace","items":[{"name":"ChartBoundary","href":"Hi.UiExtensions.ChartBoundary.html","topicHref":"Hi.UiExtensions.ChartBoundary.html","topicUid":"Hi.UiExtensions.ChartBoundary","type":"Class"},{"name":"ChartBoundaryEnum","href":"Hi.UiExtensions.ChartBoundaryEnum.html","topicHref":"Hi.UiExtensions.ChartBoundaryEnum.html","topicUid":"Hi.UiExtensions.ChartBoundaryEnum","type":"Enum"},{"name":"NativeVisibility","href":"Hi.UiExtensions.NativeVisibility.html","topicHref":"Hi.UiExtensions.NativeVisibility.html","topicUid":"Hi.UiExtensions.NativeVisibility","type":"Enum"},{"name":"UiUtil","href":"Hi.UiExtensions.UiUtil.html","topicHref":"Hi.UiExtensions.UiUtil.html","topicUid":"Hi.UiExtensions.UiUtil","type":"Class"},{"name":"UiUtil.InvokeFunc","href":"Hi.UiExtensions.UiUtil.InvokeFunc.html","topicHref":"Hi.UiExtensions.UiUtil.InvokeFunc.html","topicUid":"Hi.UiExtensions.UiUtil.InvokeFunc","type":"Delegate"}]},{"name":"Hi.UniversalNc","href":"Hi.UniversalNc.html","topicHref":"Hi.UniversalNc.html","topicUid":"Hi.UniversalNc","type":"Namespace","items":[{"name":"Lang","href":"Hi.UniversalNc.Lang.html","topicHref":"Hi.UniversalNc.Lang.html","topicUid":"Hi.UniversalNc.Lang","type":"Class"}]},{"name":"Hi.Vibrations","href":"Hi.Vibrations.html","topicHref":"Hi.Vibrations.html","topicUid":"Hi.Vibrations","type":"Namespace","items":[{"name":"AngularVelocityUtil","href":"Hi.Vibrations.AngularVelocityUtil.html","topicHref":"Hi.Vibrations.AngularVelocityUtil.html","topicUid":"Hi.Vibrations.AngularVelocityUtil","type":"Class"},{"name":"ForceAccelAmpPhase","href":"Hi.Vibrations.ForceAccelAmpPhase.html","topicHref":"Hi.Vibrations.ForceAccelAmpPhase.html","topicUid":"Hi.Vibrations.ForceAccelAmpPhase","type":"Class"},{"name":"ForceAccelFourierSeries","href":"Hi.Vibrations.ForceAccelFourierSeries.html","topicHref":"Hi.Vibrations.ForceAccelFourierSeries.html","topicUid":"Hi.Vibrations.ForceAccelFourierSeries","type":"Class"},{"name":"ForceAccelShot","href":"Hi.Vibrations.ForceAccelShot.html","topicHref":"Hi.Vibrations.ForceAccelShot.html","topicUid":"Hi.Vibrations.ForceAccelShot","type":"Class"},{"name":"ForceAccelUtil","href":"Hi.Vibrations.ForceAccelUtil.html","topicHref":"Hi.Vibrations.ForceAccelUtil.html","topicUid":"Hi.Vibrations.ForceAccelUtil","type":"Class"},{"name":"IAngularVelocityOwner","href":"Hi.Vibrations.IAngularVelocityOwner.html","topicHref":"Hi.Vibrations.IAngularVelocityOwner.html","topicUid":"Hi.Vibrations.IAngularVelocityOwner","type":"Interface"},{"name":"VibrationUtil","href":"Hi.Vibrations.VibrationUtil.html","topicHref":"Hi.Vibrations.VibrationUtil.html","topicUid":"Hi.Vibrations.VibrationUtil","type":"Class"},{"name":"WAmpPhase","href":"Hi.Vibrations.WAmpPhase.html","topicHref":"Hi.Vibrations.WAmpPhase.html","topicUid":"Hi.Vibrations.WAmpPhase","type":"Class"},{"name":"WAmpPhaseXyzTransformation","href":"Hi.Vibrations.WAmpPhaseXyzTransformation.html","topicHref":"Hi.Vibrations.WAmpPhaseXyzTransformation.html","topicUid":"Hi.Vibrations.WAmpPhaseXyzTransformation","type":"Class"}]},{"name":"Hi.WinForm.Disp","href":"Hi.WinForm.Disp.html","topicHref":"Hi.WinForm.Disp.html","topicUid":"Hi.WinForm.Disp","type":"Namespace","items":[{"name":"RenderingCanvas","href":"Hi.WinForm.Disp.RenderingCanvas.html","topicHref":"Hi.WinForm.Disp.RenderingCanvas.html","topicUid":"Hi.WinForm.Disp.RenderingCanvas","type":"Class"},{"name":"RenderingForm","href":"Hi.WinForm.Disp.RenderingForm.html","topicHref":"Hi.WinForm.Disp.RenderingForm.html","topicUid":"Hi.WinForm.Disp.RenderingForm","type":"Class"}]},{"name":"Hi.WpfPlus.Disp","href":"Hi.WpfPlus.Disp.html","topicHref":"Hi.WpfPlus.Disp.html","topicUid":"Hi.WpfPlus.Disp","type":"Namespace","items":[{"name":"RenderingCanvas","href":"Hi.WpfPlus.Disp.RenderingCanvas.html","topicHref":"Hi.WpfPlus.Disp.RenderingCanvas.html","topicUid":"Hi.WpfPlus.Disp.RenderingCanvas","type":"Class"},{"name":"RenderingWindow","href":"Hi.WpfPlus.Disp.RenderingWindow.html","topicHref":"Hi.WpfPlus.Disp.RenderingWindow.html","topicUid":"Hi.WpfPlus.Disp.RenderingWindow","type":"Class"},{"name":"WpfDispUtil","href":"Hi.WpfPlus.Disp.WpfDispUtil.html","topicHref":"Hi.WpfPlus.Disp.WpfDispUtil.html","topicUid":"Hi.WpfPlus.Disp.WpfDispUtil","type":"Class"}]},{"name":"HiMachining.Milling","href":"HiMachining.Milling.html","topicHref":"HiMachining.Milling.html","topicUid":"HiMachining.Milling","type":"Namespace","items":[{"name":"ClMillingDevice","href":"HiMachining.Milling.ClMillingDevice.html","topicHref":"HiMachining.Milling.ClMillingDevice.html","topicUid":"HiMachining.Milling.ClMillingDevice","type":"Class"}]},{"name":"HiNc.Grpcs","href":"HiNc.Grpcs.html","topicHref":"HiNc.Grpcs.html","topicUid":"HiNc.Grpcs","type":"Namespace","items":[{"name":"MachiningProjectGrpcServer","href":"HiNc.Grpcs.MachiningProjectGrpcServer.html","topicHref":"HiNc.Grpcs.MachiningProjectGrpcServer.html","topicUid":"HiNc.Grpcs.MachiningProjectGrpcServer","type":"Class"}]},{"name":"numerical","href":"numerical.html","topicHref":"numerical.html","topicUid":"numerical","type":"Namespace","items":[{"name":"Empty","href":"numerical.Empty.html","topicHref":"numerical.Empty.html","topicUid":"numerical.Empty","type":"Class"},{"name":"GrpcCsvRowDictionary","href":"numerical.GrpcCsvRowDictionary.html","topicHref":"numerical.GrpcCsvRowDictionary.html","topicUid":"numerical.GrpcCsvRowDictionary","type":"Class"},{"name":"GrpcNcStep","href":"numerical.GrpcNcStep.html","topicHref":"numerical.GrpcNcStep.html","topicUid":"numerical.GrpcNcStep","type":"Class"},{"name":"NumericalReflection","href":"numerical.NumericalReflection.html","topicHref":"numerical.NumericalReflection.html","topicUid":"numerical.NumericalReflection","type":"Class"},{"name":"NumericalService","href":"numerical.NumericalService.html","topicHref":"numerical.NumericalService.html","topicUid":"numerical.NumericalService","type":"Class"},{"name":"NumericalService.NumericalServiceBase","href":"numerical.NumericalService.NumericalServiceBase.html","topicHref":"numerical.NumericalService.NumericalServiceBase.html","topicUid":"numerical.NumericalService.NumericalServiceBase","type":"Class"},{"name":"NumericalService.NumericalServiceClient","href":"numerical.NumericalService.NumericalServiceClient.html","topicHref":"numerical.NumericalService.NumericalServiceClient.html","topicUid":"numerical.NumericalService.NumericalServiceClient","type":"Class"},{"name":"UniversalNcReflection","href":"numerical.UniversalNcReflection.html","topicHref":"numerical.UniversalNcReflection.html","topicUid":"numerical.UniversalNcReflection","type":"Class"},{"name":"UniversalNcService","href":"numerical.UniversalNcService.html","topicHref":"numerical.UniversalNcService.html","topicUid":"numerical.UniversalNcService","type":"Class"},{"name":"UniversalNcService.UniversalNcServiceBase","href":"numerical.UniversalNcService.UniversalNcServiceBase.html","topicHref":"numerical.UniversalNcService.UniversalNcServiceBase.html","topicUid":"numerical.UniversalNcService.UniversalNcServiceBase","type":"Class"},{"name":"UniversalNcService.UniversalNcServiceClient","href":"numerical.UniversalNcService.UniversalNcServiceClient.html","topicHref":"numerical.UniversalNcService.UniversalNcServiceClient.html","topicUid":"numerical.UniversalNcService.UniversalNcServiceClient","type":"Class"}]}],"memberLayout":"SamePage"} diff --git a/App/wwwroot/HiAPI-docsite/fundamentals/common/xml-io.html b/App/wwwroot/HiAPI-docsite/fundamentals/common/xml-io.html index 6fd5a6a1..e02a45ff 100644 --- a/App/wwwroot/HiAPI-docsite/fundamentals/common/xml-io.html +++ b/App/wwwroot/HiAPI-docsite/fundamentals/common/xml-io.html @@ -107,7 +107,7 @@
    static BallApt()
     {
         // Register to the <see cref="XFactory.Default"/>.
    -    XFactory.Regs.Add(XName, (xml,baseDirectory, relFile, progress, res) => new BallApt(xml));
    +    XFactory.Generators.Add(XName, (xml,baseDirectory, relFile, progress, res) => new BallApt(xml));
     }
     

    IProgress Threading

    The IProgress<object> parameter is threaded through the entire deserialization chain. When a class constructor calls XFactory to deserialize child objects, it passes the same progress instance:

    diff --git a/App/wwwroot/HiAPI-docsite/index.json b/App/wwwroot/HiAPI-docsite/index.json index 0906a6f9..d4f55881 100644 --- a/App/wwwroot/HiAPI-docsite/index.json +++ b/App/wwwroot/HiAPI-docsite/index.json @@ -387,7 +387,7 @@ "api/Hi.Common.Collections.LazyLinkedList-1.html": { "href": "api/Hi.Common.Collections.LazyLinkedList-1.html", "title": "Class LazyLinkedList | HiAPI-C# 2025", - "summary": "Class LazyLinkedList Namespace Hi.Common.Collections Assembly HiGeom.dll A singly-growable linked list that can lazily materialize nodes from an IEnumerable source. Without a source it behaves like a regular append-only linked list. With a source, nodes are pulled on demand when Next is accessed on the tail, or when First is accessed on an empty list. public class LazyLinkedList : IEnumerable, IEnumerable, IDisposable Type Parameters T Inheritance object LazyLinkedList Implements IEnumerable IEnumerable IDisposable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) StringUtil.ToDotSplitedString(IEnumerable) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples // Lazy: nodes materialize as you walk .Next using var list = new LazyLinkedList(File.ReadLines(path)); var node = list.First; // materializes line 0 var next = node.Next; // materializes line 1 // Manual: just like a regular linked list var list2 = new LazyLinkedList(); list2.AddLast(1); list2.AddLast(2); Constructors LazyLinkedList() Creates an empty list (no lazy source). public LazyLinkedList() LazyLinkedList(IEnumerable) Creates a list backed by a lazy source. Nodes are materialized on demand via Next or First. public LazyLinkedList(IEnumerable source) Parameters source IEnumerable Properties Count Number of nodes currently materialized in the list. public int Count { get; } Property Value int ExhaustedLast Forces full materialization of the lazy source and returns the last node. Walks the source to completion (no-op if already exhausted), then returns Last. Use when callers need the definitive tail at this point in time (e.g. as a stable predecessor before AppendSource(IEnumerable)). public LazyLinkedListNode ExhaustedLast { get; } Property Value LazyLinkedListNode First Gets the first node, materializing from source if the list is empty. public LazyLinkedListNode First { get; } Property Value LazyLinkedListNode IsExhausted Whether all items from the source have been materialized (or no source was provided). public bool IsExhausted { get; } Property Value bool Last Gets the last materialized node in the list. public LazyLinkedListNode Last { get; } Property Value LazyLinkedListNode Methods AddLast(T) Appends a new node with the specified value to the end of the list. public LazyLinkedListNode AddLast(T value) Parameters value T The value to add. Returns LazyLinkedListNode The newly created node. AppendSource(IEnumerable) Appends a new lazy source after the current source. The existing source's remaining items (if any) are drained first, then the new source is yielded. Re-opens the list for further on-demand materialization, so calling Next on the prior tail materializes the next item and links Previous across the boundary. public void AppendSource(IEnumerable src) Parameters src IEnumerable The new source to append. Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() GetEnumerator() Returns an enumerator that iterates through the collection. public IEnumerator GetEnumerator() Returns IEnumerator An enumerator that can be used to iterate through the collection. PrependSource(IEnumerable) Prepends a new source ahead of the current source's remaining items. On the next on-demand materialization (triggered by Next on the present tail or First on an empty list), src is yielded first; once exhausted, the previous source's untouched tail resumes. The materialized prefix of the list — including the present tail — is unaffected, so this is the natural way to splice extra items in immediately after the current tail (for example, inlining an M98 subprogram's blocks after the host node so the rest of the pipeline picks them up via ordinary walkNode.Next traversal). public void PrependSource(IEnumerable src) Parameters src IEnumerable The source to insert ahead of the remaining items. Remarks Constraint: the caller must treat the present tail as the splice point. There is no way to prepend “after some interior node” — the prepended items are queued ahead of whatever the current source would have produced next. Use this when the splice point coincides with the tail at the moment of the call (which is how SoftNcRunner's pipeline drives node-by-node lazy materialization in lock-step with syntax/semantic processing)." + "summary": "Class LazyLinkedList Namespace Hi.Common.Collections Assembly HiGeom.dll A singly-growable linked list that can lazily materialize nodes from an IEnumerable source. Without a source it behaves like a regular append-only linked list. With a source, nodes are pulled on demand when Next is accessed on the tail, or when First is accessed on an empty list. public class LazyLinkedList : IEnumerable, IEnumerable, IDisposable Type Parameters T Inheritance object LazyLinkedList Implements IEnumerable IEnumerable IDisposable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) StringUtil.ToDotSplitedString(IEnumerable) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples // Lazy: nodes materialize as you walk .Next using var list = new LazyLinkedList(File.ReadLines(path)); var node = list.First; // materializes line 0 var next = node.Next; // materializes line 1 // Manual: just like a regular linked list var list2 = new LazyLinkedList(); list2.AddLast(1); list2.AddLast(2); Constructors LazyLinkedList() Creates an empty list (no lazy source). public LazyLinkedList() LazyLinkedList(IEnumerable) Creates a list backed by a lazy source. Nodes are materialized on demand via Next or First. public LazyLinkedList(IEnumerable source) Parameters source IEnumerable Properties Count Number of nodes currently materialized in the list. public int Count { get; } Property Value int ExhaustedLast Forces full materialization of the lazy source and returns the last node. Walks the source to completion (no-op if already exhausted), then returns Last. Use when callers need the definitive tail at this point in time (e.g. as a stable predecessor before AppendSource(IEnumerable)). public LazyLinkedListNode ExhaustedLast { get; } Property Value LazyLinkedListNode First Gets the first node, materializing from source if the list is empty. public LazyLinkedListNode First { get; } Property Value LazyLinkedListNode IsExhausted Whether all items from the source have been materialized (or no source was provided). public bool IsExhausted { get; } Property Value bool Last Gets the last materialized node in the list. public LazyLinkedListNode Last { get; } Property Value LazyLinkedListNode Methods AddLast(T) Appends a new node with the specified value to the end of the list. public LazyLinkedListNode AddLast(T value) Parameters value T The value to add. Returns LazyLinkedListNode The newly created node. AppendSource(IEnumerable) Appends a new lazy source after the current source. The existing source's remaining items (if any) are drained first, then the new source is yielded. Re-opens the list for further on-demand materialization, so calling Next on the prior tail materializes the next item and links Previous across the boundary. public void AppendSource(IEnumerable src) Parameters src IEnumerable The new source to append. Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() GetEnumerator() Returns an enumerator that iterates through the collection. public IEnumerator GetEnumerator() Returns IEnumerator An enumerator that can be used to iterate through the collection. PrependSource(IEnumerable) Prepends a new source ahead of the current source's remaining items. On the next on-demand materialization (triggered by Next on the present tail or First on an empty list), src is yielded first; once exhausted, the previous source's untouched tail resumes. The materialized prefix of the list — including the present tail — is unaffected, so this is the natural way to splice extra items in immediately after the current tail (for example, inlining an M98 subprogram's blocks after the host node so the rest of the pipeline picks them up via ordinary walkNode.Next traversal). public void PrependSource(IEnumerable src) Parameters src IEnumerable The source to insert ahead of the remaining items. Remarks Constraint: the caller must treat the present tail as the splice point. There is no way to prepend “after some interior node” — the prepended items are queued ahead of whatever the current source would have produced next. Use this when the splice point coincides with the tail at the moment of the call (which is how SoftNcRunner's pipeline drives node-by-node lazy materialization in lock-step with syntax/semantic processing). ReplaceSource(IEnumerable) Replaces the current source's remaining items with src. Discards anything the old source had queued (it is disposed); the next on-demand materialization (triggered by Next on the present tail or First on an empty list) yields from src only. Already-materialized nodes — including the present tail — are unaffected, so this is the natural way to redirect future execution from the current tail onwards (for example, a GOTO that re-segments the file from the target N{seq} line: the GOTO host block stays materialized as the predecessor, and the post-target re-segmentation becomes the new source while the original between-here- and-EOF source is dropped). public void ReplaceSource(IEnumerable src) Parameters src IEnumerable The new source. Yielded from on the next materialization. Remarks Constraint: same as PrependSource(IEnumerable) — the present tail is the splice point. Differs from PrependSource(IEnumerable) in that the old source's untouched tail is NOT preserved after src runs out; ReplaceSource(IEnumerable) drops it. Use PrependSource(IEnumerable) for inline expansion (M98 / G65) where the caller's tail must resume after the inlined body; use ReplaceSource(IEnumerable) for control-flow redirection (GOTO, M99 P{seq}) where the original tail is no longer reachable." }, "api/Hi.Common.Collections.LazyLinkedListNode-1.html": { "href": "api/Hi.Common.Collections.LazyLinkedListNode-1.html", @@ -1004,10 +1004,10 @@ "title": "Delegate SetFileDelegate | HiAPI-C# 2025", "summary": "Delegate SetFileDelegate Namespace Hi.Common.XmlUtils Assembly HiGeom.dll Delegate for setting the file path during XML operations. public delegate void SetFileDelegate(string file) Parameters file string The file path to set Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object)" }, - "api/Hi.Common.XmlUtils.XFactory.GenByXElementDelegate.html": { - "href": "api/Hi.Common.XmlUtils.XFactory.GenByXElementDelegate.html", - "title": "Delegate XFactory.GenByXElementDelegate | HiAPI-C# 2025", - "summary": "Delegate XFactory.GenByXElementDelegate Namespace Hi.Common.XmlUtils Assembly HiGeom.dll Delegate for generating objects from XML elements with relative file path. public delegate object XFactory.GenByXElementDelegate(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res) Parameters src XElement The source XML element baseDirectory string The base directory for resolving paths relFile string The relative file path progress IProgress Progress reporter for the XML parsing chain res object[] Additional parameters for generation Returns object The generated object Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks Note that the design pattern of seperating BaseDirectory and RelativePath is for easy data package moving. The pattern assume the BaseDirectory can be changed if all the content in the BaseDirectory is changed to the destinate directory." + "api/Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.html": { + "href": "api/Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.html", + "title": "Delegate XFactory.XGeneratorDelegate | HiAPI-C# 2025", + "summary": "Delegate XFactory.XGeneratorDelegate Namespace Hi.Common.XmlUtils Assembly HiGeom.dll Delegate for generating objects from XML elements with relative file path. public delegate object XFactory.XGeneratorDelegate(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res) Parameters src XElement The source XML element baseDirectory string The base directory for resolving paths relFile string The relative file path progress IProgress Progress reporter for the XML parsing chain res object[] Additional parameters for generation Returns object The generated object Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks Note that the design pattern of seperating BaseDirectory and RelativePath is for easy data package moving. The pattern assume the BaseDirectory can be changed if all the content in the BaseDirectory is changed to the destinate directory." }, "api/Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html": { "href": "api/Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html", @@ -1017,7 +1017,7 @@ "api/Hi.Common.XmlUtils.XFactory.html": { "href": "api/Hi.Common.XmlUtils.XFactory.html", "title": "Class XFactory | HiAPI-C# 2025", - "summary": "Class XFactory Namespace Hi.Common.XmlUtils Assembly HiGeom.dll Factory class for generating objects from XML elements using registered generator functions. public static class XFactory Inheritance object XFactory Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks Generator functions must be added to Regs to enable the factory to create objects from XML. Properties Regs Gets or sets the dictionary mapping XML element names to generator functions with relative file path. public static Dictionary Regs { get; set; } Property Value Dictionary Methods GenByChild(XElement, string, IProgress, bool, object[]) Generates an object of type T from the first child element of the provided XML element. This overload discards the relative file path output. public static T GenByChild(XElement src, string baseDirectory, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters src XElement baseDirectory string progress IProgress enableRebase bool res object[] Returns T Type Parameters T GenByChild(XElement, string, out string, IProgress, bool, object[]) Generates an object of type T from the first child element of the provided XML element. public static T GenByChild(XElement src, string baseDirectory, out string relFile, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters src XElement The parent XML element containing the child to process baseDirectory string The base directory for resolving paths relFile string Output parameter that receives the relative file path if src is a file reference, or null otherwise progress IProgress Progress reporter for the XML parsing chain enableRebase bool Whether to rebase the directory to the file's location res object[] Additional parameters for generation Returns T The generated object of type T, or null if src is null Type Parameters T The type of object to generate GenByFile(string, string, IProgress, bool, object[]) Generates an object of type T from an XML file. public static T GenByFile(string baseDirectory, string relFile, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters baseDirectory string The base directory for resolving paths relFile string The relative file path to the XML file progress IProgress Progress reporter for the XML parsing chain enableRebase bool Whether to rebase the directory to the file's location res object[] Additional parameters for generation Returns T The generated object of type T, or null if relFile is null Type Parameters T The type of object to generate GenFileRefSourceByChild(XElement, string, IProgress, bool, object[]) Generates a FileRefSource from the first child element of the provided XML element. public static FileRefSource GenFileRefSourceByChild(XElement src, string baseDirectory, IProgress progress, bool enableRebase = true, object[] res = null) where T : class, IMakeXmlSource Parameters src XElement baseDirectory string progress IProgress enableRebase bool res object[] Returns FileRefSource Type Parameters T GenFileRefSourceByFile(string, string, IProgress, bool, object[]) Generates a FileRefSource from an XML file. public static FileRefSource GenFileRefSourceByFile(string baseDirectory, string relFile, IProgress progress, bool enableRebase = true, object[] res = null) where T : class, IMakeXmlSource Parameters baseDirectory string relFile string progress IProgress enableRebase bool res object[] Returns FileRefSource Type Parameters T GenFileRefSource(XElement, string, IProgress, bool, object[]) Generates a FileRefSource from an XML element. public static FileRefSource GenFileRefSource(XElement src, string baseDirectory, IProgress progress, bool enableRebase = true, object[] res = null) where T : class, IMakeXmlSource Parameters src XElement baseDirectory string progress IProgress enableRebase bool res object[] Returns FileRefSource Type Parameters T Gen(XElement, string, IProgress, bool, object[]) Generates an object of type T from an XML element. This overload discards the relative file path output. public static T Gen(XElement src, string baseDirectory, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters src XElement The source XML element baseDirectory string The base directory for resolving paths progress IProgress Progress reporter for the XML parsing chain enableRebase bool Whether to rebase the directory to the file's location res object[] Additional parameters for generation Returns T The generated object of type T Type Parameters T The type of object to generate Gen(XElement, string, out string, IProgress, bool, object[]) Generates an object of type T from an XML element. public static T Gen(XElement src, string baseDirectory, out string relFile, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters src XElement The source XML element baseDirectory string The base directory for resolving paths relFile string Output parameter that receives the relative file path if src is a file reference, or null otherwise progress IProgress Progress reporter for the XML parsing chain enableRebase bool Whether to rebase the directory to the file's location res object[] Additional parameters for generation Returns T The generated object of type T Type Parameters T The type of object to generate" + "summary": "Class XFactory Namespace Hi.Common.XmlUtils Assembly HiGeom.dll Factory class for generating objects from XML elements using registered generator functions. public static class XFactory Inheritance object XFactory Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks Generator functions must be added to Generators to enable the factory to create objects from XML. Properties Generators Gets or sets the dictionary mapping XML element names to generator functions with relative file path. public static Dictionary Generators { get; set; } Property Value Dictionary Methods GenByChild(XElement, string, IProgress, bool, object[]) Generates an object of type T from the first child element of the provided XML element. This overload discards the relative file path output. public static T GenByChild(XElement src, string baseDirectory, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters src XElement baseDirectory string progress IProgress enableRebase bool res object[] Returns T Type Parameters T GenByChild(XElement, string, out string, IProgress, bool, object[]) Generates an object of type T from the first child element of the provided XML element. public static T GenByChild(XElement src, string baseDirectory, out string relFile, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters src XElement The parent XML element containing the child to process baseDirectory string The base directory for resolving paths relFile string Output parameter that receives the relative file path if src is a file reference, or null otherwise progress IProgress Progress reporter for the XML parsing chain enableRebase bool Whether to rebase the directory to the file's location res object[] Additional parameters for generation Returns T The generated object of type T, or null if src is null Type Parameters T The type of object to generate GenByFile(string, string, IProgress, bool, object[]) Generates an object of type T from an XML file. public static T GenByFile(string baseDirectory, string relFile, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters baseDirectory string The base directory for resolving paths relFile string The relative file path to the XML file progress IProgress Progress reporter for the XML parsing chain enableRebase bool Whether to rebase the directory to the file's location res object[] Additional parameters for generation Returns T The generated object of type T, or null if relFile is null Type Parameters T The type of object to generate GenFileRefSourceByChild(XElement, string, IProgress, bool, object[]) Generates a FileRefSource from the first child element of the provided XML element. public static FileRefSource GenFileRefSourceByChild(XElement src, string baseDirectory, IProgress progress, bool enableRebase = true, object[] res = null) where T : class, IMakeXmlSource Parameters src XElement baseDirectory string progress IProgress enableRebase bool res object[] Returns FileRefSource Type Parameters T GenFileRefSourceByFile(string, string, IProgress, bool, object[]) Generates a FileRefSource from an XML file. public static FileRefSource GenFileRefSourceByFile(string baseDirectory, string relFile, IProgress progress, bool enableRebase = true, object[] res = null) where T : class, IMakeXmlSource Parameters baseDirectory string relFile string progress IProgress enableRebase bool res object[] Returns FileRefSource Type Parameters T GenFileRefSource(XElement, string, IProgress, bool, object[]) Generates a FileRefSource from an XML element. public static FileRefSource GenFileRefSource(XElement src, string baseDirectory, IProgress progress, bool enableRebase = true, object[] res = null) where T : class, IMakeXmlSource Parameters src XElement baseDirectory string progress IProgress enableRebase bool res object[] Returns FileRefSource Type Parameters T Gen(XElement, string, IProgress, bool, object[]) Generates an object of type T from an XML element. This overload discards the relative file path output. public static T Gen(XElement src, string baseDirectory, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters src XElement The source XML element baseDirectory string The base directory for resolving paths progress IProgress Progress reporter for the XML parsing chain enableRebase bool Whether to rebase the directory to the file's location res object[] Additional parameters for generation Returns T The generated object of type T Type Parameters T The type of object to generate Gen(XElement, string, out string, IProgress, bool, object[]) Generates an object of type T from an XML element. public static T Gen(XElement src, string baseDirectory, out string relFile, IProgress progress, bool enableRebase = true, object[] res = null) where T : class Parameters src XElement The source XML element baseDirectory string The base directory for resolving paths relFile string Output parameter that receives the relative file path if src is a file reference, or null otherwise progress IProgress Progress reporter for the XML parsing chain enableRebase bool Whether to rebase the directory to the file's location res object[] Additional parameters for generation Returns T The generated object of type T Type Parameters T The type of object to generate" }, "api/Hi.Common.XmlUtils.XmlUtil.html": { "href": "api/Hi.Common.XmlUtils.XmlUtil.html", @@ -1027,7 +1027,7 @@ "api/Hi.Common.XmlUtils.html": { "href": "api/Hi.Common.XmlUtils.html", "title": "Namespace Hi.Common.XmlUtils | HiAPI-C# 2025", - "summary": "Namespace Hi.Common.XmlUtils Classes FileRefSource A class that combines an XML-serializable data object with its source file path. ProjectApiVersion Carries the API version read from a project file's XML attribute through the XFactory deserialization pipeline via the object[] res parameter. Consumers retrieve it with res?.OfType().FirstOrDefault(). XFactory Factory class for generating objects from XML elements using registered generator functions. XmlUtil Utility for managing XML. Interfaces IMakeXmlSource Interface for objects that can be serialized to XML format. IToXElement Interface of ToXElement(). Which can be represented by a single XElement. Delegates SetFileDelegate Delegate for setting the file path during XML operations. XFactory.GenByXElementDelegate Delegate for generating objects from XML elements with relative file path. XFactory.XmlExceptionDelegate Delegate for handling XML exceptions during generation." + "summary": "Namespace Hi.Common.XmlUtils Classes FileRefSource A class that combines an XML-serializable data object with its source file path. ProjectApiVersion Carries the API version read from a project file's XML attribute through the XFactory deserialization pipeline via the object[] res parameter. Consumers retrieve it with res?.OfType().FirstOrDefault(). XFactory Factory class for generating objects from XML elements using registered generator functions. XmlUtil Utility for managing XML. Interfaces IMakeXmlSource Interface for objects that can be serialized to XML format. IToXElement Interface of ToXElement(). Which can be represented by a single XElement. Delegates SetFileDelegate Delegate for setting the file path during XML operations. XFactory.XGeneratorDelegate Delegate for generating objects from XML elements with relative file path. XFactory.XmlExceptionDelegate Delegate for handling XML exceptions during generation." }, "api/Hi.Common.html": { "href": "api/Hi.Common.html", @@ -2112,7 +2112,7 @@ "api/Hi.MachiningProcs.SessionProgress.html": { "href": "api/Hi.MachiningProcs.SessionProgress.html", "title": "Class SessionProgress | HiAPI-C# 2025", - "summary": "Class SessionProgress Namespace Hi.MachiningProcs Assembly HiMech.dll Represents a host for managing milling messages with thread-safe operations and stable index tracking. public class SessionProgress : IProgress Inheritance object SessionProgress Implements IProgress Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) MultiTagMessageUtil.ReportError(IProgress, string, params string[]) MultiTagMessageUtil.ReportException(IProgress, Exception, params string[]) MultiTagMessageUtil.ReportInfo(IProgress, string, params string[]) MultiTagMessageUtil.ReportMessage(IProgress, string, params string[]) MultiTagMessageUtil.ReportProgress(IProgress, string, params string[]) MultiTagMessageUtil.ReportSuccess(IProgress, string, params string[]) MultiTagMessageUtil.ReportWarning(IProgress, string, params string[]) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties MessageCollection Gets or sets the thread-safe collection of milling messages. The getter is for readonly. Do not edit the collection directly. public SynList MessageCollection { get; } Property Value SynList StableIndex Gets or sets the stable index. No other data will be inserted before this index. The term stable means it is thread safe to access range from 0 to StableIndex(exclusive). public int StableIndex { get; } Property Value int Methods Add(object) Adds a new entry to the message collection. public object Add(object entry) Parameters entry object The entry to add. Returns object The added milling message. Clear() Clears all messages from the collection. public void Clear() GetFliteredList(FilterFlag, string) Gets a filtered list of session messages. public List GetFliteredList(SessionProgress.FilterFlag flags, string filterText) Parameters flags SessionProgress.FilterFlag Filtering flags that determine which message categories are included. filterText string Optional text to filter by; case-insensitive contains match. Returns List A list of messages that match the specified filters. GetSourceCommand(SessionMessage) Retrieves the source command associated with the specified machining message. public IIndexedFileLine GetSourceCommand(SessionMessage machiningMessage) Parameters machiningMessage SessionMessage The machining message to find the source command for. Returns IIndexedFileLine The source command that generated the message, or null if not found. Report(object) Reports a progress update. public void Report(object entry) Parameters entry object SetStableIndexToEnd() Sets the StableIndex to the end of the collection. public void SetStableIndexToEnd() Events CollectionCleared Event raised when the collection is cleared. public event Action CollectionCleared Event Type Action CollectionItemAdded Event raised when a new milling message is added to the collection. public event Action CollectionItemAdded Event Type Action CollectionItemChanged Event raised when a collection item is changed. public event Action CollectionItemChanged Event Type Action" + "summary": "Class SessionProgress Namespace Hi.MachiningProcs Assembly HiMech.dll Represents a host for managing milling messages with thread-safe operations and stable index tracking. public class SessionProgress : IProgress Inheritance object SessionProgress Implements IProgress Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) MultiTagMessageUtil.ReportError(IProgress, string, params string[]) MultiTagMessageUtil.ReportException(IProgress, Exception, params string[]) MultiTagMessageUtil.ReportInfo(IProgress, string, params string[]) MultiTagMessageUtil.ReportMessage(IProgress, string, params string[]) MultiTagMessageUtil.ReportProgress(IProgress, string, params string[]) MultiTagMessageUtil.ReportSuccess(IProgress, string, params string[]) MultiTagMessageUtil.ReportWarning(IProgress, string, params string[]) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SessionProgress() Initializes a new instance with default settings. public SessionProgress() Properties MessageCollection Gets or sets the thread-safe collection of milling messages. The getter is for readonly. Do not edit the collection directly. public SynList MessageCollection { get; } Property Value SynList StableIndex Gets or sets the stable index. No other data will be inserted before this index. The term stable means it is thread safe to access range from 0 to StableIndex(exclusive). public int StableIndex { get; } Property Value int Methods Add(object) Adds a new entry to the message collection. public object Add(object entry) Parameters entry object The entry to add. Returns object The added milling message. Clear() Clears all messages from the collection. public void Clear() GetFliteredList(FilterFlag, string) Gets a filtered list of session messages. public List GetFliteredList(SessionProgress.FilterFlag flags, string filterText) Parameters flags SessionProgress.FilterFlag Filtering flags that determine which message categories are included. filterText string Optional text to filter by; case-insensitive contains match. Returns List A list of messages that match the specified filters. GetSourceCommand(SessionMessage) Retrieves the source command associated with the specified machining message. public IIndexedFileLine GetSourceCommand(SessionMessage machiningMessage) Parameters machiningMessage SessionMessage The machining message to find the source command for. Returns IIndexedFileLine The source command that generated the message, or null if not found. Report(object) Reports a progress update. public void Report(object entry) Parameters entry object SetStableIndexToEnd() Sets the StableIndex to the end of the collection. public void SetStableIndexToEnd() Events CollectionCleared Event raised when the collection is cleared. public event Action CollectionCleared Event Type Action CollectionItemAdded Event raised when a new milling message is added to the collection. public event Action CollectionItemAdded Event Type Action CollectionItemChanged Event raised when a collection item is changed. public event Action CollectionItemChanged Event Type Action" }, "api/Hi.MachiningProcs.SessionShell.html": { "href": "api/Hi.MachiningProcs.SessionShell.html", @@ -3522,7 +3522,7 @@ "api/Hi.NcParsers.Dependencys.CncBrandDependency.html": { "href": "api/Hi.NcParsers.Dependencys.CncBrandDependency.html", "title": "Class CncBrandDependency | HiAPI-C# 2025", - "summary": "Class CncBrandDependency Namespace Hi.NcParsers.Dependencys Assembly HiMech.dll Explicit CNC controller brand identifier carried in NcDependencyList. Use ncDependencyList.OfType().FirstOrDefault() to retrieve the brand. public class CncBrandDependency : INcDependency, IMakeXmlSource Inheritance object CncBrandDependency Implements INcDependency IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CncBrandDependency(string) Creates a dependency with the given brand string. public CncBrandDependency(string brand) Parameters brand string Controller brand name (often one of the public const tokens on this type). CncBrandDependency(XElement) Deserializes brand from XML. public CncBrandDependency(XElement src) Parameters src XElement Root element named XName. Fields Fanuc Brand token used when the controller is Fanuc. public const string Fanuc = \"Fanuc\" Field Value string Heidenhain Brand token used when the controller is Heidenhain. public const string Heidenhain = \"Heidenhain\" Field Value string Mazak Brand token used when the controller is Mazak. public const string Mazak = \"Mazak\" Field Value string Siemens Brand token used when the controller is Siemens. public const string Siemens = \"Siemens\" Field Value string Syntec Brand token used when the controller is Syntec. public const string Syntec = \"Syntec\" Field Value string Properties Brand CNC controller brand name (e.g., “Fanuc”, “Siemens”). public string Brand { get; set; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class CncBrandDependency Namespace Hi.NcParsers.Dependencys Assembly HiMech.dll Explicit CNC controller brand identifier carried in NcDependencyList. Use ncDependencyList.OfType().FirstOrDefault() to retrieve the brand. public class CncBrandDependency : INcDependency, IMakeXmlSource Inheritance object CncBrandDependency Implements INcDependency IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CncBrandDependency(string) Creates a dependency with the given brand string. public CncBrandDependency(string brand) Parameters brand string Controller brand name (often one of the public const tokens on this type). CncBrandDependency(XElement) Deserializes brand from XML. public CncBrandDependency(XElement src) Parameters src XElement Root element named XName. Fields Fanuc Brand token used when the controller is Fanuc. public const string Fanuc = \"Fanuc\" Field Value string Heidenhain Brand token used when the controller is Heidenhain. public const string Heidenhain = \"Heidenhain\" Field Value string Mazak Brand token used when the controller is Mazak. public const string Mazak = \"Mazak\" Field Value string Siemens Brand token used when the controller is Siemens. public const string Siemens = \"Siemens\" Field Value string Syntec Brand token used when the controller is Syntec. public const string Syntec = \"Syntec\" Field Value string Properties Brand CNC controller brand name (e.g., “Fanuc”, “Siemens”). public string Brand { get; set; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.Dependencys.ControllerParameterTableBase.html": { "href": "api/Hi.NcParsers.Dependencys.ControllerParameterTableBase.html", @@ -3534,6 +3534,11 @@ "title": "Enum CutterCompensationType | HiAPI-C# 2025", "summary": "Enum CutterCompensationType Namespace Hi.NcParsers.Dependencys.Fanuc Assembly HiMech.dll Fanuc #5003: Cutter compensation startup/cancellation type. public enum CutterCompensationType Extension Methods InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) MaskUtil.GetMaskedValue(T, T, bool) MaskUtil.SetMask(ref T, T, bool) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Fields TypeA = 0 Type A: compensation vector perpendicular to the block next to startup/cancellation. TypeB = 1 Type B: compensation vector perpendicular to startup/cancellation block + intersection vector. TypeC = 2 Type C: when startup/cancellation block has no movement, shift perpendicular to the adjacent block." }, + "api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html": { + "href": "api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html", + "title": "Class FanucGotoIterationDependency | HiAPI-C# 2025", + "summary": "Class FanucGotoIterationDependency Namespace Hi.NcParsers.Dependencys.Fanuc Assembly HiMech.dll Watchdog for Fanuc Custom Macro B GOTO loops. Holds a MaxIterationsPerTarget limit (XML-persisted user config — the soft cap above which the upcoming FanucGotoSyntax stops firing and emits a warning) plus a runtime per-target hit counter (CountByTarget — not serialised, cleared at session start by RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken)). The dependency is syntax-managed: FanucGotoSyntax reads the limit, increments the counter, and decides whether to fire. There is no host Func provider — the dep is placed in Hi.NcParsers.Dependencys.Fanuc rather than Hi.NcParsers.Dependencys.SystemWired because nothing outside the syntax pipeline writes it; Reset() is a plain method call the runner invokes, not a host-wired Func. The counter key is (FileName, TargetN) where FileName is the source-level file path of the block containing the GOTO (the relative path form carried on FilePath — same form used by IndexedFileLine labels). Source-level keying means multiple inline invocations of the same subprogram pool their counts (they ARE the same source-code GOTO), while two different files with their own N100 stay isolated (they ARE different jumps). Default MaxIterationsPerTarget is 1000 — a runaway-loop guard, not a precise iteration budget. Legitimate macro loops (multi-hole drill matrices, calibration sweeps) sit well below this; truly infinite loops hit the limit fast. Projects with batch-style macros that legitimately need higher counts can raise the value in the project XML. public class FanucGotoIterationDependency : INcDependency, IMakeXmlSource Inheritance object FanucGotoIterationDependency Implements INcDependency IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FanucGotoIterationDependency() Initializes a new instance with the default limit and an empty counter. public FanucGotoIterationDependency() FanucGotoIterationDependency(XElement) Loads MaxIterationsPerTarget from XML produced by MakeXmlSource(string, string, bool); absent element falls back to DefaultMaxIterationsPerTarget. public FanucGotoIterationDependency(XElement src) Parameters src XElement Root element named XName. Fields DefaultMaxIterationsPerTarget Default for MaxIterationsPerTarget. Sized as a runaway-loop guard: legitimate Fanuc macros (drill grids, calibration sweeps) stay well below, while truly unbounded loops hit it fast. public const int DefaultMaxIterationsPerTarget = 1000 Field Value int Properties CountByTarget Per-target hit counter keyed by (FileName, TargetN). Runtime-only; not serialised. Cleared by Reset() on the session-init edge so a brand-preset runner reused across sessions does not leak counts. public Dictionary<(string FileName, int TargetN), int> CountByTarget { get; } Property Value Dictionary<(string FileName, int TargetN), int> MaxIterationsPerTarget Soft cap on consecutive fires of any single GOTO target within one source file (see CountByTarget for the keying). Above this, the consuming syntax should emit a warning and suppress the redirect on the over-limit block; subsequent blocks flow through naturally. public int MaxIterationsPerTarget { get; set; } Property Value int XName XML element name used to register this dependency with XFactory. public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reset() Clears CountByTarget; leaves MaxIterationsPerTarget untouched. public void Reset()" + }, "api/Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html": { "href": "api/Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html", "title": "Class FanucParameterTable | HiAPI-C# 2025", @@ -3542,12 +3547,12 @@ "api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html": { "href": "api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html", "title": "Class FanucPositionVariableLookup | HiAPI-C# 2025", - "summary": "Class FanucPositionVariableLookup Namespace Hi.NcParsers.Dependencys.Fanuc Assembly HiMech.dll Fanuc-style position system variables read from the previous block's runtime-state JSON sections: #5001-#5003Block-end position X/Y/Z (workpiece) → previous block's ProgramXyz. #5021-#5023Current machine position X/Y/Z → previous block's MachineCoordinateState. #5041-#5043Current absolute position X/Y/Z → previous block's ProgramXyz. Stateless. Configured on RuntimeVariableLookups rather than NcDependencyList because the read needs the block node for Previous access — there is no long-lived dependency object that owns this data. public sealed class FanucPositionVariableLookup : IRuntimeVariableLookup Inheritance object FanucPositionVariableLookup Implements IRuntimeVariableLookup Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Fields AbsoluteXyzBase Inclusive lower bound of the absolute XYZ position range (#5041). public const int AbsoluteXyzBase = 5041 Field Value int BlockEndXyzBase Inclusive lower bound of the block-end XYZ position range (#5001). public const int BlockEndXyzBase = 5001 Field Value int MachineCoordXyzBase Inclusive lower bound of the machine-coordinate XYZ position range (#5021). public const int MachineCoordXyzBase = 5021 Field Value int Methods Get(string, LazyLinkedListNode, IReadOnlyList) Returns the value of the variable identified by key in the context of node and dependencies, or null if the key is outside this lookup's range or the value is vacant. public double? Get(string key, LazyLinkedListNode node, IReadOnlyList dependencies) Parameters key string node LazyLinkedListNode dependencies IReadOnlyList Returns double?" + "summary": "Class FanucPositionVariableLookup Namespace Hi.NcParsers.Dependencys.Fanuc Assembly HiMech.dll Fanuc-style position system variables read from the previous block's runtime-state JSON sections: #5001-#5003Block-end position X/Y/Z (workpiece) → previous block's ProgramXyz. #5021-#5023Current machine position X/Y/Z → previous block's MachineCoordinateState. #5041-#5043Current absolute position X/Y/Z → previous block's ProgramXyz. Stateless. Configured on RuntimeVariableLookups rather than NcDependencyList because the read needs the block node for Previous access — there is no long-lived dependency object that owns this data. public sealed class FanucPositionVariableLookup : IRuntimeVariableLookup, IMakeXmlSource Inheritance object FanucPositionVariableLookup Implements IRuntimeVariableLookup IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FanucPositionVariableLookup() Default constructor. public FanucPositionVariableLookup() FanucPositionVariableLookup(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). Stateless — no fields to deserialise. public FanucPositionVariableLookup(XElement src) Parameters src XElement Fields AbsoluteXyzBase Inclusive lower bound of the absolute XYZ position range (#5041). public const int AbsoluteXyzBase = 5041 Field Value int BlockEndXyzBase Inclusive lower bound of the block-end XYZ position range (#5001). public const int BlockEndXyzBase = 5001 Field Value int MachineCoordXyzBase Inclusive lower bound of the machine-coordinate XYZ position range (#5021). public const int MachineCoordXyzBase = 5021 Field Value int Properties XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Get(string, LazyLinkedListNode, IReadOnlyList) Returns the value of the variable identified by key in the context of node and dependencies, or null if the key is outside this lookup's range or the value is vacant. public double? Get(string key, LazyLinkedListNode node, IReadOnlyList dependencies) Parameters key string node LazyLinkedListNode dependencies IReadOnlyList Returns double? MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html": { "href": "api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html", "title": "Class FanucToolOffsetVariableLookup | HiAPI-C# 2025", - "summary": "Class FanucToolOffsetVariableLookup Namespace Hi.NcParsers.Dependencys.Fanuc Assembly HiMech.dll Fanuc-side adapter that exposes a wrapped ToolOffsetTable as an IVariableLookup following Fanuc Memory C tool offset addressing: #2001+N → effective height of offset N (geometry − wear). The underlying ToolOffsetTable stays brand-neutral — Heidenhain / Siemens can use the same storage with different addressing by registering their own adapter alongside the table. Holds a reference to the table rather than owning data so writes through the table show up immediately in lookups via this adapter. public class FanucToolOffsetVariableLookup : INcDependency, IMakeXmlSource, IVariableLookup Inheritance object FanucToolOffsetVariableLookup Implements INcDependency IMakeXmlSource IVariableLookup Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FanucToolOffsetVariableLookup() Empty constructor for XFactory deserialisation; Table must be set explicitly. public FanucToolOffsetVariableLookup() FanucToolOffsetVariableLookup(ToolOffsetTable) Wraps the given table so it can serve Fanuc-style #2001+ reads. public FanucToolOffsetVariableLookup(ToolOffsetTable table) Parameters table ToolOffsetTable FanucToolOffsetVariableLookup(XElement) Loads from XML produced by MakeXmlSource(string, string, bool); Table is rebound by the runner after deserialisation. public FanucToolOffsetVariableLookup(XElement src) Parameters src XElement Fields ToolHeightMax Inclusive upper bound of the Fanuc tool height address range (#2200). public const int ToolHeightMax = 2200 Field Value int ToolHeightMin Inclusive lower bound of the Fanuc tool height address range (#2001). public const int ToolHeightMin = 2001 Field Value int Properties Table Underlying brand-neutral tool offset storage. public ToolOffsetTable Table { get; set; } Property Value ToolOffsetTable XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Get(string) Returns the value of the variable identified by key (e.g. \"#124\"), or null if vacant or unknown to this lookup. public double? Get(string key) Parameters key string Returns double? Remarks Routes #2001-#2200 to GetToolHeightOffset_mm(int); other keys return null so the evaluator's lookup chain falls through. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class FanucToolOffsetVariableLookup Namespace Hi.NcParsers.Dependencys.Fanuc Assembly HiMech.dll Fanuc-side adapter that exposes a wrapped ToolOffsetTable (resolved at call time from the dependency list) as an IRuntimeVariableLookup following Fanuc Memory C tool offset addressing: #2001+N → effective height of offset N (geometry − wear). The underlying ToolOffsetTable stays brand-neutral — Heidenhain / Siemens can use the same storage with different addressing by registering their own adapter alongside the table. Stateless: holds no reference of its own and resolves the table from the per-call dependencies list, so XML round-trip is trivial (an empty element). Registered on a brand preset's VariableEvaluatorSyntax.RuntimeVariableLookups, not on NcDependencyList — the wrapper owns no long-lived data, only the Fanuc-style id addressing scheme. The underlying ToolOffsetTable still lives in NcDependencyList as the data dependency. public sealed class FanucToolOffsetVariableLookup : IRuntimeVariableLookup, IMakeXmlSource Inheritance object FanucToolOffsetVariableLookup Implements IRuntimeVariableLookup IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FanucToolOffsetVariableLookup() Default constructor. public FanucToolOffsetVariableLookup() FanucToolOffsetVariableLookup(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). Stateless — no fields to deserialise. public FanucToolOffsetVariableLookup(XElement src) Parameters src XElement Fields ToolHeightMax Inclusive upper bound of the Fanuc tool height address range (#2200). public const int ToolHeightMax = 2200 Field Value int ToolHeightMin Inclusive lower bound of the Fanuc tool height address range (#2001). public const int ToolHeightMin = 2001 Field Value int Properties XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Get(string, LazyLinkedListNode, IReadOnlyList) Returns the value of the variable identified by key in the context of node and dependencies, or null if the key is outside this lookup's range or the value is vacant. public double? Get(string key, LazyLinkedListNode node, IReadOnlyList dependencies) Parameters key string node LazyLinkedListNode dependencies IReadOnlyList Returns double? Remarks Routes #2001-#2200 to GetToolHeightOffset_mm(int) on the ToolOffsetTable found in dependencies; other keys return null so the evaluator's lookup chain falls through. MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html": { "href": "api/Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html", @@ -3557,7 +3562,7 @@ "api/Hi.NcParsers.Dependencys.Fanuc.html": { "href": "api/Hi.NcParsers.Dependencys.Fanuc.html", "title": "Namespace Hi.NcParsers.Dependencys.Fanuc | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.Dependencys.Fanuc Classes FanucParameterTable Fanuc controller parameter table. Stores system parameters (single value) and axis parameters (per-axis value) following real Fanuc parameter numbering. FanucPositionVariableLookup Fanuc-style position system variables read from the previous block's runtime-state JSON sections: #5001-#5003Block-end position X/Y/Z (workpiece) → previous block's ProgramXyz. #5021-#5023Current machine position X/Y/Z → previous block's MachineCoordinateState. #5041-#5043Current absolute position X/Y/Z → previous block's ProgramXyz. Stateless. Configured on RuntimeVariableLookups rather than NcDependencyList because the read needs the block node for Previous access — there is no long-lived dependency object that owns this data. FanucToolOffsetVariableLookup Fanuc-side adapter that exposes a wrapped ToolOffsetTable as an IVariableLookup following Fanuc Memory C tool offset addressing: #2001+N → effective height of offset N (geometry − wear). The underlying ToolOffsetTable stays brand-neutral — Heidenhain / Siemens can use the same storage with different addressing by registering their own adapter alongside the table. Holds a reference to the table rather than owning data so writes through the table show up immediately in lookups via this adapter. RetainedCommonVariableTable Fanuc-style ISO controller common variable table for the retained range #500-#999. These variables survive a power cycle (in real hardware they live in NV-RAM) and are serialised into the project file. Excluded by design: Local #1-#33Call-frame scoped (Fanuc local variables); lives in the SyntaxPiece JSON dataflow, not here. Non-retained common #100-#499Cleared by program-end / power reset; lives in the SyntaxPiece JSON dataflow as well, not in this table. System #1000+Read-only or computed from runtime state; resolved by dedicated reading syntaxes against other dependencies (e.g. FanucParameterTable, tool offset / WCS tables). Vacant (Fanuc ) is represented by null: either the dictionary has no entry for the key, or the entry maps to null. Both are treated identically by GetVariable(int). Naming rationale: Fanuc official documentation calls #500-#999 \"retained common variables\" (and #100-#499 \"non-retained common variables\"). The umbrella term \"macro variable\" was avoided because it conflicts with Custom Macro B's call-frame concept (G65/G66 push a frame containing the local #1-#33); using RetainedCommonVariableTable reserves \"macro\" for the call-frame topic. Enums CutterCompensationType Fanuc #5003: Cutter compensation startup/cancellation type." + "summary": "Namespace Hi.NcParsers.Dependencys.Fanuc Classes FanucGotoIterationDependency Watchdog for Fanuc Custom Macro B GOTO loops. Holds a MaxIterationsPerTarget limit (XML-persisted user config — the soft cap above which the upcoming FanucGotoSyntax stops firing and emits a warning) plus a runtime per-target hit counter (CountByTarget — not serialised, cleared at session start by RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken)). The dependency is syntax-managed: FanucGotoSyntax reads the limit, increments the counter, and decides whether to fire. There is no host Func provider — the dep is placed in Hi.NcParsers.Dependencys.Fanuc rather than Hi.NcParsers.Dependencys.SystemWired because nothing outside the syntax pipeline writes it; Reset() is a plain method call the runner invokes, not a host-wired Func. The counter key is (FileName, TargetN) where FileName is the source-level file path of the block containing the GOTO (the relative path form carried on FilePath — same form used by IndexedFileLine labels). Source-level keying means multiple inline invocations of the same subprogram pool their counts (they ARE the same source-code GOTO), while two different files with their own N100 stay isolated (they ARE different jumps). Default MaxIterationsPerTarget is 1000 — a runaway-loop guard, not a precise iteration budget. Legitimate macro loops (multi-hole drill matrices, calibration sweeps) sit well below this; truly infinite loops hit the limit fast. Projects with batch-style macros that legitimately need higher counts can raise the value in the project XML. FanucParameterTable Fanuc controller parameter table. Stores system parameters (single value) and axis parameters (per-axis value) following real Fanuc parameter numbering. FanucPositionVariableLookup Fanuc-style position system variables read from the previous block's runtime-state JSON sections: #5001-#5003Block-end position X/Y/Z (workpiece) → previous block's ProgramXyz. #5021-#5023Current machine position X/Y/Z → previous block's MachineCoordinateState. #5041-#5043Current absolute position X/Y/Z → previous block's ProgramXyz. Stateless. Configured on RuntimeVariableLookups rather than NcDependencyList because the read needs the block node for Previous access — there is no long-lived dependency object that owns this data. FanucToolOffsetVariableLookup Fanuc-side adapter that exposes a wrapped ToolOffsetTable (resolved at call time from the dependency list) as an IRuntimeVariableLookup following Fanuc Memory C tool offset addressing: #2001+N → effective height of offset N (geometry − wear). The underlying ToolOffsetTable stays brand-neutral — Heidenhain / Siemens can use the same storage with different addressing by registering their own adapter alongside the table. Stateless: holds no reference of its own and resolves the table from the per-call dependencies list, so XML round-trip is trivial (an empty element). Registered on a brand preset's VariableEvaluatorSyntax.RuntimeVariableLookups, not on NcDependencyList — the wrapper owns no long-lived data, only the Fanuc-style id addressing scheme. The underlying ToolOffsetTable still lives in NcDependencyList as the data dependency. RetainedCommonVariableTable Fanuc-style ISO controller common variable table for the retained range #500-#999. These variables survive a power cycle (in real hardware they live in NV-RAM) and are serialised into the project file. Excluded by design: Local #1-#33Call-frame scoped (Fanuc local variables); lives in the SyntaxPiece JSON dataflow, not here. Non-retained common #100-#499Cleared by program-end / power reset; lives in the SyntaxPiece JSON dataflow as well, not in this table. System #1000+Read-only or computed from runtime state; resolved by dedicated reading syntaxes against other dependencies (e.g. FanucParameterTable, tool offset / WCS tables). Vacant (Fanuc ) is represented by null: either the dictionary has no entry for the key, or the entry maps to null. Both are treated identically by GetVariable(int). Naming rationale: Fanuc official documentation calls #500-#999 \"retained common variables\" (and #100-#499 \"non-retained common variables\"). The umbrella term \"macro variable\" was avoided because it conflicts with Custom Macro B's call-frame concept (G65/G66 push a frame containing the local #1-#33); using RetainedCommonVariableTable reserves \"macro\" for the call-frame topic. Enums CutterCompensationType Fanuc #5003: Cutter compensation startup/cancellation type." }, "api/Hi.NcParsers.Dependencys.Generic.FallbackConfig.html": { "href": "api/Hi.NcParsers.Dependencys.Generic.FallbackConfig.html", @@ -3739,6 +3744,11 @@ "title": "Namespace Hi.NcParsers.Dependencys | HiAPI-C# 2025", "summary": "Namespace Hi.NcParsers.Dependencys Classes CncBrandDependency Explicit CNC controller brand identifier carried in NcDependencyList. Use ncDependencyList.OfType().FirstOrDefault() to retrieve the brand. ControllerParameterTableBase Base class for brand-specific controller parameter tables. Provides shared data structures, XML IO, and IHomeMcConfig IMachineAxisConfig implementations. Subclasses define brand-specific parameter numbers, XML attribute names, and derived convenience properties. HeidenhainDatumTable Heidenhain datum preset and datum shift tables. CYCL DEF 247 Q339=N reads from DatumPresetTable, CYCL DEF 7 #N reads from DatumShiftTable. Each table maps an integer ID (1–20) to a Vec3d offset. On real Heidenhain controllers, preset and datum tables are separate disk files (e.g. TNC:\\table\\preset.pr, *.d) — distinct from MP-prefixed Machine Parameters (held by HeidenhainParameterTable). HiNC mirrors that separation by keeping this dependency independent of HeidenhainParameterTable. Implements IIsoCoordinateConfig by mapping the ISO/DIN G54–G59 codes to preset rows 1–6, the conventional Heidenhain compatibility mapping for ISO/DIN programs running on a Heidenhain. IsoCoordinateAddressMap Fanuc-style ISO coordinate parameter address mapping. G54–G59 → #5221+ (stride 20, three consecutive numbers per entry for X/Y/Z), G54.1 P1–P48 → #7001+ (stride 20). Shared between FanucParameterTable (which calls these “ParamId”) and SyntecParameterTable (which calls them “PrId”) because both follow the same numeric scheme. Interfaces IBlockSkipConfig Runtime state of the controller's Block Delete / Block Skip switches. Present in NcDependencyList exposes this to the runner so that blocks whose head carries / or /N (parsed by BlockSkipSyntax into BlockSkip) are skipped at semantic time. Layers are 1..9; Layer 1 corresponds to the bare / prefix. Controllers (Fanuc / Syntec / Mazak / Siemens) let each layer be toggled independently via panel switches or system parameters. When this dependency is absent from NcDependencyList, no block is skipped (safest default: simulate the full machining). The syntax still consumes the / prefix so no UnparsedText--Remaining diagnostic is produced. ICannedCycleConfig Canned cycle configuration parameters. Implemented by brand-specific parameter tables (e.g., FanucParameterTable for Fanuc #4002, SyntecParameterTable for Syntec Pr4002) and by FallbackConfig as a safety net. Siemens and Heidenhain specify peck clearance per-call (CYCLE83 parameter / CYCL DEF), so their tables do not implement this interface. The FallbackConfig provides the default value in those cases. IHomeMcConfig G28 first reference position (home machine coordinate) per axis. IIsoCoordinateConfig ISO work coordinate offset provider. Maps a G-code work coordinate id (e.g. “G54”, “G59.2”, “G54.1P1”) to a machine-coordinate offset Vec3d. Implementations include IsoCoordinateTable (brand-agnostic standalone storage), FanucParameterTable / SyntecParameterTable (parameter-table integration via real Fanuc/Syntec parameter numbers #5221+ for G54–G59 and #7001+ for G54.1 P1–P48), SiemensFrameTable (Sinumerik $P_UIFR frames), and HeidenhainDatumTable (Heidenhain preset rows). IMachineAxisConfig Machine axis configuration: which axes exist and their types. Compatible with Fanuc, Siemens, Heidenhain, Mazak, Okuma. INcDependency Marker interface for objects that participate in the NC dependency list resolved by the soft-NC runtime. IPowerResettable Marks an INcDependency that holds volatile state which must be cleared when the controller performs a power reset (power off then on). Implementers should clear only the volatile subset they own (e.g. Fanuc common volatile macro variables #100-#499), and leave persistent state untouched (e.g. #500-#999, controller parameters). Call-frame local state (Fanuc #1-#33, Heidenhain Q200-Q1199) is NOT in scope — that lives in the SyntaxPiece JSON dataflow and is bounded by call activation, not power cycle. IRapidFeedrateConfig Provides per-axis rapid traverse feedrate for motion semantics. Implemented by ControllerParameterTableBase using brand-specific parameter numbers (e.g., Fanuc #1420, Siemens MD32000, Heidenhain MP1010). IStrokeLimitConfig Per-axis stroke (travel) limits. Unit is mm for linear axes, deg for rotary axes. Implemented by ControllerParameterTableBase using brand-specific parameter numbers (e.g., Fanuc #1300/#1320, Siemens MD36100/MD36110, Heidenhain MP420/MP430). IToolOffsetConfig Tool offset configuration indexed by a single integer offset number. Applies to Fanuc (H/D numbers), Heidenhain (tool number), Mazak, Okuma, and other ISO-compatible controllers where one integer selects the offset row. For Siemens (840D/Sinumerik) where offsets are addressed by (tool number, cutting edge D number), see ISiemensToolOffsetConfig. IToolingMcConfig Machine position axes move to during tool change (M06). Enums AxisType Axis type: linear (translation), rotary (rotation), or spindle (speed/positioning dual mode)." }, + "api/Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html": { + "href": "api/Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html", + "title": "Class CallStackUtil | HiAPI-C# 2025", + "summary": "Class CallStackUtil Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Push / pop helpers for the per-block CallStack section. Both produce a fresh deep-cloned JsonObject ready to stamp onto an inlined piece (push site) or onto an M99 return block (pop site); the caller is responsible for deep-cloning again if it distributes the same stamp across multiple pieces of an L-repetition. Pairs with ModalCarrySyntax at the Logic stage: explicit push / pop writes seed the section at frame boundaries, ModalCarry copies it forward to every block in between so each block is self-contained for cache-dump readers and downstream consumers (notably M99 P{seq} reading the top frame's CallerFilePath). public static class CallStackUtil Inheritance object CallStackUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods BuildPoppedCallStack(JsonObject) Builds the post-pop CallStack section to stamp onto an M99 return block. Reads the M99 block's currently-carried stack, deep-clones it, and drops the top frame. Returns null when there was no frame to pop (M99 in main file with no caller — the runner treats this as program-end via the implicit fall-through; no stamp is needed). public static JsonObject BuildPoppedCallStack(JsonObject hostJson) Parameters hostJson JsonObject The M99 block's JSON object (post-carry, before this pop runs). Returns JsonObject BuildPushedCallStack(JsonObject, string) Builds the post-push CallStack section to stamp onto every inlined-body piece of a call. Reads the host block's current stack (defaulting to empty when absent — main-frame caller), deep-clones it, and appends a new CallFrame whose CallerFilePath records where the call originated. The returned JsonObject can be safely deep-cloned by the caller for each piece in an L-repetition. public static JsonObject BuildPushedCallStack(JsonObject hostJson, string callerFilePath) Parameters hostJson JsonObject The call-host block's JSON object. callerFilePath string Project-relative path of the host file (typically FilePath on the host piece). Returns JsonObject GetTopCallerFilePath(JsonObject) Returns the top frame's CallerFilePath from the given block's CallStack section, or null when the stack is empty or absent (block is in the main frame). public static string GetTopCallerFilePath(JsonObject hostJson) Parameters hostJson JsonObject Returns string" + }, "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.EvalResult.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.EvalResult.html", "title": "Struct EvalResult | HiAPI-C# 2025", @@ -3747,7 +3757,7 @@ "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.IRuntimeVariableLookup.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.IRuntimeVariableLookup.html", "title": "Interface IRuntimeVariableLookup | HiAPI-C# 2025", - "summary": "Interface IRuntimeVariableLookup Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Assembly HiMech.dll Stateless variable lookup that needs per-block runtime context — the current SyntaxPiece node (for Previous traceback into runtime-state sections like MachineCoordinateState / ProgramXyz) and the dependency list (so the lookup can read from sibling dependencies without holding a static reference). Distinguished from IVariableLookup: that one is for long-lived dependencies that already hold their own data (parameter tables, tool-offset wrappers, retained-variable tables) and need no block context. IRuntimeVariableLookup is for context-sensitive resolutions configured declaratively on RuntimeVariableLookups. Implementations should be brand-specific (e.g. Fanuc #5001-#5043 position reads) and return null for keys outside their range so the evaluator's chain can fall through to the next lookup. public interface IRuntimeVariableLookup Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Methods Get(string, LazyLinkedListNode, IReadOnlyList) Returns the value of the variable identified by key in the context of node and dependencies, or null if the key is outside this lookup's range or the value is vacant. double? Get(string key, LazyLinkedListNode node, IReadOnlyList dependencies) Parameters key string node LazyLinkedListNode dependencies IReadOnlyList Returns double?" + "summary": "Interface IRuntimeVariableLookup Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Assembly HiMech.dll Stateless variable lookup that needs per-block runtime context — the current SyntaxPiece node (for Previous traceback into runtime-state sections like MachineCoordinateState / ProgramXyz) and the dependency list (so the lookup can read from sibling dependencies without holding a static reference). Distinguished from IVariableLookup: that one is for long-lived dependencies that already hold their own data (parameter tables, tool-offset wrappers, retained-variable tables) and need no block context. IRuntimeVariableLookup is for context-sensitive resolutions configured declaratively on RuntimeVariableLookups. Implementations should be brand-specific (e.g. Fanuc #5001-#5043 position reads) and return null for keys outside their range so the evaluator's chain can fall through to the next lookup. Implementations are XML-serialised as part of VariableEvaluatorSyntax's round-trip: each impl exposes a static XName, registers itself with Generators, and implements MakeXmlSource(string, string, bool). Since impls are stateless, the typical body is just an empty element carrying the type name; brand identity is restored by XFactory dispatch. public interface IRuntimeVariableLookup : IMakeXmlSource Inherited Members IMakeXmlSource.MakeXmlSource(string, string, bool) Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Methods Get(string, LazyLinkedListNode, IReadOnlyList) Returns the value of the variable identified by key in the context of node and dependencies, or null if the key is outside this lookup's range or the value is vacant. double? Get(string key, LazyLinkedListNode node, IReadOnlyList dependencies) Parameters key string node LazyLinkedListNode dependencies IReadOnlyList Returns double?" }, "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.IVariableLookup.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.IVariableLookup.html", @@ -3757,17 +3767,17 @@ "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html", "title": "Class LocalVariableLookup | HiAPI-C# 2025", - "summary": "Class LocalVariableLookup Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Assembly HiMech.dll Reads Fanuc-style local macro variables (#1-#33) from Vars.Local on the current SyntaxPiece JSON, walking Previous until the entry is found. Self-gates the id range so the evaluator's RuntimeVariableLookups chain can fall through to the next lookup for out-of-range keys. Stateless and dependency-free — instances are interchangeable. public class LocalVariableLookup : IRuntimeVariableLookup Inheritance object LocalVariableLookup Implements IRuntimeVariableLookup Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Fields LocalMax Inclusive upper bound of the macro-local range (#33). public const int LocalMax = 33 Field Value int LocalMin Inclusive lower bound of the macro-local range (#1). public const int LocalMin = 1 Field Value int Methods Get(string, LazyLinkedListNode, IReadOnlyList) Returns the value of the variable identified by key in the context of node and dependencies, or null if the key is outside this lookup's range or the value is vacant. public double? Get(string key, LazyLinkedListNode node, IReadOnlyList dependencies) Parameters key string node LazyLinkedListNode dependencies IReadOnlyList Returns double?" + "summary": "Class LocalVariableLookup Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Assembly HiMech.dll Reads Fanuc-style local macro variables (#1-#33) from Vars.Local on the current SyntaxPiece JSON, falling back to the immediately previous block when they share the same MacroFrame id. Self-gates the id range so the evaluator's RuntimeVariableLookups chain can fall through to the next lookup for out-of-range keys. Two-step lookup (mirrors VolatileVariableLookup): the current block sees writes that FanucMacroCallSyntax stamped at inline time (the call-line argument bindings) and writes that FanucLocalVariableReadingSyntax applied on this block before the lookup runs; the previous block (frame-checked) supplies body-internal writes from the prior block in the same macro frame. Looking past the previous block is unnecessary because the reader carries forward block-by-block within a frame. Frame isolation via MacroFrame: a previous block whose frame id differs from the current block's is skipped — a macro body's body-internal locals are invisible to the caller after return, and the caller's main-frame locals are invisible inside the macro. M98/M198 subprogram inlining (SubProgramCallSyntax) deliberately does not stamp MacroFrame on its inlined blocks, so the callee inherits the caller's frame and sees the caller's locals — matching real Fanuc M98 semantics. Stateless and dependency-free — instances are interchangeable. public class LocalVariableLookup : IRuntimeVariableLookup, IMakeXmlSource Inheritance object LocalVariableLookup Implements IRuntimeVariableLookup IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors LocalVariableLookup() Default constructor. public LocalVariableLookup() LocalVariableLookup(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). Stateless — no fields to deserialise. public LocalVariableLookup(XElement src) Parameters src XElement Fields LocalMax Inclusive upper bound of the macro-local range (#33). public const int LocalMax = 33 Field Value int LocalMin Inclusive lower bound of the macro-local range (#1). public const int LocalMin = 1 Field Value int Properties XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Get(string, LazyLinkedListNode, IReadOnlyList) Returns the value of the variable identified by key in the context of node and dependencies, or null if the key is outside this lookup's range or the value is vacant. public double? Get(string key, LazyLinkedListNode node, IReadOnlyList dependencies) Parameters key string node LazyLinkedListNode dependencies IReadOnlyList Returns double? MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr.html", "title": "Class NcBinaryExpr | HiAPI-C# 2025", - "summary": "Class NcBinaryExpr Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Assembly HiMech.dll Binary arithmetic on two operands (+ - * / or MOD). public sealed record NcBinaryExpr : NcExpr, IEquatable, IEquatable Inheritance object NcExpr NcBinaryExpr Implements IEquatable IEquatable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors NcBinaryExpr(NcBinaryOp, NcExpr, NcExpr) Binary arithmetic on two operands (+ - * / or MOD). public NcBinaryExpr(NcBinaryOp Op, NcExpr Left, NcExpr Right) Parameters Op NcBinaryOp Left NcExpr Right NcExpr Properties Left public NcExpr Left { get; init; } Property Value NcExpr Op public NcBinaryOp Op { get; init; } Property Value NcBinaryOp Right public NcExpr Right { get; init; } Property Value NcExpr" + "summary": "Class NcBinaryExpr Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Assembly HiMech.dll Binary operation on two operands. Covers arithmetic (+ - * / / MOD), comparison (EQ NE GT GE LT LE, yielding 1.0 / 0.0), and logical bitwise (AND OR XOR, operands truncated to long). public sealed record NcBinaryExpr : NcExpr, IEquatable, IEquatable Inheritance object NcExpr NcBinaryExpr Implements IEquatable IEquatable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors NcBinaryExpr(NcBinaryOp, NcExpr, NcExpr) Binary operation on two operands. Covers arithmetic (+ - * / / MOD), comparison (EQ NE GT GE LT LE, yielding 1.0 / 0.0), and logical bitwise (AND OR XOR, operands truncated to long). public NcBinaryExpr(NcBinaryOp Op, NcExpr Left, NcExpr Right) Parameters Op NcBinaryOp Left NcExpr Right NcExpr Properties Left public NcExpr Left { get; init; } Property Value NcExpr Op public NcBinaryOp Op { get; init; } Property Value NcBinaryOp Right public NcExpr Right { get; init; } Property Value NcExpr" }, "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html", "title": "Enum NcBinaryOp | HiAPI-C# 2025", - "summary": "Enum NcBinaryOp Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Assembly HiMech.dll Binary operators allowed in Fanuc Custom Macro B value expressions. public enum NcBinaryOp Extension Methods InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) MaskUtil.GetMaskedValue(T, T, bool) MaskUtil.SetMask(ref T, T, bool) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Fields Add = 0 a + b. Divide = 3 a / b. Mod = 4 a MOD b (truncated remainder, sign of a). Multiply = 2 a * b. Subtract = 1 a - b." + "summary": "Enum NcBinaryOp Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Assembly HiMech.dll Binary operators allowed in Fanuc Custom Macro B value expressions. public enum NcBinaryOp Extension Methods InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) MaskUtil.GetMaskedValue(T, T, bool) MaskUtil.SetMask(ref T, T, bool) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Fields Add = 0 a + b. And = 11 a AND b — bitwise AND on operands truncated to long. Non-finite or out-of-range operands surface Arithmetic–MathError. Divide = 3 a / b. Eq = 5 a EQ b — equal; yields 1.0 (true) or 0.0 (false). Ge = 8 a GE b — greater than or equal; yields 1.0 or 0.0. Gt = 7 a GT b — greater than; yields 1.0 or 0.0. Le = 10 a LE b — less than or equal; yields 1.0 or 0.0. Lt = 9 a LT b — less than; yields 1.0 or 0.0. Mod = 4 a MOD b (truncated remainder, sign of a). Multiply = 2 a * b. Ne = 6 a NE b — not equal; yields 1.0 or 0.0. Or = 12 a OR b — bitwise OR on operands truncated to long. Non-finite or out-of-range operands surface Arithmetic–MathError. Subtract = 1 a - b. Xor = 13 a XOR b — bitwise XOR on operands truncated to long. Non-finite or out-of-range operands surface Arithmetic–MathError." }, "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpr.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpr.html", @@ -3777,12 +3787,12 @@ "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionEvaluator.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionEvaluator.html", "title": "Class NcExpressionEvaluator | HiAPI-C# 2025", - "summary": "Class NcExpressionEvaluator Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Assembly HiMech.dll Walks an NcExpr AST and produces an EvalResult. Resolves #nnn via an IVariableLookup; built-in function names are matched case-insensitively against a fixed table. Phase-1 supports: SIN COS TAN ASIN ACOS ATAN SQRT ABS ROUND FIX FUP LN EXP POW. Trigonometric arguments and results are in degrees, matching Fanuc Custom Macro B convention. Unknown function names surface as UnsupportedFunctionCode; arity mismatches as ArgumentMismatchCode; division / MOD by zero and domain errors (e.g. SQRT[-1]) as MathErrorCode; vacant operands as VacantErrorCode. public sealed class NcExpressionEvaluator Inheritance object NcExpressionEvaluator Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Fields ArgumentMismatchCode Diagnostic code for built-in functions called with the wrong number of arguments. public const string ArgumentMismatchCode = \"BuiltinFunction--ArgumentMismatch\" Field Value string MathErrorCode Diagnostic code for division / MOD by zero and domain errors. public const string MathErrorCode = \"Arithmetic--MathError\" Field Value string UnsupportedFunctionCode Diagnostic code for unrecognised built-in function names. public const string UnsupportedFunctionCode = \"BuiltinFunction--Unsupported\" Field Value string VacantErrorCode Diagnostic code emitted when an evaluated #nnn is vacant. public const string VacantErrorCode = \"Variable--Vacant\" Field Value string Methods Evaluate(NcExpr, IVariableLookup) Evaluates expr against variables. public EvalResult Evaluate(NcExpr expr, IVariableLookup variables) Parameters expr NcExpr variables IVariableLookup Returns EvalResult" + "summary": "Class NcExpressionEvaluator Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Assembly HiMech.dll Walks an NcExpr AST and produces an EvalResult. Resolves #nnn via an IVariableLookup; built-in function names are matched case-insensitively against a fixed table. Phase-1 supports: SIN COS TAN ASIN ACOS ATAN SQRT ABS ROUND FIX FUP LN EXP POW. Trigonometric arguments and results are in degrees, matching Fanuc Custom Macro B convention. Unknown function names surface as UnsupportedFunctionCode; arity mismatches as ArgumentMismatchCode; division / MOD by zero and domain errors (e.g. SQRT[-1]) as MathErrorCode; vacant operands as VacantErrorCode. Numeric domain & type conventions. All values are IEEE 754 double — there is no separate bool / int type at runtime. Comparison ops (EQ NE GT GE LT LE) yield 1.0 (true) or 0.0 (false), using strict double equality / ordering (NaN compares as IEEE specifies — NaN EQ NaN is 0.0). Logical ops (AND OR XOR) truncate each operand to a 64-bit signed integer (Truncate(double) then cast to long) before applying the bitwise operation; non-finite or out-of-range operands surface MathErrorCode rather than silently wrapping. Truthiness at caller-side IF / WHILE gates is value != 0 — any non-zero value (bit, float, comparator result) is true. public sealed class NcExpressionEvaluator Inheritance object NcExpressionEvaluator Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Fields ArgumentMismatchCode Diagnostic code for built-in functions called with the wrong number of arguments. public const string ArgumentMismatchCode = \"BuiltinFunction--ArgumentMismatch\" Field Value string MathErrorCode Diagnostic code for division / MOD by zero and domain errors. public const string MathErrorCode = \"Arithmetic--MathError\" Field Value string UnsupportedFunctionCode Diagnostic code for unrecognised built-in function names. public const string UnsupportedFunctionCode = \"BuiltinFunction--Unsupported\" Field Value string VacantErrorCode Diagnostic code emitted when an evaluated #nnn is vacant. public const string VacantErrorCode = \"Variable--Vacant\" Field Value string Methods Evaluate(NcExpr, IVariableLookup) Evaluates expr against variables. public EvalResult Evaluate(NcExpr expr, IVariableLookup variables) Parameters expr NcExpr variables IVariableLookup Returns EvalResult" }, "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionParser.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionParser.html", "title": "Class NcExpressionParser | HiAPI-C# 2025", - "summary": "Class NcExpressionParser Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Assembly HiMech.dll Recursive-descent parser for Fanuc Custom Macro B value expressions. Pure: takes a string, produces an NcExpr AST. Performs no variable lookup and no evaluation. Grammar (highest precedence last): expr := term (('+' | '-') term)* term := factor (('*' | '/' | 'MOD') factor)* factor := ('+' | '-')? primary primary := number | '#' integer | '#' '[' expr ']' | '[' expr ']' | ident '[' arglist ']' ('/' '[' expr ']')? arglist := expr (',' expr)* Function names are case-insensitive (SIN = sin); whitespace is skipped between tokens. The '/' '[' expr ']' tail captures the dual-bracket form Fanuc uses for ATAN[a]/[b]; non-ATAN callers that happen to use it produce a function with an extra arg, which the evaluator rejects with an arity error. public sealed class NcExpressionParser Inheritance object NcExpressionParser Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Methods TryParse(string, out NcExpr, out string) Parses source. On success, expr is the AST and error is null. On failure, expr is null and error describes the syntax problem. public static bool TryParse(string source, out NcExpr expr, out string error) Parameters source string expr NcExpr error string Returns bool" + "summary": "Class NcExpressionParser Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Assembly HiMech.dll Recursive-descent parser for Fanuc Custom Macro B value expressions. Pure: takes a string, produces an NcExpr AST. Performs no variable lookup and no evaluation. Grammar (lowest precedence at top): expr := or-expr or-expr := and-expr (('OR' | 'XOR') and-expr)* and-expr := cmp-expr ('AND' cmp-expr)* cmp-expr := add-expr (('EQ' | 'NE' | 'GT' | 'GE' | 'LT' | 'LE') add-expr)* add-expr := term (('+' | '-') term)* term := factor (('*' | '/' | 'MOD') factor)* factor := ('+' | '-')? primary primary := number | '#' integer | '#' '[' expr ']' | '[' expr ']' | ident '[' arglist ']' ('/' '[' expr ']')? arglist := expr (',' expr)* Function names and keyword operators (MOD, EQ NE GT GE LT LE, AND OR XOR) are case-insensitive (SIN = sin, EQ = eq); each keyword requires a non-identifier character on its right boundary so EQ1 is not the EQ operator followed by 1. Whitespace is skipped between tokens. The '/' '[' expr ']' tail captures the dual-bracket form Fanuc uses for ATAN[a]/[b]; non-ATAN callers that happen to use it produce a function with an extra arg, which the evaluator rejects with an arity error. Operator precedence intentionally puts boolean / logical layers below arithmetic so #1 + 1 GT 0 parses as (#1 + 1) GT 0 and #1 GT 0 AND #2 LT 10 parses as (#1 GT 0) AND (#2 LT 10), matching the Fanuc Custom Macro B spec for IF [..] GOTO / IF [..] THEN / WHILE [..] DO conditions. public sealed class NcExpressionParser Inheritance object NcExpressionParser Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Methods TryParse(string, out NcExpr, out string) Parses source. On success, expr is the AST and error is null. On failure, expr is null and error describes the syntax problem. public static bool TryParse(string source, out NcExpr expr, out string error) Parameters source string expr NcExpr error string Returns bool" }, "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcFunctionExpr.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcFunctionExpr.html", @@ -3817,53 +3827,128 @@ "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html", "title": "Class VolatileVariableLookup | HiAPI-C# 2025", - "summary": "Class VolatileVariableLookup Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Assembly HiMech.dll Reads Fanuc-style non-retained common variables (#100-#499) from Vars.Volatile on the current SyntaxPiece JSON, walking Previous until the entry is found. Self-gates the id range so the evaluator's RuntimeVariableLookups chain can fall through to the next lookup for out-of-range keys. Stateless and dependency-free — instances are interchangeable. Reads use the same dict-merge carry that VolatileVariableReadingSyntax writes; the two stay decoupled (read side here; write side in the reader). public class VolatileVariableLookup : IRuntimeVariableLookup Inheritance object VolatileVariableLookup Implements IRuntimeVariableLookup Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Methods Get(string, LazyLinkedListNode, IReadOnlyList) Returns the value of the variable identified by key in the context of node and dependencies, or null if the key is outside this lookup's range or the value is vacant. public double? Get(string key, LazyLinkedListNode node, IReadOnlyList dependencies) Parameters key string node LazyLinkedListNode dependencies IReadOnlyList Returns double?" + "summary": "Class VolatileVariableLookup Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Assembly HiMech.dll Reads Fanuc-style non-retained common variables (#100-#499) from Vars.Volatile. Self-gates the id range so the evaluator's RuntimeVariableLookups chain can fall through to the next lookup for out-of-range keys. Single-step lookup: VolatileVariableReadingSyntax already dict-merges every block's Vars.Volatile into the next block, so the entry — if it exists — must be on the current block (when this lookup runs after the reader) or on the immediately previous block (when this lookup runs before the reader on the same block, which is the Fanuc preset's order — evaluator first, reader second). No arbitrary walk-back: such a walk would be defensive overkill given the reader's carry guarantee. Stateless and dependency-free — instances are interchangeable. Reads stay decoupled from the reader (read side here; write side in the reader). public class VolatileVariableLookup : IRuntimeVariableLookup, IMakeXmlSource Inheritance object VolatileVariableLookup Implements IRuntimeVariableLookup IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors VolatileVariableLookup() Default constructor. public VolatileVariableLookup() VolatileVariableLookup(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). Stateless — no fields to deserialise. public VolatileVariableLookup(XElement src) Parameters src XElement Properties XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Get(string, LazyLinkedListNode, IReadOnlyList) Returns the value of the variable identified by key in the context of node and dependencies, or null if the key is outside this lookup's range or the value is vacant. public double? Get(string key, LazyLinkedListNode node, IReadOnlyList dependencies) Parameters key string node LazyLinkedListNode dependencies IReadOnlyList Returns double? MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.html", "title": "Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Classes LocalVariableLookup Reads Fanuc-style local macro variables (#1-#33) from Vars.Local on the current SyntaxPiece JSON, walking Previous until the entry is found. Self-gates the id range so the evaluator's RuntimeVariableLookups chain can fall through to the next lookup for out-of-range keys. Stateless and dependency-free — instances are interchangeable. NcBinaryExpr Binary arithmetic on two operands (+ - * / or MOD). NcExpr AST root for a Fanuc Custom Macro B value expression. Concrete leaves and combinators sit alongside NcExpressionParser; walking is the job of NcExpressionEvaluator. NcExpressionEvaluator Walks an NcExpr AST and produces an EvalResult. Resolves #nnn via an IVariableLookup; built-in function names are matched case-insensitively against a fixed table. Phase-1 supports: SIN COS TAN ASIN ACOS ATAN SQRT ABS ROUND FIX FUP LN EXP POW. Trigonometric arguments and results are in degrees, matching Fanuc Custom Macro B convention. Unknown function names surface as UnsupportedFunctionCode; arity mismatches as ArgumentMismatchCode; division / MOD by zero and domain errors (e.g. SQRT[-1]) as MathErrorCode; vacant operands as VacantErrorCode. NcExpressionParser Recursive-descent parser for Fanuc Custom Macro B value expressions. Pure: takes a string, produces an NcExpr AST. Performs no variable lookup and no evaluation. Grammar (highest precedence last): expr := term (('+' | '-') term)* term := factor (('*' | '/' | 'MOD') factor)* factor := ('+' | '-')? primary primary := number | '#' integer | '#' '[' expr ']' | '[' expr ']' | ident '[' arglist ']' ('/' '[' expr ']')? arglist := expr (',' expr)* Function names are case-insensitive (SIN = sin); whitespace is skipped between tokens. The '/' '[' expr ']' tail captures the dual-bracket form Fanuc uses for ATAN[a]/[b]; non-ATAN callers that happen to use it produce a function with an extra arg, which the evaluator rejects with an arity error. NcFunctionExpr Built-in function call like SIN[x], SQRT[x], ATAN[a]/[b]. NcIndirectVariableExpr Indirect variable reference #[expr]. The inner expression is evaluated and truncated toward zero to obtain an integer; the lookup key is then Prefix concatenated with that integer (e.g. Prefix=\"#\", computed 124 → \"#124\"). NcLiteralExpr Numeric literal (e.g. 1.5, 15., .5, 1e-3). NcUnaryExpr Unary + or - applied to an operand. NcVariableExpr Direct variable reference; Key is the raw source token (e.g. \"#124\") passed verbatim to Get(string). VolatileVariableLookup Reads Fanuc-style non-retained common variables (#100-#499) from Vars.Volatile on the current SyntaxPiece JSON, walking Previous until the entry is found. Self-gates the id range so the evaluator's RuntimeVariableLookups chain can fall through to the next lookup for out-of-range keys. Stateless and dependency-free — instances are interchangeable. Reads use the same dict-merge carry that VolatileVariableReadingSyntax writes; the two stay decoupled (read side here; write side in the reader). Structs EvalResult Outcome of evaluating an NcExpr. Either a successful numeric value, or a failure with an error code matching the diagnostic catalogue used by reading / evaluator syntaxes. Interfaces IRuntimeVariableLookup Stateless variable lookup that needs per-block runtime context — the current SyntaxPiece node (for Previous traceback into runtime-state sections like MachineCoordinateState / ProgramXyz) and the dependency list (so the lookup can read from sibling dependencies without holding a static reference). Distinguished from IVariableLookup: that one is for long-lived dependencies that already hold their own data (parameter tables, tool-offset wrappers, retained-variable tables) and need no block context. IRuntimeVariableLookup is for context-sensitive resolutions configured declaratively on RuntimeVariableLookups. Implementations should be brand-specific (e.g. Fanuc #5001-#5043 position reads) and return null for keys outside their range so the evaluator's chain can fall through to the next lookup. IVariableLookup Resolves a Custom Macro B variable reference to its current numeric value, or null for vacant (Fanuc ) and out-of-scope alike. The key is the raw source token — Fanuc \"#124\", Heidenhain \"Q1\", Siemens \"R1\" — so the interface itself is brand-agnostic. Implementations are typically narrow (one per id range / per brand prefix) and parse the prefix locally; chain them at the call site by trying each in priority order until one returns a non-null value. A returned null is treated by NcExpressionEvaluator as vacant and surfaces as a Variable--Vacant failure when the value is consumed in arithmetic context. Enums NcBinaryOp Binary operators allowed in Fanuc Custom Macro B value expressions. NcUnaryOp Unary operators allowed in Fanuc Custom Macro B value expressions." + "summary": "Namespace Hi.NcParsers.EvaluationSyntaxs.Evaluation Classes LocalVariableLookup Reads Fanuc-style local macro variables (#1-#33) from Vars.Local on the current SyntaxPiece JSON, falling back to the immediately previous block when they share the same MacroFrame id. Self-gates the id range so the evaluator's RuntimeVariableLookups chain can fall through to the next lookup for out-of-range keys. Two-step lookup (mirrors VolatileVariableLookup): the current block sees writes that FanucMacroCallSyntax stamped at inline time (the call-line argument bindings) and writes that FanucLocalVariableReadingSyntax applied on this block before the lookup runs; the previous block (frame-checked) supplies body-internal writes from the prior block in the same macro frame. Looking past the previous block is unnecessary because the reader carries forward block-by-block within a frame. Frame isolation via MacroFrame: a previous block whose frame id differs from the current block's is skipped — a macro body's body-internal locals are invisible to the caller after return, and the caller's main-frame locals are invisible inside the macro. M98/M198 subprogram inlining (SubProgramCallSyntax) deliberately does not stamp MacroFrame on its inlined blocks, so the callee inherits the caller's frame and sees the caller's locals — matching real Fanuc M98 semantics. Stateless and dependency-free — instances are interchangeable. NcBinaryExpr Binary operation on two operands. Covers arithmetic (+ - * / / MOD), comparison (EQ NE GT GE LT LE, yielding 1.0 / 0.0), and logical bitwise (AND OR XOR, operands truncated to long). NcExpr AST root for a Fanuc Custom Macro B value expression. Concrete leaves and combinators sit alongside NcExpressionParser; walking is the job of NcExpressionEvaluator. NcExpressionEvaluator Walks an NcExpr AST and produces an EvalResult. Resolves #nnn via an IVariableLookup; built-in function names are matched case-insensitively against a fixed table. Phase-1 supports: SIN COS TAN ASIN ACOS ATAN SQRT ABS ROUND FIX FUP LN EXP POW. Trigonometric arguments and results are in degrees, matching Fanuc Custom Macro B convention. Unknown function names surface as UnsupportedFunctionCode; arity mismatches as ArgumentMismatchCode; division / MOD by zero and domain errors (e.g. SQRT[-1]) as MathErrorCode; vacant operands as VacantErrorCode. Numeric domain & type conventions. All values are IEEE 754 double — there is no separate bool / int type at runtime. Comparison ops (EQ NE GT GE LT LE) yield 1.0 (true) or 0.0 (false), using strict double equality / ordering (NaN compares as IEEE specifies — NaN EQ NaN is 0.0). Logical ops (AND OR XOR) truncate each operand to a 64-bit signed integer (Truncate(double) then cast to long) before applying the bitwise operation; non-finite or out-of-range operands surface MathErrorCode rather than silently wrapping. Truthiness at caller-side IF / WHILE gates is value != 0 — any non-zero value (bit, float, comparator result) is true. NcExpressionParser Recursive-descent parser for Fanuc Custom Macro B value expressions. Pure: takes a string, produces an NcExpr AST. Performs no variable lookup and no evaluation. Grammar (lowest precedence at top): expr := or-expr or-expr := and-expr (('OR' | 'XOR') and-expr)* and-expr := cmp-expr ('AND' cmp-expr)* cmp-expr := add-expr (('EQ' | 'NE' | 'GT' | 'GE' | 'LT' | 'LE') add-expr)* add-expr := term (('+' | '-') term)* term := factor (('*' | '/' | 'MOD') factor)* factor := ('+' | '-')? primary primary := number | '#' integer | '#' '[' expr ']' | '[' expr ']' | ident '[' arglist ']' ('/' '[' expr ']')? arglist := expr (',' expr)* Function names and keyword operators (MOD, EQ NE GT GE LT LE, AND OR XOR) are case-insensitive (SIN = sin, EQ = eq); each keyword requires a non-identifier character on its right boundary so EQ1 is not the EQ operator followed by 1. Whitespace is skipped between tokens. The '/' '[' expr ']' tail captures the dual-bracket form Fanuc uses for ATAN[a]/[b]; non-ATAN callers that happen to use it produce a function with an extra arg, which the evaluator rejects with an arity error. Operator precedence intentionally puts boolean / logical layers below arithmetic so #1 + 1 GT 0 parses as (#1 + 1) GT 0 and #1 GT 0 AND #2 LT 10 parses as (#1 GT 0) AND (#2 LT 10), matching the Fanuc Custom Macro B spec for IF [..] GOTO / IF [..] THEN / WHILE [..] DO conditions. NcFunctionExpr Built-in function call like SIN[x], SQRT[x], ATAN[a]/[b]. NcIndirectVariableExpr Indirect variable reference #[expr]. The inner expression is evaluated and truncated toward zero to obtain an integer; the lookup key is then Prefix concatenated with that integer (e.g. Prefix=\"#\", computed 124 → \"#124\"). NcLiteralExpr Numeric literal (e.g. 1.5, 15., .5, 1e-3). NcUnaryExpr Unary + or - applied to an operand. NcVariableExpr Direct variable reference; Key is the raw source token (e.g. \"#124\") passed verbatim to Get(string). VolatileVariableLookup Reads Fanuc-style non-retained common variables (#100-#499) from Vars.Volatile. Self-gates the id range so the evaluator's RuntimeVariableLookups chain can fall through to the next lookup for out-of-range keys. Single-step lookup: VolatileVariableReadingSyntax already dict-merges every block's Vars.Volatile into the next block, so the entry — if it exists — must be on the current block (when this lookup runs after the reader) or on the immediately previous block (when this lookup runs before the reader on the same block, which is the Fanuc preset's order — evaluator first, reader second). No arbitrary walk-back: such a walk would be defensive overkill given the reader's carry guarantee. Stateless and dependency-free — instances are interchangeable. Reads stay decoupled from the reader (read side here; write side in the reader). Structs EvalResult Outcome of evaluating an NcExpr. Either a successful numeric value, or a failure with an error code matching the diagnostic catalogue used by reading / evaluator syntaxes. Interfaces IRuntimeVariableLookup Stateless variable lookup that needs per-block runtime context — the current SyntaxPiece node (for Previous traceback into runtime-state sections like MachineCoordinateState / ProgramXyz) and the dependency list (so the lookup can read from sibling dependencies without holding a static reference). Distinguished from IVariableLookup: that one is for long-lived dependencies that already hold their own data (parameter tables, tool-offset wrappers, retained-variable tables) and need no block context. IRuntimeVariableLookup is for context-sensitive resolutions configured declaratively on RuntimeVariableLookups. Implementations should be brand-specific (e.g. Fanuc #5001-#5043 position reads) and return null for keys outside their range so the evaluator's chain can fall through to the next lookup. Implementations are XML-serialised as part of VariableEvaluatorSyntax's round-trip: each impl exposes a static XName, registers itself with Generators, and implements MakeXmlSource(string, string, bool). Since impls are stateless, the typical body is just an empty element carrying the type name; brand identity is restored by XFactory dispatch. IVariableLookup Resolves a Custom Macro B variable reference to its current numeric value, or null for vacant (Fanuc ) and out-of-scope alike. The key is the raw source token — Fanuc \"#124\", Heidenhain \"Q1\", Siemens \"R1\" — so the interface itself is brand-agnostic. Implementations are typically narrow (one per id range / per brand prefix) and parse the prefix locally; chain them at the call site by trying each in priority order until one returns a non-null value. A returned null is treated by NcExpressionEvaluator as vacant and surfaces as a Variable--Vacant failure when the value is consumed in arithmetic context. Enums NcBinaryOp Binary operators allowed in Fanuc Custom Macro B value expressions. NcUnaryOp Unary operators allowed in Fanuc Custom Macro B value expressions." }, - "api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html": { - "href": "api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html", + "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html": { + "href": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html", + "title": "Class FanucGotoSyntax | HiAPI-C# 2025", + "summary": "Class FanucGotoSyntax Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Resolves Fanuc Custom Macro B GOTO control flow. Triggered by Parsing.FanucGoto (written by FanucGotoParsingSyntax); decides whether to fire, and on fire calls ReplaceSource(IEnumerable) on layers[0] with the re-segmented file content starting at the matching N{target} label. The host block stays materialised (so cache dumps still see the GOTO call site); execution naturally continues from the new source once the pipeline pulls the next block. Both unconditional GOTO and conditional IF [] GOTO are implemented. The conditional form leans on VariableEvaluatorSyntax's pass-2 tree walk to substitute Parsing.FanucGoto.Condition with a numeric JsonValue when the expression evaluates successfully — ReadCondition(JsonNode) then reads the node polymorphically. Truthy non-zero fires the redirect; zero falls through silently; a still-string (unresolved) Condition emits FanucGoto--ConditionNotEvaluated and falls through. Pipeline placement: tail of the Fanuc / Mazak / Syntec Evaluation bundle. Must run after VariableEvaluatorSyntax so any # in the target N (e.g. GOTO #1) has been substituted to a literal in Parsing.FanucGoto.N. Reader syntaxes (VolatileVariableReadingSyntax etc.) are independent — they touch Parsing.Assignments, not Parsing.FanucGoto. Label scanning uses two hosted helper syntaxes — CommentSyntax and IndexSyntax — applied to each candidate block in turn so the predicate IndexNote.Number == target matches the same way the Parsing bundle would. Both are XML-IO-able so API customers can swap them (e.g. for a controller variant using ;-style comments or a different head symbol). Defaults match Fanuc: QuoteCommentSyntax and HeadIndexSyntax with the \"N\" symbol. public class FanucGotoSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucGotoSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FanucGotoSyntax() Parameterless instance with default helper syntaxes. public FanucGotoSyntax() FanucGotoSyntax(XElement, string, IProgress) Loads hosted helper syntaxes from XML produced by MakeXmlSource(string, string, bool). The wrapper contains one child element per probe syntax in source order; an absent wrapper falls back to the default list. public FanucGotoSyntax(XElement src, string baseDirectory, IProgress progress) Parameters src XElement Root element named XName. baseDirectory string Project base directory propagated to child XFactory calls. progress IProgress Diagnostic sink propagated to child factories. Properties LabelProbeSyntaxes Ordered list of helper syntaxes run on each candidate block during the label scan before the IndexNote.Number == target predicate is checked. The defaults match Fanuc — QuoteCommentSyntax strips parenthesised comments so a commented-out (N100) never matches, then HeadIndexSyntax with symbol “N” extracts the head index into IndexNote.Number. Exposed as a list (rather than two fixed properties) so API customers can insert additional probe syntaxes — for example a TailCommentSyntax for ;-style end-of-block comments alongside the parenthesised form, or a BlockSkipSyntax to skip /-prefixed blocks from the label-scan results. Order matters: comment-strippers before the head-index parser, the index parser last (so its output reflects the post-strip text). public List LabelProbeSyntaxes { get; set; } Property Value List Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + }, + "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html": { + "href": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html", + "title": "Class FanucIfThenSyntax | HiAPI-C# 2025", + "summary": "Class FanucIfThenSyntax Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Resolves Fanuc Custom Macro B IF [] THEN single-block conditionals. Triggered by Parsing.FanucIfThen (written by FanucIfThenParsingSyntax); reads the now-resolved Condition node, decides whether to fire, and on fire lifts the parsing-stage PendingAssignments sub-object into the canonical Parsing.Assignments bucket so the brand-specific reader syntaxes downstream route each entry to its store the same way they would handle an unconditional #nnn = on a normal block. Unlike FanucGotoSyntax there is no source splice, no label scan, no iteration watchdog — the spec restricts the body to the current block. The host block is preserved either way (the stamped FanucIfThen section on the host's top-level JSON keeps the IF-THEN call site visible to cache dumps and diagnostics, with Applied flipped true only on a successful fire). Pipeline placement: in the Evaluation bundle after VariableEvaluatorSyntax (so the Condition expression has been substituted in place by pass-2 tree walk, and each PendingAssignments RHS string has been evaluated to a numeric JsonValue) and before the reader syntaxes (VolatileVariableReadingSyntax, RetainedCommonVariableReadingSyntax, FanucLocalVariableReadingSyntax, FanucSystemControlVariableSyntax) — that ordering lets the lifted entries reach the readers as if they had been written by TagAssignmentSyntax on a normal block. Three condition outcomes mirror the ReadCondition(JsonNode) shape: Truthy non-zero → lift assignments, stamp Applied=true. Truthy zero → fall through silently, Applied=false. Truthy null (evaluator failed, condition still a string or non-finite) → warn FanucIfThen--ConditionNotEvaluated, do not lift, Applied=false. A truthy condition with no PendingAssignments (body did not parse as one or more assignments — e.g. a G-code body, currently unsupported) warns FanucIfThen--UnsupportedBody and falls through. public class FanucIfThenSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucIfThenSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FanucIfThenSyntax() Parameterless instance (no XML state). public FanucIfThenSyntax() FanucIfThenSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public FanucIfThenSyntax(XElement src) Parameters src XElement Root element named XName. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + }, + "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html": { + "href": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html", + "title": "Class FanucLocalVariableReadingSyntax | HiAPI-C# 2025", + "summary": "Class FanucLocalVariableReadingSyntax Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Routes literal-RHS assignments to Fanuc-style local macro variables (#1-#33) from Parsing.Assignments into Vars.Local on the current block, carrying the previous block's Vars.Local dict forward when both blocks share the same MacroFrame id. Mirrors VolatileVariableReadingSyntax for the #100-#499 range, with two differences: Carry is gated by MacroFrame equality, so a caller block after a G65 return does not inherit the macro body's final locals. Writes outside a macro frame (a main-program block doing #11 = 5) emit LocalVariable--MainFrameWriteUnsupported and consume the assignment without persisting — real Fanuc allows main-frame local writes but this simulator only tracks locals inside G65/G66 call frames; surfacing the gap as a diagnostic is more informative than a silent UnconsumedCheckSyntax hit. Pipeline placement: Evaluation bundle, after VariableEvaluatorSyntax (so any expression RHS such as #11 = #1 + 1 has already been normalised to a literal by the time this reader runs) and after the other range readers (RetainedCommonVariableReadingSyntax, VolatileVariableReadingSyntax) so they all share a similar Reader-stage shape. Only literal numeric RHS values are consumed here; non-literal entries (which can only persist if VariableEvaluatorSyntax failed to resolve them) are left untouched and surface via the evaluator's own VariableExpression--Unevaluated diagnostic plus UnconsumedCheckSyntax. public class FanucLocalVariableReadingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucLocalVariableReadingSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FanucLocalVariableReadingSyntax() Default constructor. public FanucLocalVariableReadingSyntax() FanucLocalVariableReadingSyntax(XElement) Loads from XML produced by MakeXmlSource(string, string, bool); no state. public FanucLocalVariableReadingSyntax(XElement src) Parameters src XElement Fields LocalMax Inclusive upper bound of the local range (#33). public const int LocalMax = 33 Field Value int LocalMin Inclusive lower bound of the local range (#1). public const int LocalMin = 1 Field Value int Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + }, + "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap.html": { + "href": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap.html", + "title": "Class FanucMacroArgumentMap | HiAPI-C# 2025", + "summary": "Class FanucMacroArgumentMap Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Fanuc Custom Macro B Type-I argument-letter map: which call-line letter binds to which Vars.Local id (#1-#26) inside the macro body. Reserved letters (G, L, N, O, P) are absent — they are consumed by the call itself, not passed through. Used by FanucMacroCallSyntax (G65, one-shot) and FanucModalMacroSyntax (G66, modal) to translate the argument letters captured by G65Syntax / G66Syntax into the #nnn bindings the macro body's expression evaluator can read. public static class FanucMacroArgumentMap Inheritance object FanucMacroArgumentMap Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields Map Fanuc Custom Macro B Type-I letter-to-local-id map. Single-value per letter; Type-II's repeating I_J_K_ array binding is not modelled here. public static readonly IReadOnlyDictionary Map Field Value IReadOnlyDictionary" + }, + "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html": { + "href": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html", + "title": "Class FanucMacroCallSyntax | HiAPI-C# 2025", + "summary": "Class FanucMacroCallSyntax Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Inlines a Fanuc Custom Macro B one-shot call (G65 P_ L_ [letter value …]) into the source layer and binds the call-line argument letters to Vars.Local #1-#26 per the Type-I map (see FanucMacroArgumentMap). Every inlined block carries the binding dict, a clone of the FanucMacroCall diagnostic record, and a MacroFrame id stamp — so LocalVariableLookup resolves arg references in a single-block lookup, a cache dump landing on any block immediately shows which call it belongs to, and downstream FanucLocalVariableReadingSyntax carries body-internal #1-#33 writes forward only within the same frame. The host block itself records FanucMacroCall but stays in the caller's frame (no MacroFrame stamp) and emits no motion act; after the macro body's last inlined block the pipeline continues naturally into the caller's next block (the inlined pieces sit ahead of the host block's successor in layers[0]). Frame isolation works on two layers. Statically, caller blocks have no MacroFrame stamp (frame id 0 by Get(JsonObject)), so the inlined frame ids (allocated fresh per L-repetition) never collide with main. Dynamically, LocalVariableLookup and FanucLocalVariableReadingSyntax compare frame ids before carrying any Vars.Local entry across a block boundary — a macro body's body-internal writes therefore stay inside the macro and never leak back into the caller's frame. Filename lookup mirrors SubProgramCallSyntax: O{P:D4}.NC, O{P}.NC, O{P:D4}, O{P}, {P:D4}.NC, {P}.NC — first match wins. The lookup root is InternalFolder (G65 has no \"external storage\" variant; M198's external root is M98/M198-only). L > 1 inlines the same macro L times in series. Each repetition is a fresh segmentation pass (so each block gets its own SyntaxPiece JSON object — the downstream pipeline mutates JSON in place and would clobber sibling repetitions if instances were shared) and gets a fresh FileIndex (so (FileIndex, LineIndex) pairs stay unique across the L-copies of the same source lines). Pipeline placement: ahead of SubProgramCallSyntax inside the Fanuc Evaluation BundleSyntax so a hypothetical G65 P_ + M98 P_ on the same block expands the G65 macro first (would be an unusual but legal composition). Detection is on the Parsing.G65 sub-object written by G65Syntax (a ParameterizedFlagSyntax) — the keyword \"G65\" never reaches Parsing.Flags because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. public class FanucMacroCallSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucMacroCallSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FanucMacroCallSyntax() Parameterless instance for bundle composition (no XML state). public FanucMacroCallSyntax() FanucMacroCallSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public FanucMacroCallSyntax(XElement src) Parameters src XElement Root element named XName. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + }, + "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.html": { + "href": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.html", + "title": "Enum FanucModalMacroSyntax.SyntaxPhase | HiAPI-C# 2025", + "summary": "Enum FanucModalMacroSyntax.SyntaxPhase Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Identifies which pipeline phase the instance runs in. The two values correspond to the Evaluation-bundle and PostLogic-bundle registrations of this same syntax class. public enum FanucModalMacroSyntax.SyntaxPhase Extension Methods InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) MaskUtil.GetMaskedValue(T, T, bool) MaskUtil.SetMask(ref T, T, bool) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Fields Expansion = 1 PostLogic phase: on every motion-producing block (signalled by MotionEvent presence) that sits inside an active G66 modal AND lives in the main frame (MacroFrame == 0), inlines the modal macro body — same call mechanism as FanucMacroCallSyntax. Setup = 0 Evaluation phase: captures G66 setup / G67 cancel edges into FanucModalMacro and carries the section forward block-to-block." + }, + "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html": { + "href": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html", + "title": "Class FanucModalMacroSyntax | HiAPI-C# 2025", + "summary": "Class FanucModalMacroSyntax Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Handles Fanuc Custom Macro B modal-call lifecycle (G66 setup, G67 cancel, and per-motion-block implicit macro invocation). The same class is registered twice in the pipeline via Phase — once in the Evaluation bundle (Setup, captures G66/G67 edges and carries the FanucModalMacro state block-to-block) and once in the PostLogic bundle (Expansion, on every motion block within an active G66 modal, inlines the macro body via the same mechanism FanucMacroCallSyntax uses). Keeping both phases in one class makes the pairing visually explicit: readers see \"G66 in one file\" and the two methods (DoSetup, DoExpansion) make the lifecycle obvious. The two factory helpers (Setup, Expansion) mirror the ModalCarrySyntax.Logic / .PostLogic pattern already in the codebase. public class FanucModalMacroSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucModalMacroSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FanucModalMacroSyntax() Parameterless instance (defaults to Setup). public FanucModalMacroSyntax() FanucModalMacroSyntax(XElement) XML ctor. Reads child element; legacy project files without it default to Setup (the pre-expansion behaviour). public FanucModalMacroSyntax(XElement src) Parameters src XElement Root element named XName. Properties Expansion Factory: PostLogic-bundle instance that performs implicit motion-block expansion. public static FanucModalMacroSyntax Expansion { get; } Property Value FanucModalMacroSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string Phase Pipeline phase this instance runs in. Defaults to Setup. public FanucModalMacroSyntax.SyntaxPhase Phase { get; set; } Property Value FanucModalMacroSyntax.SyntaxPhase Setup Factory: Evaluation-bundle instance that handles G66/G67 setup + carry. public static FanucModalMacroSyntax Setup { get; } Property Value FanucModalMacroSyntax XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + }, + "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html": { + "href": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html", "title": "Class FanucSystemControlVariableSyntax | HiAPI-C# 2025", - "summary": "Class FanucSystemControlVariableSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Consumes Fanuc-style system-control variable assignments (#3000-#3999) — alarm trigger (#3000), millisecond and hour clocks (#3001 / #3002), single-block / feed-hold bypass flags (#3003 / #3004), pause-with-message (#3006), mirror-image flags (#3007), date / time (#3011 / #3012), tool-life data (#3030 / #3032), etc. Every id in this range is a controller-side state variable — its authoritative value lives on the real hardware (RTC, alarm bus, override switches, …) and an NC write at most triggers a side effect (clock reset, alarm raise, message-pause prompt). Offline simulation has none of that machinery, so this syntax does not emulate the effect. Instead it: records the literal write on the block JSON under Vars.SystemControl (round-trip and cache-dump visibility); emits a FanucSystemControl--Unsupported UnsupportedMessage(Sentence, string, string, object) so the user knows the assignment was recognised but its controller-side effect is not simulated. Message-severity (not Warning) because these writes are safe no-ops offline — every consumed assignment would emit a Warning per block, which would be noisy without signalling anything the user must act on; removes the entry from Parsing.Assignments so it does not re-surface as a generic Parsing--Unconsumed diagnostic. The dictionary carries forward block-by-block (same dict-merge pattern as VolatileVariableReadingSyntax) so a downstream consumer can read the most recent recorded value via SyntaxPiece linkage. Only literal numeric RHS values are consumed; non-literal RHS (e.g. #3002 = #500) is left in Parsing.Assignments for VariableEvaluatorSyntax to resolve, mirroring the retained / volatile reading syntaxes. Fanuc-family only — Siemens uses named system variables ($AC_TIME, $A_DAY, …) and Heidenhain uses FN18: SYSREAD; neither flows through Parsing.Assignments.#nnn. public class FanucSystemControlVariableSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucSystemControlVariableSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FanucSystemControlVariableSyntax() Default constructor. public FanucSystemControlVariableSyntax() FanucSystemControlVariableSyntax(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). No state to deserialise. public FanucSystemControlVariableSyntax(XElement src) Parameters src XElement Fields SystemControlMax Inclusive upper bound of the system-control range (#3999). public const int SystemControlMax = 3999 Field Value int SystemControlMin Inclusive lower bound of the system-control range (#3000). public const int SystemControlMin = 3000 Field Value int UnsupportedDiagId Diagnostic id emitted for every consumed #3000-#3999 assignment — recognised by the parser, ignored by simulation. public const string UnsupportedDiagId = \"FanucSystemControl--Unsupported\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class FanucSystemControlVariableSyntax Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Assembly HiMech.dll Consumes Fanuc-style system-control variable assignments (#3000-#3999) — alarm trigger (#3000), millisecond and hour clocks (#3001 / #3002), single-block / feed-hold bypass flags (#3003 / #3004), pause-with-message (#3006), mirror-image flags (#3007), date / time (#3011 / #3012), tool-life data (#3030 / #3032), etc. Every id in this range is a controller-side state variable — its authoritative value lives on the real hardware (RTC, alarm bus, override switches, …) and an NC write at most triggers a side effect (clock reset, alarm raise, message-pause prompt). Offline simulation has none of that machinery, so this syntax does not emulate the effect. Instead it: records the literal write on the block JSON under Vars.SystemControl (round-trip and cache-dump visibility); emits a FanucSystemControl--Unsupported UnsupportedMessage(ISentenceCarrier, string, string, object) so the user knows the assignment was recognised but its controller-side effect is not simulated. Message-severity (not Warning) because these writes are safe no-ops offline — every consumed assignment would emit a Warning per block, which would be noisy without signalling anything the user must act on; removes the entry from Parsing.Assignments so it does not re-surface as a generic Parsing--Unconsumed diagnostic. The dictionary carries forward block-by-block (same dict-merge pattern as VolatileVariableReadingSyntax) so a downstream consumer can read the most recent recorded value via SyntaxPiece linkage. Only literal numeric RHS values are consumed; non-literal RHS (e.g. #3002 = #500) is left in Parsing.Assignments for VariableEvaluatorSyntax to resolve, mirroring the retained / volatile reading syntaxes. Fanuc-family only — Siemens uses named system variables ($AC_TIME, $A_DAY, …) and Heidenhain uses FN18: SYSREAD; neither flows through Parsing.Assignments.#nnn. public class FanucSystemControlVariableSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucSystemControlVariableSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FanucSystemControlVariableSyntax() Default constructor. public FanucSystemControlVariableSyntax() FanucSystemControlVariableSyntax(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). No state to deserialise. public FanucSystemControlVariableSyntax(XElement src) Parameters src XElement Fields SystemControlMax Inclusive upper bound of the system-control range (#3999). public const int SystemControlMax = 3999 Field Value int SystemControlMin Inclusive lower bound of the system-control range (#3000). public const int SystemControlMin = 3000 Field Value int UnsupportedDiagId Diagnostic id emitted for every consumed #3000-#3999 assignment — recognised by the parser, ignored by simulation. public const string UnsupportedDiagId = \"FanucSystemControl--Unsupported\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + }, + "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.html": { + "href": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.html", + "title": "Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc | HiAPI-C# 2025", + "summary": "Namespace Hi.NcParsers.EvaluationSyntaxs.Fanuc Classes FanucGotoSyntax Resolves Fanuc Custom Macro B GOTO control flow. Triggered by Parsing.FanucGoto (written by FanucGotoParsingSyntax); decides whether to fire, and on fire calls ReplaceSource(IEnumerable) on layers[0] with the re-segmented file content starting at the matching N{target} label. The host block stays materialised (so cache dumps still see the GOTO call site); execution naturally continues from the new source once the pipeline pulls the next block. Both unconditional GOTO and conditional IF [] GOTO are implemented. The conditional form leans on VariableEvaluatorSyntax's pass-2 tree walk to substitute Parsing.FanucGoto.Condition with a numeric JsonValue when the expression evaluates successfully — ReadCondition(JsonNode) then reads the node polymorphically. Truthy non-zero fires the redirect; zero falls through silently; a still-string (unresolved) Condition emits FanucGoto--ConditionNotEvaluated and falls through. Pipeline placement: tail of the Fanuc / Mazak / Syntec Evaluation bundle. Must run after VariableEvaluatorSyntax so any # in the target N (e.g. GOTO #1) has been substituted to a literal in Parsing.FanucGoto.N. Reader syntaxes (VolatileVariableReadingSyntax etc.) are independent — they touch Parsing.Assignments, not Parsing.FanucGoto. Label scanning uses two hosted helper syntaxes — CommentSyntax and IndexSyntax — applied to each candidate block in turn so the predicate IndexNote.Number == target matches the same way the Parsing bundle would. Both are XML-IO-able so API customers can swap them (e.g. for a controller variant using ;-style comments or a different head symbol). Defaults match Fanuc: QuoteCommentSyntax and HeadIndexSyntax with the \"N\" symbol. FanucIfThenSyntax Resolves Fanuc Custom Macro B IF [] THEN single-block conditionals. Triggered by Parsing.FanucIfThen (written by FanucIfThenParsingSyntax); reads the now-resolved Condition node, decides whether to fire, and on fire lifts the parsing-stage PendingAssignments sub-object into the canonical Parsing.Assignments bucket so the brand-specific reader syntaxes downstream route each entry to its store the same way they would handle an unconditional #nnn = on a normal block. Unlike FanucGotoSyntax there is no source splice, no label scan, no iteration watchdog — the spec restricts the body to the current block. The host block is preserved either way (the stamped FanucIfThen section on the host's top-level JSON keeps the IF-THEN call site visible to cache dumps and diagnostics, with Applied flipped true only on a successful fire). Pipeline placement: in the Evaluation bundle after VariableEvaluatorSyntax (so the Condition expression has been substituted in place by pass-2 tree walk, and each PendingAssignments RHS string has been evaluated to a numeric JsonValue) and before the reader syntaxes (VolatileVariableReadingSyntax, RetainedCommonVariableReadingSyntax, FanucLocalVariableReadingSyntax, FanucSystemControlVariableSyntax) — that ordering lets the lifted entries reach the readers as if they had been written by TagAssignmentSyntax on a normal block. Three condition outcomes mirror the ReadCondition(JsonNode) shape: Truthy non-zero → lift assignments, stamp Applied=true. Truthy zero → fall through silently, Applied=false. Truthy null (evaluator failed, condition still a string or non-finite) → warn FanucIfThen--ConditionNotEvaluated, do not lift, Applied=false. A truthy condition with no PendingAssignments (body did not parse as one or more assignments — e.g. a G-code body, currently unsupported) warns FanucIfThen--UnsupportedBody and falls through. FanucLocalVariableReadingSyntax Routes literal-RHS assignments to Fanuc-style local macro variables (#1-#33) from Parsing.Assignments into Vars.Local on the current block, carrying the previous block's Vars.Local dict forward when both blocks share the same MacroFrame id. Mirrors VolatileVariableReadingSyntax for the #100-#499 range, with two differences: Carry is gated by MacroFrame equality, so a caller block after a G65 return does not inherit the macro body's final locals. Writes outside a macro frame (a main-program block doing #11 = 5) emit LocalVariable--MainFrameWriteUnsupported and consume the assignment without persisting — real Fanuc allows main-frame local writes but this simulator only tracks locals inside G65/G66 call frames; surfacing the gap as a diagnostic is more informative than a silent UnconsumedCheckSyntax hit. Pipeline placement: Evaluation bundle, after VariableEvaluatorSyntax (so any expression RHS such as #11 = #1 + 1 has already been normalised to a literal by the time this reader runs) and after the other range readers (RetainedCommonVariableReadingSyntax, VolatileVariableReadingSyntax) so they all share a similar Reader-stage shape. Only literal numeric RHS values are consumed here; non-literal entries (which can only persist if VariableEvaluatorSyntax failed to resolve them) are left untouched and surface via the evaluator's own VariableExpression--Unevaluated diagnostic plus UnconsumedCheckSyntax. FanucMacroArgumentMap Fanuc Custom Macro B Type-I argument-letter map: which call-line letter binds to which Vars.Local id (#1-#26) inside the macro body. Reserved letters (G, L, N, O, P) are absent — they are consumed by the call itself, not passed through. Used by FanucMacroCallSyntax (G65, one-shot) and FanucModalMacroSyntax (G66, modal) to translate the argument letters captured by G65Syntax / G66Syntax into the #nnn bindings the macro body's expression evaluator can read. FanucMacroCallSyntax Inlines a Fanuc Custom Macro B one-shot call (G65 P_ L_ [letter value …]) into the source layer and binds the call-line argument letters to Vars.Local #1-#26 per the Type-I map (see FanucMacroArgumentMap). Every inlined block carries the binding dict, a clone of the FanucMacroCall diagnostic record, and a MacroFrame id stamp — so LocalVariableLookup resolves arg references in a single-block lookup, a cache dump landing on any block immediately shows which call it belongs to, and downstream FanucLocalVariableReadingSyntax carries body-internal #1-#33 writes forward only within the same frame. The host block itself records FanucMacroCall but stays in the caller's frame (no MacroFrame stamp) and emits no motion act; after the macro body's last inlined block the pipeline continues naturally into the caller's next block (the inlined pieces sit ahead of the host block's successor in layers[0]). Frame isolation works on two layers. Statically, caller blocks have no MacroFrame stamp (frame id 0 by Get(JsonObject)), so the inlined frame ids (allocated fresh per L-repetition) never collide with main. Dynamically, LocalVariableLookup and FanucLocalVariableReadingSyntax compare frame ids before carrying any Vars.Local entry across a block boundary — a macro body's body-internal writes therefore stay inside the macro and never leak back into the caller's frame. Filename lookup mirrors SubProgramCallSyntax: O{P:D4}.NC, O{P}.NC, O{P:D4}, O{P}, {P:D4}.NC, {P}.NC — first match wins. The lookup root is InternalFolder (G65 has no \"external storage\" variant; M198's external root is M98/M198-only). L > 1 inlines the same macro L times in series. Each repetition is a fresh segmentation pass (so each block gets its own SyntaxPiece JSON object — the downstream pipeline mutates JSON in place and would clobber sibling repetitions if instances were shared) and gets a fresh FileIndex (so (FileIndex, LineIndex) pairs stay unique across the L-copies of the same source lines). Pipeline placement: ahead of SubProgramCallSyntax inside the Fanuc Evaluation BundleSyntax so a hypothetical G65 P_ + M98 P_ on the same block expands the G65 macro first (would be an unusual but legal composition). Detection is on the Parsing.G65 sub-object written by G65Syntax (a ParameterizedFlagSyntax) — the keyword \"G65\" never reaches Parsing.Flags because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. FanucModalMacroSyntax Handles Fanuc Custom Macro B modal-call lifecycle (G66 setup, G67 cancel, and per-motion-block implicit macro invocation). The same class is registered twice in the pipeline via Phase — once in the Evaluation bundle (Setup, captures G66/G67 edges and carries the FanucModalMacro state block-to-block) and once in the PostLogic bundle (Expansion, on every motion block within an active G66 modal, inlines the macro body via the same mechanism FanucMacroCallSyntax uses). Keeping both phases in one class makes the pairing visually explicit: readers see \"G66 in one file\" and the two methods (DoSetup, DoExpansion) make the lifecycle obvious. The two factory helpers (Setup, Expansion) mirror the ModalCarrySyntax.Logic / .PostLogic pattern already in the codebase. FanucSystemControlVariableSyntax Consumes Fanuc-style system-control variable assignments (#3000-#3999) — alarm trigger (#3000), millisecond and hour clocks (#3001 / #3002), single-block / feed-hold bypass flags (#3003 / #3004), pause-with-message (#3006), mirror-image flags (#3007), date / time (#3011 / #3012), tool-life data (#3030 / #3032), etc. Every id in this range is a controller-side state variable — its authoritative value lives on the real hardware (RTC, alarm bus, override switches, …) and an NC write at most triggers a side effect (clock reset, alarm raise, message-pause prompt). Offline simulation has none of that machinery, so this syntax does not emulate the effect. Instead it: records the literal write on the block JSON under Vars.SystemControl (round-trip and cache-dump visibility); emits a FanucSystemControl--Unsupported UnsupportedMessage(ISentenceCarrier, string, string, object) so the user knows the assignment was recognised but its controller-side effect is not simulated. Message-severity (not Warning) because these writes are safe no-ops offline — every consumed assignment would emit a Warning per block, which would be noisy without signalling anything the user must act on; removes the entry from Parsing.Assignments so it does not re-surface as a generic Parsing--Unconsumed diagnostic. The dictionary carries forward block-by-block (same dict-merge pattern as VolatileVariableReadingSyntax) so a downstream consumer can read the most recent recorded value via SyntaxPiece linkage. Only literal numeric RHS values are consumed; non-literal RHS (e.g. #3002 = #500) is left in Parsing.Assignments for VariableEvaluatorSyntax to resolve, mirroring the retained / volatile reading syntaxes. Fanuc-family only — Siemens uses named system variables ($AC_TIME, $A_DAY, …) and Heidenhain uses FN18: SYSREAD; neither flows through Parsing.Assignments.#nnn. Enums FanucModalMacroSyntax.SyntaxPhase Identifies which pipeline phase the instance runs in. The two values correspond to the Evaluation-bundle and PostLogic-bundle registrations of this same syntax class." + }, + "api/Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html": { + "href": "api/Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html", + "title": "Class LabelScanUtil | HiAPI-C# 2025", + "summary": "Class LabelScanUtil Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Shared “re-segment a file and skip pieces until a label matches” scan, used by both FanucGotoSyntax (unconditional GOTO redirect) and SubProgramReturnSyntax (M99 P{seq} jump into the caller file). Reads the file via ReadLines(int, string, string), segments through the provided ISegmenter, runs the probeSyntaxes on each candidate block to extract IndexNote.Number, and returns the slice from the first matching block to EOF. Returns null when no block matches — the caller's responsibility to surface the appropriate diagnostic. The probes are idempotent because the downstream Parsing bundle re-runs the same syntaxes on the yielded pieces with no-op effect (the regex patterns no longer match once the N-prefix is consumed and the parenthesised comment stripped). public static class LabelScanUtil Inheritance object LabelScanUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods SegmentAndSkipUntilLabel(ISegmenter, string, string, int, int, int, List, NcDiagnosticProgress) Re-segments absPath from offset 0, scans for a block whose Number equals targetN (after the probeSyntaxes have stamped it in-place), and returns the sub-list of pieces from that block to EOF. Pieces are produced via GetSyntaxPieces(ISegmenter, IEnumerable, int, NcDiagnosticProgress, CancellationToken) with SentenceIndex stamped starting at sentenceIndexBegin. Returns null when no match is found; the caller emits its own brand-specific “label not found” diagnostic. The predicate is fixed at the IndexNote.Number section — the section name comes from nameof() so a future rename propagates without re-edits. Reconfigurability for non-standard label-output sections is achieved by replacing the probe syntaxes (the natural extension point) rather than parameterising the predicate path here: a probe stack that doesn't end up writing IndexNote on candidates is by definition not participating in this scan. public static List SegmentAndSkipUntilLabel(ISegmenter segmenter, string absPath, string labelPath, int fileIndex, int sentenceIndexBegin, int targetN, List probeSyntaxes, NcDiagnosticProgress diag) Parameters segmenter ISegmenter Segmenter used to slice the file into Sentence blocks. absPath string Absolute path to read line content from. labelPath string Project-relative path to stamp on each line's IndexedFileLine label (so diagnostics anchor to a relative form, not the resolver's transient absolute path). fileIndex int Fresh file index to stamp on each scanned line, allocated by the caller from FileIndexCounterDependency. sentenceIndexBegin int Starting execution-order index for the produced pieces. targetN int Integer label target to match against Number. probeSyntaxes List Ordered list of helper syntaxes to run on each candidate block before the predicate check (typically comment-stripper(s) followed by a head-index parser). May be null. diag NcDiagnosticProgress Sink for any diagnostics produced by the probe syntaxes (e.g. comment-stripper malformed-comment warnings). Returns List" + }, + "api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html": { + "href": "api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html", + "title": "Struct MacroFileResolver.ResolvedFile | HiAPI-C# 2025", + "summary": "Struct MacroFileResolver.ResolvedFile Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Tri-form resolution result. FileName is the bare matched name; RelPath is that name joined with the folder portion of the dependency (relative when the folder is configured relative, absolute fallback when it isn't); AbsPath is the fully-resolved I/O target. public readonly record struct MacroFileResolver.ResolvedFile : IEquatable Implements IEquatable Inherited Members ValueType.Equals(object) ValueType.GetHashCode() ValueType.ToString() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Extension Methods InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) MaskUtil.GetMaskedValue(T, T, bool) MaskUtil.SetMask(ref T, T, bool) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ResolvedFile(string, string, string) Tri-form resolution result. FileName is the bare matched name; RelPath is that name joined with the folder portion of the dependency (relative when the folder is configured relative, absolute fallback when it isn't); AbsPath is the fully-resolved I/O target. public ResolvedFile(string FileName, string RelPath, string AbsPath) Parameters FileName string RelPath string AbsPath string Properties AbsPath public string AbsPath { get; init; } Property Value string FileName public string FileName { get; init; } Property Value string RelPath public string RelPath { get; init; } Property Value string" + }, + "api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.html": { + "href": "api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.html", + "title": "Class MacroFileResolver | HiAPI-C# 2025", + "summary": "Class MacroFileResolver Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Shared subprogram-/macro-file resolver for Fanuc-style O lookups consumed by SubProgramCallSyntax (M98 / M198) and FanucMacroCallSyntax (G65). Single helper so the three path forms — file name, project-relative path, absolute path — are produced together at one site and each caller gets exactly the form it should consume: FileName — bare O####.NC form the resolver matched. Stored in JSON sections (FanucMacroCall, SubProgramCall) as the structural NC-language identifier; independent of which folder the dependency happened to be pointing at, so the JSON stays portable across environments. RelPath — relative path against the project base directory (e.g. \"NC/O1234.NC\"). Used as the IndexedFileLine label so diagnostics on inlined blocks align with the relative form already used for the main file label. AbsPath — absolute path. Used only at the ReadLines(int, string, string) call site for actual disk I/O; never persisted, never returned to JSON. Lives inside the resolver's stack frame and the segmenter's enumeration. Filename lookup order (first match wins) mirrors real Fanuc fallback: O{P:D4}.NC, O{P}.NC, O{P:D4}, O{P}, {P:D4}.NC, {P}.NC. Case-insensitive match is delegated to the host filesystem (Windows is, Linux is not). public static class MacroFileResolver Inheritance object MacroFileResolver Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields FilenamePatterns Filename-resolution fallback chain. Patterns are formatted with the P parameter as the only positional arg. public static readonly string[] FilenamePatterns Field Value string[] Methods ReadLines(int, string, string) Streams IndexedFileLine entries from absPath but stamps each entry's FilePath with the project-relative labelPath. Mirrors the manual loop in GetIndexedFileLines(string, IEnumerable, int, NcDiagnosticProgress, CancellationToken) for the main file so inlined macros stay consistent with the rest of the pipeline (diagnostics anchored to a relative label, not the resolver's transient absolute path). public static IEnumerable ReadLines(int fileIndex, string absPath, string labelPath) Parameters fileIndex int absPath string labelPath string Returns IEnumerable Resolve(string, int, string) Resolves an O

    file against the given folder, returning all three path forms. Returns null when the folder cannot be anchored (relative folder but no baseDirectory), the resolved folder does not exist, or no filename pattern matched. folder may be absolute (used as-is) or relative (combined with baseDirectory). Empty / null folder means \"look directly in baseDirectory\". When the folder is absolute, RelPath falls back to absolute too — there's no natural relative form when the user explicitly configured an out-of-project folder. public static MacroFileResolver.ResolvedFile? Resolve(string folder, int p, string baseDirectory) Parameters folder string p int baseDirectory string Returns MacroFileResolver.ResolvedFile?" + }, + "api/Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html": { + "href": "api/Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html", + "title": "Class MacroInlineUtil | HiAPI-C# 2025", + "summary": "Class MacroInlineUtil Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Shared inline mechanism for Fanuc Custom Macro B body expansion — used by both FanucMacroCallSyntax (one-shot) and FanucModalMacroSyntax's expansion phase (modal trigger). Both callers do the same three things on every produced SyntaxPiece: stamp a FanucMacroCall clone, stamp a fresh MacroFrame id, and stamp argument bindings into Vars.Local. Centralising lets the two call sites stay in lock-step — frame allocation, file-index allocation, and the inline-piece JSON shape are guaranteed identical. Frame ids share the same FileIndexCounterDependency counter as file indices — both just need within-session uniqueness and the counter is rewound on session start in lock-step with the pipeline. The main NC file is allocated index 0 first, so all inline frame ids land at > 0 and never collide with main. public static class MacroInlineUtil Inheritance object MacroInlineUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods ApplyLocalBindings(JsonObject, IReadOnlyDictionary) Writes the resolved #N → value bindings into Vars.Local on the given block. No-op when bindings is empty. Always overwrites any pre-existing Vars.Local on the block — for inlined macro bodies this is a fresh stamp. public static void ApplyLocalBindings(JsonObject json, IReadOnlyDictionary bindings) Parameters json JsonObject bindings IReadOnlyDictionary BuildInlinedPieces(ResolvedFile, int, IReadOnlyDictionary, JsonObject, JsonObject, FileIndexCounterDependency, ISegmenter, int, NcDiagnosticProgress) Yields L repetitions of the macro body as inline-ready SyntaxPiece entries. Each repetition gets its own freshly-allocated FileIndex and MacroFrame id; every yielded piece is stamped with a deep clone of callRecord, the frame id, and the resolved #N → value bindings. The caller passes the result to LazyLinkedList.PrependSource on the source layer. public static IEnumerable BuildInlinedPieces(MacroFileResolver.ResolvedFile resolvedFile, int l, IReadOnlyDictionary bindings, JsonObject callRecord, JsonObject pushedCallStack, FileIndexCounterDependency counterDep, ISegmenter segmenter, int sentenceIndexBegin, NcDiagnosticProgress ncDiagnosticProgress) Parameters resolvedFile MacroFileResolver.ResolvedFile l int bindings IReadOnlyDictionary callRecord JsonObject pushedCallStack JsonObject counterDep FileIndexCounterDependency segmenter ISegmenter sentenceIndexBegin int ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable BuildLocalBindings(JsonObject) Translates the argument-letter map captured by the host call ({ “A”: 1.5, “B”: 2.0, ... }) into the #N → value bindings the macro body's expression evaluator will read off Vars.Local. Skips non-numeric (string) args silently — those are unresolved variable references that the evaluator's own VariableExpression–Unevaluated diagnostic will surface; writing a string into Vars.Local would just propagate the residue. public static Dictionary BuildLocalBindings(JsonObject args) Parameters args JsonObject Returns Dictionary" }, "api/Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html", "title": "Class RetainedCommonVariableReadingSyntax | HiAPI-C# 2025", - "summary": "Class RetainedCommonVariableReadingSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Obtains values for Fanuc-style retained common variables (#500-#999) by consuming literal numeric assignments from Parsing.Assignments.#nnn and writing them straight to a registered RetainedCommonVariableTable. No SyntaxPiece JSON mirror is created — the table is the single source of truth for retained values, and VariableEvaluatorSyntax reads from the table directly. The hincproj round-trip preserves writes across project sessions. Only literal numeric RHS values are consumed by this syntax (#500 = 1.234 ✓; #600 = #500 + 1 ✗). Non-literal RHS entries are left untouched in Parsing.Assignments; VariableEvaluatorSyntax resolves them and writes the result through the same table. The two syntaxes are decoupled. If no RetainedCommonVariableTable is registered on the runner's NcDependencyList, this syntax is a no-op. public class RetainedCommonVariableReadingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object RetainedCommonVariableReadingSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors RetainedCommonVariableReadingSyntax() Default constructor. public RetainedCommonVariableReadingSyntax() RetainedCommonVariableReadingSyntax(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). No state to deserialise. public RetainedCommonVariableReadingSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class RetainedCommonVariableReadingSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Obtains values for Fanuc-style retained common variables (#500-#999) by consuming literal numeric assignments from Parsing.Assignments.#nnn and writing them straight to a registered RetainedCommonVariableTable. No SyntaxPiece JSON mirror is created — the table is the single source of truth for retained values, and VariableEvaluatorSyntax reads from the table directly. The hincproj round-trip preserves writes across project sessions. Only literal numeric RHS values are consumed by this syntax (#500 = 1.234 ✓; #600 = #500 + 1 ✗). Non-literal RHS entries are left untouched in Parsing.Assignments; VariableEvaluatorSyntax resolves them and writes the result through the same table. The two syntaxes are decoupled. If no RetainedCommonVariableTable is registered on the runner's NcDependencyList, this syntax is a no-op. public class RetainedCommonVariableReadingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object RetainedCommonVariableReadingSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors RetainedCommonVariableReadingSyntax() Default constructor. public RetainedCommonVariableReadingSyntax() RetainedCommonVariableReadingSyntax(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). No state to deserialise. public RetainedCommonVariableReadingSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html", "title": "Class SubProgramCallSyntax | HiAPI-C# 2025", - "summary": "Class SubProgramCallSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Inlines a Fanuc-style subprogram into the source layer when an M98 or M198 host block is reached. M98 P_ L_ reads the matching O

    file from InternalFolder; M198 P_ reads from ExternalFolder (Fanuc external-storage call — same mechanism as M98, different lookup root). The file is segmented through the host runner's segmenter (SegmenterDependency) and the resulting SyntaxPieces are prepended into layers[0] via PrependSource(IEnumerable); the rest of the pipeline picks them up through ordinary walkNode.Next traversal as if they had always been part of the host file. Pipeline placement: first child of the Fanuc Evaluation BundleSyntax. By the time this runs, M98Syntax / M198Syntax (each a ParameterizedFlagSyntax) have written a Parsing.M98 / Parsing.M198 sub-object carrying the captured P / L parameters. Note: those sub-objects are this syntax's only trigger — \"M98\" / \"M198\" never reach Parsing.Flags, because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. Filename lookup uses a fallback chain: O{P:D4}.NC, O{P}.NC, O{P:D4}, O{P}, {P:D4}.NC, {P}.NC — first match wins. Case-insensitive match is delegated to the host filesystem (Windows is, Linux is not). L > 1 inlines the same subprogram L times in series. Each repetition is a fresh segmentation pass so each block gets its own SyntaxPiece with an independent JSON object — the downstream pipeline mutates JSON in place and would clobber sibling repetitions if instances were shared. Not yet supported: M99 P{seq} early return inside a subprogram, partial-program calls (M98 P{seq}{prog} split encoding), and arg binding (G65 macro is a separate syntax). public class SubProgramCallSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object SubProgramCallSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SubProgramCallSyntax() Parameterless instance for bundle composition (no XML state). public SubProgramCallSyntax() SubProgramCallSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public SubProgramCallSyntax(XElement src) Parameters src XElement Root element named XName. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class SubProgramCallSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Inlines a Fanuc-style subprogram into the source layer when an M98 or M198 host block is reached. M98 P_ L_ reads the matching O

    file from InternalFolder; M198 P_ reads from ExternalFolder (Fanuc external-storage call — same mechanism as M98, different lookup root). The file is segmented through the host runner's segmenter (SegmenterDependency) and the resulting SyntaxPieces are prepended into layers[0] via PrependSource(IEnumerable); the rest of the pipeline picks them up through ordinary walkNode.Next traversal as if they had always been part of the host file. Pipeline placement: first child of the Fanuc Evaluation BundleSyntax. By the time this runs, M98Syntax / M198Syntax (each a ParameterizedFlagSyntax) have written a Parsing.M98 / Parsing.M198 sub-object carrying the captured P / L parameters. Note: those sub-objects are this syntax's only trigger — \"M98\" / \"M198\" never reach Parsing.Flags, because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. Filename lookup uses a fallback chain: O{P:D4}.NC, O{P}.NC, O{P:D4}, O{P}, {P:D4}.NC, {P}.NC — first match wins. Case-insensitive match is delegated to the host filesystem (Windows is, Linux is not). L > 1 inlines the same subprogram L times in series. Each repetition is a fresh segmentation pass so each block gets its own SyntaxPiece with an independent JSON object — the downstream pipeline mutates JSON in place and would clobber sibling repetitions if instances were shared. Not yet supported: M99 P{seq} early return inside a subprogram and partial-program calls (M98 P{seq}{prog} split encoding). Custom Macro B argument-binding calls (G65 / G66 / G67) live in FanucMacroCallSyntax and FanucModalMacroSyntax — those handle the argument-letter-to-#1..#26 binding and the macro-call frame isolation that M98 deliberately does not provide. public class SubProgramCallSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object SubProgramCallSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SubProgramCallSyntax() Parameterless instance for bundle composition (no XML state). public SubProgramCallSyntax() SubProgramCallSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public SubProgramCallSyntax(XElement src) Parameters src XElement Root element named XName. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html", "title": "Class SubProgramReturnSyntax | HiAPI-C# 2025", - "summary": "Class SubProgramReturnSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Consumes Fanuc-style M99 subprogram-return blocks. In the inline model used by SubProgramCallSyntax, a plain M99 at the end of a subprogram is implicit: the inlined blocks are followed in layers[0] by the caller's next block, so the natural pipeline traversal already does the \"return\". This syntax therefore only consumes the M99 flag (so UnconsumedCheckSyntax doesn't warn) and records a SubProgramReturn section for cache-dump visibility. M99 P{seq} (return to caller's N{seq} sequence number) is captured in P but not yet honoured — the subprogram tail still proceeds straight into the caller's next block. Implementing the jump requires a forward scan of the post-host caller blocks for a matching N{seq} head index, then dropping the intervening blocks; deferred until the caller-side walk semantics are designed. Pipeline placement: anywhere after Parsing has populated Parsing.M99. Conventionally placed alongside SubProgramCallSyntax at the head of the Evaluation bundle so call/return live next to each other. Detection is on the Parsing.M99 sub-object written by M99Syntax (a ParameterizedFlagSyntax) — the keyword \"M99\" never reaches Parsing.Flags because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. public class SubProgramReturnSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object SubProgramReturnSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SubProgramReturnSyntax() Parameterless instance for bundle composition (no XML state). public SubProgramReturnSyntax() SubProgramReturnSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public SubProgramReturnSyntax(XElement src) Parameters src XElement Root element named XName. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class SubProgramReturnSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Consumes Fanuc-style M99 subprogram-return blocks and pops one CallStack frame. Plain M99 relies on the natural pipeline tail — the inlined body's last block is followed in layers[0] by the caller's next block, so the “return” happens implicitly; this syntax only consumes the M99 trigger (so UnconsumedCheckSyntax doesn't warn), stamps a SubProgramReturn diagnostic section, and writes the popped CallStack for downstream blocks to carry. M99 P{seq} additionally redirects control flow to the caller's N{seq} block via ReplaceSource(IEnumerable). The caller's file is resolved from the popped frame's CallerFilePath; the scan uses the same SegmentAndSkipUntilLabel(ISegmenter, string, string, int, int, int, List, NcDiagnosticProgress) helper as FanucGotoSyntax, with hardcoded Fanuc-default probes (QuoteCommentSyntax + HeadIndexSyntax with symbol \"N\") because the M99 P semantic itself is Fanuc-family-only and Mazak / Syntec follow the same conventions. The iteration is counted against FanucGotoIterationDependency, sharing the same runaway-loop guard as GOTO — keyed on the same (FileName, TargetN) bucket so a tight M98 → M99 P → M98 … loop trips the same threshold. Pipeline placement: same Evaluation bundle slot it always occupied, right after SubProgramCallSyntax at the head. Needs FanucGotoIterationDependency, ProjectFolderDependency, SegmenterDependency, SyntaxPieceLayerDependency, FileIndexCounterDependency on the dep list when M99 P{seq} is to fire; without them the plain-M99 path still works and the P-jump emits a configuration warning. Detection is on the Parsing.M99 sub-object written by M99Syntax (a ParameterizedFlagSyntax) — the keyword \"M99\" never reaches Parsing.Flags because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. public class SubProgramReturnSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object SubProgramReturnSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SubProgramReturnSyntax() Parameterless instance with default probe list. public SubProgramReturnSyntax() SubProgramReturnSyntax(XElement, string, IProgress) Loads LabelProbeSyntaxes from XML produced by MakeXmlSource(string, string, bool). An absent wrapper falls back to the default probe list. public SubProgramReturnSyntax(XElement src, string baseDirectory, IProgress progress) Parameters src XElement Root element named XName. baseDirectory string Project base directory propagated to child XFactory calls. progress IProgress Diagnostic sink propagated to child factories. Properties LabelProbeSyntaxes Ordered list of probe syntaxes run on each candidate block during the M99 P{seq} caller-side scan, before the integer label predicate fires. Defaults match Fanuc / Mazak / Syntec (parenthesised comment stripper + N head-index parser); API customers can swap or extend (e.g. add a TailCommentSyntax for ; end-of-block comments, or insert a BlockSkipSyntax to exclude /-prefixed candidates) without subclassing. Mirrors the same hosted-list pattern as LabelProbeSyntaxes. public List LabelProbeSyntaxes { get; set; } Property Value List Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html", "title": "Class VariableEvaluatorSyntax | HiAPI-C# 2025", - "summary": "Class VariableEvaluatorSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Pure expression normalizer for Custom Macro B syntax. Walks the parser-stage residue on a single block and inlines numeric values wherever a Fanuc-style variable reference or bracket expression appears — but does not write to any specific store. Routing “where the resolved literal lands” stays in the brand-specific reader syntaxes (VolatileVariableReadingSyntax, RetainedCommonVariableTable's reader, FanucSystemControlVariableSyntax, …) which run after this syntax on the same block. Two passes per block: Assignments normalize — Parsing.Assignments.#nnn entries whose RHS is non-literal (e.g. \"#500+1\", \"SQRT[#100]\") are evaluated via the VariableEvaluatorSyntax.ChainLookup and the RHS string is replaced with the resolved literal (round-trip-safe \"R\"-format). The entry stays in Parsing.Assignments so downstream reader syntaxes consume it as a pure-literal assignment. Iteration follows source order (Parsing.Assignments insertion order). Parsing tree substitution — every string-typed value reachable from Parsing. (axis tags, canned-cycle sub-objects) is parsed; on a successful evaluation the string is replaced with a numeric JsonValue. Failures silently leave the original string and rely on downstream GetParsedDouble(JsonObject, string, Sentence, NcDiagnosticProgress) at consumer sites to surface VariableExpression--Unevaluated only if the tag is actually read. Lookup chain (first non-null wins, configured per brand preset via RuntimeVariableLookups + IVariableLookup instances on NcDependencyList): Current block's own resolved assignments — built-in to VariableEvaluatorSyntax.ChainLookup; covers same-block forward references in source order (an earlier #nnn=literal is visible to a later RHS that mentions #nnn). Each IRuntimeVariableLookup in RuntimeVariableLookups, in list order. Typical contents for a Fanuc-family preset: LocalVariableLookup (#1-#33), VolatileVariableLookup (#100-#499), FanucPositionVariableLookup (#5001-#5043). Each IVariableLookup on the runner's NcDependencyList, in registration order (RetainedCommonVariableTable, FanucParameterTable, FanucToolOffsetVariableLookup). Each lookup self-gates its id range; the evaluator stays brand- and range-agnostic. Adding a new variable surface is additive: register an IVariableLookup on a dependency or push an IRuntimeVariableLookup onto the per-preset list. Same-block forward reference — when an Assignment RHS references a #nnn that is also being assigned later in the same block (i.e. listed in Parsing.Assignments after the RHS being evaluated), the VariableEvaluatorSyntax.ChainLookup cannot pick up the not-yet-resolved value and falls back to traceback / dependency-table reads — effectively the pre-block value. A VariableEvaluator--SameBlockForwardReference warning is emitted per such RHS so the user is told the source-order semantics were not honoured. Practical impact is near-zero for typical CAM-emitted NC (one assignment per line). public class VariableEvaluatorSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object VariableEvaluatorSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors VariableEvaluatorSyntax() Default constructor. public VariableEvaluatorSyntax() VariableEvaluatorSyntax(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). No state to deserialise. public VariableEvaluatorSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string RuntimeVariableLookups Per-preset list of context-sensitive lookups (block-local Vars.Local / Vars.Volatile, position reads, runtime-state reads). Walked in list order, before the dependency-bound IVariableLookups. Brand presets configure this — instances are not XML-serialised because they are brand-determined behaviour, not project state. public List RuntimeVariableLookups { get; set; } Property Value List XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class VariableEvaluatorSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Pure expression normalizer for Custom Macro B syntax. Walks the parser-stage residue on a single block and inlines numeric values wherever a Fanuc-style variable reference or bracket expression appears — but does not write to any specific store. Routing “where the resolved literal lands” stays in the brand-specific reader syntaxes (VolatileVariableReadingSyntax, RetainedCommonVariableTable's reader, FanucSystemControlVariableSyntax, …) which run after this syntax on the same block. Two passes per block: Assignments normalize — Parsing.Assignments.#nnn entries whose RHS is non-literal (e.g. \"#500+1\", \"SQRT[#100]\") are evaluated via the VariableEvaluatorSyntax.ChainLookup and the RHS string is replaced with the resolved literal (round-trip-safe \"R\"-format). The entry stays in Parsing.Assignments so downstream reader syntaxes consume it as a pure-literal assignment. Iteration follows source order (Parsing.Assignments insertion order). Parsing tree substitution — every string-typed value reachable from Parsing. (axis tags, canned-cycle sub-objects) is parsed; on a successful evaluation the string is replaced with a numeric JsonValue. Failures silently leave the original string and rely on downstream GetParsedDouble(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) at consumer sites to surface VariableExpression--Unevaluated only if the tag is actually read. Lookup chain (first non-null wins, configured per brand preset via RuntimeVariableLookups + IVariableLookup instances on NcDependencyList): Current block's own resolved assignments — built-in to VariableEvaluatorSyntax.ChainLookup; covers same-block forward references in source order (an earlier #nnn=literal is visible to a later RHS that mentions #nnn). Each IRuntimeVariableLookup in RuntimeVariableLookups, in list order. Typical contents for a Fanuc-family preset: LocalVariableLookup (#1-#33), VolatileVariableLookup (#100-#499), FanucPositionVariableLookup (#5001-#5043). Each IVariableLookup on the runner's NcDependencyList, in registration order (RetainedCommonVariableTable, FanucParameterTable, FanucToolOffsetVariableLookup). Each lookup self-gates its id range; the evaluator stays brand- and range-agnostic. Adding a new variable surface is additive: register an IVariableLookup on a dependency or push an IRuntimeVariableLookup onto the per-preset list. Same-block forward reference — when an Assignment RHS references a #nnn that is also being assigned later in the same block (i.e. listed in Parsing.Assignments after the RHS being evaluated), the VariableEvaluatorSyntax.ChainLookup cannot pick up the not-yet-resolved value and falls back to traceback / dependency-table reads — effectively the pre-block value. A VariableEvaluator--SameBlockForwardReference warning is emitted per such RHS so the user is told the source-order semantics were not honoured. Practical impact is near-zero for typical CAM-emitted NC (one assignment per line). public class VariableEvaluatorSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object VariableEvaluatorSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors VariableEvaluatorSyntax() Default constructor. public VariableEvaluatorSyntax() VariableEvaluatorSyntax(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool); restores RuntimeVariableLookups via XFactory dispatch. public VariableEvaluatorSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string RuntimeVariableLookups Per-preset list of context-sensitive lookups (block-local Vars.Local / Vars.Volatile, position reads, runtime-state reads). Walked in list order, before the dependency-bound IVariableLookups. Brand presets configure this; the list is XML-serialised so a runner rebuilt from XML keeps its brand-specific lookups (each impl is stateless and dispatches by its XName via XFactory). public List RuntimeVariableLookups { get; set; } Property Value List XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html", "title": "Class VolatileVariableReadingSyntax | HiAPI-C# 2025", - "summary": "Class VolatileVariableReadingSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Obtains values for Fanuc-style non-retained common variables (#100-#499). Reads literal numeric assignments from Parsing.Assignments.#nnn, dict-merges them with the previous block's volatile state, and writes the resulting per-block dictionary into Vars.Volatile. Lifetime is bounded by MachiningSession: within one session the dictionary carries forward block-by-block via this syntax; session restart abandons the SyntaxPiece JSON dataflow and starts fresh. Program-end (M02/M30) clearing is handled by ProgramEndCleanSyntax. Only literal numeric RHS values are consumed by this syntax (#124 = 15. ✓; #100 = #1 + 5 ✗). Non-literal RHS entries are left untouched in Parsing.Assignments; VariableEvaluatorSyntax resolves them and writes the result into the same per-block dictionary. The two syntaxes are decoupled — the evaluator's lookup tracebacks via SyntaxPiece linkage so it does not depend on having run before or after this syntax. public class VolatileVariableReadingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object VolatileVariableReadingSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors VolatileVariableReadingSyntax() Default constructor. public VolatileVariableReadingSyntax() VolatileVariableReadingSyntax(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). No state to deserialise. public VolatileVariableReadingSyntax(XElement src) Parameters src XElement Fields VolatileMax Inclusive upper bound of the non-retained common range (#499). public const int VolatileMax = 499 Field Value int VolatileMin Inclusive lower bound of the non-retained common range (#100). public const int VolatileMin = 100 Field Value int Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class VolatileVariableReadingSyntax Namespace Hi.NcParsers.EvaluationSyntaxs Assembly HiMech.dll Obtains values for Fanuc-style non-retained common variables (#100-#499). Reads literal numeric assignments from Parsing.Assignments.#nnn, dict-merges them with the previous block's volatile state, and writes the resulting per-block dictionary into Vars.Volatile. Lifetime is bounded by MachiningSession: within one session the dictionary carries forward block-by-block via this syntax; session restart abandons the SyntaxPiece JSON dataflow and starts fresh. Program-end (M02/M30) clearing is handled by ProgramEndCleanSyntax. Only literal numeric RHS values are consumed by this syntax (#124 = 15. ✓; #100 = #1 + 5 ✗). Non-literal RHS entries are left untouched in Parsing.Assignments; VariableEvaluatorSyntax resolves them and writes the result into the same per-block dictionary. The two syntaxes are decoupled — the evaluator's lookup tracebacks via SyntaxPiece linkage so it does not depend on having run before or after this syntax. public class VolatileVariableReadingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object VolatileVariableReadingSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors VolatileVariableReadingSyntax() Default constructor. public VolatileVariableReadingSyntax() VolatileVariableReadingSyntax(XElement) Loads from an XML element produced by MakeXmlSource(string, string, bool). No state to deserialise. public VolatileVariableReadingSyntax(XElement src) Parameters src XElement Fields VolatileMax Inclusive upper bound of the non-retained common range (#499). public const int VolatileMax = 499 Field Value int VolatileMin Inclusive lower bound of the non-retained common range (#100). public const int VolatileMin = 100 Field Value int Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.EvaluationSyntaxs.html": { "href": "api/Hi.NcParsers.EvaluationSyntaxs.html", "title": "Namespace Hi.NcParsers.EvaluationSyntaxs | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.EvaluationSyntaxs Classes FanucSystemControlVariableSyntax Consumes Fanuc-style system-control variable assignments (#3000-#3999) — alarm trigger (#3000), millisecond and hour clocks (#3001 / #3002), single-block / feed-hold bypass flags (#3003 / #3004), pause-with-message (#3006), mirror-image flags (#3007), date / time (#3011 / #3012), tool-life data (#3030 / #3032), etc. Every id in this range is a controller-side state variable — its authoritative value lives on the real hardware (RTC, alarm bus, override switches, …) and an NC write at most triggers a side effect (clock reset, alarm raise, message-pause prompt). Offline simulation has none of that machinery, so this syntax does not emulate the effect. Instead it: records the literal write on the block JSON under Vars.SystemControl (round-trip and cache-dump visibility); emits a FanucSystemControl--Unsupported UnsupportedMessage(Sentence, string, string, object) so the user knows the assignment was recognised but its controller-side effect is not simulated. Message-severity (not Warning) because these writes are safe no-ops offline — every consumed assignment would emit a Warning per block, which would be noisy without signalling anything the user must act on; removes the entry from Parsing.Assignments so it does not re-surface as a generic Parsing--Unconsumed diagnostic. The dictionary carries forward block-by-block (same dict-merge pattern as VolatileVariableReadingSyntax) so a downstream consumer can read the most recent recorded value via SyntaxPiece linkage. Only literal numeric RHS values are consumed; non-literal RHS (e.g. #3002 = #500) is left in Parsing.Assignments for VariableEvaluatorSyntax to resolve, mirroring the retained / volatile reading syntaxes. Fanuc-family only — Siemens uses named system variables ($AC_TIME, $A_DAY, …) and Heidenhain uses FN18: SYSREAD; neither flows through Parsing.Assignments.#nnn. RetainedCommonVariableReadingSyntax Obtains values for Fanuc-style retained common variables (#500-#999) by consuming literal numeric assignments from Parsing.Assignments.#nnn and writing them straight to a registered RetainedCommonVariableTable. No SyntaxPiece JSON mirror is created — the table is the single source of truth for retained values, and VariableEvaluatorSyntax reads from the table directly. The hincproj round-trip preserves writes across project sessions. Only literal numeric RHS values are consumed by this syntax (#500 = 1.234 ✓; #600 = #500 + 1 ✗). Non-literal RHS entries are left untouched in Parsing.Assignments; VariableEvaluatorSyntax resolves them and writes the result through the same table. The two syntaxes are decoupled. If no RetainedCommonVariableTable is registered on the runner's NcDependencyList, this syntax is a no-op. SubProgramCallSyntax Inlines a Fanuc-style subprogram into the source layer when an M98 or M198 host block is reached. M98 P_ L_ reads the matching O

    file from InternalFolder; M198 P_ reads from ExternalFolder (Fanuc external-storage call — same mechanism as M98, different lookup root). The file is segmented through the host runner's segmenter (SegmenterDependency) and the resulting SyntaxPieces are prepended into layers[0] via PrependSource(IEnumerable); the rest of the pipeline picks them up through ordinary walkNode.Next traversal as if they had always been part of the host file. Pipeline placement: first child of the Fanuc Evaluation BundleSyntax. By the time this runs, M98Syntax / M198Syntax (each a ParameterizedFlagSyntax) have written a Parsing.M98 / Parsing.M198 sub-object carrying the captured P / L parameters. Note: those sub-objects are this syntax's only trigger — \"M98\" / \"M198\" never reach Parsing.Flags, because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. Filename lookup uses a fallback chain: O{P:D4}.NC, O{P}.NC, O{P:D4}, O{P}, {P:D4}.NC, {P}.NC — first match wins. Case-insensitive match is delegated to the host filesystem (Windows is, Linux is not). L > 1 inlines the same subprogram L times in series. Each repetition is a fresh segmentation pass so each block gets its own SyntaxPiece with an independent JSON object — the downstream pipeline mutates JSON in place and would clobber sibling repetitions if instances were shared. Not yet supported: M99 P{seq} early return inside a subprogram, partial-program calls (M98 P{seq}{prog} split encoding), and arg binding (G65 macro is a separate syntax). SubProgramReturnSyntax Consumes Fanuc-style M99 subprogram-return blocks. In the inline model used by SubProgramCallSyntax, a plain M99 at the end of a subprogram is implicit: the inlined blocks are followed in layers[0] by the caller's next block, so the natural pipeline traversal already does the \"return\". This syntax therefore only consumes the M99 flag (so UnconsumedCheckSyntax doesn't warn) and records a SubProgramReturn section for cache-dump visibility. M99 P{seq} (return to caller's N{seq} sequence number) is captured in P but not yet honoured — the subprogram tail still proceeds straight into the caller's next block. Implementing the jump requires a forward scan of the post-host caller blocks for a matching N{seq} head index, then dropping the intervening blocks; deferred until the caller-side walk semantics are designed. Pipeline placement: anywhere after Parsing has populated Parsing.M99. Conventionally placed alongside SubProgramCallSyntax at the head of the Evaluation bundle so call/return live next to each other. Detection is on the Parsing.M99 sub-object written by M99Syntax (a ParameterizedFlagSyntax) — the keyword \"M99\" never reaches Parsing.Flags because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. VariableEvaluatorSyntax Pure expression normalizer for Custom Macro B syntax. Walks the parser-stage residue on a single block and inlines numeric values wherever a Fanuc-style variable reference or bracket expression appears — but does not write to any specific store. Routing “where the resolved literal lands” stays in the brand-specific reader syntaxes (VolatileVariableReadingSyntax, RetainedCommonVariableTable's reader, FanucSystemControlVariableSyntax, …) which run after this syntax on the same block. Two passes per block: Assignments normalize — Parsing.Assignments.#nnn entries whose RHS is non-literal (e.g. \"#500+1\", \"SQRT[#100]\") are evaluated via the VariableEvaluatorSyntax.ChainLookup and the RHS string is replaced with the resolved literal (round-trip-safe \"R\"-format). The entry stays in Parsing.Assignments so downstream reader syntaxes consume it as a pure-literal assignment. Iteration follows source order (Parsing.Assignments insertion order). Parsing tree substitution — every string-typed value reachable from Parsing. (axis tags, canned-cycle sub-objects) is parsed; on a successful evaluation the string is replaced with a numeric JsonValue. Failures silently leave the original string and rely on downstream GetParsedDouble(JsonObject, string, Sentence, NcDiagnosticProgress) at consumer sites to surface VariableExpression--Unevaluated only if the tag is actually read. Lookup chain (first non-null wins, configured per brand preset via RuntimeVariableLookups + IVariableLookup instances on NcDependencyList): Current block's own resolved assignments — built-in to VariableEvaluatorSyntax.ChainLookup; covers same-block forward references in source order (an earlier #nnn=literal is visible to a later RHS that mentions #nnn). Each IRuntimeVariableLookup in RuntimeVariableLookups, in list order. Typical contents for a Fanuc-family preset: LocalVariableLookup (#1-#33), VolatileVariableLookup (#100-#499), FanucPositionVariableLookup (#5001-#5043). Each IVariableLookup on the runner's NcDependencyList, in registration order (RetainedCommonVariableTable, FanucParameterTable, FanucToolOffsetVariableLookup). Each lookup self-gates its id range; the evaluator stays brand- and range-agnostic. Adding a new variable surface is additive: register an IVariableLookup on a dependency or push an IRuntimeVariableLookup onto the per-preset list. Same-block forward reference — when an Assignment RHS references a #nnn that is also being assigned later in the same block (i.e. listed in Parsing.Assignments after the RHS being evaluated), the VariableEvaluatorSyntax.ChainLookup cannot pick up the not-yet-resolved value and falls back to traceback / dependency-table reads — effectively the pre-block value. A VariableEvaluator--SameBlockForwardReference warning is emitted per such RHS so the user is told the source-order semantics were not honoured. Practical impact is near-zero for typical CAM-emitted NC (one assignment per line). VolatileVariableReadingSyntax Obtains values for Fanuc-style non-retained common variables (#100-#499). Reads literal numeric assignments from Parsing.Assignments.#nnn, dict-merges them with the previous block's volatile state, and writes the resulting per-block dictionary into Vars.Volatile. Lifetime is bounded by MachiningSession: within one session the dictionary carries forward block-by-block via this syntax; session restart abandons the SyntaxPiece JSON dataflow and starts fresh. Program-end (M02/M30) clearing is handled by ProgramEndCleanSyntax. Only literal numeric RHS values are consumed by this syntax (#124 = 15. ✓; #100 = #1 + 5 ✗). Non-literal RHS entries are left untouched in Parsing.Assignments; VariableEvaluatorSyntax resolves them and writes the result into the same per-block dictionary. The two syntaxes are decoupled — the evaluator's lookup tracebacks via SyntaxPiece linkage so it does not depend on having run before or after this syntax." + "summary": "Namespace Hi.NcParsers.EvaluationSyntaxs Classes CallStackUtil Push / pop helpers for the per-block CallStack section. Both produce a fresh deep-cloned JsonObject ready to stamp onto an inlined piece (push site) or onto an M99 return block (pop site); the caller is responsible for deep-cloning again if it distributes the same stamp across multiple pieces of an L-repetition. Pairs with ModalCarrySyntax at the Logic stage: explicit push / pop writes seed the section at frame boundaries, ModalCarry copies it forward to every block in between so each block is self-contained for cache-dump readers and downstream consumers (notably M99 P{seq} reading the top frame's CallerFilePath). LabelScanUtil Shared “re-segment a file and skip pieces until a label matches” scan, used by both FanucGotoSyntax (unconditional GOTO redirect) and SubProgramReturnSyntax (M99 P{seq} jump into the caller file). Reads the file via ReadLines(int, string, string), segments through the provided ISegmenter, runs the probeSyntaxes on each candidate block to extract IndexNote.Number, and returns the slice from the first matching block to EOF. Returns null when no block matches — the caller's responsibility to surface the appropriate diagnostic. The probes are idempotent because the downstream Parsing bundle re-runs the same syntaxes on the yielded pieces with no-op effect (the regex patterns no longer match once the N-prefix is consumed and the parenthesised comment stripped). MacroFileResolver Shared subprogram-/macro-file resolver for Fanuc-style O lookups consumed by SubProgramCallSyntax (M98 / M198) and FanucMacroCallSyntax (G65). Single helper so the three path forms — file name, project-relative path, absolute path — are produced together at one site and each caller gets exactly the form it should consume: FileName — bare O####.NC form the resolver matched. Stored in JSON sections (FanucMacroCall, SubProgramCall) as the structural NC-language identifier; independent of which folder the dependency happened to be pointing at, so the JSON stays portable across environments. RelPath — relative path against the project base directory (e.g. \"NC/O1234.NC\"). Used as the IndexedFileLine label so diagnostics on inlined blocks align with the relative form already used for the main file label. AbsPath — absolute path. Used only at the ReadLines(int, string, string) call site for actual disk I/O; never persisted, never returned to JSON. Lives inside the resolver's stack frame and the segmenter's enumeration. Filename lookup order (first match wins) mirrors real Fanuc fallback: O{P:D4}.NC, O{P}.NC, O{P:D4}, O{P}, {P:D4}.NC, {P}.NC. Case-insensitive match is delegated to the host filesystem (Windows is, Linux is not). MacroInlineUtil Shared inline mechanism for Fanuc Custom Macro B body expansion — used by both FanucMacroCallSyntax (one-shot) and FanucModalMacroSyntax's expansion phase (modal trigger). Both callers do the same three things on every produced SyntaxPiece: stamp a FanucMacroCall clone, stamp a fresh MacroFrame id, and stamp argument bindings into Vars.Local. Centralising lets the two call sites stay in lock-step — frame allocation, file-index allocation, and the inline-piece JSON shape are guaranteed identical. Frame ids share the same FileIndexCounterDependency counter as file indices — both just need within-session uniqueness and the counter is rewound on session start in lock-step with the pipeline. The main NC file is allocated index 0 first, so all inline frame ids land at > 0 and never collide with main. RetainedCommonVariableReadingSyntax Obtains values for Fanuc-style retained common variables (#500-#999) by consuming literal numeric assignments from Parsing.Assignments.#nnn and writing them straight to a registered RetainedCommonVariableTable. No SyntaxPiece JSON mirror is created — the table is the single source of truth for retained values, and VariableEvaluatorSyntax reads from the table directly. The hincproj round-trip preserves writes across project sessions. Only literal numeric RHS values are consumed by this syntax (#500 = 1.234 ✓; #600 = #500 + 1 ✗). Non-literal RHS entries are left untouched in Parsing.Assignments; VariableEvaluatorSyntax resolves them and writes the result through the same table. The two syntaxes are decoupled. If no RetainedCommonVariableTable is registered on the runner's NcDependencyList, this syntax is a no-op. SubProgramCallSyntax Inlines a Fanuc-style subprogram into the source layer when an M98 or M198 host block is reached. M98 P_ L_ reads the matching O

    file from InternalFolder; M198 P_ reads from ExternalFolder (Fanuc external-storage call — same mechanism as M98, different lookup root). The file is segmented through the host runner's segmenter (SegmenterDependency) and the resulting SyntaxPieces are prepended into layers[0] via PrependSource(IEnumerable); the rest of the pipeline picks them up through ordinary walkNode.Next traversal as if they had always been part of the host file. Pipeline placement: first child of the Fanuc Evaluation BundleSyntax. By the time this runs, M98Syntax / M198Syntax (each a ParameterizedFlagSyntax) have written a Parsing.M98 / Parsing.M198 sub-object carrying the captured P / L parameters. Note: those sub-objects are this syntax's only trigger — \"M98\" / \"M198\" never reach Parsing.Flags, because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. Filename lookup uses a fallback chain: O{P:D4}.NC, O{P}.NC, O{P:D4}, O{P}, {P:D4}.NC, {P}.NC — first match wins. Case-insensitive match is delegated to the host filesystem (Windows is, Linux is not). L > 1 inlines the same subprogram L times in series. Each repetition is a fresh segmentation pass so each block gets its own SyntaxPiece with an independent JSON object — the downstream pipeline mutates JSON in place and would clobber sibling repetitions if instances were shared. Not yet supported: M99 P{seq} early return inside a subprogram and partial-program calls (M98 P{seq}{prog} split encoding). Custom Macro B argument-binding calls (G65 / G66 / G67) live in FanucMacroCallSyntax and FanucModalMacroSyntax — those handle the argument-letter-to-#1..#26 binding and the macro-call frame isolation that M98 deliberately does not provide. SubProgramReturnSyntax Consumes Fanuc-style M99 subprogram-return blocks and pops one CallStack frame. Plain M99 relies on the natural pipeline tail — the inlined body's last block is followed in layers[0] by the caller's next block, so the “return” happens implicitly; this syntax only consumes the M99 trigger (so UnconsumedCheckSyntax doesn't warn), stamps a SubProgramReturn diagnostic section, and writes the popped CallStack for downstream blocks to carry. M99 P{seq} additionally redirects control flow to the caller's N{seq} block via ReplaceSource(IEnumerable). The caller's file is resolved from the popped frame's CallerFilePath; the scan uses the same SegmentAndSkipUntilLabel(ISegmenter, string, string, int, int, int, List, NcDiagnosticProgress) helper as FanucGotoSyntax, with hardcoded Fanuc-default probes (QuoteCommentSyntax + HeadIndexSyntax with symbol \"N\") because the M99 P semantic itself is Fanuc-family-only and Mazak / Syntec follow the same conventions. The iteration is counted against FanucGotoIterationDependency, sharing the same runaway-loop guard as GOTO — keyed on the same (FileName, TargetN) bucket so a tight M98 → M99 P → M98 … loop trips the same threshold. Pipeline placement: same Evaluation bundle slot it always occupied, right after SubProgramCallSyntax at the head. Needs FanucGotoIterationDependency, ProjectFolderDependency, SegmenterDependency, SyntaxPieceLayerDependency, FileIndexCounterDependency on the dep list when M99 P{seq} is to fire; without them the plain-M99 path still works and the P-jump emits a configuration warning. Detection is on the Parsing.M99 sub-object written by M99Syntax (a ParameterizedFlagSyntax) — the keyword \"M99\" never reaches Parsing.Flags because the parameterized match has already consumed the text by the time NumberedFlagSyntax runs. VariableEvaluatorSyntax Pure expression normalizer for Custom Macro B syntax. Walks the parser-stage residue on a single block and inlines numeric values wherever a Fanuc-style variable reference or bracket expression appears — but does not write to any specific store. Routing “where the resolved literal lands” stays in the brand-specific reader syntaxes (VolatileVariableReadingSyntax, RetainedCommonVariableTable's reader, FanucSystemControlVariableSyntax, …) which run after this syntax on the same block. Two passes per block: Assignments normalize — Parsing.Assignments.#nnn entries whose RHS is non-literal (e.g. \"#500+1\", \"SQRT[#100]\") are evaluated via the VariableEvaluatorSyntax.ChainLookup and the RHS string is replaced with the resolved literal (round-trip-safe \"R\"-format). The entry stays in Parsing.Assignments so downstream reader syntaxes consume it as a pure-literal assignment. Iteration follows source order (Parsing.Assignments insertion order). Parsing tree substitution — every string-typed value reachable from Parsing. (axis tags, canned-cycle sub-objects) is parsed; on a successful evaluation the string is replaced with a numeric JsonValue. Failures silently leave the original string and rely on downstream GetParsedDouble(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) at consumer sites to surface VariableExpression--Unevaluated only if the tag is actually read. Lookup chain (first non-null wins, configured per brand preset via RuntimeVariableLookups + IVariableLookup instances on NcDependencyList): Current block's own resolved assignments — built-in to VariableEvaluatorSyntax.ChainLookup; covers same-block forward references in source order (an earlier #nnn=literal is visible to a later RHS that mentions #nnn). Each IRuntimeVariableLookup in RuntimeVariableLookups, in list order. Typical contents for a Fanuc-family preset: LocalVariableLookup (#1-#33), VolatileVariableLookup (#100-#499), FanucPositionVariableLookup (#5001-#5043). Each IVariableLookup on the runner's NcDependencyList, in registration order (RetainedCommonVariableTable, FanucParameterTable, FanucToolOffsetVariableLookup). Each lookup self-gates its id range; the evaluator stays brand- and range-agnostic. Adding a new variable surface is additive: register an IVariableLookup on a dependency or push an IRuntimeVariableLookup onto the per-preset list. Same-block forward reference — when an Assignment RHS references a #nnn that is also being assigned later in the same block (i.e. listed in Parsing.Assignments after the RHS being evaluated), the VariableEvaluatorSyntax.ChainLookup cannot pick up the not-yet-resolved value and falls back to traceback / dependency-table reads — effectively the pre-block value. A VariableEvaluator--SameBlockForwardReference warning is emitted per such RHS so the user is told the source-order semantics were not honoured. Practical impact is near-zero for typical CAM-emitted NC (one assignment per line). VolatileVariableReadingSyntax Obtains values for Fanuc-style non-retained common variables (#100-#499). Reads literal numeric assignments from Parsing.Assignments.#nnn, dict-merges them with the previous block's volatile state, and writes the resulting per-block dictionary into Vars.Volatile. Lifetime is bounded by MachiningSession: within one session the dictionary carries forward block-by-block via this syntax; session restart abandons the SyntaxPiece JSON dataflow and starts fresh. Program-end (M02/M30) clearing is handled by ProgramEndCleanSyntax. Only literal numeric RHS values are consumed by this syntax (#124 = 15. ✓; #100 = #1 + 5 ✗). Non-literal RHS entries are left untouched in Parsing.Assignments; VariableEvaluatorSyntax resolves them and writes the result into the same per-block dictionary. The two syntaxes are decoupled — the evaluator's lookup tracebacks via SyntaxPiece linkage so it does not depend on having run before or after this syntax. Structs MacroFileResolver.ResolvedFile Tri-form resolution result. FileName is the bare matched name; RelPath is that name joined with the folder portion of the dependency (relative when the folder is configured relative, absolute fallback when it isn't); AbsPath is the fully-resolved I/O target." }, "api/Hi.NcParsers.IGetSentence.html": { "href": "api/Hi.NcParsers.IGetSentence.html", "title": "Interface IGetSentence | HiAPI-C# 2025", "summary": "Interface IGetSentence Namespace Hi.NcParsers Assembly HiMech.dll Abstraction for a source that carries a Sentence. public interface IGetSentence Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Methods GetSentence() Returns the source Sentence carried by this object. Sentence GetSentence() Returns Sentence" }, + "api/Hi.NcParsers.ISentenceCarrier.html": { + "href": "api/Hi.NcParsers.ISentenceCarrier.html", + "title": "Interface ISentenceCarrier | HiAPI-C# 2025", + "summary": "Interface ISentenceCarrier Namespace Hi.NcParsers Assembly HiMech.dll Carries a reference to a source Sentence together with its execution-order SentenceIndex. Used as the cross-process alignment carrier for diagnostics, messages, ClStripPos, MachiningStep, etc. — both the source content (via GetSentence()) and the execution-order position (via SentenceIndex) are available without needing two separate references. public interface ISentenceCarrier : IGetSentence, ISentenceIndexed Inherited Members IGetSentence.GetSentence() ISentenceIndexed.SentenceIndex Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object)" + }, + "api/Hi.NcParsers.ISentenceIndexed.html": { + "href": "api/Hi.NcParsers.ISentenceIndexed.html", + "title": "Interface ISentenceIndexed | HiAPI-C# 2025", + "summary": "Interface ISentenceIndexed Namespace Hi.NcParsers Assembly HiMech.dll Abstraction for an object that carries a SentenceIndex — a 0-based ordinal of its source Sentence in NC execution order. Use as a cross-process alignment key (messages, ClStripPos, MachiningStep, etc.) when source order (MixedIndex(IFileLineIndex)) is not enough because SubProgram inline reorders blocks relative to (FileIndex, LineIndex). public interface ISentenceIndexed Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties SentenceIndex 0-based ordinal in pipeline execution order. int SentenceIndex { get; } Property Value int" + }, + "api/Hi.NcParsers.IndexedSentence.html": { + "href": "api/Hi.NcParsers.IndexedSentence.html", + "title": "Class IndexedSentence | HiAPI-C# 2025", + "summary": "Class IndexedSentence Namespace Hi.NcParsers Assembly HiMech.dll Minimal ISentenceCarrier pairing a Sentence with its execution-order SentenceIndex. Use when there is no richer host object that already carries the sentence — e.g. CSV-driven runs that go straight from an input line to a Sentence without a SyntaxPiece wrapper. public record IndexedSentence : ISentenceCarrier, IGetSentence, ISentenceIndexed, IEquatable Inheritance object IndexedSentence Implements ISentenceCarrier IGetSentence ISentenceIndexed IEquatable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IndexedSentence(Sentence, int) Minimal ISentenceCarrier pairing a Sentence with its execution-order SentenceIndex. Use when there is no richer host object that already carries the sentence — e.g. CSV-driven runs that go straight from an input line to a Sentence without a SyntaxPiece wrapper. public IndexedSentence(Sentence Sentence, int SentenceIndex) Parameters Sentence Sentence The source sentence carried. SentenceIndex int 0-based ordinal in pipeline execution order. Properties Sentence The source sentence carried. public Sentence Sentence { get; init; } Property Value Sentence SentenceIndex 0-based ordinal in pipeline execution order. public int SentenceIndex { get; init; } Property Value int Methods GetSentence() Returns the source Sentence carried by this object. public Sentence GetSentence() Returns Sentence" + }, "api/Hi.NcParsers.Initializers.HomeMcInitializer.html": { "href": "api/Hi.NcParsers.Initializers.HomeMcInitializer.html", "title": "Class HomeMcInitializer | HiAPI-C# 2025", @@ -3887,22 +3972,22 @@ "api/Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html": { "href": "api/Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html", "title": "Class CleanupSyntax | HiAPI-C# 2025", - "summary": "Class CleanupSyntax Namespace Hi.NcParsers.InspectionSyntaxs Assembly HiMech.dll Removes indicated JSON keys from JsonObject after upstream syntaxes have consumed them. Useful for cleaning up runtime-derived intermediate data (e.g., ProgramToMcTransform) that should not persist in the final output. Place at the end of the syntax list, after all consumers have read the keys. public class CleanupSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object CleanupSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples new CleanupSyntax(\"ProgramToMcTransform\", \"ToolOrientation\") Constructors CleanupSyntax(params string[]) Creates a CleanupSyntax seeded with the given keys. public CleanupSyntax(params string[] keys) Parameters keys string[] JSON keys to remove on each block; copied into Keys. CleanupSyntax(XElement) Reconstructs a CleanupSyntax from a project XML element previously produced by MakeXmlSource(string, string, bool). public CleanupSyntax(XElement src) Parameters src XElement XML element with one Key child per entry in Keys. Properties Keys JSON keys to remove from JsonObject each block. public List Keys { get; set; } Property Value List Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class CleanupSyntax Namespace Hi.NcParsers.InspectionSyntaxs Assembly HiMech.dll Removes indicated JSON keys from JsonObject after upstream syntaxes have consumed them. Useful for cleaning up runtime-derived intermediate data (e.g., ProgramToMcTransform) that should not persist in the final output. Place at the end of the syntax list, after all consumers have read the keys. public class CleanupSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object CleanupSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples new CleanupSyntax(\"ProgramToMcTransform\", \"ToolOrientation\") Constructors CleanupSyntax(params string[]) Creates a CleanupSyntax seeded with the given keys. public CleanupSyntax(params string[] keys) Parameters keys string[] JSON keys to remove on each block; copied into Keys. CleanupSyntax(XElement) Reconstructs a CleanupSyntax from a project XML element previously produced by MakeXmlSource(string, string, bool). public CleanupSyntax(XElement src) Parameters src XElement XML element with one Key child per entry in Keys. Properties Keys JSON keys to remove from JsonObject each block. public List Keys { get; set; } Property Value List Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html": { "href": "api/Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html", "title": "Class ProgramXyzBackfillSyntax | HiAPI-C# 2025", - "summary": "Class ProgramXyzBackfillSyntax Namespace Hi.NcParsers.InspectionSyntaxs Assembly HiMech.dll Debug / observability back-fill: writes ProgramXyz onto blocks that did not have it written by upstream logic syntaxes (e.g. HomeMcInitializer block, chain-change blocks that only updated MC via a rotary-only path), only when the effective program position has changed from the last block that stored a ProgramXyz. Skips the block entirely when either of these holds: The block already has ProgramXyz written — e.g. by ProgramXyzSyntax, G53p1RotaryPositionSyntax, MachineCoordSelectSyntax, ReferenceReturnSyntax, McAbcXyzFallbackSyntax, or RadiusCompensationSyntax. The effective value equals the last stored value (modal-only block such as pure F / S / M / plane-select — no program motion). Only back-fills the root block; ItemsKey items are intentionally skipped (they are managed by Hi.NcParsers.LogicSyntaxs.CompoundMotionSyntaxUtil and per-cycle syntaxes that already write the right per-item ProgramXyz). Placement: end of NcSyntaxList, after UnconsumedCheckSyntax. Runs purely as a bookkeeping pass — no other syntax / semantic in the default pipeline reads the additional back-fill values it emits, so the runtime output (IAct stream) is unchanged whether this syntax is present or not. The only observable effect is additional ProgramXyz entries in the cached syntax-pieces dump, which makes block-to-block debugging and diffing easier. public class ProgramXyzBackfillSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramXyzBackfillSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ProgramXyzBackfillSyntax() Creates a default ProgramXyzBackfillSyntax. public ProgramXyzBackfillSyntax() Fields AddedByValue Value written under AddedByKey on the ProgramXyz JSON object when this syntax synthesized the value. Absent on sub-objects authored by LogicSyntaxs-stage writers (e.g. ProgramXyzSyntax, G53p1RotaryPositionSyntax, MachineCoordSelectSyntax) — the AddedByKey is only present when a post-Logic / Inspection stage writer (this syntax, or ModalCarrySyntax) injected the sub-object. Purely informational — no downstream syntax / semantic reads this marker. Intended for cache-file diffing: its presence means \"this block did not originally command program motion; the value is a modal back-fill to make debug dumps more complete\". public const string AddedByValue = \"Backfill\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class ProgramXyzBackfillSyntax Namespace Hi.NcParsers.InspectionSyntaxs Assembly HiMech.dll Debug / observability back-fill: writes ProgramXyz onto blocks that did not have it written by upstream logic syntaxes (e.g. HomeMcInitializer block, chain-change blocks that only updated MC via a rotary-only path), only when the effective program position has changed from the last block that stored a ProgramXyz. Skips the block entirely when either of these holds: The block already has ProgramXyz written — e.g. by ProgramXyzSyntax, G53p1RotaryPositionSyntax, MachineCoordSelectSyntax, ReferenceReturnSyntax, McAbcXyzFallbackSyntax, or RadiusCompensationSyntax. The effective value equals the last stored value (modal-only block such as pure F / S / M / plane-select — no program motion). Only back-fills the root block; ItemsKey items are intentionally skipped (they are managed by Hi.NcParsers.LogicSyntaxs.CompoundMotionSyntaxUtil and per-cycle syntaxes that already write the right per-item ProgramXyz). Placement: end of NcSyntaxList, after UnconsumedCheckSyntax. Runs purely as a bookkeeping pass — no other syntax / semantic in the default pipeline reads the additional back-fill values it emits, so the runtime output (IAct stream) is unchanged whether this syntax is present or not. The only observable effect is additional ProgramXyz entries in the cached syntax-pieces dump, which makes block-to-block debugging and diffing easier. public class ProgramXyzBackfillSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramXyzBackfillSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ProgramXyzBackfillSyntax() Creates a default ProgramXyzBackfillSyntax. public ProgramXyzBackfillSyntax() Fields AddedByValue Value written under AddedByKey on the ProgramXyz JSON object when this syntax synthesized the value. Absent on sub-objects authored by LogicSyntaxs-stage writers (e.g. ProgramXyzSyntax, G53p1RotaryPositionSyntax, MachineCoordSelectSyntax) — the AddedByKey is only present when a post-Logic / Inspection stage writer (this syntax, or ModalCarrySyntax) injected the sub-object. Purely informational — no downstream syntax / semantic reads this marker. Intended for cache-file diffing: its presence means \"this block did not originally command program motion; the value is a modal back-fill to make debug dumps more complete\". public const string AddedByValue = \"Backfill\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html": { "href": "api/Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html", "title": "Class SnapshotSyntax | HiAPI-C# 2025", - "summary": "Class SnapshotSyntax Namespace Hi.NcParsers.InspectionSyntaxs Assembly HiMech.dll Debug-time JsonObject capture: deep-clones every key on the current JsonObject (except the SnapshotKey envelope itself) into json[SnapshotKey][SectionName], leaving the rest of the block untouched. Insertable at any position in NcSyntaxList — placement determines what stage the dump captures (e.g. drop after the Parsing bundle for \"after-parsing\", drop after the Logic bundle for \"after-logic\"). Two instances with different SectionName values can coexist on the same pipeline and their dumps end up under sibling keys of the same SnapshotKey envelope, so a single cache file shows the data at every captured stage in one place. Excluding the SnapshotKey envelope from the clone keeps each captured section flat: it reflects \"everything else on the block at that stage\", and re-running through additional SnapshotSyntax instances never nests past one level. Set IsEnabled = false to keep the configuration in place but skip the capture (no JSON mutation, no allocation) — convenient for toggling a debug pipeline without removing the entries. public class SnapshotSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object SnapshotSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SnapshotSyntax() Creates a SnapshotSyntax with no SectionName set yet. public SnapshotSyntax() SnapshotSyntax(string) Creates a SnapshotSyntax with the given SectionName. public SnapshotSyntax(string sectionName) Parameters sectionName string Sub-key under SnapshotKey for this instance's capture. SnapshotSyntax(XElement) Reconstructs a SnapshotSyntax from a project XML element previously produced by MakeXmlSource(string, string, bool). public SnapshotSyntax(XElement src) Parameters src XElement XML element carrying SectionName and IsEnabled; null is treated as defaults. Fields SnapshotKey Top-level JSON envelope key under which captured sections are stored. Each SnapshotSyntax instance writes a sibling key (named by SectionName) inside this envelope. public const string SnapshotKey = \"Snapshot\" Field Value string Properties IsEnabled When false, Build(LazyLinkedListNode, List, NcDiagnosticProgress) is a no-op — keeps the entry in the syntax list for easy toggling without re-editing the project. public bool IsEnabled { get; set; } Property Value bool Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string SectionName Sub-key inside the SnapshotKey envelope under which this instance writes its capture. Two instances configured with the same SectionName are last-writer-wins on a given block. Required: Build(LazyLinkedListNode, List, NcDiagnosticProgress) throws InvalidOperationException when this is null or empty (a misconfiguration the user should see, not a silent skip). public string SectionName { get; set; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class SnapshotSyntax Namespace Hi.NcParsers.InspectionSyntaxs Assembly HiMech.dll Debug-time JsonObject capture: deep-clones every key on the current JsonObject (except the SnapshotKey envelope itself) into json[SnapshotKey][SectionName], leaving the rest of the block untouched. Insertable at any position in NcSyntaxList — placement determines what stage the dump captures (e.g. drop after the Parsing bundle for \"after-parsing\", drop after the Logic bundle for \"after-logic\"). Two instances with different SectionName values can coexist on the same pipeline and their dumps end up under sibling keys of the same SnapshotKey envelope, so a single cache file shows the data at every captured stage in one place. Excluding the SnapshotKey envelope from the clone keeps each captured section flat: it reflects \"everything else on the block at that stage\", and re-running through additional SnapshotSyntax instances never nests past one level. Set IsEnabled = false to keep the configuration in place but skip the capture (no JSON mutation, no allocation) — convenient for toggling a debug pipeline without removing the entries. public class SnapshotSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object SnapshotSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SnapshotSyntax() Creates a SnapshotSyntax with no SectionName set yet. public SnapshotSyntax() SnapshotSyntax(string) Creates a SnapshotSyntax with the given SectionName. public SnapshotSyntax(string sectionName) Parameters sectionName string Sub-key under SnapshotKey for this instance's capture. SnapshotSyntax(XElement) Reconstructs a SnapshotSyntax from a project XML element previously produced by MakeXmlSource(string, string, bool). public SnapshotSyntax(XElement src) Parameters src XElement XML element carrying SectionName and IsEnabled; null is treated as defaults. Fields SnapshotKey Top-level JSON envelope key under which captured sections are stored. Each SnapshotSyntax instance writes a sibling key (named by SectionName) inside this envelope. public const string SnapshotKey = \"Snapshot\" Field Value string Properties IsEnabled When false, Build(LazyLinkedListNode, List, NcDiagnosticProgress) is a no-op — keeps the entry in the syntax list for easy toggling without re-editing the project. public bool IsEnabled { get; set; } Property Value bool Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string SectionName Sub-key inside the SnapshotKey envelope under which this instance writes its capture. Two instances configured with the same SectionName are last-writer-wins on a given block. Required: Build(LazyLinkedListNode, List, NcDiagnosticProgress) throws InvalidOperationException when this is null or empty (a misconfiguration the user should see, not a silent skip). public string SectionName { get; set; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html": { "href": "api/Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html", "title": "Class UnconsumedCheckSyntax | HiAPI-C# 2025", - "summary": "Class UnconsumedCheckSyntax Namespace Hi.NcParsers.InspectionSyntaxs Assembly HiMech.dll Emits diagnostic warnings for content remaining after all upstream syntaxes have run: unconsumed Parsing entries and non-empty UnparsedText. Flags listed in ExcludedFlags are silently ignored. Must be placed at the end of NcSyntaxList. public class UnconsumedCheckSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object UnconsumedCheckSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors UnconsumedCheckSyntax() Creates a checker with an empty ExcludedFlags set. public UnconsumedCheckSyntax() UnconsumedCheckSyntax(XElement) Loads excluded flag names from child elements. public UnconsumedCheckSyntax(XElement src) Parameters src XElement Root element named XName. Properties ExcludedFlags Parsing flags/keys that are known but intentionally unhandled. public HashSet ExcludedFlags { get; set; } Property Value HashSet Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class UnconsumedCheckSyntax Namespace Hi.NcParsers.InspectionSyntaxs Assembly HiMech.dll Emits diagnostic warnings for content remaining after all upstream syntaxes have run: unconsumed Parsing entries and non-empty UnparsedText. Flags listed in ExcludedFlags are silently ignored. Must be placed at the end of NcSyntaxList. public class UnconsumedCheckSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object UnconsumedCheckSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors UnconsumedCheckSyntax() Creates a checker with an empty ExcludedFlags set. public UnconsumedCheckSyntax() UnconsumedCheckSyntax(XElement) Loads excluded flag names from child elements. public UnconsumedCheckSyntax(XElement src) Parameters src XElement Root element named XName. Properties ExcludedFlags Parsing flags/keys that are known but intentionally unhandled. public HashSet ExcludedFlags { get; set; } Property Value HashSet Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.InspectionSyntaxs.html": { "href": "api/Hi.NcParsers.InspectionSyntaxs.html", @@ -3914,6 +3999,16 @@ "title": "Class BlockSkip | HiAPI-C# 2025", "summary": "Class BlockSkip Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Optional block skip marker extracted from the head of an NC block. ISO 6983 / Fanuc calls this feature Block Delete (BDT switch); Siemens / Syntec / Mazak use the same / prefix with matching behaviour. The section is only present on blocks that carry a / prefix. Whether the block's NC commands are actually skipped at runtime depends on IBlockSkipConfig: Config absent or the Layer bit OFF → the / prefix is consumed, Body is left null, and the rest of the line parses as a regular NC block (comments still take effect). Config present and the Layer bit ON → the rest of the line is moved into Body and cleared from UnparsedText, so downstream parsing syntaxes see nothing and no NC action is emitted. Comment syntaxes run before this one so comments (and any embedded CsScript) still take effect. Not a comment: a comment is static metadata, block skip is a runtime toggle that can change per machine/operator setting. public class BlockSkip Inheritance object BlockSkip Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Body NC commands from the block that were moved out of UnparsedText because the skip took effect (after comment and CsScript extraction, with surrounding whitespace trimmed). Represents the semantic payload of the skipped block — not a verbatim snapshot; recover human-readable NC text with a dedicated formatter if needed. null when the skip did not take effect (no IBlockSkipConfig or its layer bit was OFF); in that case the block's commands are still in UnparsedText and parse normally. public string Body { get; set; } Property Value string Layer Skip layer (1..9). A bare / without a digit is layer 1 (most controllers treat / and /1 as the same switch). /2../9 map to layers 2..9. public int Layer { get; set; } Property Value int Symbol Delimiter symbol as it appeared in the NC block (always \"/\"). public string Symbol { get; set; } Property Value string" }, + "api/Hi.NcParsers.Keywords.CallFrame.html": { + "href": "api/Hi.NcParsers.Keywords.CallFrame.html", + "title": "Class CallFrame | HiAPI-C# 2025", + "summary": "Class CallFrame Namespace Hi.NcParsers.Keywords Assembly HiMech.dll One entry in Frames. Holds the caller-side information consumers need to “unwind” or “look back” — currently only the relative file path of the caller, used by SubProgramReturnSyntax on M99 P{seq} to locate the caller's N{seq} block. public class CallFrame Inheritance object CallFrame Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties CallerFilePath Project-relative file path of the calling block — same form as FilePath on the caller side. Used by M99 P{seq} to re-segment the caller file and skip ahead to N{seq}. public string CallerFilePath { get; set; } Property Value string" + }, + "api/Hi.NcParsers.Keywords.CallStack.html": { + "href": "api/Hi.NcParsers.Keywords.CallStack.html", + "title": "Class CallStack | HiAPI-C# 2025", + "summary": "Class CallStack Namespace Hi.NcParsers.Keywords Assembly HiMech.dll JSON-section data shape representing the active call-frame stack on a block — pushed by call-and-inline syntaxes (SubProgramCallSyntax for M98/M198, FanucMacroCallSyntax for G65, and FanucModalMacroSyntax's expansion phase for G66 implicit triggers) and popped by SubProgramReturnSyntax on M99. Every block between push and pop carries the section forward via ModalCarrySyntax; the caller's blocks before push and after pop carry the surrounding stack state (typically empty when running from the main file). The section is wrapped in a JsonObject rather than exposed as a bare JsonArray so it fits ModalCarry's \"deep-clone JsonObject\" carry pattern — the array of frames lives inside Frames. public class CallStack Inheritance object CallStack Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Frames Ordered list of active call frames, bottom-of-stack first. Each entry is a CallFrame-shaped JSON object. Length 0 means the block is in the main (top-level) frame. public JsonArray Frames { get; set; } Property Value JsonArray" + }, "api/Hi.NcParsers.Keywords.CannedCycle.html": { "href": "api/Hi.NcParsers.Keywords.CannedCycle.html", "title": "Class CannedCycle | HiAPI-C# 2025", @@ -3959,6 +4054,26 @@ "title": "Namespace Hi.NcParsers.Keywords.Fanuc | HiAPI-C# 2025", "summary": "Namespace Hi.NcParsers.Keywords.Fanuc Classes FanucKeywords Fanuc-specific G-code and M-code constants. For ISO standard codes shared across brands, see IsoKeywords." }, + "api/Hi.NcParsers.Keywords.FanucGoto.html": { + "href": "api/Hi.NcParsers.Keywords.FanucGoto.html", + "title": "Class FanucGoto | HiAPI-C# 2025", + "summary": "Class FanucGoto Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Fanuc Custom Macro B GOTO record. Stamped on the host block by FanucGotoSyntax after the control-flow decision has been made; produced earlier by FanucGotoParsingSyntax as a parsing-stage sub-section (Parsing.FanucGoto) carrying the raw captured fields. Two source forms map to the same shape: GOTO — unconditional jump. Condition is null. IF [] GOTO — conditional jump. Condition holds the expression text from inside the brackets. At parsing time N is a raw token from the source — it may be a literal (\"100\"), a variable reference (\"#1\"), or a bracketed expression (\"#[#2+5]\"). VariableEvaluatorSyntax substitutes a resolved literal back into the same field in the Evaluation bundle; FanucGotoSyntax then int.TryParses the final string to produce an int target. public class FanucGoto Inheritance object FanucGoto Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Condition Raw boolean expression text from inside the IF [...] brackets, or null for the unconditional form. Evaluator boolean support is pending — until then, FanucGotoSyntax emits a warning and falls through for any non-null Condition. public string Condition { get; set; } Property Value string Fired Whether the GOTO actually redirected control flow on this block. False on conditional GOTOs whose condition evaluated to false, on conditional GOTOs whose condition was not evaluable, and on iteration-limit-exceeded blocks. The host block is preserved in either case so diagnostic readers can still see the call. public bool Fired { get; set; } Property Value bool N Target sequence-number expression — kept as a string so the in-place evaluator can substitute \"#1\" → “3” before the Evaluation stage parses it as an int. public string N { get; set; } Property Value string Term Triggering phrase: “GOTO” for the unconditional form, “IF...GOTO” for the conditional form. public string Term { get; set; } Property Value string" + }, + "api/Hi.NcParsers.Keywords.FanucIfThen.html": { + "href": "api/Hi.NcParsers.Keywords.FanucIfThen.html", + "title": "Class FanucIfThen | HiAPI-C# 2025", + "summary": "Class FanucIfThen Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Fanuc Custom Macro B IF [] THEN single-block conditional record. Stamped on the host block by FanucIfThenSyntax after the gate decision; produced earlier by FanucIfThenParsingSyntax as a parsing-stage sub-section (Parsing.FanucIfThen) carrying the raw captured fields plus an internal PendingAssignments sub-object harvested from the body text. Spec: IF [bool-expr] THEN executes only when the condition is truthy. Unlike FanucGoto's conditional form there is no jump — the body affects the current block only, no source splice, no label scan, no iteration watchdog. The most common body shape is a single Custom Macro B assignment (#nnn = ); multiple assignments in one body are also accepted and lifted together. Condition is held as a string at parsing time so VariableEvaluatorSyntax's pass-2 tree walk can substitute it to a numeric JsonValue in place; the FanucIfThenSyntax tail then reads the resolved node polymorphically via the same ReadCondition shape used by FanucGotoSyntax. public class FanucIfThen Inheritance object FanucIfThen Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Applied Whether the body actually fired on this block. False on conditions that evaluated to zero, on conditions the evaluator could not resolve, and on bodies that did not parse as one or more assignments (a G-code-only body for example, currently unsupported and warned). The host block is preserved in either case so diagnostic readers can still see the IF-THEN call site. public bool Applied { get; set; } Property Value bool BodyText Raw body text after the THEN keyword, retained verbatim for diagnostics and round-trip visibility. The structured sub-section actually lifted on a truthy condition lives at Parsing.FanucIfThen.PendingAssignments, populated by the parsing syntax via NcSyntaxUtil's GrabTagAssignment. public string BodyText { get; set; } Property Value string Condition Raw boolean expression text from inside the IF [...] brackets. String at parsing time; VariableEvaluatorSyntax's pass-2 tree walk substitutes a numeric literal in place when the expression evaluates successfully. FanucIfThenSyntax reads the resulting JSON node polymorphically (number → truthy gate; remaining string → unevaluated warning). public string Condition { get; set; } Property Value string" + }, + "api/Hi.NcParsers.Keywords.FanucMacroCall.html": { + "href": "api/Hi.NcParsers.Keywords.FanucMacroCall.html", + "title": "Class FanucMacroCall | HiAPI-C# 2025", + "summary": "Class FanucMacroCall Namespace Hi.NcParsers.Keywords Assembly HiMech.dll One-shot custom-macro-call record written by FanucMacroCallSyntax. Lives on both the G65 host block (the caller) and every inlined block of the macro body — so a cache-dump reader can land on any block inside the macro and immediately see “this block belongs to a G65 call of File with these argument bindings” without back-walking to find the host. Each inlined block additionally carries the resolved Vars.Local #1-#26 bindings derived from Args (see FanucMacroArgumentMap), so LocalVariableLookup resolves macro args in a single-block lookup. Frame isolation is structural: caller blocks never have Vars.Local written, so after the macro body ends, the next caller block reads null for any #1-#26 without any explicit frame marker. public class FanucMacroCall Inheritance object FanucMacroCall Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Args Argument-letter → numeric-value map captured from the call line (e.g., G65 P9100 A1.5 B2. ⇒ { “A”: 1.5, “B”: 2.0 }). The matching Vars.Local bindings on each inlined block are derived from this via the Type-I argument-letter map (FanucMacroArgumentMap). public JsonObject Args { get; set; } Property Value JsonObject FileName Bare matched file name (e.g. “O9100.NC”). The resolver tries several fallback patterns (FilenamePatterns); this records which one hit. JSON-portable across environments — the folder context lives on the host's SubProgramFolderConfig dependency, not encoded here. public string FileName { get; set; } Property Value string L Repeat count from the L parameter; defaults to 1 when absent. public int L { get; set; } Property Value int P Macro program number from the P parameter (e.g., 9100 for O9100). public int P { get; set; } Property Value int Term Triggering keyword (always “G65”). public string Term { get; set; } Property Value string" + }, + "api/Hi.NcParsers.Keywords.FanucModalMacro.html": { + "href": "api/Hi.NcParsers.Keywords.FanucModalMacro.html", + "title": "Class FanucModalMacro | HiAPI-C# 2025", + "summary": "Class FanucModalMacro Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Modal-macro-call record left by FanucModalMacroSyntax. Carries Fanuc G66 setup state forward block-to-block until cancelled by G67. The section is also written on the G67 block itself (with Term = “G67”) so cache dumps show the cancel edge; subsequent blocks then carry no section at all. Per-block expansion of the modal call into an actual macro inline at every positioning move is not yet implemented — a FanucModalMacro--NotExpanded warning is emitted on the setup block to flag the simulation gap. The setup state itself is captured faithfully so external tooling can detect \"this block sits inside a G66 modal\" via the carried section. public class FanucModalMacro Inheritance object FanucModalMacro Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Args Argument-letter → numeric-value map captured from the G66 setup line. Null on a G67 cancel block. public JsonObject Args { get; set; } Property Value JsonObject FileName Bare matched file name (e.g. “O9000.NC”) that would supply the modal-call macro body. Null on a G67 cancel block or when the file could not be resolved at the setup site. Same JSON-portable form as FileName — the folder context lives on the host's SubProgramFolderConfig dependency, not encoded here. public string FileName { get; set; } Property Value string L Repeat count from the L parameter; defaults to 1 when absent. Null on a G67 cancel block. public int? L { get; set; } Property Value int? P Macro program number from the P parameter on the G66 setup. Null on a G67 cancel block. public int? P { get; set; } Property Value int? Term Triggering keyword: “G66” for setup / modal-active blocks, “G67” for the cancel block. Carried blocks downstream of a G66 setup mirror the setup section verbatim. public string Term { get; set; } Property Value string" + }, "api/Hi.NcParsers.Keywords.FanucPathSmoothing.html": { "href": "api/Hi.NcParsers.Keywords.FanucPathSmoothing.html", "title": "Class FanucPathSmoothing | HiAPI-C# 2025", @@ -4047,7 +4162,7 @@ "api/Hi.NcParsers.Keywords.IMotionEventDef.html": { "href": "api/Hi.NcParsers.Keywords.IMotionEventDef.html", "title": "Interface IMotionEventDef | HiAPI-C# 2025", - "summary": "Interface IMotionEventDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll One-shot motion event — present only on blocks that actually issue a motion command. Used by motion semantics (McLinearMotionSemantic, McArcMotionSemantic, ClLinearMotionSemantic) as the trigger to emit motion IAct. NOT carried forward across blocks. Property names are used as JSON keys via nameof. public interface IMotionEventDef Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": false } Properties Form Interpolation form. See MotionForm. string Form { get; set; } Property Value string IsRapid True for rapid traverse; false (default) for programmed feedrate. bool IsRapid { get; set; } Property Value bool" + "summary": "Interface IMotionEventDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll One-shot motion event — present on every block whose source programmed a motion command, regardless of whether the resulting displacement is non-zero. A redundant G01 X10 on a block already at X10 still gets a MotionEvent; the motion semantics (McLinearMotionSemantic, McArcMotionSemantic, ClLinearMotionSemantic) then early-return on distance <= 0 and emit no IAct. NOT carried forward across blocks. Reason for the \"programmed, not displaced\" definition: Fanuc G66 modal macro fires once per programmed motion command (per Fanuc spec — no distance gate), so FanucModalMacroSyntax.Expansion uses MotionEvent presence as its trigger. Suppressing the section on zero-distance moves would silently change G66 behaviour. The modal sibling MotionState separately latches the Group-01 mode for readers that only need to know \"what G-code is active\". Property names are used as JSON keys via nameof. public interface IMotionEventDef Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": false } Properties Form Interpolation form. See MotionForm. string Form { get; set; } Property Value string IsRapid True for rapid traverse; false (default) for programmed feedrate. bool IsRapid { get; set; } Property Value bool" }, "api/Hi.NcParsers.Keywords.IMotionStateDef.html": { "href": "api/Hi.NcParsers.Keywords.IMotionStateDef.html", @@ -4149,6 +4264,11 @@ "title": "Class MachineCoordinateState | HiAPI-C# 2025", "summary": "Class MachineCoordinateState Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Section key holder for IMachineCoordinateStateDef. public class MachineCoordinateState Inheritance object MachineCoordinateState Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object)" }, + "api/Hi.NcParsers.Keywords.MacroFrame.html": { + "href": "api/Hi.NcParsers.Keywords.MacroFrame.html", + "title": "Class MacroFrame | HiAPI-C# 2025", + "summary": "Class MacroFrame Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Top-level integer marker stamped onto a SyntaxPiece's JSON to identify which call frame the block belongs to. Brand-agnostic by design — written by FanucMacroCallSyntax today, reusable by any future call-inlining syntax (Fanuc G66 modal expansion, Heidenhain LBL CALL, …) that needs local-variable isolation across call boundaries. Semantics: the value is an opaque id; only equality matters. Two blocks with the same MacroFrame id share a call frame (locals visible across them via single-step carry); two blocks with different ids do not. The id 0 is reserved for the main program frame and is returned by Get(JsonObject) when the field is absent — so a plain caller block needs no stamp and yet compares distinct from any inlined frame. Stored as a top-level JSON int (not an object section) so it stays lightweight on every inlined block. Decoupled from FanucMacroCall: that section is a diagnostic record of the call (what file, what args), while MacroFrame is the purely functional marker the local-variable I/O syntaxes consult. public static class MacroFrame Inheritance object MacroFrame Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Get(JsonObject) Reads the frame id off a block, returning 0 (main frame) when the field is absent or non-integer. public static int Get(JsonObject json) Parameters json JsonObject Returns int Set(JsonObject, int) Stamps the frame id onto a block. Overwrites any previous value. Callers writing the main-frame default (0) should simply leave the field absent rather than calling this with 0. public static void Set(JsonObject json, int frameId) Parameters json JsonObject frameId int" + }, "api/Hi.NcParsers.Keywords.MotionEvent.html": { "href": "api/Hi.NcParsers.Keywords.MotionEvent.html", "title": "Class MotionEvent | HiAPI-C# 2025", @@ -4217,12 +4337,12 @@ "api/Hi.NcParsers.Keywords.SubProgramCall.html": { "href": "api/Hi.NcParsers.Keywords.SubProgramCall.html", "title": "Class SubProgramCall | HiAPI-C# 2025", - "summary": "Class SubProgramCall Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Subprogram call record left on the M98 / M198 host block by SubProgramCallSyntax after the subprogram file has been inlined into the source layer. The call itself emits no motion act; this section is bookkeeping so cache dumps and diagnostic readers can see \"this block triggered an inline of file File\". public class SubProgramCall Inheritance object SubProgramCall Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties File Resolved file path that supplied the inlined blocks. Useful for diagnostics when a fallback filename pattern matched. public string File { get; set; } Property Value string L Repeat count from the L parameter; defaults to 1 when absent. public int L { get; set; } Property Value int P Subprogram number from the P parameter (e.g., 1234 for O1234). public int P { get; set; } Property Value int Term Triggering keyword: “M98” (internal) or “M198” (external storage). public string Term { get; set; } Property Value string" + "summary": "Class SubProgramCall Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Subprogram call record left by SubProgramCallSyntax on the M98 / M198 host block and on every inlined body block. The call itself emits no motion act; this section is bookkeeping so cache dumps and diagnostic readers can see \"this block triggered (or sits inside) an inline of program P\". M98 and M198 share the exact same section shape. The difference between them is purely environmental — which folder the resolver looks in (SubProgramFolderConfig.InternalFolder vs ExternalFolder) — and that lives on the dependency, not in this JSON record. public class SubProgramCall Inheritance object SubProgramCall Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties FileName Bare matched file name (e.g. “O1234.NC”). The resolver tries several fallback patterns (FilenamePatterns); this records which one hit. JSON-portable across environments — the folder context (internal vs external storage) is captured by the host's SubProgramFolderConfig dependency, not encoded here. public string FileName { get; set; } Property Value string L Repeat count from the L parameter; defaults to 1 when absent. public int L { get; set; } Property Value int P Subprogram number from the P parameter (e.g., 1234 for O1234). public int P { get; set; } Property Value int Term Triggering keyword: “M98” (internal) or “M198” (external storage). public string Term { get; set; } Property Value string" }, "api/Hi.NcParsers.Keywords.SubProgramReturn.html": { "href": "api/Hi.NcParsers.Keywords.SubProgramReturn.html", "title": "Class SubProgramReturn | HiAPI-C# 2025", - "summary": "Class SubProgramReturn Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Subprogram return record left on the M99 host block by SubProgramReturnSyntax. Return blocks produce no motion acts; this section makes the consumed M99 visible in cache dumps and reserves a slot for future M99 P{seq} (return-to-sequence-number) support. public class SubProgramReturn Inheritance object SubProgramReturn Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties P Optional caller sequence number from the P parameter (M99 P{seq}). Null on a plain M99. Currently recorded but not yet honoured — the subprogram's tail continues straight into the caller's next block, regardless of P. public int? P { get; set; } Property Value int? Term Triggering keyword (always “M99” for now). public string Term { get; set; } Property Value string" + "summary": "Class SubProgramReturn Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Subprogram return record left on the M99 host block by SubProgramReturnSyntax. Return blocks produce no motion acts; this section makes the consumed M99 visible in cache dumps and surfaces the M99 P{seq} jump decision. public class SubProgramReturn Inheritance object SubProgramReturn Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties JumpedToN Set to P when the M99 actually redirected control flow to the caller's N{seq} block via LazyLinkedList.ReplaceSource. Null on plain M99 (no P), and on M99 P{seq} that fell through because the jump could not be carried out. public int? JumpedToN { get; set; } Property Value int? P Optional caller sequence number from the P parameter (M99 P{seq}). Null on a plain M99. When non-null and the jump fires, JumpedToN is set to the same value; when the jump is suppressed (no caller frame, label not found, iteration limit reached) JumpedToN stays null and a warning is emitted. public int? P { get; set; } Property Value int? Term Triggering keyword (always “M99” for now). public string Term { get; set; } Property Value string" }, "api/Hi.NcParsers.Keywords.TapeBoundary.html": { "href": "api/Hi.NcParsers.Keywords.TapeBoundary.html", @@ -4252,13 +4372,18 @@ "api/Hi.NcParsers.Keywords.html": { "href": "api/Hi.NcParsers.Keywords.html", "title": "Namespace Hi.NcParsers.Keywords | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.Keywords Classes BlockSkip Optional block skip marker extracted from the head of an NC block. ISO 6983 / Fanuc calls this feature Block Delete (BDT switch); Siemens / Syntec / Mazak use the same / prefix with matching behaviour. The section is only present on blocks that carry a / prefix. Whether the block's NC commands are actually skipped at runtime depends on IBlockSkipConfig: Config absent or the Layer bit OFF → the / prefix is consumed, Body is left null, and the rest of the line parses as a regular NC block (comments still take effect). Config present and the Layer bit ON → the rest of the line is moved into Body and cleared from UnparsedText, so downstream parsing syntaxes see nothing and no NC action is emitted. Comment syntaxes run before this one so comments (and any embedded CsScript) still take effect. Not a comment: a comment is static metadata, block skip is a runtime toggle that can change per machine/operator setting. CannedCycle Section key holder + concrete implementation for ICannedCycleDef. Comment Comment extracted from an NC block. Symbol identifies the comment style; Text holds the content without the symbol. Downstream syntaxes (e.g., CsScript) may further trim Text after extracting embedded markers. CompoundMotion Section key holder + concrete implementation for ICompoundMotionDef. Coolant Section key holder + concrete implementation for ICoolantDef. CoordinateOffset Work coordinate offset state written by IsoCoordinateOffsetSyntax. Property names are used as JSON keys via nameof. Managed commands (ISO): G54, G55, G56, G57, G58, G59, G59.1–G59.9. Siemens: G54–G57 + G505–G599 (extended), G500 to cancel. Heidenhain: CYCL DEF 247 (Datum Preset) / CYCL DEF 7 (Datum Shift). CsScript Section-key holder for inline C# scripts attached to an NC block. Carries BeginScript (run before the block's acts) and EndScript (run after). Resolved by CsScriptBeginSemantic and CsScriptEndSemantic. Dwell Section key holder + concrete implementation for IDwellDef. FanucPathSmoothing Section data holder for IFanucPathSmoothingDef. FanucProgramNumber Fanuc-family program identifier header that follows a TapeBoundary line — e.g. O1234 or . Wrapper records the surface form so a parsed block can be emitted back to the original notation. Feedrate Section key holder + concrete implementation for IFeedrateDef. IndexNote JSON-section data shape pairing a single-character address symbol (e.g. ‘O’, ‘N’) with its numeric index, used to annotate program/sequence numbers on an NC block. IsoLocalCoordinateOffset ISO/Fanuc-family local coordinate offset state (G52) written by IsoLocalCoordinateOffsetSyntax. Property names are used as JSON keys via nameof. G52 X Y Z installs a local coordinate-system shift that stacks on top of the active G54-G59 work offset. The cancel mechanism is to write G52 X0 Y0 Z0 (or hit M30 / reset) — there is no separate G code for \"cancel\". The offset vector is therefore always modal: zero is a valid modal value, not a \"disabled\" state, so the section is recorded on every block. Brand-specific kin: Siemens TRANS/ATRANS (which can also carry rotation/scale/mirror) and Heidenhain TRANS DATUM are handled by their own syntaxes and write to their own sections — they do not share this key, because their data shapes are richer. MachineCoordinateState Section key holder for IMachineCoordinateStateDef. MotionEvent Section key holder + concrete implementation for IMotionEventDef. MotionState Section key holder + concrete implementation for IMotionStateDef. PathSmoothing Section key holder for IPathSmoothingDef. PlaneSelect Section key holder for IPlaneSelectDef. Positioning Section key holder + concrete implementation for IPositioningDef. ProgramEnd Section key holder for IProgramEndDef. ProgramStop Section key holder + concrete implementation for IProgramStopDef. RadiusCompensation Section key holder + concrete implementation for IRadiusCompensationDef. SpindleControl Section key holder + concrete implementation for ISpindleControlDef. SpindleOrientation Section key holder + concrete implementation for ISpindleOrientationDef. SpindleSpeed Section key holder + concrete implementation for ISpindleSpeedDef. SubProgramCall Subprogram call record left on the M98 / M198 host block by SubProgramCallSyntax after the subprogram file has been inlined into the source layer. The call itself emits no motion act; this section is bookkeeping so cache dumps and diagnostic readers can see \"this block triggered an inline of file File\". SubProgramReturn Subprogram return record left on the M99 host block by SubProgramReturnSyntax. Return blocks produce no motion acts; this section makes the consumed M99 visible in cache dumps and reserves a slot for future M99 P{seq} (return-to-sequence-number) support. TapeBoundary Tape leader / trailer line — the literal % that historically marked the start and end of a punched paper-tape program. ISO-style controllers (Fanuc, Mazak, Syntec, Siemens) all preserve it as a file-level boundary marker. Distinct from a comment: the controller uses it as a tape/file delimiter, not as embedded operator text. TiltTransform Concrete class for ITiltTransformDef section serialization. ToolHeightCompensation Section key holder for IToolHeightCompensationDef. Unit Section key holder + concrete implementation for IUnitDef. Vars JSON section schema for per-block variable storage. Each sub-property names a sub-section that holds a { “#nnn”: value } dictionary keyed by Fanuc-style variable id. The sub-sections partition the variable space by lifetime: Local — #1-#33, scope: macro call frame (pushed/popped by G65 / G66 / M99). Volatile — #100-#499, non-retained common; carries block-to-block, cleared by ProgramEndCleanSyntax on M02 / M30. SystemControl — #3000-#3999, controller-side system variables; offline-only round-trip record (real controller effects such as clock reset / alarm trigger / message pause are not simulated). The property types are JsonObject rather than strongly-typed dictionaries because each sub-section's keys are dynamic Fanuc variable ids (#100, #5001, …) discovered at parse time, not a fixed schema. This class exists solely to give the section name and sub-keys stable nameof() targets — instances are never constructed at runtime. Interfaces IArcMotionDef Arc motion data written by CircularMotionSyntax. Stored under the Hi.Motion JSON section alongside IMotionEventDef properties. ICannedCycleDef Canned cycle modal state (Group 09). Captures which cycle is currently active, its return mode (G98/G99), and the resolved absolute parameter set used for modal lookback. Written by CannedCycleResolveSyntax on every block that belongs to the canned-cycle group: cycle code present (G81/G82/G83/G73/G84/G74/G85/G86/G89/G76/G87), modal repeat (cycle still active, only coordinates given), or explicit cancel (G80). Term = \"G80\" is the explicit-cancel sentinel used by FindPreviousActiveCycle(LazyLinkedListNode, string[]) to terminate modal lookback without ambiguity; regular blocks (e.g. G00 X.. Y..) simply omit the section entirely. ICompoundMotionDef Compound motion section definition for commands that produce multiple sub-operations (G28, G53.1, G81, G82, etc.). Contains a ItemsKey array resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil. Item types (discriminated by key presence): Hi.Motion — rapid/feed linear motion (IMotionEventDef + IMachineCoordinateStateDef) Dwell — pause (Time in seconds) SpindleControl — spindle direction change (Direction) SpindleOrientation — oriented spindle stop (OSS) (Angle_deg) ICoolantDef Coolant state (M07 mist / M08 flood / M09 off). Written by CoolantSyntax. Modal — persists until changed. IsOn is the on/off convenience flag (true for M07 and M08, false for M09). Mode carries the abstract kind (Flood / Mist / Off) for consumers that need to distinguish flood vs mist. IDwellDef Dwell/pause section definition for use inside Sequence items. Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActDelay. IFanucPathSmoothingDef Fanuc-specific path smoothing state written by FanucPathSmoothingSyntax. Extends IPathSmoothingDef with the Fanuc G05.1 R argument (precision / smoothness level number, R1..R10 mapping to controller-internal tuning macro variables). Q is binary in current Fanuc firmware (Q0 disable / Q1 enable), so IsEnabled covers it directly — no raw Q field is stored. JSON section key remains nameof(PathSmoothing) so generic readers (cache dumps, modal carry, UI) can cast to IPathSmoothingDef across all controller brands; brand-specific readers cast to IFanucPathSmoothingDef for the extra fields. IFeedrateDef Feedrate state written by FeedrateSyntax. Property names are used as JSON keys via nameof. ISO standard: F command + G94 (per minute) / G95 (per revolution). Supported by all major CNC brands. IFlagsDef JSON section schema describing the modal/non-modal flags that take effect on an NC block. Each entry in Flags is a brand-specific keyword recognized by the soft-NC runtime. IMachineCoordinateStateDef Modal machine-coordinate state — absolute six-axis machine position after the block has executed. Written on every block by motion-related LogicSyntaxs (McAbcSyntax, McAbcXyzFallbackSyntax, McXyzSyntax, MachineCoordSelectSyntax, G53p1RotaryPositionSyntax, ReferenceReturnSyntax); seeded on the init block by HomeMcInitializer; carried across non-motion blocks by ModalCarrySyntax. Only configured axes appear as keys (X/Y/Z/A/B/C). Non-existent axes (e.g., A/B/C on a 3-axis machine) are omitted rather than written as NaN sentinels. IMotionEventDef One-shot motion event — present only on blocks that actually issue a motion command. Used by motion semantics (McLinearMotionSemantic, McArcMotionSemantic, ClLinearMotionSemantic) as the trigger to emit motion IAct. NOT carried forward across blocks. Property names are used as JSON keys via nameof. IMotionStateDef Modal motion state — Group 01 G-code mode (G00 / G01 / G02 / G03 ...). Written on every block by LinearMotionSyntax / CircularMotionSyntax; carried across non-motion blocks by ModalCarrySyntax. Property names are used as JSON keys via nameof. Unlike sibling modal sections (Unit, PlaneSelect, Positioning) which carry both a brand-specific Term and a brand-neutral conventional field, MotionState intentionally keeps only Term: the brand-neutral semantic (\"what kind of motion happened\") lives on the sibling one-shot MotionEvent (Form = McLinear / McArc / ClLinear / ClArc). State here is purely the modal latch of the last Group-01 G-code so downstream FindPrevious* can resume motion-mode bookkeeping. IParsingDef JSON section schema carrying the raw, brand-specific parsing trace for an NC block. The Parsing node holds intermediate parser output used by downstream syntaxes and diagnostics. IPathSmoothingDef Path smoothing state. The base interface is brand-agnostic; controller brands extend it with their own argument fields (e.g. IFanucPathSmoothingDef for Fanuc G05.1 R precision-level). Fanuc-flavour writes are produced by FanucPathSmoothingSyntax. ISO/Fanuc G05.1 Q1 (enable) / G05.1 Q0 (disable): high-precision contour control / AICC / Nano Smoothing. Controller-internal interpolation black box — simulation records the state but does not alter the tool path. IPlaneSelectDef Active plane selection state written by PlaneSelectSyntax. Property names are used as JSON keys via nameof. ISO: G17/G18/G19. Heidenhain: implicit from L/CC syntax. Term carries the brand-specific G-code; Plane stores the conventional, brand-neutral axis-pair name (XY/ZX/YZ). IPositioningDef Modal positioning state — ISO Group 03 (G90 absolute / G91 incremental). Written by PositioningSyntax, consumed by IncrementalResolveSyntax, canned cycle syntaxes, and MachineCoordSelectSyntax. Property names are used as JSON keys via nameof. Term is the brand-specific G-code (Fanuc/ISO G90/G91); Mode is the conventional, brand-neutral name (Absolute / Incremental). IProgramEndDef Program end marker (M02/M30). Written by ProgramEndSyntax. Other syntaxes (e.g. IsoLocalCoordinateOffsetSyntax) read this section to reset modal state instead of detecting M30 directly. IProgramStopDef Program-stop marker (M00 unconditional / M01 optional). Written by ProgramStopSyntax on each block that carries an M00/M01 flag. Non-modal: the section appears only on the exact block where the stop code is present. Distinct from IProgramEndDef (M02/M30, end of program). M00 halts execution unconditionally; the operator must press Cycle Start to resume. M01 is an optional stop gated by the operator's \"Optional Stop\" panel switch — ignored when the switch is off. This parsing-layer section records the NC intent; runtime / semantic layers decide whether to actually pause. IProgramXyzDef JSON section schema carrying the program-coordinate position commanded on the current block. Written by ProgramXyzSyntax before the ProgramToMcTransform chain composes it into machine coordinates. IRadiusCompensationDef Radius compensation state written by RadiusCompensationSyntax. Property names are used as JSON keys via nameof. Managed commands (ISO): G41 (left), G42 (right), G40 (cancel). Heidenhain Klartext maps RL → G41, RR → G42, R0 → G40. When active, the tool path is offset perpendicular to the programmed path by Radius_mm; Side determines left vs right. The root ProgramXyz retains the user-programmed position; MachineCoordinate is overwritten to reflect the compensated path. ISpindleControlDef Spindle control item for use inside ItemsKey arrays. Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActSpindleDirection. ISpindleOrientationDef Oriented spindle stop item for use inside ItemsKey arrays. Commands the spindle to stop at a specific angular position (OSS). Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActSpindleOrientation. ISpindleSpeedDef Spindle speed and direction state written by SpindleSpeedSyntax. Property names are used as JSON keys via nameof. ISO: S command for speed, M03/M04/M05 for direction. Heidenhain: M3/M4/M5. Siemens: M3/M4/M5 or SPOS. Direction is stored as the conventional SpindleDirection enum name (CW/CCW/STOP), not as brand-specific M-codes. ITiltTransformDef Tilt transform state written by tilt transform syntaxes. Property names are used as JSON keys via nameof. Managed commands (ISO/Fanuc): G68 (2D rotation), G68.2 (tilted work plane), G69 (cancel). Siemens equivalent: CYCLE800, ROT/AROT (handled by separate syntax). Heidenhain equivalent: PLANE SPATIAL / PLANE RESET (handled by separate syntax). IToolHeightCompensationDef Tool height compensation state written by ToolHeightOffsetSyntax. Property names are used as JSON keys via nameof. The JSON section can be deserialized to an instance implementing this interface. Managed commands (ISO/Fanuc): G43, G44, G49. Fanuc extension: G43.4 (TCPM — parsed only in Fanuc syntax list). Siemens equivalent: TRAFOOF/TRAORI (handled by separate syntax). Heidenhain equivalent: TOOL CALL / M128/M129 (handled by separate syntax). ITransformationDef Chain of named ProgramXyz → MachineCoordinate transformation entries. Stored as a JsonArray of entries, each with “Source”, “Kind”, and “Mat4d” keys. Each contributing INcSyntax adds or replaces its own entry by source name. GetComposedTransform(JsonObject) composes entries in order: McXyz = ProgramXyz * T[0] * T[1] * ... * T[n]. Kind contour-validity classification. Each entry is either: \"Static\" — the Mat4d is valid for any point along the contour. Tilt, coord-offset, and the kinematic pivot in non-RTCP / rotary-stable blocks are all Static. \"Dynamic\" — the Mat4d is a block-endpoint snapshot of a rotary-state-dependent transform (RTCP rotary-dynamic). Composition still yields a correct endpoint MC, but the matrix is not contour-valid: intermediate CL-point positions cannot be derived by applying it to an interpolated ProgramXyz. The semantic layer (ClLinearMotionSemantic) handles per-step IK separately. Use HasDynamicEntry(JsonObject) to detect the presence of any Dynamic entry on this block. IUnitDef Unit-system state (ISO Group 06: G20 inch / G21 metric). Written by UnitModeSyntax. Modal. HiNC's NC pipeline works exclusively in millimetres. G21 is therefore a no-op confirmation of the default; G20 is reported as an Unsupported Error and callers are expected to pre-convert the NC program to metric before loading. IUnparsedTextDef JSON section schema carrying the residual block text that was not consumed by any registered syntax. Used for diagnostics and round-trip preservation." + "summary": "Namespace Hi.NcParsers.Keywords Classes BlockSkip Optional block skip marker extracted from the head of an NC block. ISO 6983 / Fanuc calls this feature Block Delete (BDT switch); Siemens / Syntec / Mazak use the same / prefix with matching behaviour. The section is only present on blocks that carry a / prefix. Whether the block's NC commands are actually skipped at runtime depends on IBlockSkipConfig: Config absent or the Layer bit OFF → the / prefix is consumed, Body is left null, and the rest of the line parses as a regular NC block (comments still take effect). Config present and the Layer bit ON → the rest of the line is moved into Body and cleared from UnparsedText, so downstream parsing syntaxes see nothing and no NC action is emitted. Comment syntaxes run before this one so comments (and any embedded CsScript) still take effect. Not a comment: a comment is static metadata, block skip is a runtime toggle that can change per machine/operator setting. CallFrame One entry in Frames. Holds the caller-side information consumers need to “unwind” or “look back” — currently only the relative file path of the caller, used by SubProgramReturnSyntax on M99 P{seq} to locate the caller's N{seq} block. CallStack JSON-section data shape representing the active call-frame stack on a block — pushed by call-and-inline syntaxes (SubProgramCallSyntax for M98/M198, FanucMacroCallSyntax for G65, and FanucModalMacroSyntax's expansion phase for G66 implicit triggers) and popped by SubProgramReturnSyntax on M99. Every block between push and pop carries the section forward via ModalCarrySyntax; the caller's blocks before push and after pop carry the surrounding stack state (typically empty when running from the main file). The section is wrapped in a JsonObject rather than exposed as a bare JsonArray so it fits ModalCarry's \"deep-clone JsonObject\" carry pattern — the array of frames lives inside Frames. CannedCycle Section key holder + concrete implementation for ICannedCycleDef. Comment Comment extracted from an NC block. Symbol identifies the comment style; Text holds the content without the symbol. Downstream syntaxes (e.g., CsScript) may further trim Text after extracting embedded markers. CompoundMotion Section key holder + concrete implementation for ICompoundMotionDef. Coolant Section key holder + concrete implementation for ICoolantDef. CoordinateOffset Work coordinate offset state written by IsoCoordinateOffsetSyntax. Property names are used as JSON keys via nameof. Managed commands (ISO): G54, G55, G56, G57, G58, G59, G59.1–G59.9. Siemens: G54–G57 + G505–G599 (extended), G500 to cancel. Heidenhain: CYCL DEF 247 (Datum Preset) / CYCL DEF 7 (Datum Shift). CsScript Section-key holder for inline C# scripts attached to an NC block. Carries BeginScript (run before the block's acts) and EndScript (run after). Resolved by CsScriptBeginSemantic and CsScriptEndSemantic. Dwell Section key holder + concrete implementation for IDwellDef. FanucGoto Fanuc Custom Macro B GOTO record. Stamped on the host block by FanucGotoSyntax after the control-flow decision has been made; produced earlier by FanucGotoParsingSyntax as a parsing-stage sub-section (Parsing.FanucGoto) carrying the raw captured fields. Two source forms map to the same shape: GOTO — unconditional jump. Condition is null. IF [] GOTO — conditional jump. Condition holds the expression text from inside the brackets. At parsing time N is a raw token from the source — it may be a literal (\"100\"), a variable reference (\"#1\"), or a bracketed expression (\"#[#2+5]\"). VariableEvaluatorSyntax substitutes a resolved literal back into the same field in the Evaluation bundle; FanucGotoSyntax then int.TryParses the final string to produce an int target. FanucIfThen Fanuc Custom Macro B IF [] THEN single-block conditional record. Stamped on the host block by FanucIfThenSyntax after the gate decision; produced earlier by FanucIfThenParsingSyntax as a parsing-stage sub-section (Parsing.FanucIfThen) carrying the raw captured fields plus an internal PendingAssignments sub-object harvested from the body text. Spec: IF [bool-expr] THEN executes only when the condition is truthy. Unlike FanucGoto's conditional form there is no jump — the body affects the current block only, no source splice, no label scan, no iteration watchdog. The most common body shape is a single Custom Macro B assignment (#nnn = ); multiple assignments in one body are also accepted and lifted together. Condition is held as a string at parsing time so VariableEvaluatorSyntax's pass-2 tree walk can substitute it to a numeric JsonValue in place; the FanucIfThenSyntax tail then reads the resolved node polymorphically via the same ReadCondition shape used by FanucGotoSyntax. FanucMacroCall One-shot custom-macro-call record written by FanucMacroCallSyntax. Lives on both the G65 host block (the caller) and every inlined block of the macro body — so a cache-dump reader can land on any block inside the macro and immediately see “this block belongs to a G65 call of File with these argument bindings” without back-walking to find the host. Each inlined block additionally carries the resolved Vars.Local #1-#26 bindings derived from Args (see FanucMacroArgumentMap), so LocalVariableLookup resolves macro args in a single-block lookup. Frame isolation is structural: caller blocks never have Vars.Local written, so after the macro body ends, the next caller block reads null for any #1-#26 without any explicit frame marker. FanucModalMacro Modal-macro-call record left by FanucModalMacroSyntax. Carries Fanuc G66 setup state forward block-to-block until cancelled by G67. The section is also written on the G67 block itself (with Term = “G67”) so cache dumps show the cancel edge; subsequent blocks then carry no section at all. Per-block expansion of the modal call into an actual macro inline at every positioning move is not yet implemented — a FanucModalMacro--NotExpanded warning is emitted on the setup block to flag the simulation gap. The setup state itself is captured faithfully so external tooling can detect \"this block sits inside a G66 modal\" via the carried section. FanucPathSmoothing Section data holder for IFanucPathSmoothingDef. FanucProgramNumber Fanuc-family program identifier header that follows a TapeBoundary line — e.g. O1234 or . Wrapper records the surface form so a parsed block can be emitted back to the original notation. Feedrate Section key holder + concrete implementation for IFeedrateDef. IndexNote JSON-section data shape pairing a single-character address symbol (e.g. ‘O’, ‘N’) with its numeric index, used to annotate program/sequence numbers on an NC block. IsoLocalCoordinateOffset ISO/Fanuc-family local coordinate offset state (G52) written by IsoLocalCoordinateOffsetSyntax. Property names are used as JSON keys via nameof. G52 X Y Z installs a local coordinate-system shift that stacks on top of the active G54-G59 work offset. The cancel mechanism is to write G52 X0 Y0 Z0 (or hit M30 / reset) — there is no separate G code for \"cancel\". The offset vector is therefore always modal: zero is a valid modal value, not a \"disabled\" state, so the section is recorded on every block. Brand-specific kin: Siemens TRANS/ATRANS (which can also carry rotation/scale/mirror) and Heidenhain TRANS DATUM are handled by their own syntaxes and write to their own sections — they do not share this key, because their data shapes are richer. MachineCoordinateState Section key holder for IMachineCoordinateStateDef. MacroFrame Top-level integer marker stamped onto a SyntaxPiece's JSON to identify which call frame the block belongs to. Brand-agnostic by design — written by FanucMacroCallSyntax today, reusable by any future call-inlining syntax (Fanuc G66 modal expansion, Heidenhain LBL CALL, …) that needs local-variable isolation across call boundaries. Semantics: the value is an opaque id; only equality matters. Two blocks with the same MacroFrame id share a call frame (locals visible across them via single-step carry); two blocks with different ids do not. The id 0 is reserved for the main program frame and is returned by Get(JsonObject) when the field is absent — so a plain caller block needs no stamp and yet compares distinct from any inlined frame. Stored as a top-level JSON int (not an object section) so it stays lightweight on every inlined block. Decoupled from FanucMacroCall: that section is a diagnostic record of the call (what file, what args), while MacroFrame is the purely functional marker the local-variable I/O syntaxes consult. MotionEvent Section key holder + concrete implementation for IMotionEventDef. MotionState Section key holder + concrete implementation for IMotionStateDef. PathSmoothing Section key holder for IPathSmoothingDef. PlaneSelect Section key holder for IPlaneSelectDef. Positioning Section key holder + concrete implementation for IPositioningDef. ProgramEnd Section key holder for IProgramEndDef. ProgramStop Section key holder + concrete implementation for IProgramStopDef. RadiusCompensation Section key holder + concrete implementation for IRadiusCompensationDef. SpindleControl Section key holder + concrete implementation for ISpindleControlDef. SpindleOrientation Section key holder + concrete implementation for ISpindleOrientationDef. SpindleSpeed Section key holder + concrete implementation for ISpindleSpeedDef. SubProgramCall Subprogram call record left by SubProgramCallSyntax on the M98 / M198 host block and on every inlined body block. The call itself emits no motion act; this section is bookkeeping so cache dumps and diagnostic readers can see \"this block triggered (or sits inside) an inline of program P\". M98 and M198 share the exact same section shape. The difference between them is purely environmental — which folder the resolver looks in (SubProgramFolderConfig.InternalFolder vs ExternalFolder) — and that lives on the dependency, not in this JSON record. SubProgramReturn Subprogram return record left on the M99 host block by SubProgramReturnSyntax. Return blocks produce no motion acts; this section makes the consumed M99 visible in cache dumps and surfaces the M99 P{seq} jump decision. TapeBoundary Tape leader / trailer line — the literal % that historically marked the start and end of a punched paper-tape program. ISO-style controllers (Fanuc, Mazak, Syntec, Siemens) all preserve it as a file-level boundary marker. Distinct from a comment: the controller uses it as a tape/file delimiter, not as embedded operator text. TiltTransform Concrete class for ITiltTransformDef section serialization. ToolHeightCompensation Section key holder for IToolHeightCompensationDef. Unit Section key holder + concrete implementation for IUnitDef. Vars JSON section schema for per-block variable storage. Each sub-property names a sub-section that holds a { “#nnn”: value } dictionary keyed by Fanuc-style variable id. The sub-sections partition the variable space by lifetime: Local — #1-#33, scope: macro call frame (pushed/popped by G65 / G66 / M99). Volatile — #100-#499, non-retained common; carries block-to-block, cleared by ProgramEndCleanSyntax on M02 / M30. SystemControl — #3000-#3999, controller-side system variables; offline-only round-trip record (real controller effects such as clock reset / alarm trigger / message pause are not simulated). The property types are JsonObject rather than strongly-typed dictionaries because each sub-section's keys are dynamic Fanuc variable ids (#100, #5001, …) discovered at parse time, not a fixed schema. This class exists solely to give the section name and sub-keys stable nameof() targets — instances are never constructed at runtime. Interfaces IArcMotionDef Arc motion data written by CircularMotionSyntax. Stored under the Hi.Motion JSON section alongside IMotionEventDef properties. ICannedCycleDef Canned cycle modal state (Group 09). Captures which cycle is currently active, its return mode (G98/G99), and the resolved absolute parameter set used for modal lookback. Written by CannedCycleResolveSyntax on every block that belongs to the canned-cycle group: cycle code present (G81/G82/G83/G73/G84/G74/G85/G86/G89/G76/G87), modal repeat (cycle still active, only coordinates given), or explicit cancel (G80). Term = \"G80\" is the explicit-cancel sentinel used by FindPreviousActiveCycle(LazyLinkedListNode, string[]) to terminate modal lookback without ambiguity; regular blocks (e.g. G00 X.. Y..) simply omit the section entirely. ICompoundMotionDef Compound motion section definition for commands that produce multiple sub-operations (G28, G53.1, G81, G82, etc.). Contains a ItemsKey array resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil. Item types (discriminated by key presence): Hi.Motion — rapid/feed linear motion (IMotionEventDef + IMachineCoordinateStateDef) Dwell — pause (Time in seconds) SpindleControl — spindle direction change (Direction) SpindleOrientation — oriented spindle stop (OSS) (Angle_deg) ICoolantDef Coolant state (M07 mist / M08 flood / M09 off). Written by CoolantSyntax. Modal — persists until changed. IsOn is the on/off convenience flag (true for M07 and M08, false for M09). Mode carries the abstract kind (Flood / Mist / Off) for consumers that need to distinguish flood vs mist. IDwellDef Dwell/pause section definition for use inside Sequence items. Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActDelay. IFanucPathSmoothingDef Fanuc-specific path smoothing state written by FanucPathSmoothingSyntax. Extends IPathSmoothingDef with the Fanuc G05.1 R argument (precision / smoothness level number, R1..R10 mapping to controller-internal tuning macro variables). Q is binary in current Fanuc firmware (Q0 disable / Q1 enable), so IsEnabled covers it directly — no raw Q field is stored. JSON section key remains nameof(PathSmoothing) so generic readers (cache dumps, modal carry, UI) can cast to IPathSmoothingDef across all controller brands; brand-specific readers cast to IFanucPathSmoothingDef for the extra fields. IFeedrateDef Feedrate state written by FeedrateSyntax. Property names are used as JSON keys via nameof. ISO standard: F command + G94 (per minute) / G95 (per revolution). Supported by all major CNC brands. IFlagsDef JSON section schema describing the modal/non-modal flags that take effect on an NC block. Each entry in Flags is a brand-specific keyword recognized by the soft-NC runtime. IMachineCoordinateStateDef Modal machine-coordinate state — absolute six-axis machine position after the block has executed. Written on every block by motion-related LogicSyntaxs (McAbcSyntax, McAbcXyzFallbackSyntax, McXyzSyntax, MachineCoordSelectSyntax, G53p1RotaryPositionSyntax, ReferenceReturnSyntax); seeded on the init block by HomeMcInitializer; carried across non-motion blocks by ModalCarrySyntax. Only configured axes appear as keys (X/Y/Z/A/B/C). Non-existent axes (e.g., A/B/C on a 3-axis machine) are omitted rather than written as NaN sentinels. IMotionEventDef One-shot motion event — present on every block whose source programmed a motion command, regardless of whether the resulting displacement is non-zero. A redundant G01 X10 on a block already at X10 still gets a MotionEvent; the motion semantics (McLinearMotionSemantic, McArcMotionSemantic, ClLinearMotionSemantic) then early-return on distance <= 0 and emit no IAct. NOT carried forward across blocks. Reason for the \"programmed, not displaced\" definition: Fanuc G66 modal macro fires once per programmed motion command (per Fanuc spec — no distance gate), so FanucModalMacroSyntax.Expansion uses MotionEvent presence as its trigger. Suppressing the section on zero-distance moves would silently change G66 behaviour. The modal sibling MotionState separately latches the Group-01 mode for readers that only need to know \"what G-code is active\". Property names are used as JSON keys via nameof. IMotionStateDef Modal motion state — Group 01 G-code mode (G00 / G01 / G02 / G03 ...). Written on every block by LinearMotionSyntax / CircularMotionSyntax; carried across non-motion blocks by ModalCarrySyntax. Property names are used as JSON keys via nameof. Unlike sibling modal sections (Unit, PlaneSelect, Positioning) which carry both a brand-specific Term and a brand-neutral conventional field, MotionState intentionally keeps only Term: the brand-neutral semantic (\"what kind of motion happened\") lives on the sibling one-shot MotionEvent (Form = McLinear / McArc / ClLinear / ClArc). State here is purely the modal latch of the last Group-01 G-code so downstream FindPrevious* can resume motion-mode bookkeeping. IParsingDef JSON section schema carrying the raw, brand-specific parsing trace for an NC block. The Parsing node holds intermediate parser output used by downstream syntaxes and diagnostics. IPathSmoothingDef Path smoothing state. The base interface is brand-agnostic; controller brands extend it with their own argument fields (e.g. IFanucPathSmoothingDef for Fanuc G05.1 R precision-level). Fanuc-flavour writes are produced by FanucPathSmoothingSyntax. ISO/Fanuc G05.1 Q1 (enable) / G05.1 Q0 (disable): high-precision contour control / AICC / Nano Smoothing. Controller-internal interpolation black box — simulation records the state but does not alter the tool path. IPlaneSelectDef Active plane selection state written by PlaneSelectSyntax. Property names are used as JSON keys via nameof. ISO: G17/G18/G19. Heidenhain: implicit from L/CC syntax. Term carries the brand-specific G-code; Plane stores the conventional, brand-neutral axis-pair name (XY/ZX/YZ). IPositioningDef Modal positioning state — ISO Group 03 (G90 absolute / G91 incremental). Written by PositioningSyntax, consumed by IncrementalResolveSyntax, canned cycle syntaxes, and MachineCoordSelectSyntax. Property names are used as JSON keys via nameof. Term is the brand-specific G-code (Fanuc/ISO G90/G91); Mode is the conventional, brand-neutral name (Absolute / Incremental). IProgramEndDef Program end marker (M02/M30). Written by ProgramEndSyntax. Other syntaxes (e.g. IsoLocalCoordinateOffsetSyntax) read this section to reset modal state instead of detecting M30 directly. IProgramStopDef Program-stop marker (M00 unconditional / M01 optional). Written by ProgramStopSyntax on each block that carries an M00/M01 flag. Non-modal: the section appears only on the exact block where the stop code is present. Distinct from IProgramEndDef (M02/M30, end of program). M00 halts execution unconditionally; the operator must press Cycle Start to resume. M01 is an optional stop gated by the operator's \"Optional Stop\" panel switch — ignored when the switch is off. This parsing-layer section records the NC intent; runtime / semantic layers decide whether to actually pause. IProgramXyzDef JSON section schema carrying the program-coordinate position commanded on the current block. Written by ProgramXyzSyntax before the ProgramToMcTransform chain composes it into machine coordinates. IRadiusCompensationDef Radius compensation state written by RadiusCompensationSyntax. Property names are used as JSON keys via nameof. Managed commands (ISO): G41 (left), G42 (right), G40 (cancel). Heidenhain Klartext maps RL → G41, RR → G42, R0 → G40. When active, the tool path is offset perpendicular to the programmed path by Radius_mm; Side determines left vs right. The root ProgramXyz retains the user-programmed position; MachineCoordinate is overwritten to reflect the compensated path. ISpindleControlDef Spindle control item for use inside ItemsKey arrays. Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActSpindleDirection. ISpindleOrientationDef Oriented spindle stop item for use inside ItemsKey arrays. Commands the spindle to stop at a specific angular position (OSS). Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActSpindleOrientation. ISpindleSpeedDef Spindle speed and direction state written by SpindleSpeedSyntax. Property names are used as JSON keys via nameof. ISO: S command for speed, M03/M04/M05 for direction. Heidenhain: M3/M4/M5. Siemens: M3/M4/M5 or SPOS. Direction is stored as the conventional SpindleDirection enum name (CW/CCW/STOP), not as brand-specific M-codes. ITiltTransformDef Tilt transform state written by tilt transform syntaxes. Property names are used as JSON keys via nameof. Managed commands (ISO/Fanuc): G68 (2D rotation), G68.2 (tilted work plane), G69 (cancel). Siemens equivalent: CYCLE800, ROT/AROT (handled by separate syntax). Heidenhain equivalent: PLANE SPATIAL / PLANE RESET (handled by separate syntax). IToolHeightCompensationDef Tool height compensation state written by ToolHeightOffsetSyntax. Property names are used as JSON keys via nameof. The JSON section can be deserialized to an instance implementing this interface. Managed commands (ISO/Fanuc): G43, G44, G49. Fanuc extension: G43.4 (TCPM — parsed only in Fanuc syntax list). Siemens equivalent: TRAFOOF/TRAORI (handled by separate syntax). Heidenhain equivalent: TOOL CALL / M128/M129 (handled by separate syntax). ITransformationDef Chain of named ProgramXyz → MachineCoordinate transformation entries. Stored as a JsonArray of entries, each with “Source”, “Kind”, and “Mat4d” keys. Each contributing INcSyntax adds or replaces its own entry by source name. GetComposedTransform(JsonObject) composes entries in order: McXyz = ProgramXyz * T[0] * T[1] * ... * T[n]. Kind contour-validity classification. Each entry is either: \"Static\" — the Mat4d is valid for any point along the contour. Tilt, coord-offset, and the kinematic pivot in non-RTCP / rotary-stable blocks are all Static. \"Dynamic\" — the Mat4d is a block-endpoint snapshot of a rotary-state-dependent transform (RTCP rotary-dynamic). Composition still yields a correct endpoint MC, but the matrix is not contour-valid: intermediate CL-point positions cannot be derived by applying it to an interpolated ProgramXyz. The semantic layer (ClLinearMotionSemantic) handles per-step IK separately. Use HasDynamicEntry(JsonObject) to detect the presence of any Dynamic entry on this block. IUnitDef Unit-system state (ISO Group 06: G20 inch / G21 metric). Written by UnitModeSyntax. Modal. HiNC's NC pipeline works exclusively in millimetres. G21 is therefore a no-op confirmation of the default; G20 is reported as an Unsupported Error and callers are expected to pre-convert the NC program to metric before loading. IUnparsedTextDef JSON section schema carrying the residual block text that was not consumed by any registered syntax. Used for diagnostics and round-trip preservation." }, "api/Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html", "title": "Class BackBoringSyntax | HiAPI-C# 2025", "summary": "Class BackBoringSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G87 back boring cycle. Supports modal repetition. Cuts upward from Z to R — used to bore the back side of a workpiece. Cycle sequence: Oriented spindle stop (OSS) at current position Rapid (shifted) to init position, then down to bottom Z — tool enters pre-drilled hole without contacting bore wall Shift back to hole center at bottom Spindle start (CW) Feed upward from Z to R-point (back boring cut) Oriented spindle stop at R Tool shift, rapid retract (shifted) to final Z Shift back to center, spindle restart Q specifies the lateral shift distance (mm). Shift direction defaults to +X (OSS angle 0°). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax before this syntax runs. public class BackBoringSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object BackBoringSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors BackBoringSyntax() Initializes a new instance with default settings. public BackBoringSyntax() BackBoringSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public BackBoringSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, + "api/Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html": { + "href": "api/Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html", + "title": "Enum BareG28Behavior | HiAPI-C# 2025", + "summary": "Enum BareG28Behavior Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes ICompoundMotionDef section for G28 reference point return. Reads intermediate XYZ from Parsing.G28 (written by G28Syntax) and converts to machine coordinates via ResolveProgramXyz(JsonNode, LazyLinkedListNode, ISentenceCarrier, NcDiagnosticProgress). Must be placed after LinearMotionSyntax in the syntax chain. Removes the IMotionEventDef section written by LinearMotionSyntax (G28 handles its own motion). Overwrites root MachineCoordinateState and ProgramXyz with reference position for subsequent block lookback. public enum BareG28Behavior Extension Methods InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) MaskUtil.GetMaskedValue(T, T, bool) MaskUtil.SetMask(ref T, T, bool) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Fields Alarm = 0 Emit Coord-RefReturn–003 validation error and consume the bare G28 without emitting motion. AllAxesHome = 1 Interpret bare G28 as if every configured axis were listed at its current modal value, so item 0 (intermediate) is a no-op and item 1 sends each configured axis to its home. Requires an IMachineAxisConfig dep; without one the syntax falls back to Alarm. Examples All cases hardcode a TestDeps.HomeMc with X/Y home at 0 and Z home at 100 (typical mill where Z-home is above the table) and leave the ProgramToMcTransform chain at identity so the final ProgramXyz equals MachineCoordinateState. The G28 pattern emits a 2-item CompoundMotion: item 0 is the intermediate point in ProgramXyz, item 1 is the final position in MachineCoordinateState. Axes not present in the G28 block keep the previous-block MC value rather than going home. G91 G28 X0 Y0 Z0 with a #Previous: block carrying MachineCoordinateState=(50,60,70) — all three axes go home, so the final MC is the configured home (0,0,100): #Previous: { \"MachineCoordinateState\": { \"X\": 50, \"Y\": 60, \"Z\": 70 } } #BeforeBuild: { \"Parsing\": { \"G28\": { \"X\": 0, \"Y\": 0, \"Z\": 0 } } } #AfterBuild: { \"CompoundMotion\": { \"Term\": \"G28\", \"Items\": [ { \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true }, \"ProgramXyz\": { \"X\": 0, \"Y\": 0, \"Z\": 0 } }, { \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true }, \"MachineCoordinateState\": { \"X\": 0, \"Y\": 0, \"Z\": 100 } } ] }, \"ProgramXyz\": { \"X\": 0, \"Y\": 0, \"Z\": 100 } } G91 G28 Z0 — only Z goes to its home; X/Y inherit from the previous block's MC. Item 0's intermediate ProgramXyz takes X/Y from the inherited program XYZ (= previous MC under identity transform) and Z from the literal 0 in the G28 block: #Previous: { \"MachineCoordinateState\": { \"X\": 50, \"Y\": 60, \"Z\": 70 } } #BeforeBuild: { \"Parsing\": { \"G28\": { \"Z\": 0 } } } #AfterBuild: { \"CompoundMotion\": { \"Term\": \"G28\", \"Items\": [ { \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true }, \"ProgramXyz\": { \"X\": 50, \"Y\": 60, \"Z\": 0 } }, { \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true }, \"MachineCoordinateState\": { \"X\": 50, \"Y\": 60, \"Z\": 100 } } ] }, \"ProgramXyz\": { \"X\": 50, \"Y\": 60, \"Z\": 100 } } No IHomeMcConfig dep on the dependency list — the syntax early-returns and the G28 sub-section stays in Parsing for an upstream consumer or downstream syntax to handle: #BeforeBuild: { \"Parsing\": { \"G28\": { \"X\": 0, \"Y\": 0, \"Z\": 0 } } } #AfterBuild: { \"Parsing\": { \"G28\": { \"X\": 0, \"Y\": 0, \"Z\": 0 } } } Rotary cases below add TestDeps.AxisConfig declaring B as rotary and extend HomeMc with the conventional B home at 0°. Each rotary block uses literal B = 45° so item 0's intermediate (45°), item 1's home (0°), and #Previous: modal B (30°) are pairwise distinct — a test that swaps any two values for any other is caught by the assertion. The wrap pass (McAbcCyclicPathSyntax) is a different syntax, so these per-SUT conformance assertions show only the raw literal / canonical-home values written by this syntax, before any cyclic normalization runs. G91 G28 B45. — pure rotary G28. Emits a 2-item CompoundMotion whose items carry only ABC keys in MC; no XYZ ProgramXyz and no XYZ MC because the block doesn't reference X/Y/Z (and the conformance harness doesn't run McXyzSyntax downstream — in the full pipeline that syntax fills root MachineCoordinateState's XYZ from root ProgramXyz, but with no XYZ in the block there's nothing to fill anyway). Root MC.B holds the canonical home for modal carry-forward; root ProgramXyz is not written: #BeforeBuild: { \"Parsing\": { \"G28\": { \"B\": 45 } } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 0 }, \"CompoundMotion\": { \"Term\": \"G28\", \"Items\": [ { \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true }, \"MachineCoordinateState\": { \"B\": 45 } }, { \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true }, \"MachineCoordinateState\": { \"B\": 0 } } ] } } G28 X0. B45. mixed XYZ + rotary. Both axis kinds occupy the same two items: item 0 carries the XYZ intermediate ProgramXyz alongside the rotary literal in MC; item 1 carries the final XYZ MC alongside the rotary home in MC. Root MachineCoordinateState here holds only the rotary modal value (B = 0, the home); the XYZ portion of root MC would be filled by the downstream McXyzSyntax in the full pipeline (out of scope for this per-SUT conformance). Root MachineCoordinateState appears first because the rotary-home write happens before CompoundMotion / ProgramXyz are inserted. #Previous: carries B = 30 so the prev rotary modal is distinct from both the literal (45) and the home (0): #Previous: { \"MachineCoordinateState\": { \"X\": 50, \"Y\": 60, \"Z\": 70, \"B\": 30 } } #BeforeBuild: { \"Parsing\": { \"G28\": { \"X\": 0, \"B\": 45 } } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 0 }, \"CompoundMotion\": { \"Term\": \"G28\", \"Items\": [ { \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true }, \"ProgramXyz\": { \"X\": 0, \"Y\": 60, \"Z\": 70 }, \"MachineCoordinateState\": { \"B\": 45 } }, { \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true }, \"MachineCoordinateState\": { \"X\": 0, \"Y\": 60, \"Z\": 70, \"B\": 0 } } ] }, \"ProgramXyz\": { \"X\": 0, \"Y\": 60, \"Z\": 70 } } Bare G28 — no axis specifiers — exercises the configurable BareG28 policy. Default Alarm emits Coord-RefReturn--003 and consumes the G28 without motion (the diagnostic surfaces through the NcDiagnosticProgress sink, not the block JSON, so the canonical #AfterBuild is just an empty object): #BeforeBuild: { \"Parsing\": { \"G28\": {} } } #AfterBuild: {} Bare G28 with BareG28 set to AllAxesHome: the syntax synthesises a literal at the inherited program position for every configured linear axis and the previous modal angle for every configured rotary axis (here X/Y/Z taken from the #Previous: MC under the identity ProgramToMcTransform, B taken from the prev modal). Item 0's intermediate therefore equals current (no motion in stage 1) and item 1 sends each axis to its home: #Previous: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30, \"B\": 45 } } #BeforeBuild: { \"Parsing\": { \"G28\": {} } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 0 }, \"CompoundMotion\": { \"Term\": \"G28\", \"Items\": [ { \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true }, \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MachineCoordinateState\": { \"B\": 45 } }, { \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true }, \"MachineCoordinateState\": { \"X\": 0, \"Y\": 0, \"Z\": 100, \"B\": 0 } } ] }, \"ProgramXyz\": { \"X\": 0, \"Y\": 0, \"Z\": 100 } }" + }, "api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html", "title": "Class BoringCycleSyntax | HiAPI-C# 2025", @@ -4272,12 +4397,12 @@ "api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html", "title": "Class CircularMotionSyntax | HiAPI-C# 2025", - "summary": "Class CircularMotionSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes McArc motion for circular commands (ISO G02/G03). Detects motion mode from Flags, reads I/J/K center offsets or R radius from Parsing, computes arc center in program coordinates, and writes a one-shot MotionEvent (form + arc params) plus a modal MotionState (Term). G02/G03 mode is modal (Group 01) — persists across blocks via Term. Arc parameters (I/J/K/R) are per-block and must be present in every arc block. Must be placed before LinearMotionSyntax in the syntax chain. Both share the Group 01 motion slot; whichever writes a MotionEvent first claims it. public class CircularMotionSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object CircularMotionSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CircularMotionSyntax() Initializes a new instance with default settings. public CircularMotionSyntax() CircularMotionSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public CircularMotionSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class CircularMotionSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes McArc motion for circular commands (ISO G02/G03). Detects motion mode from Flags, reads I/J/K center offsets or R radius from Parsing, computes arc center in program coordinates, and writes a one-shot MotionEvent (form + arc params) plus a modal MotionState (Term). G02/G03 mode is modal (Group 01) — persists across blocks via Term. Arc parameters (I/J/K/R) are per-block and must be present in every arc block. Must be placed before LinearMotionSyntax in the syntax chain. Both share the Group 01 motion slot; whichever writes a MotionEvent first claims it. public class CircularMotionSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object CircularMotionSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples All cases below have the current block's ProgramXyz already set (as a prior ProgramXyzSyntax would have produced) and run with no #Previous:, so GetLastProgramXyz returns Vec3d.Zero. The G17 XY plane is implicit (no PlaneSelect section means PlaneNormalDir = 2). G02 with I/J — quarter arc from (0,0,0) to (10,0,0) around (5,0,0); I=5 J=0 are incremental offsets from start to center. The G02 flag is consumed (Parsing removed once empty); MotionState + MotionEvent are written: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G02\"], \"I\": 5, \"J\": 0 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 }, \"MotionState\": { \"Term\": \"G02\" }, \"MotionEvent\": { \"Form\": \"McArc\", \"ArcCenter\": { \"X\": 5, \"Y\": 0, \"Z\": 0 }, \"PlaneNormalDir\": 2, \"IsCcw\": false, \"AdditionalCircleNum\": 0 } } Modal carry of G02: no motion flag on the current block but a #Previous: MotionState.Term = \"G02\" tells us we are still in circular mode. I/J on the current block describe the arc the same way: #Previous: { \"MotionState\": { \"Term\": \"G02\" } } #BeforeBuild: { \"Parsing\": { \"I\": 5, \"J\": 0 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 }, \"MotionState\": { \"Term\": \"G02\" }, \"MotionEvent\": { \"Form\": \"McArc\", \"ArcCenter\": { \"X\": 5, \"Y\": 0, \"Z\": 0 }, \"PlaneNormalDir\": 2, \"IsCcw\": false, \"AdditionalCircleNum\": 0 } } No I/J/K/R on the block — the per-block arc data is missing, so the syntax bails out early; the G02 flag stays in Parsing.Flags for some other syntax to act on (or to surface as residue if no one does): #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G02\"] }, \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G02\"] }, \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 } } R-format degenerate (chord = 2R, semicircle): start (0,0,0) → end (10,0,0), R=5. perpDistSq resolves to 0 so the computed center collapses to the chord midpoint (5,0,0); no sqrt drift on this branch: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G02\"], \"R\": 5 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 }, \"MotionState\": { \"Term\": \"G02\" }, \"MotionEvent\": { \"Form\": \"McArc\", \"ArcCenter\": { \"X\": 5, \"Y\": 0, \"Z\": 0 }, \"PlaneNormalDir\": 2, \"IsCcw\": false, \"AdditionalCircleNum\": 0 } } R-format non-trivial: G02 90° arc from (0,0,0) to (10,10,0) with R=10. The center comes from the cross-product + sqrt + normalize path inside ResolveCenterFromR(Vec3d, Vec3d, int, bool, double), but for this particular axis-aligned chord the rounding errors cancel and the center lands at exactly (10, 0, 0) — i.e. no ULP drift here, in contrast to e.g. McAbcCyclicPathSyntax's rad/deg round-trip: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G02\"], \"R\": 10 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 10, \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 10, \"Z\": 0 }, \"MotionState\": { \"Term\": \"G02\" }, \"MotionEvent\": { \"Form\": \"McArc\", \"ArcCenter\": { \"X\": 10, \"Y\": 0, \"Z\": 0 }, \"PlaneNormalDir\": 2, \"IsCcw\": false, \"AdditionalCircleNum\": 0 } } G03 CCW with I/J — same geometry as case 0 (start (0,0,0), end (10,0,0), I=5 J=0 → center (5,0,0)) but the G03 flag flips IsCcw to true. Direction is the only differentiating output; arc-center math is unchanged: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G03\"], \"I\": 5, \"J\": 0 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 0, \"Z\": 0 }, \"MotionState\": { \"Term\": \"G03\" }, \"MotionEvent\": { \"Form\": \"McArc\", \"ArcCenter\": { \"X\": 5, \"Y\": 0, \"Z\": 0 }, \"PlaneNormalDir\": 2, \"IsCcw\": true, \"AdditionalCircleNum\": 0 } } Full circle G02 — start == end (both (0,0,0)), I=5 J=0 places center off-start at (5,0,0). The isFullCircle guard (chord length < 1e-6 and center-to-start > 1e-6) flips AdditionalCircleNum to 1 so a downstream motion semantic knows to draw the closed loop: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G02\"], \"I\": 5, \"J\": 0 }, \"ProgramXyz\": { \"X\": 0, \"Y\": 0, \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 0, \"Y\": 0, \"Z\": 0 }, \"MotionState\": { \"Term\": \"G02\" }, \"MotionEvent\": { \"Form\": \"McArc\", \"ArcCenter\": { \"X\": 5, \"Y\": 0, \"Z\": 0 }, \"PlaneNormalDir\": 2, \"IsCcw\": false, \"AdditionalCircleNum\": 1 } } Constructors CircularMotionSyntax() Initializes a new instance with default settings. public CircularMotionSyntax() CircularMotionSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public CircularMotionSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html", "title": "Class CoolantSyntax | HiAPI-C# 2025", - "summary": "Class CoolantSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes M07 (mist ON), M08 (flood ON), and M09 (coolant OFF) from Flags and writes the ICoolantDef section with both IsOn (convenience flag) and Mode (abstract mode name: Flood / Mist / Off). Modal — persists via backward lookback. public class CoolantSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object CoolantSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CoolantSyntax() Initializes a new instance with default settings. public CoolantSyntax() CoolantSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public CoolantSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class CoolantSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes M07 (mist ON), M08 (flood ON), and M09 (coolant OFF) from Flags and writes the ICoolantDef section with both IsOn (convenience flag) and Mode (abstract mode name: Flood / Mist / Off). Modal — persists via backward lookback. public class CoolantSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object CoolantSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M08\"] } } #AfterBuild: { \"Coolant\": { \"IsOn\": true, \"Mode\": \"Flood\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M09\", \"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"Coolant\": { \"IsOn\": false, \"Mode\": \"Off\" } } #Previous: { \"Coolant\": { \"IsOn\": true, \"Mode\": \"Mist\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"Coolant\": { \"IsOn\": true, \"Mode\": \"Mist\" } } Constructors CoolantSyntax() Initializes a new instance with default settings. public CoolantSyntax() CoolantSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public CoolantSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html", @@ -4292,12 +4417,12 @@ "api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html", "title": "Class FanucPathSmoothingSyntax | HiAPI-C# 2025", - "summary": "Class FanucPathSmoothingSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes Fanuc G05.1 (high-precision contour / AICC II / Nano Smoothing) and records the modal state in the PathSmoothing JSON section using the FanucPathSmoothing schema. Q1 enables, Q0 disables; the optional R{n} precision-level is preserved as Level. The simulation does not alter the tool path — this is a controller-internal interpolation black box; the captured state exists for bidirectional NC-text reconstruction. Modal carry to subsequent blocks is handled by ModalCarrySyntax, which already tracks the PathSmoothing section key and deep-clones it forward. public class FanucPathSmoothingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucPathSmoothingSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FanucPathSmoothingSyntax() Initializes a new instance with default settings. public FanucPathSmoothingSyntax() FanucPathSmoothingSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public FanucPathSmoothingSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class FanucPathSmoothingSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes Fanuc G05.1 (high-precision contour / AICC II / Nano Smoothing) and records the modal state in the PathSmoothing JSON section using the FanucPathSmoothing schema. Q1 enables, Q0 disables; the optional R{n} precision-level is preserved as Level. The simulation does not alter the tool path — this is a controller-internal interpolation black box; the captured state exists for bidirectional NC-text reconstruction. Modal carry to subsequent blocks is handled by ModalCarrySyntax, which already tracks the PathSmoothing section key and deep-clones it forward. public class FanucPathSmoothingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucPathSmoothingSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples First block of the stream (no #Previous:) — stamps the default disabled section so downstream modal lookback always sees a concrete PathSmoothing: #BeforeBuild: { } #AfterBuild: { \"PathSmoothing\": { \"IsEnabled\": false, \"Term\": \"G05.1\" } } G05.1 Q1 with no R — enables, no Level emitted: #Previous: { \"PathSmoothing\": { \"IsEnabled\": false, \"Term\": \"G05.1\" } } #BeforeBuild: { \"Parsing\": { \"G05.1\": { \"Q\": 1 } } } #AfterBuild: { \"PathSmoothing\": { \"IsEnabled\": true, \"Term\": \"G05.1\" } } G05.1 Q1 R3 — enables and preserves the precision level: #Previous: { \"PathSmoothing\": { \"IsEnabled\": false, \"Term\": \"G05.1\" } } #BeforeBuild: { \"Parsing\": { \"G05.1\": { \"Q\": 1, \"R\": 3 } } } #AfterBuild: { \"PathSmoothing\": { \"IsEnabled\": true, \"Term\": \"G05.1\", \"Level\": 3 } } G05.1 Q0 — disables; any prior Level is dropped (R only meaningful when enabling): #Previous: { \"PathSmoothing\": { \"IsEnabled\": true, \"Term\": \"G05.1\", \"Level\": 3 } } #BeforeBuild: { \"Parsing\": { \"G05.1\": { \"Q\": 0 } } } #AfterBuild: { \"PathSmoothing\": { \"IsEnabled\": false, \"Term\": \"G05.1\" } } Constructors FanucPathSmoothingSyntax() Initializes a new instance with default settings. public FanucPathSmoothingSyntax() FanucPathSmoothingSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public FanucPathSmoothingSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html", "title": "Class FeedrateSyntax | HiAPI-C# 2025", - "summary": "Class FeedrateSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes F (feedrate) from Parsing and G94/G95 mode from Flags. Both are modal — persist across blocks via backward node lookback. Writes resolved state to a IFeedrateDef section. public class FeedrateSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FeedrateSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FeedrateSyntax() Initializes a new instance with default settings. public FeedrateSyntax() FeedrateSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public FeedrateSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class FeedrateSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes F (feedrate) from Parsing and G94/G95 mode from Flags. Both are modal — persist across blocks via backward node lookback. Writes resolved state to a IFeedrateDef section. public class FeedrateSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FeedrateSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples New F value with explicit G94 mode — both consumed, Unit derived as mm/min (G94 default): #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G94\"], \"F\": 100 } } #AfterBuild: { \"Feedrate\": { \"FeedrateValue\": 100, \"Term\": \"G94\", \"Unit\": \"mm/min\" } } G95 mode flag only — feedrate value inherited from #Previous:; unit recomputed (mm/rev) from the new term: #Previous: { \"Feedrate\": { \"FeedrateValue\": 50, \"Term\": \"G94\", \"Unit\": \"mm/min\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G95\"] } } #AfterBuild: { \"Feedrate\": { \"FeedrateValue\": 50, \"Term\": \"G95\", \"Unit\": \"mm/rev\" } } F value only (no G94/G95 on this block) alongside an unrelated M03 flag — mode inherits from #Previous:; M03 stays in Parsing.Flags because CleanupParsing is only invoked on the mode-flag branch: #Previous: { \"Feedrate\": { \"FeedrateValue\": 50, \"Term\": \"G95\", \"Unit\": \"mm/rev\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"], \"F\": 200 } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"Feedrate\": { \"FeedrateValue\": 200, \"Term\": \"G95\", \"Unit\": \"mm/rev\" } } Constructors FeedrateSyntax() Initializes a new instance with default settings. public FeedrateSyntax() FeedrateSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public FeedrateSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html", @@ -4312,12 +4437,12 @@ "api/Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html", "title": "Class G53p1RotaryPositionSyntax | HiAPI-C# 2025", - "summary": "Class G53p1RotaryPositionSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G53.1 — non-modal, one-shot rotary axis positioning. Positions the rotary axes (A/B/C) to align the physical tool axis with the active tilted work plane defined by G68.2. XYZ position is unchanged; only rotary axes move via rapid traverse. Requires IsoG68p2TiltSyntax (or equivalent) to have written the tilt transform. Uses IMachineKinematics to solve for the target A/B/C via inverse kinematics. Must be placed after IsoG68p2TiltSyntax (needs tilt data) and before ProgramXyzSyntax in the syntax chain. Writes A/B/C into MachineCoordinateState. Motion is handled by LinearMotionSyntax via modal G00/G01. public class G53p1RotaryPositionSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object G53p1RotaryPositionSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks When IMachineKinematics is not available (3-axis config), G53.1 is silently consumed with no positional effect. When G68.2 is not active, a validation error is reported. Optional explicit A/B/C on the G53.1 line (post-processor hints) override the IK result. These are read from Parsing via ConsumeAxis(JsonObject, string, Sentence, NcDiagnosticProgress) and consumed to prevent McAbcSyntax from double-processing. Constructors G53p1RotaryPositionSyntax() Initializes a new instance with default settings. public G53p1RotaryPositionSyntax() G53p1RotaryPositionSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public G53p1RotaryPositionSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class G53p1RotaryPositionSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G53.1 — non-modal, one-shot rotary axis positioning. Positions the rotary axes (A/B/C) to align the physical tool axis with the active tilted work plane defined by G68.2. XYZ position is unchanged; only rotary axes move via rapid traverse. Requires IsoG68p2TiltSyntax (or equivalent) to have written the tilt transform. Uses IMachineKinematics to solve for the target A/B/C via inverse kinematics. Must be placed after IsoG68p2TiltSyntax (needs tilt data) and before ProgramXyzSyntax in the syntax chain. Writes A/B/C into MachineCoordinateState. Motion is handled by LinearMotionSyntax via modal G00/G01. public class G53p1RotaryPositionSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object G53p1RotaryPositionSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks When IMachineKinematics is not available (3-axis config), G53.1 is silently consumed with no positional effect. When G68.2 is not active, a validation error is reported. Optional explicit A/B/C on the G53.1 line (post-processor hints) override the IK result. These are read from Parsing via ConsumeAxis(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) and consumed to prevent McAbcSyntax from double-processing. Constructors G53p1RotaryPositionSyntax() Initializes a new instance with default settings. public G53p1RotaryPositionSyntax() G53p1RotaryPositionSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public G53p1RotaryPositionSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html", "title": "Class HeidenhainCoordinateOffsetSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainCoordinateOffsetSyntax Namespace Hi.NcParsers.LogicSyntaxs.Heidenhain Assembly HiMech.dll Heidenhain-specific: resolves coordinate offset from CYCL DEF 247 (Datum Preset) and CYCL DEF 7 (Datum Shift). CYCL DEF 247 Q339=N: selects datum preset table entry N. CYCL DEF 7 #N: selects datum shift table entry N. CYCL DEF 7 X/Y/Z: applies direct XYZ shift values. For DIN/ISO compatibility (G54–G59), use IsoCoordinateOffsetSyntax in addition to this syntax in the Heidenhain syntax list. Uses replace-by-source (TransformSource) so both syntaxes can coexist without double-composing. public class HeidenhainCoordinateOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainCoordinateOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HeidenhainCoordinateOffsetSyntax() Initializes a new instance with default settings. public HeidenhainCoordinateOffsetSyntax() HeidenhainCoordinateOffsetSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainCoordinateOffsetSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class HeidenhainCoordinateOffsetSyntax Namespace Hi.NcParsers.LogicSyntaxs.Heidenhain Assembly HiMech.dll Heidenhain-specific: resolves coordinate offset from CYCL DEF 247 (Datum Preset) and CYCL DEF 7 (Datum Shift). CYCL DEF 247 Q339=N: selects datum preset table entry N. CYCL DEF 7 #N: selects datum shift table entry N. CYCL DEF 7 X/Y/Z: applies direct XYZ shift values. For DIN/ISO compatibility (G54–G59), use IsoCoordinateOffsetSyntax in addition to this syntax in the Heidenhain syntax list. Uses replace-by-source (TransformSource) so both syntaxes can coexist without double-composing. public class HeidenhainCoordinateOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainCoordinateOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Mat4d arrays are 16 plain doubles in column-major order; pure translation by (tx,ty,tz) is [1,0,0,0, 0,1,0,0, 0,0,1,0, tx,ty,tz,1]. The syntax does not consume from Parsing — the CYCL DEF cycle number and its parameters survive for downstream syntaxes / round-trip emission. CYCL DEF 247 Q339=+1 with a HeidenhainDatumTable populated so preset row 1 = (50, 50, 0) — the syntax looks up the row and writes a synthetic CoordinateId = \"DATUM_PRESET_1\" reflecting the resolved preset index: #BeforeBuild: { \"Parsing\": { \"CYCL DEF\": 247, \"Q339\": \"+1\" } } #AfterBuild: { \"Parsing\": { \"CYCL DEF\": 247, \"Q339\": \"+1\" }, \"CoordinateOffset\": { \"CoordinateId\": \"DATUM_PRESET_1\", \"Offset_X\": 50, \"Offset_Y\": 50, \"Offset_Z\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 50,50,0,1] } ] } CYCL DEF 7 #5 — datum shift table lookup via the # index (here mapped to (100, 200, 0)); CoordinateId records the resolved shift row id: #BeforeBuild: { \"Parsing\": { \"CYCL DEF\": 7, \"#\": 5 } } #AfterBuild: { \"Parsing\": { \"CYCL DEF\": 7, \"#\": 5 }, \"CoordinateOffset\": { \"CoordinateId\": \"DATUM_SHIFT_5\", \"Offset_X\": 100, \"Offset_Y\": 200, \"Offset_Z\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 100,200,0,1] } ] } CYCL DEF 7 X10 Y20 Z5 — direct X/Y/Z form (no # index) writes the values straight into the offset; no HeidenhainDatumTable dep is required. CoordinateId is the literal \"DATUM_SHIFT_DIRECT\" sentinel: #BeforeBuild: { \"Parsing\": { \"CYCL DEF\": 7, \"X\": 10, \"Y\": 20, \"Z\": 5 } } #AfterBuild: { \"Parsing\": { \"CYCL DEF\": 7, \"X\": 10, \"Y\": 20, \"Z\": 5 }, \"CoordinateOffset\": { \"CoordinateId\": \"DATUM_SHIFT_DIRECT\", \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": 5 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,5,1] } ] } Constructors HeidenhainCoordinateOffsetSyntax() Initializes a new instance with default settings. public HeidenhainCoordinateOffsetSyntax() HeidenhainCoordinateOffsetSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainCoordinateOffsetSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.Heidenhain.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.Heidenhain.html", @@ -4332,17 +4457,17 @@ "api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html", "title": "Class IncrementalResolveSyntax | HiAPI-C# 2025", - "summary": "Class IncrementalResolveSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolves G91 incremental axis values to absolute in-place within Parsing and its sub-sections. Reads Term written by PositioningSyntax. WorkingPathList specifies which JSON paths contain axis values that need incremental-to-absolute conversion. Default: [[\"Parsing\"], [\"Parsing\", \"G28\"]]. All matching paths are converted. Canned cycle paths (Parsing.G81, G82, G83, …) are intentionally excluded — their Z/R incremental semantics differ from normal axes (R is relative to init level, Z is relative to R-point). Resolution is handled by ResolveCycleCoordinates(JsonObject, Vec3d, double?, double?, double, double) inside each cycle syntax class, which runs before this syntax. Uses AxisNames to determine which tags are motion axes. Traces backward nodes for last known ProgramXyz to resolve incremental values. After this syntax, all axis values in the working paths are absolute — ProgramXyzSyntax can consume them without incremental logic. public class IncrementalResolveSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IncrementalResolveSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IncrementalResolveSyntax(List>) Initializes a new instance with the given working path list. public IncrementalResolveSyntax(List> workingPathList) Parameters workingPathList List> JSON paths to scan for incremental axis values; see WorkingPathList. IncrementalResolveSyntax(XElement) Initializes a new instance by deserializing the working path list from the given XML element. Falls back to Default.WorkingPathList when the element has no Path children. public IncrementalResolveSyntax(XElement src) Parameters src XElement Source XML element. Properties Default Default instance with working paths covering the Parsing root and the Parsing.G28 intermediate XYZ subsection. public static IncrementalResolveSyntax Default { get; } Property Value IncrementalResolveSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string WorkingPathList JSON paths where this syntax searches for axis values (X/Y/Z) to convert from incremental to absolute when G91 is active. Each path is a list of segments navigating nested JSON objects. All matching paths are converted. public List> WorkingPathList { get; } Property Value List> Examples [[\"Parsing\"]] → Parsing root (normal XYZ) [[\"Parsing\", \"G28\"]] → Parsing.G28 (G28 intermediate XYZ) XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class IncrementalResolveSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolves G91 incremental axis values to absolute in-place within Parsing and its sub-sections. Reads Term written by PositioningSyntax. WorkingPathList specifies which JSON paths contain axis values that need incremental-to-absolute conversion. Default: [[\"Parsing\"], [\"Parsing\", \"G28\"]]. All matching paths are converted. Canned cycle paths (Parsing.G81, G82, G83, …) are intentionally excluded — their Z/R incremental semantics differ from normal axes (R is relative to init level, Z is relative to R-point). Resolution is handled by ResolveCycleCoordinates(JsonObject, Vec3d, double?, double?, double, double) inside each cycle syntax class, which runs before this syntax. Uses AxisNames to determine which tags are motion axes. Traces backward nodes for last known ProgramXyz to resolve incremental values. After this syntax, all axis values in the working paths are absolute — ProgramXyzSyntax can consume them without incremental logic. public class IncrementalResolveSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IncrementalResolveSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples G90 (absolute) on the block — the syntax early-returns without touching Parsing.X/Y/Z, even though the values look like incremental deltas: #BeforeBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"Parsing\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"Parsing\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } G91 (incremental) with a #Previous: block carrying MachineCoordinateState=(100,200,300). Under the identity ProgramToMcTransform chain, GetLastProgramXyz recovers program XYZ equal to MC, so each axis in Parsing is rewritten to lastAbs + incremental: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } #BeforeBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"X\": 110, \"Y\": 220, \"Z\": 330 } } G91 + Parsing.G28 sub-section — exercises the second entry of the default WorkingPathList; the root Parsing has no X/Y/Z so the first path no-ops, but the [“Parsing”,“G28”] path picks up the G28 intermediate axes and resolves them against the same lastProgramXyz: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } #BeforeBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"G28\": { \"X\": 5, \"Y\": 10, \"Z\": 15 } } } #AfterBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"G28\": { \"X\": 105, \"Y\": 210, \"Z\": 315 } } } Constructors IncrementalResolveSyntax(List>) Initializes a new instance with the given working path list. public IncrementalResolveSyntax(List> workingPathList) Parameters workingPathList List> JSON paths to scan for incremental axis values; see WorkingPathList. IncrementalResolveSyntax(XElement) Initializes a new instance by deserializing the working path list from the given XML element. Falls back to Default.WorkingPathList when the element has no Path children. public IncrementalResolveSyntax(XElement src) Parameters src XElement Source XML element. Properties Default Default instance with working paths covering the Parsing root and the Parsing.G28 intermediate XYZ subsection. public static IncrementalResolveSyntax Default { get; } Property Value IncrementalResolveSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string WorkingPathList JSON paths where this syntax searches for axis values (X/Y/Z) to convert from incremental to absolute when G91 is active. Each path is a list of segments navigating nested JSON objects. All matching paths are converted. public List> WorkingPathList { get; } Property Value List> Examples [[\"Parsing\"]] → Parsing root (normal XYZ) [[\"Parsing\", \"G28\"]] → Parsing.G28 (G28 intermediate XYZ) XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html", "title": "Class IsoCoordinateOffsetSyntax | HiAPI-C# 2025", - "summary": "Class IsoCoordinateOffsetSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll ISO/Fanuc/Mazak/Okuma/Syntec: resolves G54–G59.9 work coordinate offset. Reads G54/G55/.../G59.9 from Flags, looks up offset Vec3d via IIsoCoordinateConfig dependencies (e.g. brand parameter table or IsoCoordinateTable), composes into ProgramToMcTransform. Modal — active coordinate persists via backward lookback. Default coordinate ID is set by StaticInitializer. public class IsoCoordinateOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IsoCoordinateOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IsoCoordinateOffsetSyntax() Initializes a new instance with default settings. public IsoCoordinateOffsetSyntax() IsoCoordinateOffsetSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public IsoCoordinateOffsetSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class IsoCoordinateOffsetSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll ISO/Fanuc/Mazak/Okuma/Syntec: resolves G54–G59.9 work coordinate offset. Reads G54/G55/.../G59.9 from Flags, looks up offset Vec3d via IIsoCoordinateConfig dependencies (e.g. brand parameter table or IsoCoordinateTable), composes into ProgramToMcTransform. Modal — active coordinate persists via backward lookback. Default coordinate ID is set by StaticInitializer. public class IsoCoordinateOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IsoCoordinateOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples The Mat4d arrays below are written as 16 plain doubles in column-major order; the first 12 are the identity 3×3 rotation, the last 4 are the translation column (tx, ty, tz, 1). So a pure translation by (tx, ty, tz) is [1,0,0,0, 0,1,0,0, 0,0,1,0, tx,ty,tz,1]. G54 flag on the block but no IIsoCoordinateConfig on the dep list — the resolved offset falls back to Vec3d.Zero and the composed translation is the identity matrix: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G54\"] } } #AfterBuild: { \"CoordinateOffset\": { \"CoordinateId\": \"G54\", \"Offset_X\": 0, \"Offset_Y\": 0, \"Offset_Z\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } G55 flag with an IsoCoordinateTable providing G55 → (100, 50, -200) — the offset is written to the CoordinateOffset section and the same translation is composed into the transform chain: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G55\"] } } #AfterBuild: { \"CoordinateOffset\": { \"CoordinateId\": \"G55\", \"Offset_X\": 100, \"Offset_Y\": 50, \"Offset_Z\": -200 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 100,50,-200,1] } ] } No coordinate flag on the current block (e.g. an unrelated M03) but #Previous: carried G54 — modal lookback inherits G54, the dep is re-queried (so Offset_X/Y/Z are taken from the table, not from the previous block), and the transform chain is rebuilt. The unrelated M03 flag survives in Parsing.Flags because CleanupParsing only fires on the new-coord-flag branch: #Previous: { \"CoordinateOffset\": { \"CoordinateId\": \"G54\", \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": -100 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"CoordinateOffset\": { \"CoordinateId\": \"G54\", \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": -100 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,-100,1] } ] } Constructors IsoCoordinateOffsetSyntax() Initializes a new instance with default settings. public IsoCoordinateOffsetSyntax() IsoCoordinateOffsetSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public IsoCoordinateOffsetSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html", "title": "Class IsoG68RotationSyntax | HiAPI-C# 2025", - "summary": "Class IsoG68RotationSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll ISO/Fanuc: resolves G68 (2D coordinate rotation) and G69 (cancel). Computes a rotation Mat4d around the active plane normal and composes it into ProgramToMcTransform. No IMachineKinematics dependency needed — G68 is pure geometric rotation. Managed commands: G68, G69 (idempotent with IsoG68p2TiltSyntax). public class IsoG68RotationSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IsoG68RotationSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks Input: Parsing.G68 → {X,Y,Z,I,J,K,R} from ParameterizedFlagSyntax. If I/J/K not specified, rotation axis is determined by active plane: G17→Z, G18→Y, G19→X. Constructors IsoG68RotationSyntax() Initializes a new instance with default settings. public IsoG68RotationSyntax() IsoG68RotationSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public IsoG68RotationSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class IsoG68RotationSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll ISO/Fanuc: resolves G68 (2D coordinate rotation) and G69 (cancel). Computes a rotation Mat4d around the active plane normal and composes it into ProgramToMcTransform. No IMachineKinematics dependency needed — G68 is pure geometric rotation. Managed commands: G68, G69 (idempotent with IsoG68p2TiltSyntax). public class IsoG68RotationSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IsoG68RotationSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples All cases below avoid the cos/sin rotation math by using either G69 cancel (identity), the first-block default (no transform composed), or modal carry of an identity Mat4d. Mat4d arrays are 16 plain doubles in column-major order — see IsoCoordinateOffsetSyntax for the template. A future round can add a non-trivial G68 case by dumping the actual output and pasting the 16 doubles back into the marker. First block of the stream (no #Previous:, no G68/G69 on the block) — CarryForwardFromPrevious stamps a default TiltTransform.Term = \"G69\" so downstream lookback always sees a concrete state; no transform chain entry is composed: #BeforeBuild: { } #AfterBuild: { \"TiltTransform\": { \"Term\": \"G69\" } } G69 flag on the block — TryHandleG69 consumes it, writes the G69 section, and composes the identity Mat4d into the chain so any previously composed tilt rotation is overridden: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G69\"] } } #AfterBuild: { \"TiltTransform\": { \"Term\": \"G69\" }, \"ProgramToMcTransform\": [ { \"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } Modal carry: no G68/G69 on the current block, but #Previous: carries an active G68 with identity tilt Mat4d in its chain. The current block inherits TiltTransform.Term = \"G68\" and re-composes the same Mat4d into its own chain; unrelated M03 flag survives because this syntax does not touch Parsing during the carry path: #Previous: { \"TiltTransform\": { \"Term\": \"G68\" }, \"ProgramToMcTransform\": [ { \"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"TiltTransform\": { \"Term\": \"G68\" }, \"ProgramToMcTransform\": [ { \"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } Non-trivial G68 rotation: 90° around the Z axis (no I/J/K → plane normal of the default G17 plane) at the origin (no X/Y/Z → all 0). The Mat4d column-major layout is rotation 90° about Z (no translation since pivot is the origin); cos(π/2) is not exactly 0 in IEEE-754 so the diagonal carries the 6.123233995736766E-17 drift produced by Math.Cos(Math.PI / 2) — preserved verbatim per the no-shorthand marker convention: #BeforeBuild: { \"Parsing\": { \"G68\": { \"R\": 90 } } } #AfterBuild: { \"TiltTransform\": { \"Term\": \"G68\" }, \"ProgramToMcTransform\": [ { \"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [6.123233995736766E-17, 1, 0, 0, -1, 6.123233995736766E-17, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] } ] } Remarks Input: Parsing.G68 → {X,Y,Z,I,J,K,R} from ParameterizedFlagSyntax. If I/J/K not specified, rotation axis is determined by active plane: G17→Z, G18→Y, G19→X. Constructors IsoG68RotationSyntax() Initializes a new instance with default settings. public IsoG68RotationSyntax() IsoG68RotationSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public IsoG68RotationSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html", @@ -4352,37 +4477,37 @@ "api/Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html", "title": "Class IsoLocalCoordinateOffsetSyntax | HiAPI-C# 2025", - "summary": "Class IsoLocalCoordinateOffsetSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll ISO G52: Local coordinate system offset (additive to G54-series). G52 X10 Y20 Z5 → sets local offset. G52 X0 Y0 Z0 → cancels (resets to zero). M30 (program end) → also cancels. Reads Parsing.G52 (from G52Syntax), writes IsoLocalCoordinateOffset section, and adds an \"IsoLocalCoordinateOffset\" entry to the transformation chain. Modal — persists via backward lookback until changed or cancelled. public class IsoLocalCoordinateOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IsoLocalCoordinateOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IsoLocalCoordinateOffsetSyntax() Initializes a new instance with default settings. public IsoLocalCoordinateOffsetSyntax() IsoLocalCoordinateOffsetSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public IsoLocalCoordinateOffsetSyntax(XElement src) Parameters src XElement Source XML element. Fields TransformSource Identifier used as the transform source key when composing the local coordinate offset translation into the transform chain. public const string TransformSource = \"IsoLocalCoordinateOffset\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class IsoLocalCoordinateOffsetSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll ISO G52: Local coordinate system offset (additive to G54-series). G52 X10 Y20 Z5 → sets local offset. G52 X0 Y0 Z0 → cancels (resets to zero). M30 (program end) → also cancels. Reads Parsing.G52 (from G52Syntax), writes IsoLocalCoordinateOffset section, and adds an \"IsoLocalCoordinateOffset\" entry to the transformation chain. Modal — persists via backward lookback until changed or cancelled. public class IsoLocalCoordinateOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IsoLocalCoordinateOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Mat4d arrays are 16 plain doubles in column-major order; pure translation by (tx,ty,tz) is [1,0,0,0, 0,1,0,0, 0,0,1,0, tx,ty,tz,1] — see IsoCoordinateOffsetSyntax for the column-major template. First block of the stream (no #Previous:) — the syntax stamps a zero-offset section and an identity translation in the chain so downstream lookback always sees a concrete state: #BeforeBuild: { } #AfterBuild: { \"IsoLocalCoordinateOffset\": { \"Offset_X\": 0, \"Offset_Y\": 0, \"Offset_Z\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"IsoLocalCoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } G52 X10 Y20 Z5 on a non-first block alongside an unrelated M03 flag — the G52 sub-section is consumed (removed from Parsing) and the translation is composed into the chain; the unrelated flag stays because this syntax does not call CleanupParsing: #Previous: { \"IsoLocalCoordinateOffset\": { \"Offset_X\": 0, \"Offset_Y\": 0, \"Offset_Z\": 0 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"], \"G52\": { \"X\": 10, \"Y\": 20, \"Z\": 5 } } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"IsoLocalCoordinateOffset\": { \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": 5 }, \"ProgramToMcTransform\": [ { \"Source\": \"IsoLocalCoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,5,1] } ] } No G52 on the current block but #Previous: had a non-zero offset — modal lookback inherits it (with the translation re-composed into this block's chain): #Previous: { \"IsoLocalCoordinateOffset\": { \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": 5 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"IsoLocalCoordinateOffset\": { \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": 5 }, \"ProgramToMcTransform\": [ { \"Source\": \"IsoLocalCoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,5,1] } ] } Constructors IsoLocalCoordinateOffsetSyntax() Initializes a new instance with default settings. public IsoLocalCoordinateOffsetSyntax() IsoLocalCoordinateOffsetSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public IsoLocalCoordinateOffsetSyntax(XElement src) Parameters src XElement Source XML element. Fields TransformSource Identifier used as the transform source key when composing the local coordinate offset translation into the transform chain. public const string TransformSource = \"IsoLocalCoordinateOffset\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html", "title": "Class LinearMotionSyntax | HiAPI-C# 2025", - "summary": "Class LinearMotionSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes McLinear motion for linear commands (ISO G00/G01, Heidenhain L/LN). Detects motion mode from Flags, writes a one-shot MotionEvent section (form + isRapid) plus a modal MotionState section (Term) when MachineCoordinateState exists on the block. McLinearMotionSemantic discriminates between XYZ-only and XYZABC motion by checking whether rotary axis values are present in MachineCoordinateState. Must be placed after McAbcSyntax in the syntax chain. public class LinearMotionSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object LinearMotionSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors LinearMotionSyntax() Initializes a new instance with default settings. public LinearMotionSyntax() LinearMotionSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public LinearMotionSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class LinearMotionSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes McLinear motion for linear commands (ISO G00/G01, Heidenhain L/LN). Detects motion mode from Flags, writes a one-shot MotionEvent section (form + isRapid) plus a modal MotionState section (Term) when MachineCoordinateState exists on the block. McLinearMotionSemantic discriminates between XYZ-only and XYZABC motion by checking whether rotary axis values are present in MachineCoordinateState. Must be placed after McAbcSyntax in the syntax chain. public class LinearMotionSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object LinearMotionSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples G00 explicit + MachineCoordinateState on the block — both the modal MotionState and the one-shot MotionEvent are written; IsRapid is set only on rapid (G00); the parsing flag is consumed and Parsing is cleaned up: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G00\"] }, \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MotionState\": { \"Term\": \"G00\" }, \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true } } G01 explicit + MC — same shape but IsRapid is omitted on the event section (only written when true): #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G01\"] }, \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MotionState\": { \"Term\": \"G01\" }, \"MotionEvent\": { \"Form\": \"McLinear\" } } No motion flag on the current block but MachineCoordinateState is present (e.g. a downstream syntax already wrote the endpoint) — the previous block's MotionState.Term is the only way to know G00 vs G01, so the modal carry path fires: #Previous: { \"MotionState\": { \"Term\": \"G01\" } } #BeforeBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MotionState\": { \"Term\": \"G01\" }, \"MotionEvent\": { \"Form\": \"McLinear\" } } Constructors LinearMotionSyntax() Initializes a new instance with default settings. public LinearMotionSyntax() LinearMotionSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public LinearMotionSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html", "title": "Class MachineCoordSelectSyntax | HiAPI-C# 2025", - "summary": "Class MachineCoordSelectSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Handles G53 (machine coordinate selection) — non-modal, one-shot. The axis values (X/Y/Z) in the block are interpreted as machine coordinates, bypassing all work offsets, local coordinates, tool height compensation, and coordinate rotations. If G91 (incremental) is active, G53 is ignored per ISO standard. Must be placed before ProgramXyzSyntax in the syntax chain. When G53 is active, this syntax consumes X/Y/Z from Parsing and writes MachineCoordinateState directly, preventing ProgramXyzSyntax from processing them as program coordinates. public class MachineCoordSelectSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object MachineCoordSelectSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples G53 with full axes (G54 offset = 100,50,-200): Input: G53 G00 X0. Y0. Z0. Output: MachineCoordinate = (0, 0, 0) ProgramXyz = (-100, -50, 200) [mc * inverse(transform)] G53 with partial axes (only Z specified): Input: G53 Z0. Output: MachineCoordinate = (prevMcX, prevMcY, 0) ProgramXyz derived from MC * inverse(transform) Constructors MachineCoordSelectSyntax() Initializes a new instance with default settings. public MachineCoordSelectSyntax() MachineCoordSelectSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public MachineCoordSelectSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class MachineCoordSelectSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Handles G53 (machine coordinate selection) — non-modal, one-shot. The axis values (X/Y/Z) in the block are interpreted as machine coordinates, bypassing all work offsets, local coordinates, tool height compensation, and coordinate rotations. If G91 (incremental) is active, G53 is ignored per ISO standard. Must be placed before ProgramXyzSyntax in the syntax chain. When G53 is active, this syntax consumes X/Y/Z from Parsing and writes MachineCoordinateState directly, preventing ProgramXyzSyntax from processing them as program coordinates. public class MachineCoordSelectSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object MachineCoordSelectSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples G53 with full XYZ on a first block (no #Previous:) — FindPreviousMc falls back to Vec3d.Zero, transform defaults to identity, so ProgramXyz equals MachineCoordinateState: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } G53 with only Z specified — FindPreviousMc picks up X/Y from the previous block's MachineCoordinateState; Z is overwritten: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 50, \"Z\": -200 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"Z\": 0 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 50, \"Z\": 0 }, \"ProgramXyz\": { \"X\": 100, \"Y\": 50, \"Z\": 0 } } G91 active on the same block → G53 is ignored per ISO standard; nothing is consumed and no machine-state section is written: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"X\": 10 }, \"Positioning\": { \"Term\": \"G91\" } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"X\": 10 }, \"Positioning\": { \"Term\": \"G91\" } } Constructors MachineCoordSelectSyntax() Initializes a new instance with default settings. public MachineCoordSelectSyntax() MachineCoordSelectSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public MachineCoordSelectSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html", "title": "Class McAbcCyclicPathSyntax | HiAPI-C# 2025", - "summary": "Class McAbcCyclicPathSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolve modular rotary axes to the shortest cyclic path relative to the previous node. Uses IsModularRotary(string) to determine which axes within MachineCoordinateState need cyclic resolution. Falls back to hardcoded A/B/C if no IMachineAxisConfig is available. Must be placed after ProgramXyzSyntax in NcSyntaxList. public class McAbcCyclicPathSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McAbcCyclicPathSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors McAbcCyclicPathSyntax() Initializes a new instance with default settings. public McAbcCyclicPathSyntax() McAbcCyclicPathSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public McAbcCyclicPathSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class McAbcCyclicPathSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolve modular rotary axes to the shortest cyclic path relative to the previous node. Uses IsModularRotary(string) to determine which axes within MachineCoordinateState need cyclic resolution. Falls back to hardcoded A/B/C if no IMachineAxisConfig is available. Must be placed after ProgramXyzSyntax in NcSyntaxList. Two stages, mirroring McXyzSyntax: Root MachineCoordinateState — anchored at the previous block's modal rotary state. CompoundMotion.ItemsKey[*] — sequential walk through items, anchoring item 0 at the previous block's modal state and item i > 0 at item i-1's post-cycle value (per-axis chain). Items without a rotary MachineCoordinateState are skipped. The items pass enables rotary motion (e.g. G28 ABC intermediate / home stages) to surface as motion IAct segments rather than a single root-MC stamp. public class McAbcCyclicPathSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McAbcCyclicPathSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Cases below run with no IMachineAxisConfig on the dep list, so the syntax uses the A/B/C fallback (a configuration warning is emitted but does not affect the JSON). The syntax is the tail-pass rotary-wrap centraliser — upstream rotary writers (McAbcSyntax, G28, G53.1, ...) store raw degrees and let this pass resolve to the shortest cyclic path. Current B is within ±180° of the previous B — no wrap needed; the value is rewritten in place but equals the input: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 10 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 10 } } Current B is 270° but previous B is 0° — the shortest path is the other way around, so the value is rewritten as -90° (mathematically equivalent, geometrically the same orientation, but signalling the shorter rotation to a downstream motion consumer). 270/0 round-trips through ToRad→Cycle→ToDeg with no rounding noise (1.5π → -0.5π → -90 exactly); other angle pairs (e.g. 350° → -10°) emit a trailing ULP-scale drift instead: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 270 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": -90 } } First block of the stream (no #Previous:) — no anchor to resolve against, so the syntax early-returns and the raw value is preserved verbatim: #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 350 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 350 } } CompoundMotion.Items walk — two items chain: item 0 cycles against the previous block's modal B = 0° (270° → -90°), and item 1 cycles against item 0's post-cycle -90° (170° → -190°, since the shorter path from -90° to 170° wraps backward through -180°). If item 1 had used the previous-block anchor instead of the chained anchor, 170° would have stayed at 170° (already in the ±180° window around 0°), so the test discriminates between chain and no-chain: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"CompoundMotion\": { \"Items\": [ { \"MachineCoordinateState\": { \"B\": 270 } }, { \"MachineCoordinateState\": { \"B\": 170 } } ] } } #AfterBuild: { \"CompoundMotion\": { \"Items\": [ { \"MachineCoordinateState\": { \"B\": -90 } }, { \"MachineCoordinateState\": { \"B\": -190 } } ] } } Constructors McAbcCyclicPathSyntax() Initializes a new instance with default settings. public McAbcCyclicPathSyntax() McAbcCyclicPathSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public McAbcCyclicPathSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html", "title": "Class McAbcSyntax | HiAPI-C# 2025", - "summary": "Class McAbcSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes rotary axis values (A/B/C) into MachineCoordinateState from Parsing and modal lookback. Only active when IMachineAxisConfig declares rotary axes. Works for both 3+2-axis (no IMachineKinematics) and simultaneous 5-axis configurations. This syntax is intentionally ABC-only. When the block is rotary-only (no ProgramXyz, e.g. G00 A30.) the section is created with ABC but without X/Y/Z. McAbcXyzFallbackSyntax — placed after McXyzSyntax — copies X/Y/Z from the previous block's MachineCoordinateState to finish the section. Splitting the XYZ fill out lets this syntax run before McXyzSyntax (and before G43p4RtcpSyntax) without accidentally filling X/Y/Z from prev and thereby short-circuiting DeriveMcXyz(JsonObject, Mat4d). Missing rotary axes are filled from previous MachineCoordinateState lookback, unless the current section already has the value (e.g., from HomeMcInitializer). Values are stored in degrees (matching McAbcCyclicPathSyntax). Must be placed before McXyzSyntax so syntaxes that need the current-block ABC to compute transforms (e.g. G43p4RtcpSyntax) can see it; and before McAbcCyclicPathSyntax and LinearMotionSyntax. public class McAbcSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McAbcSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class McAbcSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes rotary axis values (A/B/C) into MachineCoordinateState from Parsing and modal lookback. Only active when IMachineAxisConfig declares rotary axes. Works for both 3+2-axis (no IMachineKinematics) and simultaneous 5-axis configurations. This syntax is intentionally ABC-only. When the block is rotary-only (no ProgramXyz, e.g. G00 A30.) the section is created with ABC but without X/Y/Z. McAbcXyzFallbackSyntax — placed after McXyzSyntax — copies X/Y/Z from the previous block's MachineCoordinateState to finish the section. Splitting the XYZ fill out lets this syntax run before McXyzSyntax (and before G43p4RtcpSyntax) without accidentally filling X/Y/Z from prev and thereby short-circuiting DeriveMcXyz(JsonObject, Mat4d). Missing rotary axes are filled from previous MachineCoordinateState lookback, unless the current section already has the value (e.g., from HomeMcInitializer). Values are stored in degrees (matching McAbcCyclicPathSyntax). Must be placed before McXyzSyntax so syntaxes that need the current-block ABC to compute transforms (e.g. G43p4RtcpSyntax) can see it; and before McAbcCyclicPathSyntax and LinearMotionSyntax. public class McAbcSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McAbcSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Cases 1 and 2 inject a TestDeps.AxisConfig declaring B and C as Rotary. Values are stored as raw degrees; shortest-cyclic resolution is a downstream pass via McAbcCyclicPathSyntax. No IMachineAxisConfig dep on the list — early-return no-op (the syntax only fires when rotary axes are declared): #BeforeBuild: { \"Parsing\": { \"B\": 45, \"C\": 90 } } #AfterBuild: { \"Parsing\": { \"B\": 45, \"C\": 90 } } AxisConfig declares B+C rotary; Parsing.B/C are consumed into a freshly created MachineCoordinateState section (X/Y/Z are deliberately left out so McXyzSyntax can still derive XYZ later — see class summary): #BeforeBuild: { \"Parsing\": { \"B\": 45, \"C\": 90 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 45, \"C\": 90 } } Only Parsing.B on the current block; #Previous: carries a full MC including C=0. The missing C is filled from the per-axis backward lookback (FindPreviousMcAxis(LazyLinkedListNode, string)): #Previous: { \"MachineCoordinateState\": { \"B\": 0, \"C\": 0 } } #BeforeBuild: { \"Parsing\": { \"B\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 30, \"C\": 0 } } Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html", "title": "Class McAbcXyzFallbackSyntax | HiAPI-C# 2025", - "summary": "Class McAbcXyzFallbackSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Fills missing X/Y/Z on an ABC-only MachineCoordinateState section. Behaviour depends on whether the block is under RTCP with rotary motion, as indicated by HasDynamicEntry(JsonObject): Non-dynamic (no RTCP or RTCP with ABC stable) — the programmed tool tip stays put in MC while rotary axes (if any) are unchanged, so we simply copy X/Y/Z from the previous block's MachineCoordinateState. This matches NC modal XYZ carry-forward for rotary-only blocks such as G00 A30. (non-RTCP pivoting). Dynamic (RTCP active + ABC changing) — the programmed tool tip must stay fixed in program coordinates while MC XYZ shifts to compensate the new rotary state. Looks up the last ProgramXyz and re-derives MC = inheritedProgramXyz × composedTransform, where the composed transform is the block's endpoint chain (now including PivotTransformSource as a full rotation+translation Mat4d, so the chain already encodes the kinematic IK). The carried ProgramXyz is also stamped onto the current block so downstream consumers see a consistent ProgramXyz + MC pair. Pair with McAbcSyntax, which runs early to write ABC but deliberately leaves X/Y/Z empty so McXyzSyntax can still derive MC XYZ from ProgramXyz via the transform chain when the block carries linear motion. If McXyzSyntax has nothing to derive (no ProgramXyz), this syntax completes the MC section as described above. Does nothing when the section already carries all three of X/Y/Z (normal linear-motion blocks), or when there is no section at all (pure parse-only block that introduces no MC). Must be placed after McXyzSyntax and before McAbcCyclicPathSyntax / LinearMotionSyntax. public class McAbcXyzFallbackSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McAbcXyzFallbackSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class McAbcXyzFallbackSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Fills missing X/Y/Z on an ABC-only MachineCoordinateState section. Behaviour depends on whether the block is under RTCP with rotary motion, as indicated by HasDynamicEntry(JsonObject): Non-dynamic (no RTCP or RTCP with ABC stable) — the programmed tool tip stays put in MC while rotary axes (if any) are unchanged, so we simply copy X/Y/Z from the previous block's MachineCoordinateState. This matches NC modal XYZ carry-forward for rotary-only blocks such as G00 A30. (non-RTCP pivoting). Dynamic (RTCP active + ABC changing) — the programmed tool tip must stay fixed in program coordinates while MC XYZ shifts to compensate the new rotary state. Looks up the last ProgramXyz and re-derives MC = inheritedProgramXyz × composedTransform, where the composed transform is the block's endpoint chain (now including PivotTransformSource as a full rotation+translation Mat4d, so the chain already encodes the kinematic IK). The carried ProgramXyz is also stamped onto the current block so downstream consumers see a consistent ProgramXyz + MC pair. Pair with McAbcSyntax, which runs early to write ABC but deliberately leaves X/Y/Z empty so McXyzSyntax can still derive MC XYZ from ProgramXyz via the transform chain when the block carries linear motion. If McXyzSyntax has nothing to derive (no ProgramXyz), this syntax completes the MC section as described above. Does nothing when the section already carries all three of X/Y/Z (normal linear-motion blocks), or when there is no section at all (pure parse-only block that introduces no MC). Must be placed after McXyzSyntax and before McAbcCyclicPathSyntax / LinearMotionSyntax. public class McAbcXyzFallbackSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McAbcXyzFallbackSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples All cases below stay on the non-dynamic branch (no PivotTransformSource entry in the chain) so the RTCP re-derivation path is skipped. Block has no MachineCoordinateState section at all (pure parse-only) — the syntax early-returns and the block is unchanged: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G00\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G00\"] } } MC already complete (all three of X/Y/Z present) — the second guard fires and the section is preserved verbatim (no overwrite even if a #Previous: MC differed): #BeforeBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } Rotary-only MC on a rotary-only block (e.g. a 5-axis B+C trunnion machine running G00 B45. C90.) — missing X/Y/Z are copied from the #Previous: block's MC; the rotary keys keep their existing positions (insertion order) and X/Y/Z are appended. The previous block's MC carries the modal rotary state alongside X/Y/Z, but the fallback only reads X/Y/Z from it: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300, \"B\": 0, \"C\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 45, \"C\": 90 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 45, \"C\": 90, \"X\": 100, \"Y\": 200, \"Z\": 300 } } Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html", "title": "Class McXyzSyntax | HiAPI-C# 2025", - "summary": "Class McXyzSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Derives MachineCoordinateState from ProgramXyz by applying the composed ProgramToMcTransform. Processes two stages: Root ProgramXyz → root MachineCoordinate CompoundMotion.ItemsKey[*] — derives MachineCoordinate from ProgramXyz for items that have ProgramXyz but no MachineCoordinate Must be placed after syntaxes that write ProgramXyz (e.g., ReferenceReturnSyntax) and before syntaxes that read MachineCoordinate (e.g., LinearMotionSyntax). public class McXyzSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McXyzSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class McXyzSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Derives MachineCoordinateState from ProgramXyz by applying the composed ProgramToMcTransform. Processes two stages: Root ProgramXyz → root MachineCoordinate CompoundMotion.ItemsKey[*] — derives MachineCoordinate from ProgramXyz for items that have ProgramXyz but no MachineCoordinate Must be placed after syntaxes that write ProgramXyz (e.g., ReferenceReturnSyntax) and before syntaxes that read MachineCoordinate (e.g., LinearMotionSyntax). public class McXyzSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McXyzSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Root ProgramXyz only, no ProgramToMcTransform chain — composed transform is identity, so MC equals ProgramXyz: #BeforeBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } Root MachineCoordinateState already present — guarded by the non-null check, so an upstream syntax's explicit MC is preserved verbatim (the derivation from ProgramXyz is skipped): #BeforeBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } CompoundMotion.Items[*] with ProgramXyz but no MachineCoordinateState — each item receives its own derived MC; items that already had MC (or had no ProgramXyz) are left alone: #BeforeBuild: { \"CompoundMotion\": { \"Items\": [ { \"ProgramXyz\": { \"X\": 1, \"Y\": 2, \"Z\": 3 } }, { \"MachineCoordinateState\": { \"X\": 9, \"Y\": 9, \"Z\": 9 } } ] } } #AfterBuild: { \"CompoundMotion\": { \"Items\": [ { \"ProgramXyz\": { \"X\": 1, \"Y\": 2, \"Z\": 3 }, \"MachineCoordinateState\": { \"X\": 1, \"Y\": 2, \"Z\": 3 } }, { \"MachineCoordinateState\": { \"X\": 9, \"Y\": 9, \"Z\": 9 } } ] } } Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html", @@ -4397,52 +4522,52 @@ "api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html", "title": "Class PlaneSelectSyntax | HiAPI-C# 2025", - "summary": "Class PlaneSelectSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes G17/G18/G19 plane selection from Flags and writes IPlaneSelectDef section using conventional axis-pair names (XY/ZX/YZ). Modal — persists via backward lookback. Default is XY (G17). Downstream consumers (CircularMotionSyntax, IsoG68RotationSyntax) call GetPlaneNormalDir(JsonObject) to read the resolved plane. public class PlaneSelectSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object PlaneSelectSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Default Default instance with standard settings. public static PlaneSelectSyntax Default { get; } Property Value PlaneSelectSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress GetPlaneNormalDir(JsonObject) Reads the PlaneSelect section and returns the perpendicular (normal) axis index: XY→2(Z), ZX→1(Y), YZ→0(X). public static int GetPlaneNormalDir(JsonObject json) Parameters json JsonObject Returns int MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class PlaneSelectSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes G17/G18/G19 plane selection from Flags and writes IPlaneSelectDef section using conventional axis-pair names (XY/ZX/YZ). Modal — persists via backward lookback. Default is XY (G17). Downstream consumers (CircularMotionSyntax, IsoG68RotationSyntax) call GetPlaneNormalDir(JsonObject) to read the resolved plane. public class PlaneSelectSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object PlaneSelectSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G17\"] } } #AfterBuild: { \"PlaneSelect\": { \"Term\": \"G17\", \"Plane\": \"XY\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G18\", \"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"PlaneSelect\": { \"Term\": \"G18\", \"Plane\": \"ZX\" } } #Previous: { \"PlaneSelect\": { \"Term\": \"G19\", \"Plane\": \"YZ\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"PlaneSelect\": { \"Term\": \"G19\", \"Plane\": \"YZ\" } } Properties Default Default instance with standard settings. public static PlaneSelectSyntax Default { get; } Property Value PlaneSelectSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress GetPlaneNormalDir(JsonObject) Reads the PlaneSelect section and returns the perpendicular (normal) axis index: XY→2(Z), ZX→1(Y), YZ→0(X). public static int GetPlaneNormalDir(JsonObject json) Parameters json JsonObject Returns int MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html", "title": "Class PositioningSyntax | HiAPI-C# 2025", - "summary": "Class PositioningSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Detects G90/G91 positioning mode from Flags (or by modal lookback) and writes a Positioning section (Term, Mode) to the block JSON. Fanuc/ISO: reads G90/G91 from Flags (global modal). Heidenhain: would need a separate implementation reading I-prefix per axis. Siemens: would extend with AC()/IC() per-axis override. Does NOT convert incremental values — that is handled by IncrementalResolveSyntax which can be placed later in the syntax chain, after canned cycle syntaxes have consumed their parameters with cycle-specific G91 semantics. public class PositioningSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object PositioningSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Default Default instance with standard settings. public static PositioningSyntax Default { get; } Property Value PositioningSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class PositioningSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Detects G90/G91 positioning mode from Flags (or by modal lookback) and writes a Positioning section (Term, Mode) to the block JSON. Fanuc/ISO: reads G90/G91 from Flags (global modal). Heidenhain: would need a separate implementation reading I-prefix per axis. Siemens: would extend with AC()/IC() per-axis override. Does NOT convert incremental values — that is handled by IncrementalResolveSyntax which can be placed later in the syntax chain, after canned cycle syntaxes have consumed their parameters with cycle-specific G91 semantics. public class PositioningSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object PositioningSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples G90 explicit — flag consumed, Positioning written with Mode=“Absolute”: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G90\"] } } #AfterBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" } } G91 explicit — flag consumed, Mode=“Incremental”: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G91\"] } } #AfterBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" } } No positioning flag on the block but #Previous: carried G91 — modal lookback inherits G91; the unrelated M03 flag is left alone: #Previous: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" } } Properties Default Default instance with standard settings. public static PositioningSyntax Default { get; } Property Value PositioningSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html", "title": "Class ProgramEndCleanSyntax | HiAPI-C# 2025", - "summary": "Class ProgramEndCleanSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Clears the per-block Vars.Volatile dictionary on blocks that triggered program end (M02 / M30, identified by the ProgramEnd section written by ProgramEndSyntax). Real Fanuc clears non-retained common variables (#100-#499) on program end + reset; this syntax models that behaviour at the simulator level. The clear happens on the same block that carried M02/M30 — the next block's VolatileVariableReadingSyntax carry then sees an empty dictionary on the predecessor and starts fresh. Pipeline placement: must run after both ProgramEndSyntax (which writes the ProgramEnd section this syntax checks) and VolatileVariableReadingSyntax (so the carry has already happened on this block; this syntax overwrites the result). Retained common variables (#500-#999, owned by RetainedCommonVariableTable) are untouched — they survive program end on real hardware (NV-RAM). Local variables (#1-#33, scope: macro call frame) are also untouched here; their lifecycle belongs to G65/G66/M99 push/pop, not program end. public class ProgramEndCleanSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramEndCleanSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ProgramEndCleanSyntax() Default constructor. public ProgramEndCleanSyntax() ProgramEndCleanSyntax(XElement) Loads from XML produced by MakeXmlSource(string, string, bool); no state. public ProgramEndCleanSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class ProgramEndCleanSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Clears the per-block Vars.Volatile dictionary on blocks that triggered program end (M02 / M30, identified by the ProgramEnd section written by ProgramEndSyntax). Real Fanuc clears non-retained common variables (#100-#499) on program end + reset; this syntax models that behaviour at the simulator level. The clear happens on the same block that carried M02/M30 — the next block's VolatileVariableReadingSyntax carry then sees an empty dictionary on the predecessor and starts fresh. Pipeline placement: must run after both ProgramEndSyntax (which writes the ProgramEnd section this syntax checks) and VolatileVariableReadingSyntax (so the carry has already happened on this block; this syntax overwrites the result). Retained common variables (#500-#999, owned by RetainedCommonVariableTable) are untouched — they survive program end on real hardware (NV-RAM). Local variables (#1-#33, scope: macro call frame) are also untouched here; their lifecycle belongs to G65/G66/M99 push/pop, not program end. Also clears any active FanucModalMacro on the same edge: a G66 modal that was still active when M02/M30 hit is implicitly cancelled, matching real Fanuc reset behaviour. The section is overwritten with a G67-shaped cancel marker so the carry mechanism in FanucModalMacroSyntax sees the boundary and does not propagate the modal past the program-end edge. public class ProgramEndCleanSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramEndCleanSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples M30 with a populated Vars.Volatile — the dictionary is wiped to an empty JsonObject in place (assignment, not removal, so downstream snapshots can distinguish “cleared on program end” from “block never had volatile data”): #BeforeBuild: { \"ProgramEnd\": { \"Term\": \"M30\" }, \"Vars\": { \"Volatile\": { \"#100\": 1.5, \"#101\": 2.5 } } } #AfterBuild: { \"ProgramEnd\": { \"Term\": \"M30\" }, \"Vars\": { \"Volatile\": {} } } M02 with an active G66 FanucModalMacro and no pre-existing Vars — the modal is overwritten with a G67-shaped cancel marker (P/L dropped), and a fresh Vars.Volatile dictionary is created: #BeforeBuild: { \"ProgramEnd\": { \"Term\": \"M02\" }, \"FanucModalMacro\": { \"Term\": \"G66\", \"P\": 1234, \"L\": 1 } } #AfterBuild: { \"ProgramEnd\": { \"Term\": \"M02\" }, \"FanucModalMacro\": { \"Term\": \"G67\" }, \"Vars\": { \"Volatile\": {} } } No ProgramEnd on the block (regular machining line) — the guard rejects the block; Vars.Volatile is left intact for downstream blocks to inherit via carry: #BeforeBuild: { \"Vars\": { \"Volatile\": { \"#100\": 1.5 } } } #AfterBuild: { \"Vars\": { \"Volatile\": { \"#100\": 1.5 } } } Constructors ProgramEndCleanSyntax() Default constructor. public ProgramEndCleanSyntax() ProgramEndCleanSyntax(XElement) Loads from XML produced by MakeXmlSource(string, string, bool); no state. public ProgramEndCleanSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html", "title": "Class ProgramEndSyntax | HiAPI-C# 2025", - "summary": "Class ProgramEndSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes M02/M30 (program end) from Flags and writes IProgramEndDef section. Downstream syntaxes that need to reset modal state on program end (e.g. IsoLocalCoordinateOffsetSyntax for G52 reset) should read the ProgramEnd section rather than scanning for M30 in Flags directly. Must be placed before syntaxes that depend on the ProgramEnd section. public class ProgramEndSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramEndSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ProgramEndSyntax() Initializes a new instance with default settings. public ProgramEndSyntax() ProgramEndSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public ProgramEndSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class ProgramEndSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes M02/M30 (program end) from Flags and writes IProgramEndDef section. Downstream syntaxes that need to reset modal state on program end (e.g. IsoLocalCoordinateOffsetSyntax for G52 reset) should read the ProgramEnd section rather than scanning for M30 in Flags directly. Must be placed before syntaxes that depend on the ProgramEnd section. public class ProgramEndSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramEndSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M30\"] } } #AfterBuild: { \"ProgramEnd\": { \"Term\": \"M30\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M02\"] } } #AfterBuild: { \"ProgramEnd\": { \"Term\": \"M02\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } Constructors ProgramEndSyntax() Initializes a new instance with default settings. public ProgramEndSyntax() ProgramEndSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public ProgramEndSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html", "title": "Class ProgramStopSyntax | HiAPI-C# 2025", - "summary": "Class ProgramStopSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes M00 (unconditional stop) and M01 (optional stop) from Flags and writes a IProgramStopDef section on the block that carried the flag. Non-modal: the section is written only on the exact block where the stop code appears. Siblings with ProgramEndSyntax (M02/M30) which handles end-of-program, not in-program stops. The parsing layer only records NC intent. Whether M01 actually pauses the run is a runtime/semantic decision gated by the operator's \"Optional Stop\" switch (analogous to IBlockSkipConfig for block skip). public class ProgramStopSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramStopSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ProgramStopSyntax() Initializes a new instance with default settings. public ProgramStopSyntax() ProgramStopSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public ProgramStopSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class ProgramStopSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes M00 (unconditional stop) and M01 (optional stop) from Flags and writes a IProgramStopDef section on the block that carried the flag. Non-modal: the section is written only on the exact block where the stop code appears. Siblings with ProgramEndSyntax (M02/M30) which handles end-of-program, not in-program stops. The parsing layer only records NC intent. Whether M01 actually pauses the run is a runtime/semantic decision gated by the operator's \"Optional Stop\" switch (analogous to IBlockSkipConfig for block skip). public class ProgramStopSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramStopSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M00\"] } } #AfterBuild: { \"ProgramStop\": { \"Term\": \"M00\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M01\", \"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"ProgramStop\": { \"Term\": \"M01\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M01\", \"M00\"] } } #AfterBuild: { \"ProgramStop\": { \"Term\": \"M00\" } } Constructors ProgramStopSyntax() Initializes a new instance with default settings. public ProgramStopSyntax() ProgramStopSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public ProgramStopSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html", "title": "Class ProgramXyzSyntax | HiAPI-C# 2025", - "summary": "Class ProgramXyzSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolves ProgramXyz (leaf coordinate) from syntax XYZ tags. Writes ProgramXyz sub-object to SyntaxPiece.JsonObject. Must be placed after BundleSyntax since it uses cross-node lookback for last position. McXyzSyntax (placed after this in the chain) reads ProgramXyz and writes MachineCoordinateState. public class ProgramXyzSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramXyzSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks The term “Program” is absolute positioning coordinate that can be end-user editing. The coordinate is usually the final node from the chain of coordinate transformation. Constructors ProgramXyzSyntax(List>) Initializes a new instance with the given working path list. public ProgramXyzSyntax(List> workingPathList) Parameters workingPathList List> JSON paths to scan for axis values; see WorkingPathList. ProgramXyzSyntax(XElement) Initializes a new instance by deserializing the working path list from the given XML element. Falls back to Default.WorkingPathList when the element has no Path children. public ProgramXyzSyntax(XElement src) Parameters src XElement Source XML element. Properties Default Default instance with the working path resolving to the Parsing root. public static ProgramXyzSyntax Default { get; } Property Value ProgramXyzSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string WorkingPathList JSON paths where this syntax searches for axis values (X/Y/Z). Each path is a list of segments navigating nested JSON objects. First match is used. Empty list means root level. public List> WorkingPathList { get; } Property Value List> Examples [[\"L\"]] → fullJsonSrc[\"L\"] [[]] → fullJsonSrc (root) [[\"L\"], []] → try fullJsonSrc[\"L\"], fallback to root XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class ProgramXyzSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolves ProgramXyz (leaf coordinate) from syntax XYZ tags. Writes ProgramXyz sub-object to SyntaxPiece.JsonObject. Must be placed after BundleSyntax since it uses cross-node lookback for last position. McXyzSyntax (placed after this in the chain) reads ProgramXyz and writes MachineCoordinateState. public class ProgramXyzSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramXyzSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples SUT uses Default so the default WorkingPathList points at the Parsing root. All cases stay on the identity-transform path so GetLastProgramXyz simply returns the previous block's MC. Full X/Y/Z in Parsing — values are read directly (no lookback), Parsing.X/Y/Z are consumed, ProgramXyz section is written; CleanupParsing removes the now-empty Parsing: #BeforeBuild: { \"Parsing\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } Only Z in Parsing with a #Previous: block carrying MachineCoordinateState=(50,60,70) — under the identity transform GetLastProgramXyz equals previous MC, so X/Y are inherited from prev and Z is taken from the parsed literal: #Previous: { \"MachineCoordinateState\": { \"X\": 50, \"Y\": 60, \"Z\": 70 } } #BeforeBuild: { \"Parsing\": { \"Z\": 0 } } #AfterBuild: { \"ProgramXyz\": { \"X\": 50, \"Y\": 60, \"Z\": 0 } } Parsing present but with no X/Y/Z (e.g. an unrelated M03 flag) — ResolveProgramXyz returns null and the syntax early-returns; the block is unchanged: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } Remarks The term “Program” is absolute positioning coordinate that can be end-user editing. The coordinate is usually the final node from the chain of coordinate transformation. Constructors ProgramXyzSyntax(List>) Initializes a new instance with the given working path list. public ProgramXyzSyntax(List> workingPathList) Parameters workingPathList List> JSON paths to scan for axis values; see WorkingPathList. ProgramXyzSyntax(XElement) Initializes a new instance by deserializing the working path list from the given XML element. Falls back to Default.WorkingPathList when the element has no Path children. public ProgramXyzSyntax(XElement src) Parameters src XElement Source XML element. Properties Default Default instance with the working path resolving to the Parsing root. public static ProgramXyzSyntax Default { get; } Property Value ProgramXyzSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string WorkingPathList JSON paths where this syntax searches for axis values (X/Y/Z). Each path is a list of segments navigating nested JSON objects. First match is used. Empty list means root level. public List> WorkingPathList { get; } Property Value List> Examples [[\"L\"]] → fullJsonSrc[\"L\"] [[]] → fullJsonSrc (root) [[\"L\"], []] → try fullJsonSrc[\"L\"], fallback to root XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html", "title": "Class ProgramXyzUtil | HiAPI-C# 2025", - "summary": "Class ProgramXyzUtil Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Shared utilities for ProgramXyz and MachineCoordinateState lookback and resolution. Used by ProgramXyzSyntax, ReferenceReturnSyntax, and semantic resolvers that need position lookback. Two strategies for \"what's the program coordinate at a block's endpoint?\" — both invert an MC value through an ProgramToMcTransform chain, but they pick the chain from different nodes: By current-state transform (ComputeProgramXyzByCurrentTransform(LazyLinkedListNode, Vec3d)) — modal anchor is MachineCoordinateState. Re-expresses an MC value (typically a predecessor's modal MC) into the current block's program frame using the current block's chain. Suitable for chain-change blocks where the spindle physically stays put while the chain (G54 swap, G68.2 activation, G43.4 toggle, tool-height change, ...) re-anchors the program frame; mirrors legacy HardNcLine.RebuildProgramXyzByMc. By corresponding-state transform (ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode)) — modal anchor is ProgramXyz. Recovers the program coordinate that nodeCarryingMc was originally commanded at, by inverting that same node's own transform on its own MC. Suitable for RTCP rotary-dynamic inheritance, where the modal invariant is \"tool tip in workpiece frame stays put while rotary axes turn\" — the recovered Vec3d carries forward as the next rotary block's modal ProgramXyz unchanged, regardless of how its PivotTransform differs. Both strategies yield the same Vec3d when prev and current share the same chain modal state; they only diverge across chain boundaries (RTCP toggle, coord-system swap, tilt activation) and at rotary motion (PivotTransform difference). Pick the wrong one and the result lands in a stale frame: Non-RTCP using \"corresponding\" — leaves the pre-chain-change values, so a block emitted right after G43.4 H03 would inherit ProgramXyz still in the G49 frame and the next motion's MC.Z drifts by the introduced tool-height offset. (This was the 2026-04-25 SoftNc / HardNc divergence on DemoPmcAirPlane/NC/02-ED6L20.NC.) RTCP using \"current\" — double-counts the rotary PivotTransform difference, so the inherited workpiece anchor rotates by the C delta on every rotary block. Direct callers of the two strategy helpers are rare — typically you call the dispatcher ResolveBlockProgramXyz(LazyLinkedListNode, Vec3d) (block's own MC vs predecessor lookback, picks strategy from HasDynamicEntry(JsonObject)) or GetLastProgramXyz(LazyLinkedListNode) (pure predecessor lookback). public static class ProgramXyzUtil Inheritance object ProgramXyzUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode) Strategy: by corresponding-state transform. Recovers the ProgramXyz that nodeCarryingMc was originally commanded at, by inverting that same node's ProgramToMcTransform on its own MachineCoordinateState. Modal invariant: ProgramXyz carries forward (RTCP rotary modal) — the workpiece-frame anchor survives downstream rotary motion regardless of how the next block's PivotTransform differs, so the next rotary-dynamic block can adopt this Vec3d unchanged as its modal ProgramXyz. Returns null when nodeCarryingMc has no usable MC. Called from the RTCP branch of GetLastProgramXyz(LazyLinkedListNode) and from ResolveBlockProgramXyz(LazyLinkedListNode, Vec3d) when the dispatched node has its own MC. public static Vec3d ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode nodeCarryingMc) Parameters nodeCarryingMc LazyLinkedListNode Returns Vec3d ComputeProgramXyzByCurrentTransform(LazyLinkedListNode, Vec3d) Strategy: by current-state transform. Re-expresses mc into currentNode's program frame by inverting currentNode's own ProgramToMcTransform chain. Modal invariant: MachineCoordinateState carries forward — between the source of mc and currentNode, the spindle physically stays put while the chain (G54 swap, G68.2 activation, G43.4 toggle, tool-height change, ...) re-anchors the program frame. Result is the program coordinate that, when transformed by currentNode's chain, yields mc back. Mirrors legacy HardNcLine.RebuildProgramXyzByMc; called from the non-RTCP branch of GetLastProgramXyz(LazyLinkedListNode). public static Vec3d ComputeProgramXyzByCurrentTransform(LazyLinkedListNode currentNode, Vec3d mc) Parameters currentNode LazyLinkedListNode mc Vec3d Returns Vec3d FindPreviousMc(LazyLinkedListNode) Finds the most recent MachineCoordinateState from previous SyntaxPiece nodes. Returns null if no previous position found. public static Vec3d FindPreviousMc(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns Vec3d FindPreviousMcXyzabc(LazyLinkedListNode, IMachineAxisConfig) Finds the most recent MachineCoordinateState XYZABC from previous nodes as DVec3d. Point = XYZ (mm), Normal = ABC (radians, converted from degrees in JSON). XYZ is taken from the first previous block whose MC has any of X/Y/Z set (typical motion-emitting block). ABC is then backfilled per axis for axes the machine actually has: if the XYZ-carrying block lacks a particular rotary value, we continue walking back to find the last block that wrote that axis (modal rotary state). This matches NC semantics — unchanged rotary axes carry forward silently — and prevents NaN rotary deltas from stopping ClLinearMotionSemantic's duration computation in RTCP contours where the XYZ block right before the current one didn't record ABC. axisConfig scopes the rotary-backfill to the machine's declared rotary axes (via GetRotaryAxes(IMachineAxisConfig)): non-rotary axes stay NaN and skip backward walking entirely. When axisConfig is null (callers without the dependency — e.g. legacy tests), all three A/B/C are attempted, matching the pre-axisConfig behaviour. Returns null if no previous MC with XYZ is found at all. Axes that have never been set stay NaN. public static DVec3d FindPreviousMcXyzabc(LazyLinkedListNode node, IMachineAxisConfig axisConfig = null) Parameters node LazyLinkedListNode axisConfig IMachineAxisConfig Returns DVec3d FindPreviousStoredProgramXyz(LazyLinkedListNode) Finds the most recent stored ProgramXyz from previous SyntaxPiece nodes — a raw-value lookback that returns whatever was written on disk, without MC-inversion or frame-change reconstruction. Contrast with GetLastProgramXyz(LazyLinkedListNode), which reconstructs the inherited program position as prev.MC × inverse(transform) and is sensitive to RTCP / chain-change boundaries. This helper is the simple parallel of FindPreviousMc(LazyLinkedListNode) — use it when a caller specifically needs \"what ProgramXyz did the last block write\" (e.g. the ProgramXyzBackfillSyntax change check). Returns null if no predecessor has ProgramXyz. public static Vec3d FindPreviousStoredProgramXyz(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns Vec3d GetLastProgramXyz(LazyLinkedListNode) Gets the modal ProgramXyz inherited by node from the most recent predecessor with an MachineCoordinateState. Dispatches between the two strategies documented on the class summary based on whether node's ProgramToMcTransform chain carries any KindDynamic entry (queried via HasDynamicEntry(JsonObject)): Has a Dynamic entry (RTCP rotary modal) → ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode) on the predecessor (recover prev's commanded ProgramXyz; carries forward unchanged because workpiece-frame tool tip is the modal anchor). All entries Static (chain-change / non-RTCP) → ComputeProgramXyzByCurrentTransform(LazyLinkedListNode, Vec3d) with node's own transform on the predecessor's MC (re-express prev MC in current program frame; MC is the modal anchor while the chain re-frames around it). When prev and current share the same chain modal state both strategies agree, so the discriminator only matters at chain boundaries / rotary motion. Returns Zero only when no predecessor has a usable MC (i.e. the start of the program with no motion emitted). public static Vec3d GetLastProgramXyz(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns Vec3d ReadMcXyzabc(JsonObject) Reads XYZABC from a MachineCoordinateState section as DVec3d. Point = XYZ (mm), Normal = ABC (radians, converted from degrees in JSON). Missing axes are NaN. Returns null if the section doesn't exist or has no XYZ. public static DVec3d ReadMcXyzabc(JsonObject ncBlock) Parameters ncBlock JsonObject Returns DVec3d ResolveBlockProgramXyz(LazyLinkedListNode, Vec3d) Resolves the ProgramXyz at node's endpoint — i.e. what ProgramXyzBackfillSyntax would write on node. Dispatcher; the actual inversion math runs inside one of the two strategy helpers documented on the class summary: node has its own MachineCoordinateState XYZ → ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode) on node itself (its own MC and own transform; the \"current\" / \"corresponding\" distinction collapses since both come from the same node). node has no own MC and prevStored is non-null → GetLastProgramXyz(LazyLinkedListNode) walks back to the most recent predecessor with MC and dispatches strategy from node's HasDynamicEntry(JsonObject) result. Both empty → return null; callers must not fabricate a spurious origin on the very first block. Shared by ProgramXyzBackfillSyntax (computing the snapshot value to write on node) and McAbcXyzFallbackSyntax (computing Previous's would-be snapshot to inherit on the current rotary-dynamic block — the Logic-stage caller cannot read prev's stored ProgramXyz because PostSyntaxs run after the whole Logic chain finishes). prevStored for the second use is taken from FindPreviousStoredProgramXyz(LazyLinkedListNode) on node's predecessor — the predecessor-of-predecessor's stored ProgramXyz — only as a guard against the spurious-origin case. public static Vec3d ResolveBlockProgramXyz(LazyLinkedListNode node, Vec3d prevStored) Parameters node LazyLinkedListNode prevStored Vec3d Returns Vec3d ResolveProgramXyz(JsonNode, LazyLinkedListNode, Sentence, NcDiagnosticProgress) Resolves X/Y/Z from a JSON section into absolute program coordinates. Fills missing axes from last program position via lookback. public static Vec3d ResolveProgramXyz(JsonNode xyzSource, LazyLinkedListNode syntaxPieceNode, Sentence sentence, NcDiagnosticProgress diag) Parameters xyzSource JsonNode JSON node containing X/Y/Z keys (e.g., Parsing root, Parsing.G28, Parsing.L). syntaxPieceNode LazyLinkedListNode Current node for lookback. sentence Sentence Source sentence used to attach diagnostics to the offending text span. diag NcDiagnosticProgress Diagnostic sink that receives parse errors for malformed X/Y/Z values. Returns Vec3d Absolute program coordinates, or null if no X/Y/Z found in xyzSource." + "summary": "Class ProgramXyzUtil Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Shared utilities for ProgramXyz and MachineCoordinateState lookback and resolution. Used by ProgramXyzSyntax, ReferenceReturnSyntax, and semantic resolvers that need position lookback. Two strategies for \"what's the program coordinate at a block's endpoint?\" — both invert an MC value through an ProgramToMcTransform chain, but they pick the chain from different nodes: By current-state transform (ComputeProgramXyzByCurrentTransform(LazyLinkedListNode, Vec3d)) — modal anchor is MachineCoordinateState. Re-expresses an MC value (typically a predecessor's modal MC) into the current block's program frame using the current block's chain. Suitable for chain-change blocks where the spindle physically stays put while the chain (G54 swap, G68.2 activation, G43.4 toggle, tool-height change, ...) re-anchors the program frame; mirrors legacy HardNcLine.RebuildProgramXyzByMc. By corresponding-state transform (ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode)) — modal anchor is ProgramXyz. Recovers the program coordinate that nodeCarryingMc was originally commanded at, by inverting that same node's own transform on its own MC. Suitable for RTCP rotary-dynamic inheritance, where the modal invariant is \"tool tip in workpiece frame stays put while rotary axes turn\" — the recovered Vec3d carries forward as the next rotary block's modal ProgramXyz unchanged, regardless of how its PivotTransform differs. Both strategies yield the same Vec3d when prev and current share the same chain modal state; they only diverge across chain boundaries (RTCP toggle, coord-system swap, tilt activation) and at rotary motion (PivotTransform difference). Pick the wrong one and the result lands in a stale frame: Non-RTCP using \"corresponding\" — leaves the pre-chain-change values, so a block emitted right after G43.4 H03 would inherit ProgramXyz still in the G49 frame and the next motion's MC.Z drifts by the introduced tool-height offset. (This was the 2026-04-25 SoftNc / HardNc divergence on DemoPmcAirPlane/NC/02-ED6L20.NC.) RTCP using \"current\" — double-counts the rotary PivotTransform difference, so the inherited workpiece anchor rotates by the C delta on every rotary block. Direct callers of the two strategy helpers are rare — typically you call the dispatcher ResolveBlockProgramXyz(LazyLinkedListNode, Vec3d) (block's own MC vs predecessor lookback, picks strategy from HasDynamicEntry(JsonObject)) or GetLastProgramXyz(LazyLinkedListNode) (pure predecessor lookback). public static class ProgramXyzUtil Inheritance object ProgramXyzUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode) Strategy: by corresponding-state transform. Recovers the ProgramXyz that nodeCarryingMc was originally commanded at, by inverting that same node's ProgramToMcTransform on its own MachineCoordinateState. Modal invariant: ProgramXyz carries forward (RTCP rotary modal) — the workpiece-frame anchor survives downstream rotary motion regardless of how the next block's PivotTransform differs, so the next rotary-dynamic block can adopt this Vec3d unchanged as its modal ProgramXyz. Returns null when nodeCarryingMc has no usable MC. Called from the RTCP branch of GetLastProgramXyz(LazyLinkedListNode) and from ResolveBlockProgramXyz(LazyLinkedListNode, Vec3d) when the dispatched node has its own MC. public static Vec3d ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode nodeCarryingMc) Parameters nodeCarryingMc LazyLinkedListNode Returns Vec3d ComputeProgramXyzByCurrentTransform(LazyLinkedListNode, Vec3d) Strategy: by current-state transform. Re-expresses mc into currentNode's program frame by inverting currentNode's own ProgramToMcTransform chain. Modal invariant: MachineCoordinateState carries forward — between the source of mc and currentNode, the spindle physically stays put while the chain (G54 swap, G68.2 activation, G43.4 toggle, tool-height change, ...) re-anchors the program frame. Result is the program coordinate that, when transformed by currentNode's chain, yields mc back. Mirrors legacy HardNcLine.RebuildProgramXyzByMc; called from the non-RTCP branch of GetLastProgramXyz(LazyLinkedListNode). public static Vec3d ComputeProgramXyzByCurrentTransform(LazyLinkedListNode currentNode, Vec3d mc) Parameters currentNode LazyLinkedListNode mc Vec3d Returns Vec3d FindPreviousMc(LazyLinkedListNode) Finds the most recent MachineCoordinateState from previous SyntaxPiece nodes. Returns null if no previous position found. public static Vec3d FindPreviousMc(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns Vec3d FindPreviousMcXyzabc(LazyLinkedListNode, IMachineAxisConfig) Finds the most recent MachineCoordinateState XYZABC from previous nodes as DVec3d. Point = XYZ (mm), Normal = ABC (radians, converted from degrees in JSON). XYZ is taken from the first previous block whose MC has any of X/Y/Z set (typical motion-emitting block). ABC is then backfilled per axis for axes the machine actually has: if the XYZ-carrying block lacks a particular rotary value, we continue walking back to find the last block that wrote that axis (modal rotary state). This matches NC semantics — unchanged rotary axes carry forward silently — and prevents NaN rotary deltas from stopping ClLinearMotionSemantic's duration computation in RTCP contours where the XYZ block right before the current one didn't record ABC. axisConfig scopes the rotary-backfill to the machine's declared rotary axes (via GetRotaryAxes(IMachineAxisConfig)): non-rotary axes stay NaN and skip backward walking entirely. When axisConfig is null (callers without the dependency — e.g. legacy tests), all three A/B/C are attempted, matching the pre-axisConfig behaviour. Returns null if no previous MC with XYZ is found at all. Axes that have never been set stay NaN. public static DVec3d FindPreviousMcXyzabc(LazyLinkedListNode node, IMachineAxisConfig axisConfig = null) Parameters node LazyLinkedListNode axisConfig IMachineAxisConfig Returns DVec3d FindPreviousStoredProgramXyz(LazyLinkedListNode) Finds the most recent stored ProgramXyz from previous SyntaxPiece nodes — a raw-value lookback that returns whatever was written on disk, without MC-inversion or frame-change reconstruction. Contrast with GetLastProgramXyz(LazyLinkedListNode), which reconstructs the inherited program position as prev.MC × inverse(transform) and is sensitive to RTCP / chain-change boundaries. This helper is the simple parallel of FindPreviousMc(LazyLinkedListNode) — use it when a caller specifically needs \"what ProgramXyz did the last block write\" (e.g. the ProgramXyzBackfillSyntax change check). Returns null if no predecessor has ProgramXyz. public static Vec3d FindPreviousStoredProgramXyz(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns Vec3d GetLastProgramXyz(LazyLinkedListNode) Gets the modal ProgramXyz inherited by node from the most recent predecessor with an MachineCoordinateState. Dispatches between the two strategies documented on the class summary based on whether node's ProgramToMcTransform chain carries any KindDynamic entry (queried via HasDynamicEntry(JsonObject)): Has a Dynamic entry (RTCP rotary modal) → ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode) on the predecessor (recover prev's commanded ProgramXyz; carries forward unchanged because workpiece-frame tool tip is the modal anchor). All entries Static (chain-change / non-RTCP) → ComputeProgramXyzByCurrentTransform(LazyLinkedListNode, Vec3d) with node's own transform on the predecessor's MC (re-express prev MC in current program frame; MC is the modal anchor while the chain re-frames around it). When prev and current share the same chain modal state both strategies agree, so the discriminator only matters at chain boundaries / rotary motion. Returns Zero only when no predecessor has a usable MC (i.e. the start of the program with no motion emitted). public static Vec3d GetLastProgramXyz(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns Vec3d ReadMcXyzabc(JsonObject) Reads XYZABC from a MachineCoordinateState section as DVec3d. Point = XYZ (mm), Normal = ABC (radians, converted from degrees in JSON). Missing axes are NaN. Returns null if the section doesn't exist or has no XYZ. public static DVec3d ReadMcXyzabc(JsonObject ncBlock) Parameters ncBlock JsonObject Returns DVec3d ResolveBlockProgramXyz(LazyLinkedListNode, Vec3d) Resolves the ProgramXyz at node's endpoint — i.e. what ProgramXyzBackfillSyntax would write on node. Dispatcher; the actual inversion math runs inside one of the two strategy helpers documented on the class summary: node has its own MachineCoordinateState XYZ → ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode) on node itself (its own MC and own transform; the \"current\" / \"corresponding\" distinction collapses since both come from the same node). node has no own MC and prevStored is non-null → GetLastProgramXyz(LazyLinkedListNode) walks back to the most recent predecessor with MC and dispatches strategy from node's HasDynamicEntry(JsonObject) result. Both empty → return null; callers must not fabricate a spurious origin on the very first block. Shared by ProgramXyzBackfillSyntax (computing the snapshot value to write on node) and McAbcXyzFallbackSyntax (computing Previous's would-be snapshot to inherit on the current rotary-dynamic block — the Logic-stage caller cannot read prev's stored ProgramXyz because PostSyntaxs run after the whole Logic chain finishes). prevStored for the second use is taken from FindPreviousStoredProgramXyz(LazyLinkedListNode) on node's predecessor — the predecessor-of-predecessor's stored ProgramXyz — only as a guard against the spurious-origin case. public static Vec3d ResolveBlockProgramXyz(LazyLinkedListNode node, Vec3d prevStored) Parameters node LazyLinkedListNode prevStored Vec3d Returns Vec3d ResolveProgramXyz(JsonNode, LazyLinkedListNode, ISentenceCarrier, NcDiagnosticProgress) Resolves X/Y/Z from a JSON section into absolute program coordinates. Fills missing axes from last program position via lookback. public static Vec3d ResolveProgramXyz(JsonNode xyzSource, LazyLinkedListNode syntaxPieceNode, ISentenceCarrier sentenceCarrier, NcDiagnosticProgress diag) Parameters xyzSource JsonNode JSON node containing X/Y/Z keys (e.g., Parsing root, Parsing.G28, Parsing.L). syntaxPieceNode LazyLinkedListNode Current node for lookback. sentenceCarrier ISentenceCarrier Carrier used to attach diagnostics to the offending text span. diag NcDiagnosticProgress Diagnostic sink that receives parse errors for malformed X/Y/Z values. Returns Vec3d Absolute program coordinates, or null if no X/Y/Z found in xyzSource." }, "api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html", "title": "Class ReferenceReturnSyntax | HiAPI-C# 2025", - "summary": "Class ReferenceReturnSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes ICompoundMotionDef section for G28 reference point return. Reads intermediate XYZ from Parsing.G28 (written by G28Syntax) and converts to machine coordinates via ResolveProgramXyz(JsonNode, LazyLinkedListNode, Sentence, NcDiagnosticProgress). Must be placed after LinearMotionSyntax in the syntax chain. Removes the IMotionEventDef section written by LinearMotionSyntax (G28 handles its own motion). Overwrites root MachineCoordinateState and ProgramXyz with reference position for subsequent block lookback. public class ReferenceReturnSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ReferenceReturnSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: G91 G28 Z0.0 (only Z specified → only Z goes to home) \"CompoundMotion\": { \"Term\": \"G28\", \"Items\": [ { \"ProgramXyz\": { \"X\": prevX, \"Y\": prevY, \"Z\": intermediate }, \"Motion\": { \"Form\": \"McLinear\", \"IsRapid\": true } }, { \"MachineCoordinate\": { \"X\": prevMcX, \"Y\": prevMcY, \"Z\": 0 }, \"Motion\": { \"Form\": \"McLinear\", \"IsRapid\": true } } ] } Only axes present in the G28 block move to home; others keep previous MC value. Item 0 uses ProgramXyz (intermediate point from NC program); McXyzSyntax derives its MachineCoordinate. Item 1 uses MachineCoordinate directly (selective home per axis). Root ProgramXyz is overwritten to the final position; McXyzSyntax derives the root MachineCoordinate. Constructors ReferenceReturnSyntax() Initializes a new instance with default settings. public ReferenceReturnSyntax() ReferenceReturnSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public ReferenceReturnSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class ReferenceReturnSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll public class ReferenceReturnSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ReferenceReturnSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ReferenceReturnSyntax() Initializes a new instance with default settings (BareG28 = Alarm). public ReferenceReturnSyntax() ReferenceReturnSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public ReferenceReturnSyntax(XElement src) Parameters src XElement Source XML element. Properties BareG28 Behaviour for a G28 block with no axis specifiers. Defaults to Alarm. public BareG28Behavior BareG28 { get; set; } Property Value BareG28Behavior Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html", "title": "Class RotaryAxisUtil | HiAPI-C# 2025", - "summary": "Class RotaryAxisUtil Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Shared utilities for rotary axis (A/B/C) resolution. Used by G53p1RotaryPositionSyntax, McAbcSyntax, IsoG68p2TiltSyntax, and other syntaxes that read or write rotary axis values. public static class RotaryAxisUtil Inheritance object RotaryAxisUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods ConsumeAxis(JsonObject, string, Sentence, NcDiagnosticProgress) Consumes an optional axis value (degrees) from Parsing. Post-processor hints (e.g., A/B/C on G68.2 or G53.1 lines) are parsed by FloatTagSetupSyntax into Parsing as doubles. Returns the value and removes the key, or null if not present. A non-numeric value (e.g. \"#124\" left by the parser stage) raises VariableExpression--Unevaluated via GetParsedDouble(JsonObject, string, Sentence, NcDiagnosticProgress) instead of silently dropping the post-processor hint. The key is consumed regardless so downstream syntaxes do not re-process it. public static double? ConsumeAxis(JsonObject parsing, string axisName, Sentence sentence, NcDiagnosticProgress diag) Parameters parsing JsonObject axisName string sentence Sentence diag NcDiagnosticProgress Returns double? GetRotaryAxes(IMachineAxisConfig) Gets the rotary axis names from the given IMachineAxisConfig. Returns an empty array if no rotary axes exist. public static string[] GetRotaryAxes(IMachineAxisConfig axisConfig) Parameters axisConfig IMachineAxisConfig Returns string[]" + "summary": "Class RotaryAxisUtil Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Shared utilities for rotary axis (A/B/C) resolution. Used by G53p1RotaryPositionSyntax, McAbcSyntax, IsoG68p2TiltSyntax, and other syntaxes that read or write rotary axis values. public static class RotaryAxisUtil Inheritance object RotaryAxisUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods ConsumeAxis(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) Consumes an optional axis value (degrees) from Parsing. Post-processor hints (e.g., A/B/C on G68.2 or G53.1 lines) are parsed by FloatTagSetupSyntax into Parsing as doubles. Returns the value and removes the key, or null if not present. A non-numeric value (e.g. \"#124\" left by the parser stage) raises VariableExpression--Unevaluated via GetParsedDouble(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) instead of silently dropping the post-processor hint. The key is consumed regardless so downstream syntaxes do not re-process it. public static double? ConsumeAxis(JsonObject parsing, string axisName, ISentenceCarrier sentenceCarrier, NcDiagnosticProgress diag) Parameters parsing JsonObject axisName string sentenceCarrier ISentenceCarrier diag NcDiagnosticProgress Returns double? GetRotaryAxes(IMachineAxisConfig) Gets the rotary axis names from the given IMachineAxisConfig. Returns an empty array if no rotary axes exist. public static string[] GetRotaryAxes(IMachineAxisConfig axisConfig) Parameters axisConfig IMachineAxisConfig Returns string[]" }, "api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html", "title": "Class SiemensCoordinateOffsetSyntax | HiAPI-C# 2025", - "summary": "Class SiemensCoordinateOffsetSyntax Namespace Hi.NcParsers.LogicSyntaxs.Siemens Assembly HiMech.dll Siemens Sinumerik: resolves work coordinate offset from G54–G57 (ISO-compatible), G505–G599 (extended Siemens), and G500 (cancel — machine coordinate mode). Reads from Flags, looks up IsoCoordinateTable dependency, composes into ProgramToMcTransform. public class SiemensCoordinateOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object SiemensCoordinateOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SiemensCoordinateOffsetSyntax() Initializes a new instance with default settings. public SiemensCoordinateOffsetSyntax() SiemensCoordinateOffsetSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public SiemensCoordinateOffsetSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class SiemensCoordinateOffsetSyntax Namespace Hi.NcParsers.LogicSyntaxs.Siemens Assembly HiMech.dll Siemens Sinumerik: resolves work coordinate offset from G54–G57 (ISO-compatible), G505–G599 (extended Siemens), and G500 (cancel — machine coordinate mode). Reads from Flags, looks up IsoCoordinateTable dependency, composes into ProgramToMcTransform. public class SiemensCoordinateOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object SiemensCoordinateOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Unlike IsoCoordinateOffsetSyntax (Fanuc/ISO), this Siemens variant does not consume the coordinate flag from Parsing.Flags — the flag stays for downstream syntaxes / reconstruction. Mat4d arrays are 16 plain doubles in column-major order; pure translation by (tx,ty,tz) is [1,0,0,0, 0,1,0,0, 0,0,1,0, tx,ty,tz,1]. G54 with an IsoCoordinateTable providing G54 → (10, 20, -100) — same shape as IsoCoordinateOffsetSyntax but the G54 flag survives: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G54\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G54\"] }, \"CoordinateOffset\": { \"CoordinateId\": \"G54\", \"Offset_X\": 10, \"Offset_Y\": 20, \"Offset_Z\": -100 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,-100,1] } ] } Siemens-extended G505 with a table entry for the same id — proves the syntax recognises the extended series, not only the ISO-compat G54–G57 subset: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G505\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G505\"] }, \"CoordinateOffset\": { \"CoordinateId\": \"G505\", \"Offset_X\": 100, \"Offset_Y\": 50, \"Offset_Z\": -200 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 100,50,-200,1] } ] } G500 cancel with no IIsoCoordinateConfig on the dep list — falls back to Vec3d.Zero; the resolved offset is zero and the composed translation is identity (matching the special case inside GetCoordinateOffset(string) for G500): #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G500\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G500\"] }, \"CoordinateOffset\": { \"CoordinateId\": \"G500\", \"Offset_X\": 0, \"Offset_Y\": 0, \"Offset_Z\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } Constructors SiemensCoordinateOffsetSyntax() Initializes a new instance with default settings. public SiemensCoordinateOffsetSyntax() SiemensCoordinateOffsetSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public SiemensCoordinateOffsetSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.Siemens.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.Siemens.html", @@ -4452,7 +4577,7 @@ "api/Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html", "title": "Class SpindleSpeedSyntax | HiAPI-C# 2025", - "summary": "Class SpindleSpeedSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes S (spindle speed) and M03/M04/M05 (spindle direction) from Parsing. Both are modal — persist across blocks via backward node lookback. Writes resolved state to a ISpindleSpeedDef section. Direction is converted from ISO M-codes to the conventional SpindleDirection enum at this layer. public class SpindleSpeedSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object SpindleSpeedSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SpindleSpeedSyntax() Initializes a new instance with default settings. public SpindleSpeedSyntax() SpindleSpeedSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public SpindleSpeedSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class SpindleSpeedSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes S (spindle speed) and M03/M04/M05 (spindle direction) from Parsing. Both are modal — persist across blocks via backward node lookback. Writes resolved state to a ISpindleSpeedDef section. Direction is converted from ISO M-codes to the conventional SpindleDirection enum at this layer. public class SpindleSpeedSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object SpindleSpeedSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples New S + M03 (CW) — both consumed; SpindleSpeed section written with the converted direction enum string: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"], \"S\": 2000 } } #AfterBuild: { \"SpindleSpeed\": { \"SpindleSpeed_rpm\": 2000, \"Direction\": \"CW\" } } M04 (CCW) only — RPM inherited from #Previous:; direction updated to the new CCW state: #Previous: { \"SpindleSpeed\": { \"SpindleSpeed_rpm\": 1500, \"Direction\": \"CW\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M04\"] } } #AfterBuild: { \"SpindleSpeed\": { \"SpindleSpeed_rpm\": 1500, \"Direction\": \"CCW\" } } M05 (STOP) only — RPM still carried from #Previous: for bidirectional round-tripping; downstream consumers gate on Direction == STOP rather than RPM == 0: #Previous: { \"SpindleSpeed\": { \"SpindleSpeed_rpm\": 1500, \"Direction\": \"CW\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M05\"] } } #AfterBuild: { \"SpindleSpeed\": { \"SpindleSpeed_rpm\": 1500, \"Direction\": \"STOP\" } } Constructors SpindleSpeedSyntax() Initializes a new instance with default settings. public SpindleSpeedSyntax() SpindleSpeedSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public SpindleSpeedSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html", @@ -4467,27 +4592,27 @@ "api/Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html", "title": "Class ToolChangeSyntax | HiAPI-C# 2025", - "summary": "Class ToolChangeSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes T (tool number) and M06 (tool change) from Parsing. T is modal — persists across blocks. M06 triggers the change. Writes resolved state to a ToolChange section: { “ToolId”: 1, “IsChange”: true, “Term”: “M06” }. TermKey records the trigger command and is only written when IsChangeKey is true (i.e. the block actually carried the tool-change M code); modal-only blocks omit it. public class ToolChangeSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ToolChangeSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Fields IsChangeKey Section key indicating whether the current block actually triggers a tool change. public const string IsChangeKey = \"IsChange\" Field Value string SectionName JSON section name where the resolved tool-change state is written. public const string SectionName = \"ToolChange\" Field Value string TermKey Section key recording the trigger command (e.g., M06) when IsChangeKey is true. public const string TermKey = \"Term\" Field Value string ToolIdKey Section key holding the active tool number (modal). public const string ToolIdKey = \"ToolId\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class ToolChangeSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes T (tool number) and M06 (tool change) from Parsing. T is modal — persists across blocks. M06 triggers the change. Writes resolved state to a ToolChange section: { “ToolId”: 1, “IsChange”: true, “Term”: “M06” }. TermKey records the trigger command and is only written when IsChangeKey is true (i.e. the block actually carried the tool-change M code); modal-only blocks omit it. public class ToolChangeSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ToolChangeSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples T5 + M06 — full tool change on one block; both T and M06 flag consumed, Term written: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M06\"], \"T\": 5 } } #AfterBuild: { \"ToolChange\": { \"ToolId\": 5, \"IsChange\": true, \"Term\": \"M06\" } } T5 alone alongside an unrelated flag — modal arming only, no actual change; IsChange=false and Term omitted. M03 is left in place because CleanupParsing only runs on the M06 branch: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"], \"T\": 7 } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"ToolChange\": { \"ToolId\": 7, \"IsChange\": false } } M06 alone — T comes from #Previous: modal lookback; IsChange=true, Term=“M06”: #Previous: { \"ToolChange\": { \"ToolId\": 5, \"IsChange\": false } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M06\"] } } #AfterBuild: { \"ToolChange\": { \"ToolId\": 5, \"IsChange\": true, \"Term\": \"M06\" } } Fields IsChangeKey Section key indicating whether the current block actually triggers a tool change. public const string IsChangeKey = \"IsChange\" Field Value string SectionName JSON section name where the resolved tool-change state is written. public const string SectionName = \"ToolChange\" Field Value string TermKey Section key recording the trigger command (e.g., M06) when IsChangeKey is true. public const string TermKey = \"Term\" Field Value string ToolIdKey Section key holding the active tool number (modal). public const string ToolIdKey = \"ToolId\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html", "title": "Class ToolHeightOffsetSyntax | HiAPI-C# 2025", - "summary": "Class ToolHeightOffsetSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolves ISO tool height offset (G43/G44/G49) to the effective offset value (mm) and composes the offset as a translation into the accumulated ProgramToMcTransform matrix. RTCP modes (G43.4, TRAORI, M128) are handled by separate brand-specific syntaxes (e.g., G43p4RtcpSyntax). public class ToolHeightOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ToolHeightOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks Input data locations in JsonObject: Parsing.G43 / Parsing.G44 → from ParameterizedFlagSyntax, {\"H\": \"5\"} Parsing.H → from IntegerTagSetupSyntax, standalone modal H (int) Parsing.Flags → from NumberedFlagSyntax, \"G49\" for cancellation ToolOrientation → from a prior syntax (optional, default = Transformation.AxialNormal or UnitZ) Modal state is persisted in the IToolHeightCompensationDef section (not syntax fields) and recovered from backward node traversal. Constructors ToolHeightOffsetSyntax() Initializes a new instance with default settings. public ToolHeightOffsetSyntax() ToolHeightOffsetSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public ToolHeightOffsetSyntax(XElement src) Parameters src XElement Source XML element. Fields ToolOrientationKey JSON key under which the upstream tool orientation vector is read. public const string ToolOrientationKey = \"ToolOrientation\" Field Value string TransformSource Identifier used as the transform source key when composing the tool-height translation into ProgramToMcTransform. public const string TransformSource = \"ToolHeightCompensation\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class ToolHeightOffsetSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolves ISO tool height offset (G43/G44/G49) to the effective offset value (mm) and composes the offset as a translation into the accumulated ProgramToMcTransform matrix. RTCP modes (G43.4, TRAORI, M128) are handled by separate brand-specific syntaxes (e.g., G43p4RtcpSyntax). public class ToolHeightOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ToolHeightOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples All cases below have no ToolOrientation section and no TiltTransform entry in the chain — the composed translation therefore lies along UnitZ (the identity tilt's AxialNormal), so Mat4d.Trans = (0, 0, height_mm). G43 H1 with a TestDeps.ToolOffset mapping offset 1 to 99.98 mm — full consume from Parsing.G43, positive sign on G43: #BeforeBuild: { \"Parsing\": { \"G43\": { \"H\": \"1\" } } } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 99.98, \"Term\": \"G43\", \"OffsetId\": 1 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,99.98,1] } ] } G49 cancel flag — writes a sentinel G49 section with Offset_mm = 0, OffsetId = 0, and composes an identity Mat4d so any previously composed tool-height translation is reset: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G49\"] } } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 0, \"Term\": \"G49\", \"OffsetId\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } No G43/G44/G49 on the current block but #Previous: carries an active G43 H1 — modal lookback inherits the term + offset id, re-queries the tool table, and re-composes the translation. The unrelated M03 flag survives because the consume path only triggers when an ISO term is on the current block: #Previous: { \"ToolHeightCompensation\": { \"Offset_mm\": 99.98, \"Term\": \"G43\", \"OffsetId\": 1 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"ToolHeightCompensation\": { \"Offset_mm\": 99.98, \"Term\": \"G43\", \"OffsetId\": 1 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,99.98,1] } ] } G44 H1 with the same TestDeps.ToolOffset offset-1 → 99.98 mm — G44 negates the table value, so Offset_mm = -99.98 and the composed translation lies along -UnitZ. The X/Y components of toolOrientation * -99.98 land on IEEE-754 negative zero (0 * -99.98 = -0.0), which System.Text.Json emits literally as -0: #BeforeBuild: { \"Parsing\": { \"G44\": { \"H\": \"1\" } } } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": -99.98, \"Term\": \"G44\", \"OffsetId\": 1 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, -0,-0,-99.98,1] } ] } Remarks Input data locations in JsonObject: Parsing.G43 / Parsing.G44 → from ParameterizedFlagSyntax, {\"H\": \"5\"} Parsing.H → from IntegerTagSetupSyntax, standalone modal H (int) Parsing.Flags → from NumberedFlagSyntax, \"G49\" for cancellation ToolOrientation → from a prior syntax (optional, default = Transformation.AxialNormal or UnitZ) Modal state is persisted in the IToolHeightCompensationDef section (not syntax fields) and recovered from backward node traversal. Constructors ToolHeightOffsetSyntax() Initializes a new instance with default settings. public ToolHeightOffsetSyntax() ToolHeightOffsetSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public ToolHeightOffsetSyntax(XElement src) Parameters src XElement Source XML element. Fields ToolOrientationKey JSON key under which the upstream tool orientation vector is read. public const string ToolOrientationKey = \"ToolOrientation\" Field Value string TransformSource Identifier used as the transform source key when composing the tool-height translation into ProgramToMcTransform. public const string TransformSource = \"ToolHeightCompensation\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html", "title": "Class UnitModeSyntax | HiAPI-C# 2025", - "summary": "Class UnitModeSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Detects the unit-system code (ISO Group 06: G20 inch / G21 metric) from Flags and writes a Unit section (Term, System). Modal — absence of an explicit flag inherits the previous block's unit, defaulting to Metric at program start. The HiNC pipeline works exclusively in millimetres. When G20 is detected this syntax emits an Unit--InchNotSupported Unsupported Error so upstream callers are forced to pre-convert the NC program to metric. G21 is accepted as a no-op confirmation of the default. public class UnitModeSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object UnitModeSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors UnitModeSyntax() Initializes a new instance with default settings. public UnitModeSyntax() UnitModeSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public UnitModeSyntax(XElement src) Parameters src XElement Source XML element. Properties Default Default instance with standard settings. public static UnitModeSyntax Default { get; } Property Value UnitModeSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class UnitModeSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Detects the unit-system code (ISO Group 06: G20 inch / G21 metric) from Flags and writes a Unit section (Term, System). Modal — absence of an explicit flag inherits the previous block's unit, defaulting to Metric at program start. The HiNC pipeline works exclusively in millimetres. When G20 is detected this syntax emits an Unit--InchNotSupported Unsupported Error so upstream callers are forced to pre-convert the NC program to metric. G21 is accepted as a no-op confirmation of the default. public class UnitModeSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object UnitModeSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G21\"] } } #AfterBuild: { \"Unit\": { \"Term\": \"G21\", \"System\": \"Metric\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G20\"] } } #AfterBuild: { \"Unit\": { \"Term\": \"G20\", \"System\": \"Inch\" } } #Previous: { \"Unit\": { \"Term\": \"G21\", \"System\": \"Metric\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] }, \"Unit\": { \"Term\": \"G21\", \"System\": \"Metric\" } } Constructors UnitModeSyntax() Initializes a new instance with default settings. public UnitModeSyntax() UnitModeSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public UnitModeSyntax(XElement src) Parameters src XElement Source XML element. Properties Default Default instance with standard settings. public static UnitModeSyntax Default { get; } Property Value UnitModeSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.LogicSyntaxs.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.html", "title": "Namespace Hi.NcParsers.LogicSyntaxs | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.LogicSyntaxs Classes BackBoringSyntax G87 back boring cycle. Supports modal repetition. Cuts upward from Z to R — used to bore the back side of a workpiece. Cycle sequence: Oriented spindle stop (OSS) at current position Rapid (shifted) to init position, then down to bottom Z — tool enters pre-drilled hole without contacting bore wall Shift back to hole center at bottom Spindle start (CW) Feed upward from Z to R-point (back boring cut) Oriented spindle stop at R Tool shift, rapid retract (shifted) to final Z Shift back to center, spindle restart Q specifies the lateral shift distance (mm). Shift direction defaults to +X (OSS angle 0°). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax before this syntax runs. BoringCycleSyntax G85/G86/G89 boring cycles. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z [G86 only] Spindle stop at bottom [G89 only] Dwell P seconds at bottom Retract: G85/G89 → feed retract, G86 → rapid retract [G86 only] Spindle restart (CW) after retract G85: feed to Z, feed retract — smooth bore finish. G86: feed to Z, spindle stop (implicit), rapid retract. G89: feed to Z, dwell P, feed retract — like G85 with bottom dwell. Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. CannedCycleResolveSyntax Resolves the canned-cycle Group-09 state for the current block and writes the result to the CannedCycle section. Active cycle (direct G81..G89 or modal repeat): merges Parsing overrides with previous-cycle stored params, applies G91 incremental-to-absolute conversion and missing-axis fallback, writes CannedCycle with Term, ReturnMode, and Params. The resolved cycle sub-section is left in Parsing under the cycle code for downstream cycle syntaxes (DrillingCycleSyntax, etc.) to read. Explicit cancel (G80 flag present on a non-cycle block): consumes the G80 flag and writes CannedCycle = { Term: \"G80\" }, acting as a hard sentinel for Hi.NcParsers.LogicSyntaxs.CannedCycleSyntaxUtil modal lookback. No Group-09 activity: leaves the block untouched. Must be placed after PositioningSyntax and before the individual cycle syntaxes in the chain. CircularMotionSyntax Writes McArc motion for circular commands (ISO G02/G03). Detects motion mode from Flags, reads I/J/K center offsets or R radius from Parsing, computes arc center in program coordinates, and writes a one-shot MotionEvent (form + arc params) plus a modal MotionState (Term). G02/G03 mode is modal (Group 01) — persists across blocks via Term. Arc parameters (I/J/K/R) are per-block and must be present in every arc block. Must be placed before LinearMotionSyntax in the syntax chain. Both share the Group 01 motion slot; whichever writes a MotionEvent first claims it. CoolantSyntax Consumes M07 (mist ON), M08 (flood ON), and M09 (coolant OFF) from Flags and writes the ICoolantDef section with both IsOn (convenience flag) and Mode (abstract mode name: Flood / Mist / Off). Modal — persists via backward lookback. CoordinateOffsetUtil Shared utilities for all coordinate offset syntaxes (ISO, Siemens, Heidenhain). Handles section IO, backward lookback, and ProgramToMcTransform composition. DrillingCycleSyntax G81/G82 drilling cycle (rapid retract). Supports modal repetition. G82 covers G81 — the only difference is an optional dwell (P) at the bottom. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z [G82 only] Dwell P seconds at bottom Rapid from bottom to final (G98 → init Z, G99 → R) Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. FanucPathSmoothingSyntax Consumes Fanuc G05.1 (high-precision contour / AICC II / Nano Smoothing) and records the modal state in the PathSmoothing JSON section using the FanucPathSmoothing schema. Q1 enables, Q0 disables; the optional R{n} precision-level is preserved as Level. The simulation does not alter the tool path — this is a controller-internal interpolation black box; the captured state exists for bidirectional NC-text reconstruction. Modal carry to subsequent blocks is handled by ModalCarrySyntax, which already tracks the PathSmoothing section key and deep-clones it forward. FeedrateSyntax Consumes F (feedrate) from Parsing and G94/G95 mode from Flags. Both are modal — persist across blocks via backward node lookback. Writes resolved state to a IFeedrateDef section. FineBoringSyntax G76 fine boring cycle. Supports modal repetition. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z Oriented spindle stop (OSS) Tool shift by Q in +X direction (clear bore wall) Rapid retract (shifted) to final Z Tool shift back to center Spindle restart (CW) Q specifies the lateral shift distance (mm) to avoid dragging the tool across the finished bore surface during retract. Shift direction defaults to +X (OSS angle 0°). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax before this syntax runs. G43p4RtcpSyntax Handles G43.4 RTCP (Rotary Tool Center Point) activation. Writes the IToolHeightCompensationDef section and the ToolHeightCompensationSource entry in ProgramToMcTransform — a tool-normal · offset_mm translation at the block endpoint ABC. The chain entry is tagged KindDynamic when RTCP is active and ABC changes across the block, and KindStatic otherwise. The RTCP kinematic rotary part (Pn→MC rigid transform) is orthogonal to this syntax and is written by PivotTransformationSyntax on every block, because rotary state remains in effect beyond the RTCP modal (e.g. a non-RTCP G01 after G49 still inherits the last ABC from the program). The \"rotary dynamic\" distinction lives on the chain entry's KindKey alone and is read via HasDynamicEntry(JsonObject) by LinearMotionSyntax to pick ClLinear vs McLinear. G43.4 is used by Fanuc, Mazak, Syntec, and Okuma. Siemens (TRAORI) and Heidenhain (M128) are handled by separate syntaxes. Must be placed after ToolHeightOffsetSyntax (to override the ToolHeightCompensation entry when RTCP is active) and before PivotTransformationSyntax (which runs last in the chain). G53p1RotaryPositionSyntax G53.1 — non-modal, one-shot rotary axis positioning. Positions the rotary axes (A/B/C) to align the physical tool axis with the active tilted work plane defined by G68.2. XYZ position is unchanged; only rotary axes move via rapid traverse. Requires IsoG68p2TiltSyntax (or equivalent) to have written the tilt transform. Uses IMachineKinematics to solve for the target A/B/C via inverse kinematics. Must be placed after IsoG68p2TiltSyntax (needs tilt data) and before ProgramXyzSyntax in the syntax chain. Writes A/B/C into MachineCoordinateState. Motion is handled by LinearMotionSyntax via modal G00/G01. HighSpeedPeckCycleSyntax G73 high-speed peck drilling cycle (chip breaking). Supports modal repetition. Drills in increments of depth Q, partially retracting by PeckRetractionDistance_mm between strokes (instead of fully back to R like PeckDrillingCycleSyntax). Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point For each stroke: feed Q deeper, rapid retract by d If remainder exists: feed to bottom Z, rapid retract by d Rapid to final (G98 → init Z, G99 → R) Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. IncrementalResolveSyntax Resolves G91 incremental axis values to absolute in-place within Parsing and its sub-sections. Reads Term written by PositioningSyntax. WorkingPathList specifies which JSON paths contain axis values that need incremental-to-absolute conversion. Default: [[\"Parsing\"], [\"Parsing\", \"G28\"]]. All matching paths are converted. Canned cycle paths (Parsing.G81, G82, G83, …) are intentionally excluded — their Z/R incremental semantics differ from normal axes (R is relative to init level, Z is relative to R-point). Resolution is handled by ResolveCycleCoordinates(JsonObject, Vec3d, double?, double?, double, double) inside each cycle syntax class, which runs before this syntax. Uses AxisNames to determine which tags are motion axes. Traces backward nodes for last known ProgramXyz to resolve incremental values. After this syntax, all axis values in the working paths are absolute — ProgramXyzSyntax can consume them without incremental logic. IsoCoordinateOffsetSyntax ISO/Fanuc/Mazak/Okuma/Syntec: resolves G54–G59.9 work coordinate offset. Reads G54/G55/.../G59.9 from Flags, looks up offset Vec3d via IIsoCoordinateConfig dependencies (e.g. brand parameter table or IsoCoordinateTable), composes into ProgramToMcTransform. Modal — active coordinate persists via backward lookback. Default coordinate ID is set by StaticInitializer. IsoG68RotationSyntax ISO/Fanuc: resolves G68 (2D coordinate rotation) and G69 (cancel). Computes a rotation Mat4d around the active plane normal and composes it into ProgramToMcTransform. No IMachineKinematics dependency needed — G68 is pure geometric rotation. Managed commands: G68, G69 (idempotent with IsoG68p2TiltSyntax). IsoG68p2TiltSyntax ISO/Fanuc: resolves G68.2 (tilted work plane) and G69 (cancel). Computes a tilt Mat4d from I/J/K euler angles (Fanuc ZXZ convention) and composes it into ProgramToMcTransform. Managed commands: G68.2, G69 (idempotent with IsoG68RotationSyntax). Siemens equivalent: CYCLE800 (separate syntax). Heidenhain equivalent: PLANE SPATIAL (separate syntax). IsoLocalCoordinateOffsetSyntax ISO G52: Local coordinate system offset (additive to G54-series). G52 X10 Y20 Z5 → sets local offset. G52 X0 Y0 Z0 → cancels (resets to zero). M30 (program end) → also cancels. Reads Parsing.G52 (from G52Syntax), writes IsoLocalCoordinateOffset section, and adds an \"IsoLocalCoordinateOffset\" entry to the transformation chain. Modal — persists via backward lookback until changed or cancelled. LinearMotionSyntax Writes McLinear motion for linear commands (ISO G00/G01, Heidenhain L/LN). Detects motion mode from Flags, writes a one-shot MotionEvent section (form + isRapid) plus a modal MotionState section (Term) when MachineCoordinateState exists on the block. McLinearMotionSemantic discriminates between XYZ-only and XYZABC motion by checking whether rotary axis values are present in MachineCoordinateState. Must be placed after McAbcSyntax in the syntax chain. MachineCoordSelectSyntax Handles G53 (machine coordinate selection) — non-modal, one-shot. The axis values (X/Y/Z) in the block are interpreted as machine coordinates, bypassing all work offsets, local coordinates, tool height compensation, and coordinate rotations. If G91 (incremental) is active, G53 is ignored per ISO standard. Must be placed before ProgramXyzSyntax in the syntax chain. When G53 is active, this syntax consumes X/Y/Z from Parsing and writes MachineCoordinateState directly, preventing ProgramXyzSyntax from processing them as program coordinates. McAbcCyclicPathSyntax Resolve modular rotary axes to the shortest cyclic path relative to the previous node. Uses IsModularRotary(string) to determine which axes within MachineCoordinateState need cyclic resolution. Falls back to hardcoded A/B/C if no IMachineAxisConfig is available. Must be placed after ProgramXyzSyntax in NcSyntaxList. McAbcSyntax Writes rotary axis values (A/B/C) into MachineCoordinateState from Parsing and modal lookback. Only active when IMachineAxisConfig declares rotary axes. Works for both 3+2-axis (no IMachineKinematics) and simultaneous 5-axis configurations. This syntax is intentionally ABC-only. When the block is rotary-only (no ProgramXyz, e.g. G00 A30.) the section is created with ABC but without X/Y/Z. McAbcXyzFallbackSyntax — placed after McXyzSyntax — copies X/Y/Z from the previous block's MachineCoordinateState to finish the section. Splitting the XYZ fill out lets this syntax run before McXyzSyntax (and before G43p4RtcpSyntax) without accidentally filling X/Y/Z from prev and thereby short-circuiting DeriveMcXyz(JsonObject, Mat4d). Missing rotary axes are filled from previous MachineCoordinateState lookback, unless the current section already has the value (e.g., from HomeMcInitializer). Values are stored in degrees (matching McAbcCyclicPathSyntax). Must be placed before McXyzSyntax so syntaxes that need the current-block ABC to compute transforms (e.g. G43p4RtcpSyntax) can see it; and before McAbcCyclicPathSyntax and LinearMotionSyntax. McAbcXyzFallbackSyntax Fills missing X/Y/Z on an ABC-only MachineCoordinateState section. Behaviour depends on whether the block is under RTCP with rotary motion, as indicated by HasDynamicEntry(JsonObject): Non-dynamic (no RTCP or RTCP with ABC stable) — the programmed tool tip stays put in MC while rotary axes (if any) are unchanged, so we simply copy X/Y/Z from the previous block's MachineCoordinateState. This matches NC modal XYZ carry-forward for rotary-only blocks such as G00 A30. (non-RTCP pivoting). Dynamic (RTCP active + ABC changing) — the programmed tool tip must stay fixed in program coordinates while MC XYZ shifts to compensate the new rotary state. Looks up the last ProgramXyz and re-derives MC = inheritedProgramXyz × composedTransform, where the composed transform is the block's endpoint chain (now including PivotTransformSource as a full rotation+translation Mat4d, so the chain already encodes the kinematic IK). The carried ProgramXyz is also stamped onto the current block so downstream consumers see a consistent ProgramXyz + MC pair. Pair with McAbcSyntax, which runs early to write ABC but deliberately leaves X/Y/Z empty so McXyzSyntax can still derive MC XYZ from ProgramXyz via the transform chain when the block carries linear motion. If McXyzSyntax has nothing to derive (no ProgramXyz), this syntax completes the MC section as described above. Does nothing when the section already carries all three of X/Y/Z (normal linear-motion blocks), or when there is no section at all (pure parse-only block that introduces no MC). Must be placed after McXyzSyntax and before McAbcCyclicPathSyntax / LinearMotionSyntax. McXyzSyntax Derives MachineCoordinateState from ProgramXyz by applying the composed ProgramToMcTransform. Processes two stages: Root ProgramXyz → root MachineCoordinate CompoundMotion.ItemsKey[*] — derives MachineCoordinate from ProgramXyz for items that have ProgramXyz but no MachineCoordinate Must be placed after syntaxes that write ProgramXyz (e.g., ReferenceReturnSyntax) and before syntaxes that read MachineCoordinate (e.g., LinearMotionSyntax). PeckDrillingCycleSyntax G83 peck drilling cycle. Supports modal repetition. Drills in increments of depth Q, fully retracting to R between strokes. Cycle sequence (per stroke): Rapid to init position (target XY, previous Z) Rapid from init to R-point For each stroke: rapid to clearance above previous depth, feed Q deeper, rapid back to R If remainder exists: feed to bottom Z, rapid to R Rapid from R/bottom to final (G98 → init Z, G99 → R) Retraction distance is read from ICannedCycleConfig (Fanuc #4002 / Syntec Pr4002, or FallbackConfig fallback). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. PivotTransformationSyntax Writes the PivotTransformSource entry into ProgramToMcTransform on every block, capturing the Pn→MC kinematic rigid transform for the block's endpoint rotary state. Mirrors legacy HardNcLine.GetProgramXyz's use of McToPn(DVec3d) — without this entry, the transform chain would miss the rotary rotation on any block whose MachineCoordinate.ABC is non-zero, and McXyzSyntax (and ProgramXyzSyntax's inverse lookback) would silently drift. Scope is not limited to RTCP modal: as long as rotary axes are physically at a non-zero position (e.g. after a non-RTCP G00 B90 plus any subsequent motion), the kinematic chain still contributes a non-identity rigid transform that must appear in the endpoint chain. G43p4RtcpSyntax is orthogonal and only governs the dynamic-rotary KindKey tagging used by LinearMotionSyntax to pick the motion form. Chain position: must run after all Pn-frame writers (IsoG68p2TiltSyntax, ToolHeightOffsetSyntax, G43p4RtcpSyntax, IsoCoordinateOffsetSyntax, brand-specific coord offset syntaxes) so the PivotTransform entry naturally lands as the last chain element. Must run before McXyzSyntax / ProgramXyzSyntax so they see the completed chain. Silently no-ops when IMachineKinematics is absent (3-axis configurations without rotary kinematics). PlaneSelectSyntax Consumes G17/G18/G19 plane selection from Flags and writes IPlaneSelectDef section using conventional axis-pair names (XY/ZX/YZ). Modal — persists via backward lookback. Default is XY (G17). Downstream consumers (CircularMotionSyntax, IsoG68RotationSyntax) call GetPlaneNormalDir(JsonObject) to read the resolved plane. PositioningSyntax Detects G90/G91 positioning mode from Flags (or by modal lookback) and writes a Positioning section (Term, Mode) to the block JSON. Fanuc/ISO: reads G90/G91 from Flags (global modal). Heidenhain: would need a separate implementation reading I-prefix per axis. Siemens: would extend with AC()/IC() per-axis override. Does NOT convert incremental values — that is handled by IncrementalResolveSyntax which can be placed later in the syntax chain, after canned cycle syntaxes have consumed their parameters with cycle-specific G91 semantics. ProgramEndCleanSyntax Clears the per-block Vars.Volatile dictionary on blocks that triggered program end (M02 / M30, identified by the ProgramEnd section written by ProgramEndSyntax). Real Fanuc clears non-retained common variables (#100-#499) on program end + reset; this syntax models that behaviour at the simulator level. The clear happens on the same block that carried M02/M30 — the next block's VolatileVariableReadingSyntax carry then sees an empty dictionary on the predecessor and starts fresh. Pipeline placement: must run after both ProgramEndSyntax (which writes the ProgramEnd section this syntax checks) and VolatileVariableReadingSyntax (so the carry has already happened on this block; this syntax overwrites the result). Retained common variables (#500-#999, owned by RetainedCommonVariableTable) are untouched — they survive program end on real hardware (NV-RAM). Local variables (#1-#33, scope: macro call frame) are also untouched here; their lifecycle belongs to G65/G66/M99 push/pop, not program end. ProgramEndSyntax Consumes M02/M30 (program end) from Flags and writes IProgramEndDef section. Downstream syntaxes that need to reset modal state on program end (e.g. IsoLocalCoordinateOffsetSyntax for G52 reset) should read the ProgramEnd section rather than scanning for M30 in Flags directly. Must be placed before syntaxes that depend on the ProgramEnd section. ProgramStopSyntax Consumes M00 (unconditional stop) and M01 (optional stop) from Flags and writes a IProgramStopDef section on the block that carried the flag. Non-modal: the section is written only on the exact block where the stop code appears. Siblings with ProgramEndSyntax (M02/M30) which handles end-of-program, not in-program stops. The parsing layer only records NC intent. Whether M01 actually pauses the run is a runtime/semantic decision gated by the operator's \"Optional Stop\" switch (analogous to IBlockSkipConfig for block skip). ProgramXyzSyntax Resolves ProgramXyz (leaf coordinate) from syntax XYZ tags. Writes ProgramXyz sub-object to SyntaxPiece.JsonObject. Must be placed after BundleSyntax since it uses cross-node lookback for last position. McXyzSyntax (placed after this in the chain) reads ProgramXyz and writes MachineCoordinateState. ProgramXyzUtil Shared utilities for ProgramXyz and MachineCoordinateState lookback and resolution. Used by ProgramXyzSyntax, ReferenceReturnSyntax, and semantic resolvers that need position lookback. Two strategies for \"what's the program coordinate at a block's endpoint?\" — both invert an MC value through an ProgramToMcTransform chain, but they pick the chain from different nodes: By current-state transform (ComputeProgramXyzByCurrentTransform(LazyLinkedListNode, Vec3d)) — modal anchor is MachineCoordinateState. Re-expresses an MC value (typically a predecessor's modal MC) into the current block's program frame using the current block's chain. Suitable for chain-change blocks where the spindle physically stays put while the chain (G54 swap, G68.2 activation, G43.4 toggle, tool-height change, ...) re-anchors the program frame; mirrors legacy HardNcLine.RebuildProgramXyzByMc. By corresponding-state transform (ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode)) — modal anchor is ProgramXyz. Recovers the program coordinate that nodeCarryingMc was originally commanded at, by inverting that same node's own transform on its own MC. Suitable for RTCP rotary-dynamic inheritance, where the modal invariant is \"tool tip in workpiece frame stays put while rotary axes turn\" — the recovered Vec3d carries forward as the next rotary block's modal ProgramXyz unchanged, regardless of how its PivotTransform differs. Both strategies yield the same Vec3d when prev and current share the same chain modal state; they only diverge across chain boundaries (RTCP toggle, coord-system swap, tilt activation) and at rotary motion (PivotTransform difference). Pick the wrong one and the result lands in a stale frame: Non-RTCP using \"corresponding\" — leaves the pre-chain-change values, so a block emitted right after G43.4 H03 would inherit ProgramXyz still in the G49 frame and the next motion's MC.Z drifts by the introduced tool-height offset. (This was the 2026-04-25 SoftNc / HardNc divergence on DemoPmcAirPlane/NC/02-ED6L20.NC.) RTCP using \"current\" — double-counts the rotary PivotTransform difference, so the inherited workpiece anchor rotates by the C delta on every rotary block. Direct callers of the two strategy helpers are rare — typically you call the dispatcher ResolveBlockProgramXyz(LazyLinkedListNode, Vec3d) (block's own MC vs predecessor lookback, picks strategy from HasDynamicEntry(JsonObject)) or GetLastProgramXyz(LazyLinkedListNode) (pure predecessor lookback). ReferenceReturnSyntax Writes ICompoundMotionDef section for G28 reference point return. Reads intermediate XYZ from Parsing.G28 (written by G28Syntax) and converts to machine coordinates via ResolveProgramXyz(JsonNode, LazyLinkedListNode, Sentence, NcDiagnosticProgress). Must be placed after LinearMotionSyntax in the syntax chain. Removes the IMotionEventDef section written by LinearMotionSyntax (G28 handles its own motion). Overwrites root MachineCoordinateState and ProgramXyz with reference position for subsequent block lookback. RotaryAxisUtil Shared utilities for rotary axis (A/B/C) resolution. Used by G53p1RotaryPositionSyntax, McAbcSyntax, IsoG68p2TiltSyntax, and other syntaxes that read or write rotary axis values. SpindleSpeedSyntax Consumes S (spindle speed) and M03/M04/M05 (spindle direction) from Parsing. Both are modal — persist across blocks via backward node lookback. Writes resolved state to a ISpindleSpeedDef section. Direction is converted from ISO M-codes to the conventional SpindleDirection enum at this layer. TappingCycleSyntax G84 (right-hand) / G74 (left-hand) tapping cycles. Supports modal repetition. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z Spindle reverse at bottom Feed retract to final Z (G98 → init Z, G99 → R) Spindle restore to forward direction G84: forward = CW (M03), reverse = CCW (M04). G74: forward = CCW (M04), reverse = CW (M03). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. TiltTransformUtil Shared utilities for all tilt transform syntaxes (ISO, Siemens, Heidenhain). Handles section IO, backward lookback, and ProgramToMcTransform composition. ToolChangeSyntax Consumes T (tool number) and M06 (tool change) from Parsing. T is modal — persists across blocks. M06 triggers the change. Writes resolved state to a ToolChange section: { “ToolId”: 1, “IsChange”: true, “Term”: “M06” }. TermKey records the trigger command and is only written when IsChangeKey is true (i.e. the block actually carried the tool-change M code); modal-only blocks omit it. ToolHeightOffsetSyntax Resolves ISO tool height offset (G43/G44/G49) to the effective offset value (mm) and composes the offset as a translation into the accumulated ProgramToMcTransform matrix. RTCP modes (G43.4, TRAORI, M128) are handled by separate brand-specific syntaxes (e.g., G43p4RtcpSyntax). UnitModeSyntax Detects the unit-system code (ISO Group 06: G20 inch / G21 metric) from Flags and writes a Unit section (Term, System). Modal — absence of an explicit flag inherits the previous block's unit, defaulting to Metric at program start. The HiNC pipeline works exclusively in millimetres. When G20 is detected this syntax emits an Unit--InchNotSupported Unsupported Error so upstream callers are forced to pre-convert the NC program to metric. G21 is accepted as a no-op confirmation of the default." + "summary": "Namespace Hi.NcParsers.LogicSyntaxs Classes BackBoringSyntax G87 back boring cycle. Supports modal repetition. Cuts upward from Z to R — used to bore the back side of a workpiece. Cycle sequence: Oriented spindle stop (OSS) at current position Rapid (shifted) to init position, then down to bottom Z — tool enters pre-drilled hole without contacting bore wall Shift back to hole center at bottom Spindle start (CW) Feed upward from Z to R-point (back boring cut) Oriented spindle stop at R Tool shift, rapid retract (shifted) to final Z Shift back to center, spindle restart Q specifies the lateral shift distance (mm). Shift direction defaults to +X (OSS angle 0°). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax before this syntax runs. BoringCycleSyntax G85/G86/G89 boring cycles. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z [G86 only] Spindle stop at bottom [G89 only] Dwell P seconds at bottom Retract: G85/G89 → feed retract, G86 → rapid retract [G86 only] Spindle restart (CW) after retract G85: feed to Z, feed retract — smooth bore finish. G86: feed to Z, spindle stop (implicit), rapid retract. G89: feed to Z, dwell P, feed retract — like G85 with bottom dwell. Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. CannedCycleResolveSyntax Resolves the canned-cycle Group-09 state for the current block and writes the result to the CannedCycle section. Active cycle (direct G81..G89 or modal repeat): merges Parsing overrides with previous-cycle stored params, applies G91 incremental-to-absolute conversion and missing-axis fallback, writes CannedCycle with Term, ReturnMode, and Params. The resolved cycle sub-section is left in Parsing under the cycle code for downstream cycle syntaxes (DrillingCycleSyntax, etc.) to read. Explicit cancel (G80 flag present on a non-cycle block): consumes the G80 flag and writes CannedCycle = { Term: \"G80\" }, acting as a hard sentinel for Hi.NcParsers.LogicSyntaxs.CannedCycleSyntaxUtil modal lookback. No Group-09 activity: leaves the block untouched. Must be placed after PositioningSyntax and before the individual cycle syntaxes in the chain. CircularMotionSyntax Writes McArc motion for circular commands (ISO G02/G03). Detects motion mode from Flags, reads I/J/K center offsets or R radius from Parsing, computes arc center in program coordinates, and writes a one-shot MotionEvent (form + arc params) plus a modal MotionState (Term). G02/G03 mode is modal (Group 01) — persists across blocks via Term. Arc parameters (I/J/K/R) are per-block and must be present in every arc block. Must be placed before LinearMotionSyntax in the syntax chain. Both share the Group 01 motion slot; whichever writes a MotionEvent first claims it. CoolantSyntax Consumes M07 (mist ON), M08 (flood ON), and M09 (coolant OFF) from Flags and writes the ICoolantDef section with both IsOn (convenience flag) and Mode (abstract mode name: Flood / Mist / Off). Modal — persists via backward lookback. CoordinateOffsetUtil Shared utilities for all coordinate offset syntaxes (ISO, Siemens, Heidenhain). Handles section IO, backward lookback, and ProgramToMcTransform composition. DrillingCycleSyntax G81/G82 drilling cycle (rapid retract). Supports modal repetition. G82 covers G81 — the only difference is an optional dwell (P) at the bottom. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z [G82 only] Dwell P seconds at bottom Rapid from bottom to final (G98 → init Z, G99 → R) Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. FanucPathSmoothingSyntax Consumes Fanuc G05.1 (high-precision contour / AICC II / Nano Smoothing) and records the modal state in the PathSmoothing JSON section using the FanucPathSmoothing schema. Q1 enables, Q0 disables; the optional R{n} precision-level is preserved as Level. The simulation does not alter the tool path — this is a controller-internal interpolation black box; the captured state exists for bidirectional NC-text reconstruction. Modal carry to subsequent blocks is handled by ModalCarrySyntax, which already tracks the PathSmoothing section key and deep-clones it forward. FeedrateSyntax Consumes F (feedrate) from Parsing and G94/G95 mode from Flags. Both are modal — persist across blocks via backward node lookback. Writes resolved state to a IFeedrateDef section. FineBoringSyntax G76 fine boring cycle. Supports modal repetition. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z Oriented spindle stop (OSS) Tool shift by Q in +X direction (clear bore wall) Rapid retract (shifted) to final Z Tool shift back to center Spindle restart (CW) Q specifies the lateral shift distance (mm) to avoid dragging the tool across the finished bore surface during retract. Shift direction defaults to +X (OSS angle 0°). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax before this syntax runs. G43p4RtcpSyntax Handles G43.4 RTCP (Rotary Tool Center Point) activation. Writes the IToolHeightCompensationDef section and the ToolHeightCompensationSource entry in ProgramToMcTransform — a tool-normal · offset_mm translation at the block endpoint ABC. The chain entry is tagged KindDynamic when RTCP is active and ABC changes across the block, and KindStatic otherwise. The RTCP kinematic rotary part (Pn→MC rigid transform) is orthogonal to this syntax and is written by PivotTransformationSyntax on every block, because rotary state remains in effect beyond the RTCP modal (e.g. a non-RTCP G01 after G49 still inherits the last ABC from the program). The \"rotary dynamic\" distinction lives on the chain entry's KindKey alone and is read via HasDynamicEntry(JsonObject) by LinearMotionSyntax to pick ClLinear vs McLinear. G43.4 is used by Fanuc, Mazak, Syntec, and Okuma. Siemens (TRAORI) and Heidenhain (M128) are handled by separate syntaxes. Must be placed after ToolHeightOffsetSyntax (to override the ToolHeightCompensation entry when RTCP is active) and before PivotTransformationSyntax (which runs last in the chain). G53p1RotaryPositionSyntax G53.1 — non-modal, one-shot rotary axis positioning. Positions the rotary axes (A/B/C) to align the physical tool axis with the active tilted work plane defined by G68.2. XYZ position is unchanged; only rotary axes move via rapid traverse. Requires IsoG68p2TiltSyntax (or equivalent) to have written the tilt transform. Uses IMachineKinematics to solve for the target A/B/C via inverse kinematics. Must be placed after IsoG68p2TiltSyntax (needs tilt data) and before ProgramXyzSyntax in the syntax chain. Writes A/B/C into MachineCoordinateState. Motion is handled by LinearMotionSyntax via modal G00/G01. HighSpeedPeckCycleSyntax G73 high-speed peck drilling cycle (chip breaking). Supports modal repetition. Drills in increments of depth Q, partially retracting by PeckRetractionDistance_mm between strokes (instead of fully back to R like PeckDrillingCycleSyntax). Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point For each stroke: feed Q deeper, rapid retract by d If remainder exists: feed to bottom Z, rapid retract by d Rapid to final (G98 → init Z, G99 → R) Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. IncrementalResolveSyntax Resolves G91 incremental axis values to absolute in-place within Parsing and its sub-sections. Reads Term written by PositioningSyntax. WorkingPathList specifies which JSON paths contain axis values that need incremental-to-absolute conversion. Default: [[\"Parsing\"], [\"Parsing\", \"G28\"]]. All matching paths are converted. Canned cycle paths (Parsing.G81, G82, G83, …) are intentionally excluded — their Z/R incremental semantics differ from normal axes (R is relative to init level, Z is relative to R-point). Resolution is handled by ResolveCycleCoordinates(JsonObject, Vec3d, double?, double?, double, double) inside each cycle syntax class, which runs before this syntax. Uses AxisNames to determine which tags are motion axes. Traces backward nodes for last known ProgramXyz to resolve incremental values. After this syntax, all axis values in the working paths are absolute — ProgramXyzSyntax can consume them without incremental logic. IsoCoordinateOffsetSyntax ISO/Fanuc/Mazak/Okuma/Syntec: resolves G54–G59.9 work coordinate offset. Reads G54/G55/.../G59.9 from Flags, looks up offset Vec3d via IIsoCoordinateConfig dependencies (e.g. brand parameter table or IsoCoordinateTable), composes into ProgramToMcTransform. Modal — active coordinate persists via backward lookback. Default coordinate ID is set by StaticInitializer. IsoG68RotationSyntax ISO/Fanuc: resolves G68 (2D coordinate rotation) and G69 (cancel). Computes a rotation Mat4d around the active plane normal and composes it into ProgramToMcTransform. No IMachineKinematics dependency needed — G68 is pure geometric rotation. Managed commands: G68, G69 (idempotent with IsoG68p2TiltSyntax). IsoG68p2TiltSyntax ISO/Fanuc: resolves G68.2 (tilted work plane) and G69 (cancel). Computes a tilt Mat4d from I/J/K euler angles (Fanuc ZXZ convention) and composes it into ProgramToMcTransform. Managed commands: G68.2, G69 (idempotent with IsoG68RotationSyntax). Siemens equivalent: CYCLE800 (separate syntax). Heidenhain equivalent: PLANE SPATIAL (separate syntax). IsoLocalCoordinateOffsetSyntax ISO G52: Local coordinate system offset (additive to G54-series). G52 X10 Y20 Z5 → sets local offset. G52 X0 Y0 Z0 → cancels (resets to zero). M30 (program end) → also cancels. Reads Parsing.G52 (from G52Syntax), writes IsoLocalCoordinateOffset section, and adds an \"IsoLocalCoordinateOffset\" entry to the transformation chain. Modal — persists via backward lookback until changed or cancelled. LinearMotionSyntax Writes McLinear motion for linear commands (ISO G00/G01, Heidenhain L/LN). Detects motion mode from Flags, writes a one-shot MotionEvent section (form + isRapid) plus a modal MotionState section (Term) when MachineCoordinateState exists on the block. McLinearMotionSemantic discriminates between XYZ-only and XYZABC motion by checking whether rotary axis values are present in MachineCoordinateState. Must be placed after McAbcSyntax in the syntax chain. MachineCoordSelectSyntax Handles G53 (machine coordinate selection) — non-modal, one-shot. The axis values (X/Y/Z) in the block are interpreted as machine coordinates, bypassing all work offsets, local coordinates, tool height compensation, and coordinate rotations. If G91 (incremental) is active, G53 is ignored per ISO standard. Must be placed before ProgramXyzSyntax in the syntax chain. When G53 is active, this syntax consumes X/Y/Z from Parsing and writes MachineCoordinateState directly, preventing ProgramXyzSyntax from processing them as program coordinates. McAbcCyclicPathSyntax Resolve modular rotary axes to the shortest cyclic path relative to the previous node. Uses IsModularRotary(string) to determine which axes within MachineCoordinateState need cyclic resolution. Falls back to hardcoded A/B/C if no IMachineAxisConfig is available. Must be placed after ProgramXyzSyntax in NcSyntaxList. Two stages, mirroring McXyzSyntax: Root MachineCoordinateState — anchored at the previous block's modal rotary state. CompoundMotion.ItemsKey[*] — sequential walk through items, anchoring item 0 at the previous block's modal state and item i > 0 at item i-1's post-cycle value (per-axis chain). Items without a rotary MachineCoordinateState are skipped. The items pass enables rotary motion (e.g. G28 ABC intermediate / home stages) to surface as motion IAct segments rather than a single root-MC stamp. McAbcSyntax Writes rotary axis values (A/B/C) into MachineCoordinateState from Parsing and modal lookback. Only active when IMachineAxisConfig declares rotary axes. Works for both 3+2-axis (no IMachineKinematics) and simultaneous 5-axis configurations. This syntax is intentionally ABC-only. When the block is rotary-only (no ProgramXyz, e.g. G00 A30.) the section is created with ABC but without X/Y/Z. McAbcXyzFallbackSyntax — placed after McXyzSyntax — copies X/Y/Z from the previous block's MachineCoordinateState to finish the section. Splitting the XYZ fill out lets this syntax run before McXyzSyntax (and before G43p4RtcpSyntax) without accidentally filling X/Y/Z from prev and thereby short-circuiting DeriveMcXyz(JsonObject, Mat4d). Missing rotary axes are filled from previous MachineCoordinateState lookback, unless the current section already has the value (e.g., from HomeMcInitializer). Values are stored in degrees (matching McAbcCyclicPathSyntax). Must be placed before McXyzSyntax so syntaxes that need the current-block ABC to compute transforms (e.g. G43p4RtcpSyntax) can see it; and before McAbcCyclicPathSyntax and LinearMotionSyntax. McAbcXyzFallbackSyntax Fills missing X/Y/Z on an ABC-only MachineCoordinateState section. Behaviour depends on whether the block is under RTCP with rotary motion, as indicated by HasDynamicEntry(JsonObject): Non-dynamic (no RTCP or RTCP with ABC stable) — the programmed tool tip stays put in MC while rotary axes (if any) are unchanged, so we simply copy X/Y/Z from the previous block's MachineCoordinateState. This matches NC modal XYZ carry-forward for rotary-only blocks such as G00 A30. (non-RTCP pivoting). Dynamic (RTCP active + ABC changing) — the programmed tool tip must stay fixed in program coordinates while MC XYZ shifts to compensate the new rotary state. Looks up the last ProgramXyz and re-derives MC = inheritedProgramXyz × composedTransform, where the composed transform is the block's endpoint chain (now including PivotTransformSource as a full rotation+translation Mat4d, so the chain already encodes the kinematic IK). The carried ProgramXyz is also stamped onto the current block so downstream consumers see a consistent ProgramXyz + MC pair. Pair with McAbcSyntax, which runs early to write ABC but deliberately leaves X/Y/Z empty so McXyzSyntax can still derive MC XYZ from ProgramXyz via the transform chain when the block carries linear motion. If McXyzSyntax has nothing to derive (no ProgramXyz), this syntax completes the MC section as described above. Does nothing when the section already carries all three of X/Y/Z (normal linear-motion blocks), or when there is no section at all (pure parse-only block that introduces no MC). Must be placed after McXyzSyntax and before McAbcCyclicPathSyntax / LinearMotionSyntax. McXyzSyntax Derives MachineCoordinateState from ProgramXyz by applying the composed ProgramToMcTransform. Processes two stages: Root ProgramXyz → root MachineCoordinate CompoundMotion.ItemsKey[*] — derives MachineCoordinate from ProgramXyz for items that have ProgramXyz but no MachineCoordinate Must be placed after syntaxes that write ProgramXyz (e.g., ReferenceReturnSyntax) and before syntaxes that read MachineCoordinate (e.g., LinearMotionSyntax). PeckDrillingCycleSyntax G83 peck drilling cycle. Supports modal repetition. Drills in increments of depth Q, fully retracting to R between strokes. Cycle sequence (per stroke): Rapid to init position (target XY, previous Z) Rapid from init to R-point For each stroke: rapid to clearance above previous depth, feed Q deeper, rapid back to R If remainder exists: feed to bottom Z, rapid to R Rapid from R/bottom to final (G98 → init Z, G99 → R) Retraction distance is read from ICannedCycleConfig (Fanuc #4002 / Syntec Pr4002, or FallbackConfig fallback). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. PivotTransformationSyntax Writes the PivotTransformSource entry into ProgramToMcTransform on every block, capturing the Pn→MC kinematic rigid transform for the block's endpoint rotary state. Mirrors legacy HardNcLine.GetProgramXyz's use of McToPn(DVec3d) — without this entry, the transform chain would miss the rotary rotation on any block whose MachineCoordinate.ABC is non-zero, and McXyzSyntax (and ProgramXyzSyntax's inverse lookback) would silently drift. Scope is not limited to RTCP modal: as long as rotary axes are physically at a non-zero position (e.g. after a non-RTCP G00 B90 plus any subsequent motion), the kinematic chain still contributes a non-identity rigid transform that must appear in the endpoint chain. G43p4RtcpSyntax is orthogonal and only governs the dynamic-rotary KindKey tagging used by LinearMotionSyntax to pick the motion form. Chain position: must run after all Pn-frame writers (IsoG68p2TiltSyntax, ToolHeightOffsetSyntax, G43p4RtcpSyntax, IsoCoordinateOffsetSyntax, brand-specific coord offset syntaxes) so the PivotTransform entry naturally lands as the last chain element. Must run before McXyzSyntax / ProgramXyzSyntax so they see the completed chain. Silently no-ops when IMachineKinematics is absent (3-axis configurations without rotary kinematics). PlaneSelectSyntax Consumes G17/G18/G19 plane selection from Flags and writes IPlaneSelectDef section using conventional axis-pair names (XY/ZX/YZ). Modal — persists via backward lookback. Default is XY (G17). Downstream consumers (CircularMotionSyntax, IsoG68RotationSyntax) call GetPlaneNormalDir(JsonObject) to read the resolved plane. PositioningSyntax Detects G90/G91 positioning mode from Flags (or by modal lookback) and writes a Positioning section (Term, Mode) to the block JSON. Fanuc/ISO: reads G90/G91 from Flags (global modal). Heidenhain: would need a separate implementation reading I-prefix per axis. Siemens: would extend with AC()/IC() per-axis override. Does NOT convert incremental values — that is handled by IncrementalResolveSyntax which can be placed later in the syntax chain, after canned cycle syntaxes have consumed their parameters with cycle-specific G91 semantics. ProgramEndCleanSyntax Clears the per-block Vars.Volatile dictionary on blocks that triggered program end (M02 / M30, identified by the ProgramEnd section written by ProgramEndSyntax). Real Fanuc clears non-retained common variables (#100-#499) on program end + reset; this syntax models that behaviour at the simulator level. The clear happens on the same block that carried M02/M30 — the next block's VolatileVariableReadingSyntax carry then sees an empty dictionary on the predecessor and starts fresh. Pipeline placement: must run after both ProgramEndSyntax (which writes the ProgramEnd section this syntax checks) and VolatileVariableReadingSyntax (so the carry has already happened on this block; this syntax overwrites the result). Retained common variables (#500-#999, owned by RetainedCommonVariableTable) are untouched — they survive program end on real hardware (NV-RAM). Local variables (#1-#33, scope: macro call frame) are also untouched here; their lifecycle belongs to G65/G66/M99 push/pop, not program end. Also clears any active FanucModalMacro on the same edge: a G66 modal that was still active when M02/M30 hit is implicitly cancelled, matching real Fanuc reset behaviour. The section is overwritten with a G67-shaped cancel marker so the carry mechanism in FanucModalMacroSyntax sees the boundary and does not propagate the modal past the program-end edge. ProgramEndSyntax Consumes M02/M30 (program end) from Flags and writes IProgramEndDef section. Downstream syntaxes that need to reset modal state on program end (e.g. IsoLocalCoordinateOffsetSyntax for G52 reset) should read the ProgramEnd section rather than scanning for M30 in Flags directly. Must be placed before syntaxes that depend on the ProgramEnd section. ProgramStopSyntax Consumes M00 (unconditional stop) and M01 (optional stop) from Flags and writes a IProgramStopDef section on the block that carried the flag. Non-modal: the section is written only on the exact block where the stop code appears. Siblings with ProgramEndSyntax (M02/M30) which handles end-of-program, not in-program stops. The parsing layer only records NC intent. Whether M01 actually pauses the run is a runtime/semantic decision gated by the operator's \"Optional Stop\" switch (analogous to IBlockSkipConfig for block skip). ProgramXyzSyntax Resolves ProgramXyz (leaf coordinate) from syntax XYZ tags. Writes ProgramXyz sub-object to SyntaxPiece.JsonObject. Must be placed after BundleSyntax since it uses cross-node lookback for last position. McXyzSyntax (placed after this in the chain) reads ProgramXyz and writes MachineCoordinateState. ProgramXyzUtil Shared utilities for ProgramXyz and MachineCoordinateState lookback and resolution. Used by ProgramXyzSyntax, ReferenceReturnSyntax, and semantic resolvers that need position lookback. Two strategies for \"what's the program coordinate at a block's endpoint?\" — both invert an MC value through an ProgramToMcTransform chain, but they pick the chain from different nodes: By current-state transform (ComputeProgramXyzByCurrentTransform(LazyLinkedListNode, Vec3d)) — modal anchor is MachineCoordinateState. Re-expresses an MC value (typically a predecessor's modal MC) into the current block's program frame using the current block's chain. Suitable for chain-change blocks where the spindle physically stays put while the chain (G54 swap, G68.2 activation, G43.4 toggle, tool-height change, ...) re-anchors the program frame; mirrors legacy HardNcLine.RebuildProgramXyzByMc. By corresponding-state transform (ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode)) — modal anchor is ProgramXyz. Recovers the program coordinate that nodeCarryingMc was originally commanded at, by inverting that same node's own transform on its own MC. Suitable for RTCP rotary-dynamic inheritance, where the modal invariant is \"tool tip in workpiece frame stays put while rotary axes turn\" — the recovered Vec3d carries forward as the next rotary block's modal ProgramXyz unchanged, regardless of how its PivotTransform differs. Both strategies yield the same Vec3d when prev and current share the same chain modal state; they only diverge across chain boundaries (RTCP toggle, coord-system swap, tilt activation) and at rotary motion (PivotTransform difference). Pick the wrong one and the result lands in a stale frame: Non-RTCP using \"corresponding\" — leaves the pre-chain-change values, so a block emitted right after G43.4 H03 would inherit ProgramXyz still in the G49 frame and the next motion's MC.Z drifts by the introduced tool-height offset. (This was the 2026-04-25 SoftNc / HardNc divergence on DemoPmcAirPlane/NC/02-ED6L20.NC.) RTCP using \"current\" — double-counts the rotary PivotTransform difference, so the inherited workpiece anchor rotates by the C delta on every rotary block. Direct callers of the two strategy helpers are rare — typically you call the dispatcher ResolveBlockProgramXyz(LazyLinkedListNode, Vec3d) (block's own MC vs predecessor lookback, picks strategy from HasDynamicEntry(JsonObject)) or GetLastProgramXyz(LazyLinkedListNode) (pure predecessor lookback). ReferenceReturnSyntax RotaryAxisUtil Shared utilities for rotary axis (A/B/C) resolution. Used by G53p1RotaryPositionSyntax, McAbcSyntax, IsoG68p2TiltSyntax, and other syntaxes that read or write rotary axis values. SpindleSpeedSyntax Consumes S (spindle speed) and M03/M04/M05 (spindle direction) from Parsing. Both are modal — persist across blocks via backward node lookback. Writes resolved state to a ISpindleSpeedDef section. Direction is converted from ISO M-codes to the conventional SpindleDirection enum at this layer. TappingCycleSyntax G84 (right-hand) / G74 (left-hand) tapping cycles. Supports modal repetition. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z Spindle reverse at bottom Feed retract to final Z (G98 → init Z, G99 → R) Spindle restore to forward direction G84: forward = CW (M03), reverse = CCW (M04). G74: forward = CCW (M04), reverse = CW (M03). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. TiltTransformUtil Shared utilities for all tilt transform syntaxes (ISO, Siemens, Heidenhain). Handles section IO, backward lookback, and ProgramToMcTransform composition. ToolChangeSyntax Consumes T (tool number) and M06 (tool change) from Parsing. T is modal — persists across blocks. M06 triggers the change. Writes resolved state to a ToolChange section: { “ToolId”: 1, “IsChange”: true, “Term”: “M06” }. TermKey records the trigger command and is only written when IsChangeKey is true (i.e. the block actually carried the tool-change M code); modal-only blocks omit it. ToolHeightOffsetSyntax Resolves ISO tool height offset (G43/G44/G49) to the effective offset value (mm) and composes the offset as a translation into the accumulated ProgramToMcTransform matrix. RTCP modes (G43.4, TRAORI, M128) are handled by separate brand-specific syntaxes (e.g., G43p4RtcpSyntax). UnitModeSyntax Detects the unit-system code (ISO Group 06: G20 inch / G21 metric) from Flags and writes a Unit section (Term, System). Modal — absence of an explicit flag inherits the previous block's unit, defaulting to Metric at program start. The HiNC pipeline works exclusively in millimetres. When G20 is detected this syntax emits an Unit--InchNotSupported Unsupported Error so upstream callers are forced to pre-convert the NC program to metric. G21 is accepted as a no-op confirmation of the default. Enums BareG28Behavior Writes ICompoundMotionDef section for G28 reference point return. Reads intermediate XYZ from Parsing.G28 (written by G28Syntax) and converts to machine coordinates via ResolveProgramXyz(JsonNode, LazyLinkedListNode, ISentenceCarrier, NcDiagnosticProgress). Must be placed after LinearMotionSyntax in the syntax chain. Removes the IMotionEventDef section written by LinearMotionSyntax (G28 handles its own motion). Overwrites root MachineCoordinateState and ProgramXyz with reference position for subsequent block lookback." }, "api/Hi.NcParsers.NcDiagnostic.html": { "href": "api/Hi.NcParsers.NcDiagnostic.html", "title": "Class NcDiagnostic | HiAPI-C# 2025", - "summary": "Class NcDiagnostic Namespace Hi.NcParsers Assembly HiMech.dll A structured diagnostic from the SoftNcRunner pipeline, designed for IProgress consumption. Id is composed as {Primary}-{Secondary}--{Abbrev} (e.g., Cycle-Peck--BadPeckQ, Syntax-Build--Exception). For irregular cases that don't fit the pattern, use a custom string. public class NcDiagnostic Inheritance object NcDiagnostic Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors NcDiagnostic(NcDiagnosticSeverity, NcDiagnosticCategory, string, string, object, Sentence) Creates a fully-populated NcDiagnostic. public NcDiagnostic(NcDiagnosticSeverity severity, NcDiagnosticCategory category, string id, string text, object detail = null, Sentence sentence = null) Parameters severity NcDiagnosticSeverity Importance level — see NcDiagnosticSeverity. category NcDiagnosticCategory Diagnostic category — see NcDiagnosticCategory. id string Structured diagnostic ID (see Id). text string End-user friendly message text. detail object Optional detail data or exception. Null if not applicable. sentence Sentence The NC source block that triggered this diagnostic; null for pipeline-level messages. Properties Category Diagnostic category. public NcDiagnosticCategory Category { get; } Property Value NcDiagnosticCategory Detail Optional detail data or exception. Null if not applicable. public object Detail { get; } Property Value object Id Structured diagnostic ID for filtering and suppression. Normally {Primary}-{Secondary}–{Serial:000}. public string Id { get; } Property Value string Sentence The NC source block that triggered this diagnostic. Null for pipeline-level messages (e.g., lifecycle start/done). public Sentence Sentence { get; } Property Value Sentence Severity Importance level. public NcDiagnosticSeverity Severity { get; } Property Value NcDiagnosticSeverity Text End-user friendly message text. public string Text { get; } Property Value string Methods ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." + "summary": "Class NcDiagnostic Namespace Hi.NcParsers Assembly HiMech.dll A structured diagnostic from the SoftNcRunner pipeline, designed for IProgress consumption. Id is composed as {Primary}-{Secondary}--{Abbrev} (e.g., Cycle-Peck--BadPeckQ, Syntax-Build--Exception). For irregular cases that don't fit the pattern, use a custom string. public class NcDiagnostic Inheritance object NcDiagnostic Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors NcDiagnostic(NcDiagnosticSeverity, NcDiagnosticCategory, string, string, object, ISentenceCarrier) Creates a fully-populated NcDiagnostic. public NcDiagnostic(NcDiagnosticSeverity severity, NcDiagnosticCategory category, string id, string text, object detail = null, ISentenceCarrier sentenceCarrier = null) Parameters severity NcDiagnosticSeverity Importance level — see NcDiagnosticSeverity. category NcDiagnosticCategory Diagnostic category — see NcDiagnosticCategory. id string Structured diagnostic ID (see Id). text string End-user friendly message text. detail object Optional detail data or exception. Null if not applicable. sentenceCarrier ISentenceCarrier Carrier for the NC source block that triggered this diagnostic; null for pipeline-level messages. Properties Category Diagnostic category. public NcDiagnosticCategory Category { get; } Property Value NcDiagnosticCategory Detail Optional detail data or exception. Null if not applicable. public object Detail { get; } Property Value object Id Structured diagnostic ID for filtering and suppression. Normally {Primary}-{Secondary}–{Serial:000}. public string Id { get; } Property Value string SentenceCarrier Carrier of the NC source block that triggered this diagnostic, exposing both the source Sentence (via GetSentence()) and the execution-order SentenceIndex. Null for pipeline-level messages (e.g., lifecycle start/done) that have no source block. public ISentenceCarrier SentenceCarrier { get; } Property Value ISentenceCarrier Severity Importance level. public NcDiagnosticSeverity Severity { get; } Property Value NcDiagnosticSeverity Text End-user friendly message text. public string Text { get; } Property Value string Methods ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." }, "api/Hi.NcParsers.NcDiagnosticCategory.html": { "href": "api/Hi.NcParsers.NcDiagnosticCategory.html", @@ -4497,7 +4622,7 @@ "api/Hi.NcParsers.NcDiagnosticProgress.html": { "href": "api/Hi.NcParsers.NcDiagnosticProgress.html", "title": "Class NcDiagnosticProgress | HiAPI-C# 2025", - "summary": "Class NcDiagnosticProgress Namespace Hi.NcParsers Assembly HiMech.dll Helper that emits NcDiagnostic records via an IProgress sink. Provides one method per (NcDiagnosticCategory, NcDiagnosticSeverity) pair, each with an optional Sentence overload locating the issue in the NC source. public class NcDiagnosticProgress : IProgress Inheritance object NcDiagnosticProgress Implements IProgress Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors NcDiagnosticProgress(IProgress) Creates a NcDiagnosticProgress that forwards every reported NcDiagnostic to progress. public NcDiagnosticProgress(IProgress progress) Parameters progress IProgress Sink that receives each diagnostic as object. Methods ConfigurationError(Sentence, string, string, object) Emits Configuration + Error located at sentence. public void ConfigurationError(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object ConfigurationError(string, string, object) Emits Configuration + Error (dependency/config missing, cannot proceed). public void ConfigurationError(string id, string text, object detail = null) Parameters id string text string detail object ConfigurationMessage(Sentence, string, string) Emits Configuration + Message located at sentence. public void ConfigurationMessage(Sentence sentence, string id, string text) Parameters sentence Sentence id string text string ConfigurationMessage(string, string) Emits Configuration + Message (dependency/config applied, informational event). public void ConfigurationMessage(string id, string text) Parameters id string text string ConfigurationWarning(Sentence, string, string, object) Emits Configuration + Warning located at sentence. public void ConfigurationWarning(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object ConfigurationWarning(string, string, object) Emits Configuration + Warning (dependency/config missing, using fallback). public void ConfigurationWarning(string id, string text, object detail = null) Parameters id string text string detail object Report(NcDiagnostic) Reports a progress update. public void Report(NcDiagnostic value) Parameters value NcDiagnostic The value of the updated progress. SystemError(Sentence, string, string, object) Emits System + Error located at sentence. public void SystemError(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object SystemError(string, string, object) Emits System + Error (pipeline exception or unconsidered case). public void SystemError(string id, string text, object detail = null) Parameters id string text string detail object SystemMessage(Sentence, string, string) Emits System + Message located at sentence. public void SystemMessage(Sentence sentence, string id, string text) Parameters sentence Sentence id string text string SystemMessage(string, string) Emits System + Message (pipeline lifecycle / informational). public void SystemMessage(string id, string text) Parameters id string text string UnsupportedError(Sentence, string, string, object) Emits Unsupported + Error located at sentence. public void UnsupportedError(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object UnsupportedError(string, string, object) Emits Unsupported + Error (recognized but unimplemented, likely matters). public void UnsupportedError(string id, string text, object detail = null) Parameters id string text string detail object UnsupportedMessage(Sentence, string, string, object) Emits Unsupported + Message located at sentence. public void UnsupportedMessage(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object UnsupportedMessage(string, string, object) Emits Unsupported + Message (recognized, intentionally not simulated, considered safe / no-op offline). public void UnsupportedMessage(string id, string text, object detail = null) Parameters id string text string detail object UnsupportedWarning(Sentence, string, string, object) Emits Unsupported + Warning located at sentence. public void UnsupportedWarning(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object UnsupportedWarning(string, string, object) Emits Unsupported + Warning (recognized but unimplemented, likely harmless). public void UnsupportedWarning(string id, string text, object detail = null) Parameters id string text string detail object ValidationError(Sentence, string, string, object) Emits Validation + Error located at sentence. public void ValidationError(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object ValidationError(string, string, object) Emits Validation + Error (manufacturing/physics is unfeasible). public void ValidationError(string id, string text, object detail = null) Parameters id string text string detail object ValidationWarning(Sentence, string, string, object) Emits Validation + Warning located at sentence. public void ValidationWarning(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object ValidationWarning(string, string, object) Emits Validation + Warning (manufacturing/physics may be unfeasible). public void ValidationWarning(string id, string text, object detail = null) Parameters id string text string detail object" + "summary": "Class NcDiagnosticProgress Namespace Hi.NcParsers Assembly HiMech.dll Helper that emits NcDiagnostic records via an IProgress sink. Provides one method per (NcDiagnosticCategory, NcDiagnosticSeverity) pair, each with an optional Sentence overload locating the issue in the NC source. public class NcDiagnosticProgress : IProgress Inheritance object NcDiagnosticProgress Implements IProgress Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors NcDiagnosticProgress(IProgress) Creates a NcDiagnosticProgress that forwards every reported NcDiagnostic to progress. public NcDiagnosticProgress(IProgress progress) Parameters progress IProgress Sink that receives each diagnostic as object. Methods ConfigurationError(ISentenceCarrier, string, string, object) Emits Configuration + Error located at sentenceCarrier. public void ConfigurationError(ISentenceCarrier sentenceCarrier, string id, string text, object detail = null) Parameters sentenceCarrier ISentenceCarrier id string text string detail object ConfigurationError(string, string, object) Emits Configuration + Error (dependency/config missing, cannot proceed). public void ConfigurationError(string id, string text, object detail = null) Parameters id string text string detail object ConfigurationMessage(ISentenceCarrier, string, string) Emits Configuration + Message located at sentenceCarrier. public void ConfigurationMessage(ISentenceCarrier sentenceCarrier, string id, string text) Parameters sentenceCarrier ISentenceCarrier id string text string ConfigurationMessage(string, string) Emits Configuration + Message (dependency/config applied, informational event). public void ConfigurationMessage(string id, string text) Parameters id string text string ConfigurationWarning(ISentenceCarrier, string, string, object) Emits Configuration + Warning located at sentenceCarrier. public void ConfigurationWarning(ISentenceCarrier sentenceCarrier, string id, string text, object detail = null) Parameters sentenceCarrier ISentenceCarrier id string text string detail object ConfigurationWarning(string, string, object) Emits Configuration + Warning (dependency/config missing, using fallback). public void ConfigurationWarning(string id, string text, object detail = null) Parameters id string text string detail object Report(NcDiagnostic) Reports a progress update. public void Report(NcDiagnostic value) Parameters value NcDiagnostic The value of the updated progress. SystemError(ISentenceCarrier, string, string, object) Emits System + Error located at sentenceCarrier. public void SystemError(ISentenceCarrier sentenceCarrier, string id, string text, object detail = null) Parameters sentenceCarrier ISentenceCarrier id string text string detail object SystemError(string, string, object) Emits System + Error (pipeline exception or unconsidered case). public void SystemError(string id, string text, object detail = null) Parameters id string text string detail object SystemMessage(ISentenceCarrier, string, string) Emits System + Message located at sentenceCarrier. public void SystemMessage(ISentenceCarrier sentenceCarrier, string id, string text) Parameters sentenceCarrier ISentenceCarrier id string text string SystemMessage(string, string) Emits System + Message (pipeline lifecycle / informational). public void SystemMessage(string id, string text) Parameters id string text string UnsupportedError(ISentenceCarrier, string, string, object) Emits Unsupported + Error located at sentenceCarrier. public void UnsupportedError(ISentenceCarrier sentenceCarrier, string id, string text, object detail = null) Parameters sentenceCarrier ISentenceCarrier id string text string detail object UnsupportedError(string, string, object) Emits Unsupported + Error (recognized but unimplemented, likely matters). public void UnsupportedError(string id, string text, object detail = null) Parameters id string text string detail object UnsupportedMessage(ISentenceCarrier, string, string, object) Emits Unsupported + Message located at sentenceCarrier. public void UnsupportedMessage(ISentenceCarrier sentenceCarrier, string id, string text, object detail = null) Parameters sentenceCarrier ISentenceCarrier id string text string detail object UnsupportedMessage(string, string, object) Emits Unsupported + Message (recognized, intentionally not simulated, considered safe / no-op offline). public void UnsupportedMessage(string id, string text, object detail = null) Parameters id string text string detail object UnsupportedWarning(ISentenceCarrier, string, string, object) Emits Unsupported + Warning located at sentenceCarrier. public void UnsupportedWarning(ISentenceCarrier sentenceCarrier, string id, string text, object detail = null) Parameters sentenceCarrier ISentenceCarrier id string text string detail object UnsupportedWarning(string, string, object) Emits Unsupported + Warning (recognized but unimplemented, likely harmless). public void UnsupportedWarning(string id, string text, object detail = null) Parameters id string text string detail object ValidationError(ISentenceCarrier, string, string, object) Emits Validation + Error located at sentenceCarrier. public void ValidationError(ISentenceCarrier sentenceCarrier, string id, string text, object detail = null) Parameters sentenceCarrier ISentenceCarrier id string text string detail object ValidationError(string, string, object) Emits Validation + Error (manufacturing/physics is unfeasible). public void ValidationError(string id, string text, object detail = null) Parameters id string text string detail object ValidationWarning(ISentenceCarrier, string, string, object) Emits Validation + Warning located at sentenceCarrier. public void ValidationWarning(ISentenceCarrier sentenceCarrier, string id, string text, object detail = null) Parameters sentenceCarrier ISentenceCarrier id string text string detail object ValidationWarning(string, string, object) Emits Validation + Warning (manufacturing/physics may be unfeasible). public void ValidationWarning(string id, string text, object detail = null) Parameters id string text string detail object" }, "api/Hi.NcParsers.NcDiagnosticSeverity.html": { "href": "api/Hi.NcParsers.NcDiagnosticSeverity.html", @@ -4507,17 +4632,17 @@ "api/Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html", "title": "Class BlockSkipSyntax | HiAPI-C# 2025", - "summary": "Class BlockSkipSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Parses the ISO 6983 / Fanuc Block Delete (a.k.a. Block Skip) prefix / or /N (N = 1..9) at the head of an NC block. Behaviour: No leading / → no-op, no BlockSkip section is written. / with IBlockSkipConfig layer OFF (or the dependency absent) → prefix is consumed, BlockSkip Symbol/Layer recorded for audit, Body stays null; the rest of the block stays in UnparsedText and parses normally. / with layer ON → the remaining block text is moved from UnparsedText into Body and UnparsedText is cleared. Downstream parsing syntaxes see no NC text so they emit nothing; semantics therefore produce no act. Must run after comment / CsScript syntaxes so that comments (and CsScript embedded in comments) continue to take effect regardless of the skip switch. public class BlockSkipSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object BlockSkipSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors BlockSkipSyntax() Initializes a new instance with default settings. public BlockSkipSyntax() BlockSkipSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public BlockSkipSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class BlockSkipSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Parses the ISO 6983 / Fanuc Block Delete (a.k.a. Block Skip) prefix / or /N (N = 1..9) at the head of an NC block. Behaviour: No leading / → no-op, no BlockSkip section is written. / with IBlockSkipConfig layer OFF (or the dependency absent) → prefix is consumed, BlockSkip Symbol/Layer recorded for audit, Body stays null; the rest of the block stays in UnparsedText and parses normally. / with layer ON → the remaining block text is moved from UnparsedText into Body and UnparsedText is cleared. Downstream parsing syntaxes see no NC text so they emit nothing; semantics therefore produce no act. Must run after comment / CsScript syntaxes so that comments (and CsScript embedded in comments) continue to take effect regardless of the skip switch. public class BlockSkipSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object BlockSkipSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #BeforeBuild.UnparsedText: /X100 Y200 #AfterBuild: { \"UnparsedText\": \"X100 Y200\", \"BlockSkip\": { \"Symbol\": \"/\", \"Layer\": 1 } } #BeforeBuild.UnparsedText: /3 G01 X0 #AfterBuild: { \"UnparsedText\": \"G01 X0\", \"BlockSkip\": { \"Symbol\": \"/\", \"Layer\": 3 } } Constructors BlockSkipSyntax() Initializes a new instance with default settings. public BlockSkipSyntax() BlockSkipSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public BlockSkipSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html", "title": "Class QuoteCommentSyntax | HiAPI-C# 2025", - "summary": "Class QuoteCommentSyntax Namespace Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs Assembly HiMech.dll Parses parenthesized comments such as (comment text) from the remaining unparsed text and emits a Comment section with the () symbol. public class QuoteCommentSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object QuoteCommentSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors QuoteCommentSyntax() Initializes a new instance with default settings. public QuoteCommentSyntax() QuoteCommentSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public QuoteCommentSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class QuoteCommentSyntax Namespace Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs Assembly HiMech.dll Parses parenthesized comments such as (comment text) from the remaining unparsed text and emits a Comment section with the () symbol. public class QuoteCommentSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object QuoteCommentSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #BeforeBuild.UnparsedText: (only a comment) #AfterBuild: { \"Comment\": { \"Symbol\": \"()\", \"Text\": \"only a comment\" } } #BeforeBuild.UnparsedText: G01 X100 (mid-line comment) #AfterBuild: { \"UnparsedText\": \"G01 X100\", \"Comment\": { \"Symbol\": \"()\", \"Text\": \"mid-line comment\" } } Constructors QuoteCommentSyntax() Initializes a new instance with default settings. public QuoteCommentSyntax() QuoteCommentSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public QuoteCommentSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html", "title": "Class TailCommentSyntax | HiAPI-C# 2025", - "summary": "Class TailCommentSyntax Namespace Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs Assembly HiMech.dll In-situ syntax that strips a trailing comment from the NC line: text from a configured TailSymbol to end-of-line is moved into Comment on the block JSON. public class TailCommentSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TailCommentSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors TailCommentSyntax(string) Creates syntax with the given tail marker; used from code or tests without XML. public TailCommentSyntax(string tailSymbol) Parameters tailSymbol string Marker that starts the tail comment segment. TailCommentSyntax(XElement) Loads TailSymbol from persisted XML. public TailCommentSyntax(XElement src) Parameters src XElement Serialized syntax element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string TailSymbol First character(s) of the tail comment marker (e.g. ; or //). public string TailSymbol { get; set; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class TailCommentSyntax Namespace Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs Assembly HiMech.dll In-situ syntax that strips a trailing comment from the NC line: text from a configured TailSymbol to end-of-line is moved into Comment on the block JSON. public class TailCommentSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TailCommentSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #BeforeBuild.UnparsedText: ;header comment (with TailSymbol=\";\") #AfterBuild: { \"Comment\": { \"Symbol\": \";\", \"Text\": \"header comment\" } } #BeforeBuild.UnparsedText: G01 X100 ;mid comment (with TailSymbol=\";\") #AfterBuild: { \"UnparsedText\": \"G01 X100\", \"Comment\": { \"Symbol\": \";\", \"Text\": \"mid comment\" } } Constructors TailCommentSyntax(string) Creates syntax with the given tail marker; used from code or tests without XML. public TailCommentSyntax(string tailSymbol) Parameters tailSymbol string Marker that starts the tail comment segment. TailCommentSyntax(XElement) Loads TailSymbol from persisted XML. public TailCommentSyntax(XElement src) Parameters src XElement Serialized syntax element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string TailSymbol First character(s) of the tail comment marker (e.g. ; or //). public string TailSymbol { get; set; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html", @@ -4527,17 +4652,32 @@ "api/Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html", "title": "Class CsScriptSyntax | HiAPI-C# 2025", - "summary": "Class CsScriptSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Extracts C# script markers from the oral content of a comment. PreMarker marks a script that runs before the NC block; PostMarker marks a script that runs after. The symbols are configurable and serialized to XML. public class CsScriptSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object CsScriptSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CsScriptSyntax() Creates syntax with DefaultPreMarker and DefaultPostMarker. public CsScriptSyntax() CsScriptSyntax(XElement) Loads pre/post script markers from persisted XML. public CsScriptSyntax(XElement src) Parameters src XElement Root element named XName. Fields DefaultPostMarker Default end-of-block script delimiter when none is configured in XML. public const string DefaultPostMarker = \"@@^\" Field Value string DefaultPreMarker Default begin-of-block script delimiter when none is configured in XML. public const string DefaultPreMarker = \"@@\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string PostMarker Marker prefix for end-of-block script (runs after the NC block). public string PostMarker { get; set; } Property Value string PreMarker Marker prefix for begin-of-block script (runs before the NC block). public string PreMarker { get; set; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class CsScriptSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Extracts C# script markers from the oral content of a comment. PreMarker marks a script that runs before the NC block; PostMarker marks a script that runs after. The symbols are configurable and serialized to XML. public class CsScriptSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object CsScriptSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CsScriptSyntax() Creates syntax with DefaultPreMarker and DefaultPostMarker. public CsScriptSyntax() CsScriptSyntax(XElement) Loads pre/post script markers from persisted XML. public CsScriptSyntax(XElement src) Parameters src XElement Root element named XName. Fields DefaultPostMarker Default end-of-block script delimiter when none is configured in XML. public const string DefaultPostMarker = \"@@^\" Field Value string DefaultPreMarker Default begin-of-block script delimiter when none is configured in XML. public const string DefaultPreMarker = \"@@\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string PostMarker Marker prefix for end-of-block script (runs after the NC block). public string PostMarker { get; set; } Property Value string PreMarker Marker prefix for begin-of-block script (runs before the NC block). public string PreMarker { get; set; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, - "api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html": { - "href": "api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html", + "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html": { + "href": "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html", + "title": "Class FanucGotoParsingSyntax | HiAPI-C# 2025", + "summary": "Class FanucGotoParsingSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Fanuc Assembly HiMech.dll Parses Fanuc Custom Macro B GOTO phrases out of the remaining UnparsedText into a Parsing.FanucGoto sub-object. Two forms are recognised: GOTO — unconditional jump. IF [] GOTO — conditional jump. IF [...] GOTO is matched as a single phrase, not as an IF syntax composed with a GOTO syntax — Fanuc only permits the two fixed forms (the other being IF [...] THEN , out of scope here), so a phrase-level parser is more faithful and avoids parsing-ambiguity rabbit holes. is captured as a raw token (literal like \"100\", variable like \"#1\", or bracketed expression like \"#[#2+5]\"). VariableEvaluatorSyntax substitutes the resolved literal back into the same field downstream; FanucGotoSyntax then parses the final string as an int. Storing as a string at parsing time mirrors how axis tags and canned-cycle params accept #N references and the evaluator rewrites them in place. Pipeline placement: after HeadIndexSyntax (so the leading N{seq} on a block like N50 GOTO 100 has already been consumed) and after QuoteCommentSyntax (so a parenthesised (GOTO 100) inside a comment never matches). The phrase consumes the entire remaining text on the block — Fanuc allows only the GOTO / IF-GOTO phrase after any preceding head index, no other instructions on the same block. public class FanucGotoParsingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucGotoParsingSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #BeforeBuild.UnparsedText: GOTO 100 #AfterBuild: { \"Parsing\": { \"FanucGoto\": { \"Term\": \"GOTO\", \"N\": \"100\" } } } #BeforeBuild.UnparsedText: GOTO #1 #AfterBuild: { \"Parsing\": { \"FanucGoto\": { \"Term\": \"GOTO\", \"N\": \"#1\" } } } #BeforeBuild.UnparsedText: IF [#1 GT 0] GOTO 100 #AfterBuild: { \"Parsing\": { \"FanucGoto\": { \"Term\": \"IF...GOTO\", \"N\": \"100\", \"Condition\": \"#1 GT 0\" } } } Constructors FanucGotoParsingSyntax() Parameterless instance for bundle composition (no XML state). public FanucGotoParsingSyntax() FanucGotoParsingSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public FanucGotoParsingSyntax(XElement src) Parameters src XElement Root element named XName. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + }, + "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html": { + "href": "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html", + "title": "Class FanucIfThenParsingSyntax | HiAPI-C# 2025", + "summary": "Class FanucIfThenParsingSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Fanuc Assembly HiMech.dll Parses the Fanuc Custom Macro B IF [] THEN single-block conditional phrase out of UnparsedText into a Parsing.FanucIfThen sub-object. Sibling to FanucGotoParsingSyntax — Fanuc spec only permits two IF-led control phrases (IF [...] GOTO handled there, IF [...] THEN handled here) so each form is matched phrase-level rather than composed from a generic IF combinator. Body shape. The body after THEN is conceptually a single statement that affects the current block only — no jump, no label scan. Almost always a Custom Macro B assignment (#nnn = ); multiple assignments in the same body (#100 = 5. #101 = #100 + 1) are also accepted. The parsing syntax pre-extracts these via GrabTagAssignment(ref string, IEnumerable, string, IEnumerable) into Parsing.FanucIfThen.PendingAssignments as {tag: rhs-string} entries — that shape lets VariableEvaluatorSyntax's pass-2 tree walk substitute each RHS to a numeric in place, and lets FanucIfThenSyntax lift the resolved entries into Parsing.Assignments only when the gate condition fires (so unfired bodies leave no trace in the readers). Pipeline placement. This syntax must run before FanucGotoParsingSyntax — the bare IF-GOTO regex over there (^IF[..]GOTO n$) is anchored, but consuming IF-THEN here first keeps the two phrases textually disjoint and avoids any future regression if either regex is loosened. Also placed before TagAssignmentSyntax so a bare IF [...] THEN #100 = 5. is not first half-eaten as a plain assignment. Raw BodyText is retained verbatim on the parsing section regardless of whether the body parsed as assignments — it carries the round-trip view and lets the evaluation syntax warn (FanucIfThen--UnsupportedBody) if no PendingAssignments were produced on a truthy condition. public class FanucIfThenParsingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucIfThenParsingSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #Input: IF [#1 GT 0] THEN #100 = #500 + 1 #Output: { \"Parsing\": { \"FanucIfThen\": { \"Condition\": \"#1 GT 0\", \"BodyText\": \"#100 = #500 + 1\", \"PendingAssignments\": { \"#100\": \"#500 + 1\" } } } } Constructors FanucIfThenParsingSyntax() Parameterless instance for bundle composition (no XML state). public FanucIfThenParsingSyntax() FanucIfThenParsingSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public FanucIfThenParsingSyntax(XElement src) Parameters src XElement Root element named XName. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + }, + "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html": { + "href": "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html", "title": "Class FanucProgramNumberSyntax | HiAPI-C# 2025", - "summary": "Class FanucProgramNumberSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Detects a Fanuc-family program identifier header — O1234 or — that follows a TapeBoundary line, and records it under FanucProgramNumber on the block JSON. The wrapping form (bare vs angle-bracketed) is preserved in Wrapper so the block can be emitted back to its original notation. public class FanucProgramNumberSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucProgramNumberSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FanucProgramNumberSyntax() Parameterless instance for bundle composition (no XML state). public FanucProgramNumberSyntax() FanucProgramNumberSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public FanucProgramNumberSyntax(XElement src) Parameters src XElement Root element named XName. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class FanucProgramNumberSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Fanuc Assembly HiMech.dll Detects a Fanuc-family program identifier header — O1234 or — that follows a TapeBoundary line, and records it under FanucProgramNumber on the block JSON. The wrapping form (bare vs angle-bracketed) is preserved in Wrapper so the block can be emitted back to its original notation. public class FanucProgramNumberSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucProgramNumberSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Bare O1234 on the first block of the stream (no #Previous:) — start-of-stream is itself a tape boundary per IsPreviousNodeTapeBoundary(LazyLinkedListNode), so the syntax fires; the consumed text leaves nothing behind: #BeforeBuild.UnparsedText: O1234 #AfterBuild: { \"FanucProgramNumber\": { \"Number\": \"1234\", \"Wrapper\": \"None\" } } Angle-bracketed after an explicit TapeBoundary block (% on the prior line) — Wrapper records the surface form: #Previous: { \"TapeBoundary\": { \"Text\": \"\" } } #BeforeBuild.UnparsedText: #AfterBuild: { \"FanucProgramNumber\": { \"Number\": \"5678\", \"Wrapper\": \"Angle\" } } O1234 followed by trailing text (e.g. an inline comment) — only the program-number header is consumed; the rest stays on UnparsedText for downstream syntaxes to handle: #Previous: { \"TapeBoundary\": { \"Text\": \"\" } } #BeforeBuild.UnparsedText: O1234 (PART-A) #AfterBuild: { \"UnparsedText\": \"(PART-A)\", \"FanucProgramNumber\": { \"Number\": \"1234\", \"Wrapper\": \"None\" } } Previous block is not a tape boundary (e.g. ordinary FanucProgramNumber already in the stream) — the guard rejects the block, leaving UnparsedText intact: #Previous: { \"FanucProgramNumber\": { \"Number\": \"1000\", \"Wrapper\": \"None\" } } #BeforeBuild.UnparsedText: O9999 #AfterBuild: { \"UnparsedText\": \"O9999\" } Constructors FanucProgramNumberSyntax() Parameterless instance for bundle composition (no XML state). public FanucProgramNumberSyntax() FanucProgramNumberSyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public FanucProgramNumberSyntax(XElement src) Parameters src XElement Root element named XName. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + }, + "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.html": { + "href": "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.html", + "title": "Namespace Hi.NcParsers.ParsingSyntaxs.Fanuc | HiAPI-C# 2025", + "summary": "Namespace Hi.NcParsers.ParsingSyntaxs.Fanuc Classes FanucGotoParsingSyntax Parses Fanuc Custom Macro B GOTO phrases out of the remaining UnparsedText into a Parsing.FanucGoto sub-object. Two forms are recognised: GOTO — unconditional jump. IF [] GOTO — conditional jump. IF [...] GOTO is matched as a single phrase, not as an IF syntax composed with a GOTO syntax — Fanuc only permits the two fixed forms (the other being IF [...] THEN , out of scope here), so a phrase-level parser is more faithful and avoids parsing-ambiguity rabbit holes. is captured as a raw token (literal like \"100\", variable like \"#1\", or bracketed expression like \"#[#2+5]\"). VariableEvaluatorSyntax substitutes the resolved literal back into the same field downstream; FanucGotoSyntax then parses the final string as an int. Storing as a string at parsing time mirrors how axis tags and canned-cycle params accept #N references and the evaluator rewrites them in place. Pipeline placement: after HeadIndexSyntax (so the leading N{seq} on a block like N50 GOTO 100 has already been consumed) and after QuoteCommentSyntax (so a parenthesised (GOTO 100) inside a comment never matches). The phrase consumes the entire remaining text on the block — Fanuc allows only the GOTO / IF-GOTO phrase after any preceding head index, no other instructions on the same block. FanucIfThenParsingSyntax Parses the Fanuc Custom Macro B IF [] THEN single-block conditional phrase out of UnparsedText into a Parsing.FanucIfThen sub-object. Sibling to FanucGotoParsingSyntax — Fanuc spec only permits two IF-led control phrases (IF [...] GOTO handled there, IF [...] THEN handled here) so each form is matched phrase-level rather than composed from a generic IF combinator. Body shape. The body after THEN is conceptually a single statement that affects the current block only — no jump, no label scan. Almost always a Custom Macro B assignment (#nnn = ); multiple assignments in the same body (#100 = 5. #101 = #100 + 1) are also accepted. The parsing syntax pre-extracts these via GrabTagAssignment(ref string, IEnumerable, string, IEnumerable) into Parsing.FanucIfThen.PendingAssignments as {tag: rhs-string} entries — that shape lets VariableEvaluatorSyntax's pass-2 tree walk substitute each RHS to a numeric in place, and lets FanucIfThenSyntax lift the resolved entries into Parsing.Assignments only when the gate condition fires (so unfired bodies leave no trace in the readers). Pipeline placement. This syntax must run before FanucGotoParsingSyntax — the bare IF-GOTO regex over there (^IF[..]GOTO n$) is anchored, but consuming IF-THEN here first keeps the two phrases textually disjoint and avoids any future regression if either regex is loosened. Also placed before TagAssignmentSyntax so a bare IF [...] THEN #100 = 5. is not first half-eaten as a plain assignment. Raw BodyText is retained verbatim on the parsing section regardless of whether the body parsed as assignments — it carries the round-trip view and lets the evaluation syntax warn (FanucIfThen--UnsupportedBody) if no PendingAssignments were produced on a truthy condition. FanucProgramNumberSyntax Detects a Fanuc-family program identifier header — O1234 or — that follows a TapeBoundary line, and records it under FanucProgramNumber on the block JSON. The wrapping form (bare vs angle-bracketed) is preserved in Wrapper so the block can be emitted back to its original notation." }, "api/Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html", "title": "Class FlagSyntax | HiAPI-C# 2025", - "summary": "Class FlagSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Syntax of fully Match flag. public class FlagSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FlagSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks The term Flag generally not accomanys with variable value. The term Tag generally accomanys with variable value. Constructors FlagSyntax(IEnumerable, IEnumerable) Creates syntax from in-memory path and flag lists (tests or programmatic setup). public FlagSyntax(IEnumerable categoryPath, IEnumerable flags) Parameters categoryPath IEnumerable flags IEnumerable FlagSyntax(XElement) Loads category path and flag list items from XML. public FlagSyntax(XElement src) Parameters src XElement Root element named XName. Properties CategoryPath JSON path segments (each Item) under which matched flags are stored. public List CategoryPath { get; set; } Property Value List FlagList NC tokens to detect and record as flags (exact match). public List FlagList { get; set; } Property Value List Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class FlagSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Syntax of fully Match flag. public class FlagSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FlagSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks The term Flag generally not accomanys with variable value. The term Tag generally accomanys with variable value. Constructors FlagSyntax(IEnumerable, IEnumerable) Creates syntax from in-memory path and flag lists (tests or programmatic setup). public FlagSyntax(IEnumerable categoryPath, IEnumerable flags) Parameters categoryPath IEnumerable flags IEnumerable FlagSyntax(XElement) Loads category path and flag list items from XML. public FlagSyntax(XElement src) Parameters src XElement Root element named XName. Properties CategoryPath JSON path segments (each Item) under which matched flags are stored. public List CategoryPath { get; set; } Property Value List FlagList NC tokens to detect and record as flags (exact match). public List FlagList { get; set; } Property Value List Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html", @@ -4547,7 +4687,7 @@ "api/Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html", "title": "Class HeadIndexSyntax | HiAPI-C# 2025", - "summary": "Class HeadIndexSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Parses a leading block index (e.g. Heidenhain line numbers) after an optional HeadSymbol prefix. public class HeadIndexSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeadIndexSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HeadIndexSyntax(string) Creates syntax with the given head symbol prefix (may be empty). public HeadIndexSyntax(string headSymbol) Parameters headSymbol string HeadIndexSyntax(XElement) Loads HeadSymbol from persisted XML. public HeadIndexSyntax(XElement src) Parameters src XElement Root element named XName. Properties HeadSymbol public string HeadSymbol { get; set; } Property Value string Remarks The Head Symbol can be not null empty string. NC Index from Heidenhain may have no head symbol. Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class HeadIndexSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Parses a leading block index (e.g. Heidenhain line numbers) after an optional HeadSymbol prefix. public class HeadIndexSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeadIndexSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #BeforeBuild.UnparsedText: N100 X0 (with HeadSymbol=“N”) #AfterBuild: { \"UnparsedText\": \"X0\", \"IndexNote\": { \"Symbol\": \"N\", \"Number\": 100 } } #BeforeBuild.UnparsedText: N42 (lone head index, no trailing tokens; with HeadSymbol=“N”) #AfterBuild: { \"IndexNote\": { \"Symbol\": \"N\", \"Number\": 42 } } Constructors HeadIndexSyntax(string) Creates syntax with the given head symbol prefix (may be empty). public HeadIndexSyntax(string headSymbol) Parameters headSymbol string HeadIndexSyntax(XElement) Loads HeadSymbol from persisted XML. public HeadIndexSyntax(XElement src) Parameters src XElement Root element named XName. Properties HeadSymbol public string HeadSymbol { get; set; } Property Value string Remarks The Head Symbol can be not null empty string. NC Index from Heidenhain may have no head symbol. Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html", @@ -4567,12 +4707,12 @@ "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html", "title": "Class HeidenhainBlkFormSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainBlkFormSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain BLK FORM command (workpiece blank definition). public class HeidenhainBlkFormSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainBlkFormSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: BLK FORM 0.1 Z X+0 Y+0 Z-40 Output: { \"BLK FORM\": { \"Type\": \"0.1\", \"Axis\": \"Z\", \"X\": \"+0\", \"Y\": \"+0\", \"Z\": \"-40\" } } Input: BLK FORM 0.2 X+100 Y+100 Z+0 Output: { \"BLK FORM\": { \"Type\": \"0.2\", \"X\": \"+100\", \"Y\": \"+100\", \"Z\": \"+0\" } } Input: BLK FORM CYLINDER Z R50 L105 Output: { \"BLK FORM\": { \"Type\": \"CYLINDER\", \"Axis\": \"Z\", \"R\": \"50\", \"L\": \"105\" } } Constructors HeidenhainBlkFormSyntax() Initializes a new instance with default settings. public HeidenhainBlkFormSyntax() HeidenhainBlkFormSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainBlkFormSyntax(XElement src) Parameters src XElement Source XML element. Fields BlkFormTagList Tags for BLK FORM coordinate/dimension values. public static readonly string[] BlkFormTagList Field Value string[] Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class HeidenhainBlkFormSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain BLK FORM command (workpiece blank definition). public class HeidenhainBlkFormSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainBlkFormSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #BeforeBuild.UnparsedText: BLK FORM 0.1 Z X+0 Y+0 Z-40 #AfterBuild: { \"Parsing\": { \"BLK FORM\": { \"Type\": \"0.1\", \"Axis\": \"Z\", \"X\": 0, \"Y\": 0, \"Z\": -40 } } } #BeforeBuild.UnparsedText: BLK FORM 0.2 X+100 Y+100 Z+0 #AfterBuild: { \"Parsing\": { \"BLK FORM\": { \"Type\": \"0.2\", \"X\": 100, \"Y\": 100, \"Z\": 0 } } } #BeforeBuild.UnparsedText: BLK FORM CYLINDER Z R50 L105 #AfterBuild: { \"Parsing\": { \"BLK FORM\": { \"Type\": \"CYLINDER\", \"Axis\": \"Z\", \"R\": 50, \"L\": 105 } } } Constructors HeidenhainBlkFormSyntax() Initializes a new instance with default settings. public HeidenhainBlkFormSyntax() HeidenhainBlkFormSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainBlkFormSyntax(XElement src) Parameters src XElement Source XML element. Fields BlkFormTagList Tags for BLK FORM coordinate/dimension values. public static readonly string[] BlkFormTagList Field Value string[] Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html", "title": "Class HeidenhainCallSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainCallSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain CALL commands (CALL PGM and CALL LBL). public class HeidenhainCallSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainCallSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: CALL PGM SubProg Output: { \"CALL\": { \"Target\": \"PGM\", \"Name\": \"SubProg\" } } Input: CALL LBL 5 Output: { \"CALL\": { \"Target\": \"LBL\", \"Name\": \"5\" } } Input: CALL LBL MyLabel REP 3 Output: { \"CALL\": { \"Target\": \"LBL\", \"Name\": \"MyLabel\", \"REP\": \"3\" } } Constructors HeidenhainCallSyntax() Initializes a new instance with default settings. public HeidenhainCallSyntax() HeidenhainCallSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainCallSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class HeidenhainCallSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain CALL commands (CALL PGM and CALL LBL). public class HeidenhainCallSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainCallSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #BeforeBuild.UnparsedText: CALL PGM SubProg #AfterBuild: { \"Parsing\": { \"CALL\": { \"Target\": \"PGM\", \"Name\": \"SubProg\" } } } #BeforeBuild.UnparsedText: CALL LBL 5 #AfterBuild: { \"Parsing\": { \"CALL\": { \"Target\": \"LBL\", \"Name\": \"5\" } } } #BeforeBuild.UnparsedText: CALL LBL MyLabel REP 3 #AfterBuild: { \"Parsing\": { \"CALL\": { \"Target\": \"LBL\", \"Name\": \"MyLabel\", \"REP\": \"3\" } } } Constructors HeidenhainCallSyntax() Initializes a new instance with default settings. public HeidenhainCallSyntax() HeidenhainCallSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainCallSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html", @@ -4587,32 +4727,32 @@ "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html", "title": "Class HeidenhainLSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainLSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Heidenhain linear movement (the leading L) syntax. public class HeidenhainLSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainLSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HeidenhainLSyntax() Initializes a new instance with default settings. public HeidenhainLSyntax() HeidenhainLSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainLSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string TagList Axis tags grabbed as float-valued coordinates after the leading L. public List TagList { get; set; } Property Value List XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class HeidenhainLSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Heidenhain linear movement (the leading L) syntax. Strips the leading L and grabs axis-tag values for any of AxisTagList (X, Y, Z, U, V, W, A, B, C) that appear afterwards as {axis}{signed-value} pairs; values are parsed as floats via ToFloat(string). public class HeidenhainLSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainLSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #BeforeBuild.UnparsedText: L X+10 Y+20 Z-5 #AfterBuild: { \"Parsing\": { \"L\": { \"X\": 10, \"Y\": 20, \"Z\": -5 } } } #BeforeBuild.UnparsedText: L A+45 B-15 #AfterBuild: { \"Parsing\": { \"L\": { \"A\": 45, \"B\": -15 } } } Constructors HeidenhainLSyntax() Initializes a new instance with default settings. public HeidenhainLSyntax() HeidenhainLSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainLSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string TagList Axis tags grabbed as float-valued coordinates after the leading L. public List TagList { get; set; } Property Value List XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html", "title": "Class HeidenhainLblSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainLblSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain LBL command (label definition). Label can be a number (1-65535) or a text name (e.g., “MyLabel”). LBL 0 is reserved for end of subprogram. public class HeidenhainLblSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainLblSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: LBL 1 Output: { \"LBL\": { \"Name\": \"1\" } } Input: LBL MyLabel Output: { \"LBL\": { \"Name\": \"MyLabel\" } } Input: LBL 0 Output: { \"LBL\": { \"Name\": \"0\" } } Constructors HeidenhainLblSyntax() Initializes a new instance with default settings. public HeidenhainLblSyntax() HeidenhainLblSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainLblSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class HeidenhainLblSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain LBL command (label definition). Label can be a number (1-65535) or a text name (e.g., “MyLabel”). LBL 0 is reserved for end of subprogram. public class HeidenhainLblSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainLblSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #BeforeBuild.UnparsedText: LBL 1 #AfterBuild: { \"Parsing\": { \"LBL\": { \"Name\": \"1\" } } } #BeforeBuild.UnparsedText: LBL MyLabel #AfterBuild: { \"Parsing\": { \"LBL\": { \"Name\": \"MyLabel\" } } } #BeforeBuild.UnparsedText: LBL 0 (LBL 0 is the end-of-subprogram sentinel) #AfterBuild: { \"Parsing\": { \"LBL\": { \"Name\": \"0\" } } } Constructors HeidenhainLblSyntax() Initializes a new instance with default settings. public HeidenhainLblSyntax() HeidenhainLblSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainLblSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html", "title": "Class HeidenhainPlaneSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainPlaneSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain PLANE command. Handles: PLANE RESET PLANE SPATIAL SPA SPB SPC SEQ+/- [COORD ROT|TABLE ROT] [MOVE|TURN|STAY] PLANE PROJECTED PROPR PROMIN ROT SEQ+/- [COORD ROT|TABLE ROT] [MOVE|TURN|STAY] public class HeidenhainPlaneSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainPlaneSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: PLANE SPATIAL SPA+30 SPB+0 SPC-10 SEQ+ COORD ROT TURN Output: { \"PLANE\": { \"Mode\": \"SPATIAL\", \"SPA\": \"+30\", \"SPB\": \"+0\", \"SPC\": \"-10\", \"SEQ\": \"+\", \"Rot\": \"COORD\", \"Positioning\": \"TURN\" } } Input: PLANE PROJECTED PROPR+30 PROMIN+0 ROT+45 SEQ- TABLE ROT MOVE Output: { \"PLANE\": { \"Mode\": \"PROJECTED\", \"PROPR\": \"+30\", \"PROMIN\": \"+0\", \"ROT\": \"+45\", \"SEQ\": \"-\", \"Rot\": \"TABLE\", \"Positioning\": \"MOVE\" } } Input: PLANE RESET Output: { \"PLANE\": { \"Mode\": \"RESET\" } } Constructors HeidenhainPlaneSyntax() Initializes a new instance with default settings. public HeidenhainPlaneSyntax() HeidenhainPlaneSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainPlaneSyntax(XElement src) Parameters src XElement Source XML element. Fields ProjectedTagList Projected tags for PLANE PROJECTED command. PROPR: projection angle, PROMIN: minimum angle, ROT: rotation of tilted plane. public static readonly string[] ProjectedTagList Field Value string[] SpatialTagList Spatial axis tags for PLANE SPATIAL command. public static readonly string[] SpatialTagList Field Value string[] Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class HeidenhainPlaneSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain PLANE command. Handles: PLANE RESET PLANE SPATIAL SPA SPB SPC SEQ+/- [COORD ROT|TABLE ROT] [MOVE|TURN|STAY] PLANE PROJECTED PROPR PROMIN ROT SEQ+/- [COORD ROT|TABLE ROT] [MOVE|TURN|STAY] public class HeidenhainPlaneSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainPlaneSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #BeforeBuild.UnparsedText: PLANE SPATIAL SPA+30 SPB+0 SPC-10 SEQ+ COORD ROT TURN #AfterBuild: { \"Parsing\": { \"PLANE\": { \"Mode\": \"SPATIAL\", \"SPA\": 30, \"SPB\": 0, \"SPC\": -10, \"SEQ\": \"+\", \"Rot\": \"COORD\", \"Positioning\": \"TURN\" } } } #BeforeBuild.UnparsedText: PLANE PROJECTED PROPR+30 PROMIN+0 ROT+45 SEQ- TABLE ROT MOVE #AfterBuild: { \"Parsing\": { \"PLANE\": { \"Mode\": \"PROJECTED\", \"PROPR\": 30, \"PROMIN\": 0, \"ROT\": 45, \"SEQ\": \"-\", \"Rot\": \"TABLE\", \"Positioning\": \"MOVE\" } } } #BeforeBuild.UnparsedText: PLANE RESET #AfterBuild: { \"Parsing\": { \"PLANE\": { \"Mode\": \"RESET\" } } } Constructors HeidenhainPlaneSyntax() Initializes a new instance with default settings. public HeidenhainPlaneSyntax() HeidenhainPlaneSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainPlaneSyntax(XElement src) Parameters src XElement Source XML element. Fields ProjectedTagList Projected tags for PLANE PROJECTED command. PROPR: projection angle, PROMIN: minimum angle, ROT: rotation of tilted plane. public static readonly string[] ProjectedTagList Field Value string[] SpatialTagList Spatial axis tags for PLANE SPATIAL command. public static readonly string[] SpatialTagList Field Value string[] Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html", "title": "Class HeidenhainProgramSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainProgramSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain BEGIN PGM and END PGM commands. public class HeidenhainProgramSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainProgramSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: BEGIN PGM DEMO MM Output: { \"PGM\": { \"Command\": \"BEGIN\", \"Name\": \"DEMO\", \"Unit\": \"MM\" } } Input: END PGM DEMO MM Output: { \"PGM\": { \"Command\": \"END\", \"Name\": \"DEMO\", \"Unit\": \"MM\" } } Constructors HeidenhainProgramSyntax() Initializes a new instance with default settings. public HeidenhainProgramSyntax() HeidenhainProgramSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainProgramSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class HeidenhainProgramSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain BEGIN PGM and END PGM commands. public class HeidenhainProgramSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainProgramSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #BeforeBuild.UnparsedText: BEGIN PGM DEMO MM #AfterBuild: { \"Parsing\": { \"PGM\": { \"Command\": \"BEGIN\", \"Name\": \"DEMO\", \"Unit\": \"MM\" } } } #BeforeBuild.UnparsedText: END PGM DEMO MM #AfterBuild: { \"Parsing\": { \"PGM\": { \"Command\": \"END\", \"Name\": \"DEMO\", \"Unit\": \"MM\" } } } Constructors HeidenhainProgramSyntax() Initializes a new instance with default settings. public HeidenhainProgramSyntax() HeidenhainProgramSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainProgramSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html", "title": "Class HeidenhainToolCallSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainToolCallSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain TOOL CALL command. Handles: TOOL CALL [ToolId|“ToolName”] [X|Y|Z] [S…] [DL…] [DR…] public class HeidenhainToolCallSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainToolCallSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: TOOL CALL 1 Z S5000 Output: { \"TOOL CALL\": { \"T\": \"1\", \"Axis\": \"Z\", \"S\": \"5000\" } } Input: TOOL CALL “MyTool” Z S3000 DL+0.5 DR-0.1 Output: { \"TOOL CALL\": { \"T\": \"MyTool\", \"Axis\": \"Z\", \"S\": \"3000\", \"DL\": \"+0.5\", \"DR\": \"-0.1\" } } Constructors HeidenhainToolCallSyntax() Initializes a new instance with default settings. public HeidenhainToolCallSyntax() HeidenhainToolCallSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainToolCallSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class HeidenhainToolCallSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain TOOL CALL command. Handles: TOOL CALL [ToolId|“ToolName”] [X|Y|Z] [S…] [DL…] [DR…] public class HeidenhainToolCallSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainToolCallSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #BeforeBuild.UnparsedText: TOOL CALL 1 Z S5000 #AfterBuild: { \"Parsing\": { \"TOOL CALL\": { \"Axis\": \"Z\", \"S\": \"5000\", \"T\": \"1\" } } } #BeforeBuild.UnparsedText: TOOL CALL “MyTool” Z S3000 DL+0.5 DR-0.1 #AfterBuild: { \"Parsing\": { \"TOOL CALL\": { \"Axis\": \"Z\", \"S\": \"3000\", \"DL\": \"+0.5\", \"DR\": \"-0.1\", \"T\": \"MyTool\" } } } Constructors HeidenhainToolCallSyntax() Initializes a new instance with default settings. public HeidenhainToolCallSyntax() HeidenhainToolCallSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainToolCallSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.html", "title": "Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Classes HeidenhainBlkFormSyntax Syntax for Heidenhain BLK FORM command (workpiece blank definition). HeidenhainCallSyntax Syntax for Heidenhain CALL commands (CALL PGM and CALL LBL). HeidenhainCyclDefSyntax Initialization Syntax of Heidenhain fixed head block for CYCL DEF . HeidenhainFnAssignmentSyntax Heidenhain FN variable assignment syntax. Extends TagAssignmentSyntax with FN opcode prefix. HeidenhainLSyntax Heidenhain linear movement (the leading L) syntax. HeidenhainLblSyntax Syntax for Heidenhain LBL command (label definition). Label can be a number (1-65535) or a text name (e.g., “MyLabel”). LBL 0 is reserved for end of subprogram. HeidenhainPlaneSyntax Syntax for Heidenhain PLANE command. Handles: PLANE RESET PLANE SPATIAL SPA SPB SPC SEQ+/- [COORD ROT|TABLE ROT] [MOVE|TURN|STAY] PLANE PROJECTED PROPR PROMIN ROT SEQ+/- [COORD ROT|TABLE ROT] [MOVE|TURN|STAY] HeidenhainProgramSyntax Syntax for Heidenhain BEGIN PGM and END PGM commands. HeidenhainToolCallSyntax Syntax for Heidenhain TOOL CALL command. Handles: TOOL CALL [ToolId|“ToolName”] [X|Y|Z] [S…] [DL…] [DR…]" + "summary": "Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Classes HeidenhainBlkFormSyntax Syntax for Heidenhain BLK FORM command (workpiece blank definition). HeidenhainCallSyntax Syntax for Heidenhain CALL commands (CALL PGM and CALL LBL). HeidenhainCyclDefSyntax Initialization Syntax of Heidenhain fixed head block for CYCL DEF . HeidenhainFnAssignmentSyntax Heidenhain FN variable assignment syntax. Extends TagAssignmentSyntax with FN opcode prefix. HeidenhainLSyntax Heidenhain linear movement (the leading L) syntax. Strips the leading L and grabs axis-tag values for any of AxisTagList (X, Y, Z, U, V, W, A, B, C) that appear afterwards as {axis}{signed-value} pairs; values are parsed as floats via ToFloat(string). HeidenhainLblSyntax Syntax for Heidenhain LBL command (label definition). Label can be a number (1-65535) or a text name (e.g., “MyLabel”). LBL 0 is reserved for end of subprogram. HeidenhainPlaneSyntax Syntax for Heidenhain PLANE command. Handles: PLANE RESET PLANE SPATIAL SPA SPB SPC SEQ+/- [COORD ROT|TABLE ROT] [MOVE|TURN|STAY] PLANE PROJECTED PROPR PROMIN ROT SEQ+/- [COORD ROT|TABLE ROT] [MOVE|TURN|STAY] HeidenhainProgramSyntax Syntax for Heidenhain BEGIN PGM and END PGM commands. HeidenhainToolCallSyntax Syntax for Heidenhain TOOL CALL command. Handles: TOOL CALL [ToolId|“ToolName”] [X|Y|Z] [S…] [DL…] [DR…]" }, "api/Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html", @@ -4627,17 +4767,17 @@ "api/Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html", "title": "Class NumberedFlagSyntax | HiAPI-C# 2025", - "summary": "Class NumberedFlagSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Syntax for numbered flags (prefix + number) with optional decimal support. NumberedFlagSyntax often should place after something like ParameterizedFlagSyntax. Since NumberedFlagSyntax is easy to eat those kind of flags. Single-digit integer codes are zero-padded to canonical 2-digit form (e.g. M6 → M06, G0 → G00, M3 → M03) so that downstream logic syntaxes comparing against IsoKeywords constants (which are always 2-digit form like M06) can match Fanuc-style omitted-leading-zero codes. Two-digit and decimal codes are kept as-is. public class NumberedFlagSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object NumberedFlagSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks Examples of stored canonical flags: Single-digit integer codes, padded: G0 → G00, M3 → M03 Two-digit or longer integer codes, unchanged: G54, M30 Decimal codes, unchanged: G54.1 (Fanuc extended work coordinates) Note: Parameters like P2 in G54.1P2 should be handled by TagSetupSyntax separately. Constructors NumberedFlagSyntax(IEnumerable, IEnumerable, bool) Creates a new NumberedFlagSyntax instance. public NumberedFlagSyntax(IEnumerable categoryPath, IEnumerable codePrefixes, bool allowDecimal = true) Parameters categoryPath IEnumerable JSON path for storing matched codes. codePrefixes IEnumerable Code prefixes to match (e.g., [“G”, “M”]). allowDecimal bool Whether to allow decimal numbers. NumberedFlagSyntax(XElement) Loads category path, code prefixes, and decimal policy from XML. public NumberedFlagSyntax(XElement src) Parameters src XElement Root element named XName. Properties AllowDecimal Whether to allow decimal numbers (e.g., G54.1). public bool AllowDecimal { get; set; } Property Value bool CategoryPath Category path for storing matched codes in JSON. public List CategoryPath { get; set; } Property Value List CodePrefixes Code prefixes to match (e.g., [“G”, “M”]). public List CodePrefixes { get; set; } Property Value List Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class NumberedFlagSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Syntax for numbered flags (prefix + number) with optional decimal support. NumberedFlagSyntax often should place after something like ParameterizedFlagSyntax. Since NumberedFlagSyntax is easy to eat those kind of flags. Single-digit integer codes are zero-padded to canonical 2-digit form (e.g. M6 → M06, G0 → G00, M3 → M03) so that downstream logic syntaxes comparing against IsoKeywords constants (which are always 2-digit form like M06) can match Fanuc-style omitted-leading-zero codes. Two-digit and decimal codes are kept as-is. public class NumberedFlagSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object NumberedFlagSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks Examples of stored canonical flags: Single-digit integer codes, padded: G0 → G00, M3 → M03 Two-digit or longer integer codes, unchanged: G54, M30 Decimal codes, unchanged: G54.1 (Fanuc extended work coordinates) Note: Parameters like P2 in G54.1P2 should be handled by TagSetupSyntax separately. Constructors NumberedFlagSyntax(IEnumerable, IEnumerable, bool) Creates a new NumberedFlagSyntax instance. public NumberedFlagSyntax(IEnumerable categoryPath, IEnumerable codePrefixes, bool allowDecimal = true) Parameters categoryPath IEnumerable JSON path for storing matched codes. codePrefixes IEnumerable Code prefixes to match (e.g., [“G”, “M”]). allowDecimal bool Whether to allow decimal numbers. NumberedFlagSyntax(XElement) Loads category path, code prefixes, and decimal policy from XML. public NumberedFlagSyntax(XElement src) Parameters src XElement Root element named XName. Properties AllowDecimal Whether to allow decimal numbers (e.g., G54.1). public bool AllowDecimal { get; set; } Property Value bool CategoryPath Category path for storing matched codes in JSON. public List CategoryPath { get; set; } Property Value List CodePrefixes Code prefixes to match (e.g., [“G”, “M”]). public List CodePrefixes { get; set; } Property Value List Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html", "title": "Class ParameterizedFlagSyntax | HiAPI-C# 2025", - "summary": "Class ParameterizedFlagSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Syntax for flags with attached parameters (e.g., G54.1P1, G10L2P1). This is essentially a combination of main flag matching (like NumberedFlagSyntax) plus scoped TagValueSyntax for the parameters after the main flag. Note that the ParameterizedFlagSyntax often should be applied before NumberedFlagSyntax since NumberedFlagSyntax may eat the text that ParameterizedFlagSyntax should handle. public class ParameterizedFlagSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ParameterizedFlagSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks Parameters can be stored as typed values via FloatParamPrefixes and IntParamPrefixes (set via property initializer): ParamPrefixes — stored as string (text, for variables like #1, Q2) FloatParamPrefixes — stored as double when parseable, string otherwise IntParamPrefixes — stored as int when parseable, string otherwise Examples: G54.1P1 → {\"G54.1\": {\"P\": \"1\"}} (text) G68.2 X0 I180 → {\"G68.2\": {\"X\": 0.0, \"I\": 180.0}} (float via property initializer) G54.1P#1 → {\"G54.1\": {\"P\": \"#1\"}} (Fanuc variable, kept as string) G54.1PQ1 → {\"G54.1\": {\"P\": \"Q1\"}} (Heidenhain variable) Constructors ParameterizedFlagSyntax(IEnumerable, IEnumerable, IEnumerable, string, IEnumerable) Creates a new ParameterizedFlagSyntax instance. Use property initializers for FloatParamPrefixes and IntParamPrefixes to enable typed parameter storage. public ParameterizedFlagSyntax(IEnumerable categoryPath, IEnumerable codePrefixes, IEnumerable paramPrefixes, string varPrefix, IEnumerable terminateWords = null) Parameters categoryPath IEnumerable JSON path for storing matched codes. codePrefixes IEnumerable Full code prefixes to match (e.g., [“G54.1”, “G10”]). paramPrefixes IEnumerable Parameter prefixes to extract (e.g., [“P”, “L”]). varPrefix string Variable prefix (e.g., “#” for Fanuc, “Q” for Heidenhain). terminateWords IEnumerable Words that stop parameter extraction. ParameterizedFlagSyntax(XElement) Loads all prefix lists, variable prefix, and terminator words from XML. public ParameterizedFlagSyntax(XElement src) Parameters src XElement Root element named XName. Properties CategoryPath Category path for storing matched codes in JSON. public List CategoryPath { get; set; } Property Value List CodePrefixes Full code prefixes to match (e.g., [“G54.1”, “G10”]). public List CodePrefixes { get; set; } Property Value List FloatParamPrefixes Parameter prefixes stored as double when parseable, string otherwise (for variable references). Set via property initializer for typed G-code parameters. public List FloatParamPrefixes { get; set; } Property Value List IntParamPrefixes Parameter prefixes stored as int when parseable, string otherwise (for variable references). Set via property initializer for typed G-code parameters. public List IntParamPrefixes { get; set; } Property Value List Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string ParamPrefixes Parameter prefixes to extract as text string (e.g., [“P”, “L”, “H”]). Multiple parameters can be attached to one code. public List ParamPrefixes { get; set; } Property Value List TerminateWords Words that terminate parameter extraction (e.g., [“G”, “M”, “X”, “Y”, “Z”]). Extraction stops when encountering these prefixes followed by a number. public List TerminateWords { get; set; } Property Value List VarPrefix Variable prefix for macro variables (e.g., “#” for Fanuc, “Q” for Heidenhain). public string VarPrefix { get; set; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class ParameterizedFlagSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Syntax for flags with attached parameters (e.g., G54.1P1, G10L2P1). This is essentially a combination of main flag matching (like NumberedFlagSyntax) plus scoped TagValueSyntax for the parameters after the main flag. Note that the ParameterizedFlagSyntax often should be applied before NumberedFlagSyntax since NumberedFlagSyntax may eat the text that ParameterizedFlagSyntax should handle. public class ParameterizedFlagSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ParameterizedFlagSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks Parameters can be stored as typed values via FloatParamPrefixes and IntParamPrefixes (set via property initializer): ParamPrefixes — stored as string (text, for variables like #1, Q2) FloatParamPrefixes — stored as double when parseable, string otherwise IntParamPrefixes — stored as int when parseable, string otherwise Examples: G54.1P1 → {\"G54.1\": {\"P\": \"1\"}} (text) G68.2 X0 I180 → {\"G68.2\": {\"X\": 0.0, \"I\": 180.0}} (float via property initializer) G54.1P#1 → {\"G54.1\": {\"P\": \"#1\"}} (Fanuc variable, kept as string) G54.1PQ1 → {\"G54.1\": {\"P\": \"Q1\"}} (Heidenhain variable) Constructors ParameterizedFlagSyntax(IEnumerable, IEnumerable, IEnumerable, string, IEnumerable) Creates a new ParameterizedFlagSyntax instance. Use property initializers for FloatParamPrefixes and IntParamPrefixes to enable typed parameter storage. public ParameterizedFlagSyntax(IEnumerable categoryPath, IEnumerable codePrefixes, IEnumerable paramPrefixes, string varPrefix, IEnumerable terminateWords = null) Parameters categoryPath IEnumerable JSON path for storing matched codes. codePrefixes IEnumerable Full code prefixes to match (e.g., [“G54.1”, “G10”]). paramPrefixes IEnumerable Parameter prefixes to extract (e.g., [“P”, “L”]). varPrefix string Variable prefix (e.g., “#” for Fanuc, “Q” for Heidenhain). terminateWords IEnumerable Words that stop parameter extraction. ParameterizedFlagSyntax(XElement) Loads all prefix lists, variable prefix, and terminator words from XML. public ParameterizedFlagSyntax(XElement src) Parameters src XElement Root element named XName. Properties CategoryPath Category path for storing matched codes in JSON. public List CategoryPath { get; set; } Property Value List CodePrefixes Full code prefixes to match (e.g., [“G54.1”, “G10”]). public List CodePrefixes { get; set; } Property Value List FloatParamPrefixes Parameter prefixes stored as double when parseable, string otherwise (for variable references). Set via property initializer for typed G-code parameters. public List FloatParamPrefixes { get; set; } Property Value List IntParamPrefixes Parameter prefixes stored as int when parseable, string otherwise (for variable references). Set via property initializer for typed G-code parameters. public List IntParamPrefixes { get; set; } Property Value List Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string ParamPrefixes Parameter prefixes to extract as text string (e.g., [“P”, “L”, “H”]). Multiple parameters can be attached to one code. public List ParamPrefixes { get; set; } Property Value List TerminateWords Words that terminate parameter extraction (e.g., [“G”, “M”, “X”, “Y”, “Z”]). Extraction stops when encountering these prefixes followed by a number. public List TerminateWords { get; set; } Property Value List VarPrefix Variable prefix for macro variables (e.g., “#” for Fanuc, “Q” for Heidenhain). public string VarPrefix { get; set; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html", "title": "Class ShrinkIfNoDecimalPointSyntax | HiAPI-C# 2025", - "summary": "Class ShrinkIfNoDecimalPointSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Applies the “conventional type” decimal-point interpretation to coordinate values in UnparsedText. When a tag value has no decimal point (e.g. Y20), it is shrunk by the implied decimal places: Y20 → Y0.020 (3 decimal places). Values that already contain a decimal point are left unchanged. Place inside BundleSyntax before FloatTagValueSyntax so the modified text is parsed correctly by subsequent syntaxes. public class ShrinkIfNoDecimalPointSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ShrinkIfNoDecimalPointSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks Modern CNC controllers default to “calculator type” where Y20 = Y20.0. This syntax is only needed for legacy “conventional type” configurations where Y20 = Y0.020 (Fanuc DPI=0, etc.). Properties ImpliedDecimalPlaces Number of implied decimal places when no decimal point is present. 3 → 0.001 (mm), 4 → 0.0001 (inch). public int ImpliedDecimalPlaces { get; set; } Property Value int Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string Tags Tags to check for missing decimal points. Default: X, Y, Z. public List Tags { get; set; } Property Value List XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class ShrinkIfNoDecimalPointSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Applies the “conventional type” decimal-point interpretation to coordinate values in UnparsedText. When a tag value has no decimal point (e.g. Y20), it is shrunk by the implied decimal places: Y20 → Y0.020 (3 decimal places). Values that already contain a decimal point are left unchanged. Place inside BundleSyntax before FloatTagValueSyntax so the modified text is parsed correctly by subsequent syntaxes. public class ShrinkIfNoDecimalPointSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ShrinkIfNoDecimalPointSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks Modern CNC controllers default to “calculator type” where Y20 = Y20.0. This syntax is only needed for legacy “conventional type” configurations where Y20 = Y0.020 (Fanuc DPI=0, etc.). Properties ImpliedDecimalPlaces Number of implied decimal places when no decimal point is present. 3 → 0.001 (mm), 4 → 0.0001 (inch). public int ImpliedDecimalPlaces { get; set; } Property Value int Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string Tags Tags to check for missing decimal points. Default: X, Y, Z. public List Tags { get; set; } Property Value List XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html", @@ -4652,27 +4792,27 @@ "api/Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html", "title": "Class TapeBoundarySyntax | HiAPI-C# 2025", - "summary": "Class TapeBoundarySyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Detects the % tape leader / trailer at the start of a block and records it under TapeBoundary on the block JSON. Universal across ISO controllers (Fanuc, Mazak, Syntec, Siemens) — a brand's program-identifier header (e.g. Fanuc O1234) is a separate concern handled by its own brand-specific syntax. public class TapeBoundarySyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TapeBoundarySyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors TapeBoundarySyntax() Parameterless instance for bundle composition (no XML state). public TapeBoundarySyntax() TapeBoundarySyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public TapeBoundarySyntax(XElement src) Parameters src XElement Root element named XName. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress IsPreviousNodeTapeBoundary(LazyLinkedListNode) Returns true if the previous block carries a TapeBoundary section, or if there is no previous block at all (start-of-stream is itself a tape boundary). Brand-specific program-identifier syntaxes use this to decide whether the current block can host a program-number header. public static bool IsPreviousNodeTapeBoundary(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns bool MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class TapeBoundarySyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Detects the % tape leader / trailer at the start of a block and records it under TapeBoundary on the block JSON. Universal across ISO controllers (Fanuc, Mazak, Syntec, Siemens) — a brand's program-identifier header (e.g. Fanuc O1234) is a separate concern handled by its own brand-specific syntax. public class TapeBoundarySyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TapeBoundarySyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples #BeforeBuild.UnparsedText: % #AfterBuild: { \"TapeBoundary\": { \"Text\": \"\" } } #BeforeBuild.UnparsedText: %foo #AfterBuild: { \"TapeBoundary\": { \"Text\": \"foo\" } } #BeforeBuild.UnparsedText: % header text #AfterBuild: { \"TapeBoundary\": { \"Text\": \"header text\" } } Constructors TapeBoundarySyntax() Parameterless instance for bundle composition (no XML state). public TapeBoundarySyntax() TapeBoundarySyntax(XElement) XML ctor (no child elements; reserved for forward compatibility). public TapeBoundarySyntax(XElement src) Parameters src XElement Root element named XName. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress IsPreviousNodeTapeBoundary(LazyLinkedListNode) Returns true if the previous block carries a TapeBoundary section, or if there is no previous block at all (start-of-stream is itself a tape boundary). Brand-specific program-identifier syntaxes use this to decide whether the current block can host a program-number header. public static bool IsPreviousNodeTapeBoundary(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns bool MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.ParsingSyntaxs.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.html", "title": "Namespace Hi.NcParsers.ParsingSyntaxs | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.ParsingSyntaxs Classes BlockSkipSyntax Parses the ISO 6983 / Fanuc Block Delete (a.k.a. Block Skip) prefix / or /N (N = 1..9) at the head of an NC block. Behaviour: No leading / → no-op, no BlockSkip section is written. / with IBlockSkipConfig layer OFF (or the dependency absent) → prefix is consumed, BlockSkip Symbol/Layer recorded for audit, Body stays null; the rest of the block stays in UnparsedText and parses normally. / with layer ON → the remaining block text is moved from UnparsedText into Body and UnparsedText is cleared. Downstream parsing syntaxes see no NC text so they emit nothing; semantics therefore produce no act. Must run after comment / CsScript syntaxes so that comments (and CsScript embedded in comments) continue to take effect regardless of the skip switch. CsScriptSyntax Extracts C# script markers from the oral content of a comment. PreMarker marks a script that runs before the NC block; PostMarker marks a script that runs after. The symbols are configurable and serialized to XML. FanucProgramNumberSyntax Detects a Fanuc-family program identifier header — O1234 or — that follows a TapeBoundary line, and records it under FanucProgramNumber on the block JSON. The wrapping form (bare vs angle-bracketed) is preserved in Wrapper so the block can be emitted back to its original notation. FlagSyntax Syntax of fully Match flag. FloatTagValueSyntax TagValueSyntax that parses numeric literal values to double. Variable text (e.g. Q2, #1, [#1+#2]) remains as string. HeadIndexSyntax Parses a leading block index (e.g. Heidenhain line numbers) after an optional HeadSymbol prefix. IntegerTagValueSyntax TagValueSyntax that parses numeric literal values to int. Variable text (e.g. Q2, #1, [#1+#2]) remains as string. NamedVarAssignmentSyntax Assignment syntax for named (identifier-style) variables with = sign. Handles variables that are multi-character identifiers rather than {prefix}{digits}. NumberedFlagSyntax Syntax for numbered flags (prefix + number) with optional decimal support. NumberedFlagSyntax often should place after something like ParameterizedFlagSyntax. Since NumberedFlagSyntax is easy to eat those kind of flags. Single-digit integer codes are zero-padded to canonical 2-digit form (e.g. M6 → M06, G0 → G00, M3 → M03) so that downstream logic syntaxes comparing against IsoKeywords constants (which are always 2-digit form like M06) can match Fanuc-style omitted-leading-zero codes. Two-digit and decimal codes are kept as-is. ParameterizedFlagSyntax Syntax for flags with attached parameters (e.g., G54.1P1, G10L2P1). This is essentially a combination of main flag matching (like NumberedFlagSyntax) plus scoped TagValueSyntax for the parameters after the main flag. Note that the ParameterizedFlagSyntax often should be applied before NumberedFlagSyntax since NumberedFlagSyntax may eat the text that ParameterizedFlagSyntax should handle. ShrinkIfNoDecimalPointSyntax Applies the “conventional type” decimal-point interpretation to coordinate values in UnparsedText. When a tag value has no decimal point (e.g. Y20), it is shrunk by the implied decimal places: Y20 → Y0.020 (3 decimal places). Values that already contain a decimal point are left unchanged. Place inside BundleSyntax before FloatTagValueSyntax so the modified text is parsed correctly by subsequent syntaxes. TagAssignmentSyntax Assignment syntax with = sign. Unlike TagValueSyntax which handles concatenated tag-value pairs (no = sign), this class handles explicit assignment statements. TagValueSyntax Concatenated tag-value syntax (no = sign). ex. Heidenhain: L X Q2 Y33.4 FQ1 ISO: X100.3Y3.3 TapeBoundarySyntax Detects the % tape leader / trailer at the start of a block and records it under TapeBoundary on the block JSON. Universal across ISO controllers (Fanuc, Mazak, Syntec, Siemens) — a brand's program-identifier header (e.g. Fanuc O1234) is a separate concern handled by its own brand-specific syntax." + "summary": "Namespace Hi.NcParsers.ParsingSyntaxs Classes BlockSkipSyntax Parses the ISO 6983 / Fanuc Block Delete (a.k.a. Block Skip) prefix / or /N (N = 1..9) at the head of an NC block. Behaviour: No leading / → no-op, no BlockSkip section is written. / with IBlockSkipConfig layer OFF (or the dependency absent) → prefix is consumed, BlockSkip Symbol/Layer recorded for audit, Body stays null; the rest of the block stays in UnparsedText and parses normally. / with layer ON → the remaining block text is moved from UnparsedText into Body and UnparsedText is cleared. Downstream parsing syntaxes see no NC text so they emit nothing; semantics therefore produce no act. Must run after comment / CsScript syntaxes so that comments (and CsScript embedded in comments) continue to take effect regardless of the skip switch. CsScriptSyntax Extracts C# script markers from the oral content of a comment. PreMarker marks a script that runs before the NC block; PostMarker marks a script that runs after. The symbols are configurable and serialized to XML. FlagSyntax Syntax of fully Match flag. FloatTagValueSyntax TagValueSyntax that parses numeric literal values to double. Variable text (e.g. Q2, #1, [#1+#2]) remains as string. HeadIndexSyntax Parses a leading block index (e.g. Heidenhain line numbers) after an optional HeadSymbol prefix. IntegerTagValueSyntax TagValueSyntax that parses numeric literal values to int. Variable text (e.g. Q2, #1, [#1+#2]) remains as string. NamedVarAssignmentSyntax Assignment syntax for named (identifier-style) variables with = sign. Handles variables that are multi-character identifiers rather than {prefix}{digits}. NumberedFlagSyntax Syntax for numbered flags (prefix + number) with optional decimal support. NumberedFlagSyntax often should place after something like ParameterizedFlagSyntax. Since NumberedFlagSyntax is easy to eat those kind of flags. Single-digit integer codes are zero-padded to canonical 2-digit form (e.g. M6 → M06, G0 → G00, M3 → M03) so that downstream logic syntaxes comparing against IsoKeywords constants (which are always 2-digit form like M06) can match Fanuc-style omitted-leading-zero codes. Two-digit and decimal codes are kept as-is. ParameterizedFlagSyntax Syntax for flags with attached parameters (e.g., G54.1P1, G10L2P1). This is essentially a combination of main flag matching (like NumberedFlagSyntax) plus scoped TagValueSyntax for the parameters after the main flag. Note that the ParameterizedFlagSyntax often should be applied before NumberedFlagSyntax since NumberedFlagSyntax may eat the text that ParameterizedFlagSyntax should handle. ShrinkIfNoDecimalPointSyntax Applies the “conventional type” decimal-point interpretation to coordinate values in UnparsedText. When a tag value has no decimal point (e.g. Y20), it is shrunk by the implied decimal places: Y20 → Y0.020 (3 decimal places). Values that already contain a decimal point are left unchanged. Place inside BundleSyntax before FloatTagValueSyntax so the modified text is parsed correctly by subsequent syntaxes. TagAssignmentSyntax Assignment syntax with = sign. Unlike TagValueSyntax which handles concatenated tag-value pairs (no = sign), this class handles explicit assignment statements. TagValueSyntax Concatenated tag-value syntax (no = sign). ex. Heidenhain: L X Q2 Y33.4 FQ1 ISO: X100.3Y3.3 TapeBoundarySyntax Detects the % tape leader / trailer at the start of a block and records it under TapeBoundary on the block JSON. Universal across ISO controllers (Fanuc, Mazak, Syntec, Siemens) — a brand's program-identifier header (e.g. Fanuc O1234) is a separate concern handled by its own brand-specific syntax." }, "api/Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html": { "href": "api/Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html", "title": "Class ModalCarrySyntax | HiAPI-C# 2025", - "summary": "Class ModalCarrySyntax Namespace Hi.NcParsers.PostLogicSyntaxs Assembly HiMech.dll Per-block modal-section carry. For each key in TrackedKeys, if the current block has no section for that key, deep-clone the same section from the immediately previous block (which is itself guaranteed to carry it because every block is processed by this syntax) and set AddedByKey = AddedByValue inside the cloned section. Lets every block stand alone with its full modal context, so downstream readers (cache-file dumps, semantics, UI jumping to a single block) do not need EnumerateBack() to resolve modal state. This replaces the earlier CacheSyntax design (which sampled every Pace blocks). The legacy CacheSyntax XName is still recognised on load for backward compatibility with previously-saved project files. public class ModalCarrySyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ModalCarrySyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ModalCarrySyntax() Creates an empty ModalCarrySyntax; populate TrackedKeys before use. public ModalCarrySyntax() ModalCarrySyntax(XElement) Reconstructs a ModalCarrySyntax from a project XML element previously produced by MakeXmlSource(string, string, bool). public ModalCarrySyntax(XElement src) Parameters src XElement XML element carrying a TrackedKeys child with one Key per entry; null is treated as defaults. Fields AddedByValue Value written under AddedByKey on each section this syntax deep-clones from the previous block. Mirrors AddedByValue's role for its own synthesis — both let cache-file readers distinguish post-Logic / Inspection stage injections from LogicSyntaxs-stage authored values (the latter have no AddedByKey). public const string AddedByValue = \"ModalCarry\" Field Value string Properties Default Full-set carrier (Logic ∪ PostLogic) — retained for the legacy backstop in SoftNcRunner that appends a single ModalCarry to pre-3.1.168 project syntax lists. New brand syntax kits should split into Logic + PostLogic instead. public static ModalCarrySyntax Default { get; } Property Value ModalCarrySyntax Logic Logic-stage carrier — modal sections that are written in the Logic bundle and never mutated by PostLogic. Carrying these at the end of each block's Logic bundle keeps single-step node.Previous modal lookups from Logic syntaxes correct, even when a PostLogic syntax (e.g. RadiusCompensationSyntax) does node.Next look-forward and drags subsequent blocks' Logic builds forward before the intermediate block's PostLogic ModalCarry has run. public static ModalCarrySyntax Logic { get; } Property Value ModalCarrySyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string PostLogic PostLogic-stage carrier — modal sections that may still be mutated by PostLogic syntaxes after Logic completes. Today only MachineCoordinateState qualifies (overwritten by RadiusCompensationSyntax with the radius-compensated position). Carrying these at the end of PostLogic ensures the modal value reflects the final, post-compensation state. public static ModalCarrySyntax PostLogic { get; } Property Value ModalCarrySyntax TrackedKeys Section keys to carry. Order-insensitive; duplicates ignored. public List TrackedKeys { get; set; } Property Value List XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode node, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters node LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class ModalCarrySyntax Namespace Hi.NcParsers.PostLogicSyntaxs Assembly HiMech.dll Per-block modal-section carry. For each key in TrackedKeys, if the current block has no section for that key, deep-clone the same section from the immediately previous block (which is itself guaranteed to carry it because every block is processed by this syntax) and set AddedByKey = AddedByValue inside the cloned section. Lets every block stand alone with its full modal context, so downstream readers (cache-file dumps, semantics, UI jumping to a single block) do not need EnumerateBack() to resolve modal state. A JSON section is a candidate for TrackedKeys when ALL four criteria hold: Writers concentrated — one or two syntaxes own the section (e.g. LinearMotionSyntax / CircularMotionSyntax own MotionState; the call/return pair own SubProgramCall-derived state). Readers distributed — multiple downstream consumers each need the value, and none of them should walk back to find it. Single-reader sections do not benefit from blanket carry. Every block must see the section — cache-dump readers landing randomly, single-block UI views, and look-ahead syntaxes all require the section to be present on every block. Carry is unconditional — no frame-gating or other per-block veto. Sections that need conditional carry (e.g. FanucLocalVariableReadingSyntax's frame-aware Vars.Local dict-merge — carry only when MacroFrame matches) belong in the owning syntax's own carry logic, not here. A section failing any criterion should be carried through its owning syntax's own logic (single-step node.Previous read, or no carry at all if absence is meaningful — e.g. MacroFrame absent = main frame). This replaces the earlier CacheSyntax design (which sampled every Pace blocks). The legacy CacheSyntax XName is still recognised on load for backward compatibility with previously-saved project files. public class ModalCarrySyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ModalCarrySyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ModalCarrySyntax() Creates an empty ModalCarrySyntax; populate TrackedKeys before use. public ModalCarrySyntax() ModalCarrySyntax(XElement) Reconstructs a ModalCarrySyntax from a project XML element previously produced by MakeXmlSource(string, string, bool). public ModalCarrySyntax(XElement src) Parameters src XElement XML element carrying a TrackedKeys child with one Key per entry; null is treated as defaults. Fields AddedByValue Value written under AddedByKey on each section this syntax deep-clones from the previous block. Mirrors AddedByValue's role for its own synthesis — both let cache-file readers distinguish post-Logic / Inspection stage injections from LogicSyntaxs-stage authored values (the latter have no AddedByKey). public const string AddedByValue = \"ModalCarry\" Field Value string Properties Default Full-set carrier (Logic ∪ PostLogic) — retained for the legacy backstop in SoftNcRunner that appends a single ModalCarry to pre-3.1.168 project syntax lists. New brand syntax kits should split into Logic + PostLogic instead. public static ModalCarrySyntax Default { get; } Property Value ModalCarrySyntax Logic Logic-stage carrier — modal sections that are written in the Logic bundle and never mutated by PostLogic. Carrying these at the end of each block's Logic bundle keeps single-step node.Previous modal lookups from Logic syntaxes correct, even when a PostLogic syntax (e.g. RadiusCompensationSyntax) does node.Next look-forward and drags subsequent blocks' Logic builds forward before the intermediate block's PostLogic ModalCarry has run. public static ModalCarrySyntax Logic { get; } Property Value ModalCarrySyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string PostLogic PostLogic-stage carrier — modal sections that may still be mutated by PostLogic syntaxes after Logic completes. Today only MachineCoordinateState qualifies (overwritten by RadiusCompensationSyntax with the radius-compensated position). Carrying these at the end of PostLogic ensures the modal value reflects the final, post-compensation state. public static ModalCarrySyntax PostLogic { get; } Property Value ModalCarrySyntax TrackedKeys Section keys to carry. Order-insensitive; duplicates ignored. public List TrackedKeys { get; set; } Property Value List XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode node, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters node LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html": { "href": "api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html", "title": "Class RadiusCompensationSyntax | HiAPI-C# 2025", - "summary": "Class RadiusCompensationSyntax Namespace Hi.NcParsers.PostLogicSyntaxs Assembly HiMech.dll Resolves cutter radius compensation (G41/G42/G40) by offsetting the tool path perpendicular to the programmed direction. Must be placed after motion syntaxes (CircularMotionSyntax, LinearMotionSyntax) because it reads the Hi.Motion section. Must NOT be placed inside BundleSyntax because it requires look-forward (Next). For simple cases (line-line, no transient), the syntax overwrites MachineCoordinate with the offset position. For arc blocks that need transient bridging segments, the Motion section is replaced with a CompoundMotion containing sub-items. public class RadiusCompensationSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object RadiusCompensationSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors RadiusCompensationSyntax() Creates a default RadiusCompensationSyntax. public RadiusCompensationSyntax() RadiusCompensationSyntax(XElement) Reconstructs a RadiusCompensationSyntax from a project XML element previously produced by MakeXmlSource(string, string, bool). The element carries no fields, so src is used only for factory dispatch. public RadiusCompensationSyntax(XElement src) Parameters src XElement XML element previously produced by MakeXmlSource(string, string, bool). Fields ArcBeginProgramXyzKey JSON key for the arc begin program position inside CompoundMotion arc items. public const string ArcBeginProgramXyzKey = \"ArcBeginProgramXyz\" Field Value string MotionProgramXyzKey JSON key for the compensated program position inside Motion sections and CompoundMotion arc items. public const string MotionProgramXyzKey = \"MotionProgramXyz\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class RadiusCompensationSyntax Namespace Hi.NcParsers.PostLogicSyntaxs Assembly HiMech.dll Resolves cutter radius compensation (G41/G42/G40) by offsetting the tool path perpendicular to the programmed direction. Must be placed after motion syntaxes (CircularMotionSyntax, LinearMotionSyntax) because it reads the Hi.Motion section. Must NOT be placed inside BundleSyntax because it requires look-forward (Next). For simple cases (line-line, no transient), the syntax overwrites MachineCoordinate with the offset position. For arc blocks that need transient bridging segments, the Motion section is replaced with a CompoundMotion containing sub-items. public class RadiusCompensationSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object RadiusCompensationSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors RadiusCompensationSyntax() Creates a default RadiusCompensationSyntax. public RadiusCompensationSyntax() RadiusCompensationSyntax(XElement) Reconstructs a RadiusCompensationSyntax from a project XML element previously produced by MakeXmlSource(string, string, bool). The element carries no fields, so src is used only for factory dispatch. public RadiusCompensationSyntax(XElement src) Parameters src XElement XML element previously produced by MakeXmlSource(string, string, bool). Fields ArcBeginProgramXyzKey JSON key for the arc begin program position inside CompoundMotion arc items. public const string ArcBeginProgramXyzKey = \"ArcBeginProgramXyz\" Field Value string MotionProgramXyzKey JSON key for the compensated program position inside Motion sections and CompoundMotion arc items. public const string MotionProgramXyzKey = \"MotionProgramXyz\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.PostLogicSyntaxs.html": { "href": "api/Hi.NcParsers.PostLogicSyntaxs.html", "title": "Namespace Hi.NcParsers.PostLogicSyntaxs | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.PostLogicSyntaxs Classes ModalCarrySyntax Per-block modal-section carry. For each key in TrackedKeys, if the current block has no section for that key, deep-clone the same section from the immediately previous block (which is itself guaranteed to carry it because every block is processed by this syntax) and set AddedByKey = AddedByValue inside the cloned section. Lets every block stand alone with its full modal context, so downstream readers (cache-file dumps, semantics, UI jumping to a single block) do not need EnumerateBack() to resolve modal state. This replaces the earlier CacheSyntax design (which sampled every Pace blocks). The legacy CacheSyntax XName is still recognised on load for backward compatibility with previously-saved project files. RadiusCompensationSyntax Resolves cutter radius compensation (G41/G42/G40) by offsetting the tool path perpendicular to the programmed direction. Must be placed after motion syntaxes (CircularMotionSyntax, LinearMotionSyntax) because it reads the Hi.Motion section. Must NOT be placed inside BundleSyntax because it requires look-forward (Next). For simple cases (line-line, no transient), the syntax overwrites MachineCoordinate with the offset position. For arc blocks that need transient bridging segments, the Motion section is replaced with a CompoundMotion containing sub-items." + "summary": "Namespace Hi.NcParsers.PostLogicSyntaxs Classes ModalCarrySyntax Per-block modal-section carry. For each key in TrackedKeys, if the current block has no section for that key, deep-clone the same section from the immediately previous block (which is itself guaranteed to carry it because every block is processed by this syntax) and set AddedByKey = AddedByValue inside the cloned section. Lets every block stand alone with its full modal context, so downstream readers (cache-file dumps, semantics, UI jumping to a single block) do not need EnumerateBack() to resolve modal state. A JSON section is a candidate for TrackedKeys when ALL four criteria hold: Writers concentrated — one or two syntaxes own the section (e.g. LinearMotionSyntax / CircularMotionSyntax own MotionState; the call/return pair own SubProgramCall-derived state). Readers distributed — multiple downstream consumers each need the value, and none of them should walk back to find it. Single-reader sections do not benefit from blanket carry. Every block must see the section — cache-dump readers landing randomly, single-block UI views, and look-ahead syntaxes all require the section to be present on every block. Carry is unconditional — no frame-gating or other per-block veto. Sections that need conditional carry (e.g. FanucLocalVariableReadingSyntax's frame-aware Vars.Local dict-merge — carry only when MacroFrame matches) belong in the owning syntax's own carry logic, not here. A section failing any criterion should be carried through its owning syntax's own logic (single-step node.Previous read, or no carry at all if absence is meaningful — e.g. MacroFrame absent = main frame). This replaces the earlier CacheSyntax design (which sampled every Pace blocks). The legacy CacheSyntax XName is still recognised on load for backward compatibility with previously-saved project files. RadiusCompensationSyntax Resolves cutter radius compensation (G41/G42/G40) by offsetting the tool path perpendicular to the programmed direction. Must be placed after motion syntaxes (CircularMotionSyntax, LinearMotionSyntax) because it reads the Hi.Motion section. Must NOT be placed inside BundleSyntax because it requires look-forward (Next). For simple cases (line-line, no transient), the syntax overwrites MachineCoordinate with the offset position. For arc blocks that need transient bridging segments, the Motion section is replaced with a CompoundMotion containing sub-items." }, "api/Hi.NcParsers.Segmenters.HeidenhainSegmenter.html": { "href": "api/Hi.NcParsers.Segmenters.HeidenhainSegmenter.html", @@ -4692,7 +4832,7 @@ "api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html": { "href": "api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html", "title": "Class SingleLineSegmenter | HiAPI-C# 2025", - "summary": "Class SingleLineSegmenter Namespace Hi.NcParsers.Segmenters Assembly HiMech.dll Maps each physical source line to one Sentence (no multi-line merging). public class SingleLineSegmenter : ISegmenter, IToXElement Inheritance object SingleLineSegmenter Implements ISegmenter IToXElement Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Name Display name of this segmenter. public string Name { get; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods GetSentences(LazyLinkedList, NcDiagnosticProgress) Segments the indexed file lines into Sentences. public IEnumerable GetSentences(LazyLinkedList indexedFileLines, NcDiagnosticProgress ncDiagnosticProgress) Parameters indexedFileLines LazyLinkedList The lazy linked list of indexed file lines. ncDiagnosticProgress NcDiagnosticProgress Diagnostic progress reporter. Returns IEnumerable A sequence of Sentences. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class SingleLineSegmenter Namespace Hi.NcParsers.Segmenters Assembly HiMech.dll Maps each physical source line to one Sentence (no multi-line merging). public class SingleLineSegmenter : ISegmenter, IToXElement Inheritance object SingleLineSegmenter Implements ISegmenter IToXElement Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Name Display name of this segmenter. public string Name { get; } Property Value string XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods GetSentences(LazyLinkedList, NcDiagnosticProgress) Segments the indexed file lines into Sentences. public IEnumerable GetSentences(LazyLinkedList indexedFileLines, NcDiagnosticProgress ncDiagnosticProgress) Parameters indexedFileLines LazyLinkedList The lazy linked list of indexed file lines. ncDiagnosticProgress NcDiagnosticProgress Diagnostic progress reporter. Returns IEnumerable A sequence of Sentences. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.NcParsers.Segmenters.html": { "href": "api/Hi.NcParsers.Segmenters.html", @@ -4707,7 +4847,7 @@ "api/Hi.NcParsers.Semantics.CompoundMotionSemantic.html": { "href": "api/Hi.NcParsers.Semantics.CompoundMotionSemantic.html", "title": "Class CompoundMotionSemantic | HiAPI-C# 2025", - "summary": "Class CompoundMotionSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves ICompoundMotionDef into acts by delegating ItemsKey to ResolveItems(JsonArray, LazyLinkedListNode, Vec3d, IRapidFeedrateConfig, NcDiagnosticProgress, IMachineAxisConfig). public class CompoundMotionSemantic : INcSemantic, IMakeXmlSource Inheritance object CompoundMotionSemantic Implements INcSemantic IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName XML element name used to register and serialize this semantic. public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" + "summary": "Class CompoundMotionSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves ICompoundMotionDef into acts by delegating ItemsKey to ResolveItems(JsonArray, LazyLinkedListNode, DVec3d, IRapidFeedrateConfig, NcDiagnosticProgress, IMachineAxisConfig, IMachineKinematics). public class CompoundMotionSemantic : INcSemantic, IMakeXmlSource Inheritance object CompoundMotionSemantic Implements INcSemantic IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName XML element name used to register and serialize this semantic. public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" }, "api/Hi.NcParsers.Semantics.CoolantSemantic.html": { "href": "api/Hi.NcParsers.Semantics.CoolantSemantic.html", @@ -4767,7 +4907,7 @@ "api/Hi.NcParsers.Semantics.html": { "href": "api/Hi.NcParsers.Semantics.html", "title": "Namespace Hi.NcParsers.Semantics | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.Semantics Classes ClLinearMotionSemantic Resolves ClLinear motion into CL-level linear interpolation with per-step inverse kinematics. Used when RTCP (G43.4/TRAORI/M128) is active and rotary axes change, producing ActClDerivedMcXyzabcContour. The CL (cutter location) endpoints are derived from MC endpoints via forward kinematics, then interpolated linearly. The MC path is non-linear because the tool orientation changes during the move. CompoundMotionSemantic Resolves ICompoundMotionDef into acts by delegating ItemsKey to ResolveItems(JsonArray, LazyLinkedListNode, Vec3d, IRapidFeedrateConfig, NcDiagnosticProgress, IMachineAxisConfig). CoolantSemantic Resolves the ICoolantDef JSON section (written by CoolantSyntax from M07/M08/M09) into an ActCooling act. Only emits when the coolant mode changes from the previous block — modal state is suppressed so downstream consumers (e.g. StateActRunner) see one act per real transition rather than one per block. CsScriptBeginSemantic Resolves BeginScript into ActLineCsScript. Must be placed at the beginning of NcSemanticList so that the script runs before motion and other acts. CsScriptEndSemantic Resolves EndScript into ActLineCsScript. Must be placed at the end of NcSemanticList so that the script runs after motion and other acts. CsScriptSemantic Base class for resolving CsScript JSON entries into ActLineCsScript. Subclasses specify which script key to read (BeginScript or EndScript). Also supports an external script dictionary via ExternalScripts. When set, each NC block's FileLineIndex is looked up in the dictionary and the matched script is emitted as an additional ActLineCsScript. This allows runtime injection of per-line scripts without modifying the NC file. MachineCoordinateStepSemantic Read MachineCoordinate from MachineCoordinateState in JsonObject and produce ActMcXyzStep. Requires ProgramXyzSyntax to have computed McXyz first. McArcMotionSemantic Resolves McArc motion into ActFeedrate + ActMcXyzSpiralContour. Reads arc center, plane normal, and direction from the Hi.Motion section written by CircularMotionSyntax. McLinearMotionSemantic Resolves McLinear motion into ActFeedrate/ActRapid + ActMcXyzLinearContour or ActMcXyzabcLinearContour. Discriminates by checking whether rotary axis values (A/B/C) are present in MachineCoordinateState: XYZ only → ActMcXyzLinearContour XYZABC → ActMcXyzabcLinearContour with Fanuc composite feedrate: d = √(ΔX² + ΔY² + ΔZ² + ΔA_deg² + ΔB_deg² + ΔC_deg²) SpindleSpeedSemantic Resolves ISpindleSpeedDef section into ActSpindleSpeed and ActSpindleDirection. Only emits when spindle speed or direction actually changes from the previous block. StrokeLimitCheckSemantic Reports a diagnostic error when MachineCoordinateState exceeds the stroke limits defined in IStrokeLimitConfig. Does not emit any IAct; only produces diagnostics. ToolChangeSemantic Resolves SectionName section into ActToolingStep (when M06 is present) or ActToolingTeleport (T-code only, no M06). Reads ToolingTime for the change duration. Interfaces INcSemantic Resolves SyntaxPiece into IAct sequence. Unlike INcSyntax which only transforms data in-place, INcSemantic produces machine actions from the parsed syntax data." + "summary": "Namespace Hi.NcParsers.Semantics Classes ClLinearMotionSemantic Resolves ClLinear motion into CL-level linear interpolation with per-step inverse kinematics. Used when RTCP (G43.4/TRAORI/M128) is active and rotary axes change, producing ActClDerivedMcXyzabcContour. The CL (cutter location) endpoints are derived from MC endpoints via forward kinematics, then interpolated linearly. The MC path is non-linear because the tool orientation changes during the move. CompoundMotionSemantic Resolves ICompoundMotionDef into acts by delegating ItemsKey to ResolveItems(JsonArray, LazyLinkedListNode, DVec3d, IRapidFeedrateConfig, NcDiagnosticProgress, IMachineAxisConfig, IMachineKinematics). CoolantSemantic Resolves the ICoolantDef JSON section (written by CoolantSyntax from M07/M08/M09) into an ActCooling act. Only emits when the coolant mode changes from the previous block — modal state is suppressed so downstream consumers (e.g. StateActRunner) see one act per real transition rather than one per block. CsScriptBeginSemantic Resolves BeginScript into ActLineCsScript. Must be placed at the beginning of NcSemanticList so that the script runs before motion and other acts. CsScriptEndSemantic Resolves EndScript into ActLineCsScript. Must be placed at the end of NcSemanticList so that the script runs after motion and other acts. CsScriptSemantic Base class for resolving CsScript JSON entries into ActLineCsScript. Subclasses specify which script key to read (BeginScript or EndScript). Also supports an external script dictionary via ExternalScripts. When set, each NC block's FileLineIndex is looked up in the dictionary and the matched script is emitted as an additional ActLineCsScript. This allows runtime injection of per-line scripts without modifying the NC file. MachineCoordinateStepSemantic Read MachineCoordinate from MachineCoordinateState in JsonObject and produce ActMcXyzStep. Requires ProgramXyzSyntax to have computed McXyz first. McArcMotionSemantic Resolves McArc motion into ActFeedrate + ActMcXyzSpiralContour. Reads arc center, plane normal, and direction from the Hi.Motion section written by CircularMotionSyntax. McLinearMotionSemantic Resolves McLinear motion into ActFeedrate/ActRapid + ActMcXyzLinearContour or ActMcXyzabcLinearContour. Discriminates by checking whether rotary axis values (A/B/C) are present in MachineCoordinateState: XYZ only → ActMcXyzLinearContour XYZABC → ActMcXyzabcLinearContour with Fanuc composite feedrate: d = √(ΔX² + ΔY² + ΔZ² + ΔA_deg² + ΔB_deg² + ΔC_deg²) SpindleSpeedSemantic Resolves ISpindleSpeedDef section into ActSpindleSpeed and ActSpindleDirection. Only emits when spindle speed or direction actually changes from the previous block. StrokeLimitCheckSemantic Reports a diagnostic error when MachineCoordinateState exceeds the stroke limits defined in IStrokeLimitConfig. Does not emit any IAct; only produces diagnostics. ToolChangeSemantic Resolves SectionName section into ActToolingStep (when M06 is present) or ActToolingTeleport (T-code only, no M06). Reads ToolingTime for the change duration. Interfaces INcSemantic Resolves SyntaxPiece into IAct sequence. Unlike INcSyntax which only transforms data in-place, INcSemantic produces machine actions from the parsed syntax data." }, "api/Hi.NcParsers.Sentence.html": { "href": "api/Hi.NcParsers.Sentence.html", @@ -4777,17 +4917,17 @@ "api/Hi.NcParsers.SoftNcRunner.html": { "href": "api/Hi.NcParsers.SoftNcRunner.html", "title": "Class SoftNcRunner | HiAPI-C# 2025", - "summary": "Class SoftNcRunner Namespace Hi.NcParsers Assembly HiMech.dll Configurable NC Runner. public class SoftNcRunner : IControlRunner, IMakeXmlSource Inheritance object SoftNcRunner Implements IControlRunner IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SoftNcRunner() Creates an empty runner; populate the pipeline lists before use. public SoftNcRunner() SoftNcRunner(XElement, string, string, IProgress, object[]) Reconstructs a SoftNcRunner from a project XML element. Each pipeline list (NcDependencyList, Segmenter, NcInitializationList, NcSyntaxList, NcSemanticList) is rehydrated via XFactory. public SoftNcRunner(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res = null) Parameters src XElement XML element previously produced by MakeXmlSource(string, string, bool). baseDirectory string Project base directory for resolving relative paths. relFile string Project file path relative to baseDirectory. progress IProgress Diagnostic sink propagated to nested factories. res object[] Optional ambient resources (e.g. ProjectApiVersion for legacy patches). Properties FanucNcRunner Brand preset for Fanuc — composes a SoftNcRunner whose NcSyntaxList comes from DefaultSyntaxList. public static SoftNcRunner FanucNcRunner { get; } Property Value SoftNcRunner HeidenhainNcRunner Brand preset for Heidenhain — composes a SoftNcRunner whose NcSyntaxList comes from DefaultSyntaxList. public static SoftNcRunner HeidenhainNcRunner { get; } Property Value SoftNcRunner MazakNcRunner Brand preset for Mazak — composes a SoftNcRunner whose NcSyntaxList comes from DefaultSyntaxList. public static SoftNcRunner MazakNcRunner { get; } Property Value SoftNcRunner NcDependencyList External configuration providers consumed by syntaxes/semantics (machine axes, tool offsets, coordinate tables, block-skip flags, etc.). public List NcDependencyList { get; set; } Property Value List NcInitializationList Seeds the initial SyntaxPiece JSON state (e.g. home position, defaults). public List NcInitializationList { get; set; } Property Value List NcSemanticList Final-stage semantics that turn the last syntax layer into SourcedActEntry records consumed by the runtime. public List NcSemanticList { get; set; } Property Value List NcSyntaxList Ordered syntax pipeline. Each entry consumes the previous layer's SyntaxPiece stream and emits the next layer. public List NcSyntaxList { get; set; } Property Value List Segmenter Splits raw NC text into Sentence blocks. public ISegmenter Segmenter { get; set; } Property Value ISegmenter SiemensNcRunner Brand preset for Siemens — composes a SoftNcRunner whose NcSyntaxList comes from DefaultSyntaxList. public static SoftNcRunner SiemensNcRunner { get; } Property Value SoftNcRunner SyntecNcRunner Brand preset for Syntec — composes a SoftNcRunner whose NcSyntaxList comes from DefaultSyntaxList. public static SoftNcRunner SyntecNcRunner { get; } Property Value SoftNcRunner XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods ConfigureByMachiningChain(IMachiningChain) Configures this SoftNcRunner to match the kinematic chain of a machine tool. Registers every axis present on the chain into the IMachineAxisConfig in NcDependencyList (linear or rotary, derived from whether the chain's transformer implements IDynamicRotation). When the chain carries any rotary axis, a NcKinematicsDependency is appended so that downstream syntaxes / semantics (e.g. G53.1, G68.2, McLinearMotionSemantic) can resolve orientation; its KinematicsProvider is intentionally left null — the owning project service wires it up after the solver instance is available (see LocalProjectService.BuildCoordinateConverter). public void ConfigureByMachiningChain(IMachiningChain chain) Parameters chain IMachiningChain The machining chain whose axes and kinematics the runner should match. No-op when null. EnumerateSnapshotSyntaxs() Enumerates every SnapshotSyntax reachable from NcSyntaxList, including those nested inside any top-level BundleSyntax's inner list. Yields in pipeline-execution order: each top-level slot in turn, and within a bundle slot the bundle's SyntaxList order. public IEnumerable EnumerateSnapshotSyntaxs() Returns IEnumerable FromLegacyNcEnvXml(XElement, IMachiningChain) Creates a SoftNcRunner from legacy HardNcEnv XML. Picks the brand-specific runner by the CncBrand element and populates dependencies from the legacy XML values. When a chain is provided, also calls ConfigureByMachiningChain(IMachiningChain) so the runner's axis configuration and kinematics dependency reflect the machine tool loaded alongside the legacy project. Remove this region when HardNcEnv is fully replaced. public static SoftNcRunner FromLegacyNcEnvXml(XElement ncEnvXml, IMachiningChain chain = null) Parameters ncEnvXml XElement The inner XML element of the legacy HardNcEnv. chain IMachiningChain Optional machining chain for axis/kinematics configuration. Returns SoftNcRunner A configured SoftNcRunner. GetSourcedActEntrysFromNode(LazyLinkedListNode, NcDiagnosticProgress, CancellationToken) Drives the NcSemanticList over the post-syntax SyntaxPiece stream starting at startNode, yielding a SourcedActEntry for each emitted IAct (or a single null-act entry when a semantic produces no acts but still updates the source SyntaxPiece). public IEnumerable GetSourcedActEntrysFromNode(LazyLinkedListNode startNode, NcDiagnosticProgress ncDiagnosticProgress, CancellationToken cancellationToken) Parameters startNode LazyLinkedListNode First node to evaluate; iteration walks Next. ncDiagnosticProgress NcDiagnosticProgress Sink for semantic exceptions. cancellationToken CancellationToken Cancellation token (checked between blocks). Returns IEnumerable MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) Runs raw Control lines and yields source sentence and Act pairs. public IEnumerable RunControlLines(string relFilePath, IEnumerable lines, MachiningSession machiningSession, SessionProgress sessionProgress, CancellationToken cancellationToken) Parameters relFilePath string The relative path of the control file lines IEnumerable The enumerable collection of command (control code) lines machiningSession MachiningSession Session-scoped state shared across multiple RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) calls (e.g. lazy-initialized pipeline state, file-index counter). sessionProgress SessionProgress cancellationToken CancellationToken Cancellation token to cancel the operation Returns IEnumerable Enumerable of source sentence and Act pairs SetAllSnapshotSyntaxEnabled(bool) Sets IsEnabled on every SnapshotSyntax reachable from NcSyntaxList (including those nested inside top-level BundleSyntax) to isEnabled. Callers that need finer control (per-section toggling, instance inspection) should iterate EnumerateSnapshotSyntaxs() directly. public void SetAllSnapshotSyntaxEnabled(bool isEnabled) Parameters isEnabled bool" + "summary": "Class SoftNcRunner Namespace Hi.NcParsers Assembly HiMech.dll Configurable NC Runner. public class SoftNcRunner : IControlRunner, IMakeXmlSource Inheritance object SoftNcRunner Implements IControlRunner IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SoftNcRunner() Creates an empty runner; populate the pipeline lists before use. public SoftNcRunner() SoftNcRunner(XElement, string, string, IProgress, object[]) Reconstructs a SoftNcRunner from a project XML element. Each pipeline list (NcDependencyList, Segmenter, NcInitializationList, NcSyntaxList, NcSemanticList) is rehydrated via XFactory. public SoftNcRunner(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res = null) Parameters src XElement XML element previously produced by MakeXmlSource(string, string, bool). baseDirectory string Project base directory for resolving relative paths. relFile string Project file path relative to baseDirectory. progress IProgress Diagnostic sink propagated to nested factories. res object[] Optional ambient resources (e.g. ProjectApiVersion for legacy patches). Properties FanucNcRunner Brand preset for Fanuc — composes a SoftNcRunner whose NcSyntaxList comes from DefaultSyntaxList. public static SoftNcRunner FanucNcRunner { get; } Property Value SoftNcRunner HeidenhainNcRunner Brand preset for Heidenhain — composes a SoftNcRunner whose NcSyntaxList comes from DefaultSyntaxList. public static SoftNcRunner HeidenhainNcRunner { get; } Property Value SoftNcRunner MazakNcRunner Brand preset for Mazak — composes a SoftNcRunner whose NcSyntaxList comes from DefaultSyntaxList. public static SoftNcRunner MazakNcRunner { get; } Property Value SoftNcRunner NcDependencyList External configuration providers consumed by syntaxes/semantics (machine axes, tool offsets, coordinate tables, block-skip flags, etc.). public List NcDependencyList { get; set; } Property Value List NcInitializationList Seeds the initial SyntaxPiece JSON state (e.g. home position, defaults). public List NcInitializationList { get; set; } Property Value List NcSemanticList Final-stage semantics that turn the last syntax layer into SourcedActEntry records consumed by the runtime. public List NcSemanticList { get; set; } Property Value List NcSyntaxList Ordered syntax pipeline. Each entry consumes the previous layer's SyntaxPiece stream and emits the next layer. public List NcSyntaxList { get; set; } Property Value List Segmenter Splits raw NC text into Sentence blocks. public ISegmenter Segmenter { get; set; } Property Value ISegmenter SiemensNcRunner Brand preset for Siemens — composes a SoftNcRunner whose NcSyntaxList comes from DefaultSyntaxList. public static SoftNcRunner SiemensNcRunner { get; } Property Value SoftNcRunner SyntecNcRunner Brand preset for Syntec — composes a SoftNcRunner whose NcSyntaxList comes from DefaultSyntaxList. public static SoftNcRunner SyntecNcRunner { get; } Property Value SoftNcRunner XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods ConfigureByMachiningChain(IMachiningChain) Configures this SoftNcRunner to match the kinematic chain of a machine tool. Registers every axis present on the chain into the IMachineAxisConfig in NcDependencyList (linear or rotary, derived from whether the chain's transformer implements IDynamicRotation). When the chain carries any rotary axis, a NcKinematicsDependency is appended so that downstream syntaxes / semantics (e.g. G53.1, G68.2, McLinearMotionSemantic) can resolve orientation; its KinematicsProvider is intentionally left null — the owning project service wires it up after the solver instance is available (see LocalProjectService.BuildCoordinateConverter). public void ConfigureByMachiningChain(IMachiningChain chain) Parameters chain IMachiningChain The machining chain whose axes and kinematics the runner should match. No-op when null. EnumerateSnapshotSyntaxs() Enumerates every SnapshotSyntax reachable from NcSyntaxList, including those nested inside any top-level BundleSyntax's inner list. Yields in pipeline-execution order: each top-level slot in turn, and within a bundle slot the bundle's SyntaxList order. public IEnumerable EnumerateSnapshotSyntaxs() Returns IEnumerable FromLegacyNcEnvXml(XElement, IMachiningChain) Creates a SoftNcRunner from legacy HardNcEnv XML. Picks the brand-specific runner by the CncBrand element and populates dependencies from the legacy XML values. When a chain is provided, also calls ConfigureByMachiningChain(IMachiningChain) so the runner's axis configuration and kinematics dependency reflect the machine tool loaded alongside the legacy project. Remove this region when HardNcEnv is fully replaced. public static SoftNcRunner FromLegacyNcEnvXml(XElement ncEnvXml, IMachiningChain chain = null) Parameters ncEnvXml XElement The inner XML element of the legacy HardNcEnv. chain IMachiningChain Optional machining chain for axis/kinematics configuration. Returns SoftNcRunner A configured SoftNcRunner. GetSourcedActEntrysFromNode(LazyLinkedListNode, NcDiagnosticProgress, CancellationToken) Drives the NcSemanticList over the post-syntax SyntaxPiece stream starting at startNode, yielding a SourcedActEntry for each emitted IAct (or a single null-act entry when a semantic produces no acts but still updates the source SyntaxPiece). public IEnumerable GetSourcedActEntrysFromNode(LazyLinkedListNode startNode, NcDiagnosticProgress ncDiagnosticProgress, CancellationToken cancellationToken) Parameters startNode LazyLinkedListNode First node to evaluate; iteration walks Next. ncDiagnosticProgress NcDiagnosticProgress Sink for semantic exceptions. cancellationToken CancellationToken Cancellation token (checked between blocks). Returns IEnumerable MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) Runs raw Control lines and yields source sentence and Act pairs. public IEnumerable RunControlLines(string relFilePath, IEnumerable lines, MachiningSession machiningSession, SessionProgress sessionProgress, CancellationToken cancellationToken) Parameters relFilePath string The relative path of the control file lines IEnumerable The enumerable collection of command (control code) lines machiningSession MachiningSession Session-scoped state shared across multiple RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) calls (e.g. lazy-initialized pipeline state, file-index counter). sessionProgress SessionProgress cancellationToken CancellationToken Cancellation token to cancel the operation Returns IEnumerable Enumerable of source sentence and Act pairs SetAllSnapshotSyntaxEnabled(bool) Sets IsEnabled on every SnapshotSyntax reachable from NcSyntaxList (including those nested inside top-level BundleSyntax) to isEnabled. Callers that need finer control (per-section toggling, instance inspection) should iterate EnumerateSnapshotSyntaxs() directly. public void SetAllSnapshotSyntaxEnabled(bool isEnabled) Parameters isEnabled bool" }, "api/Hi.NcParsers.SoftNcUtil.html": { "href": "api/Hi.NcParsers.SoftNcUtil.html", "title": "Class SoftNcUtil | HiAPI-C# 2025", - "summary": "Class SoftNcUtil Namespace Hi.NcParsers Assembly HiMech.dll JSON helpers for soft-NC blocks: vectors under Parsing, motion-term queries, flag grab/remove on raw text, and unparsed-line trimming. public static class SoftNcUtil Inheritance object SoftNcUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Properties RegexFlagPrefix Regex prefix pattern that matches word boundary, after digit, after whitespace, or at start of string. The whitespace/start-of-string alternatives are needed for non-word-character prefixes (e.g. Fanuc '#', Siemens '$'). public static string RegexFlagPrefix { get; } Property Value string Methods GetMachineStateDouble(JsonObject, string) Reads a numeric tag from a machine-state section (one written by a LogicSyntax / Semantic with explicit numeric values, not from the parser stage). Used by backward-walk lookback paths (ProgramXyzUtil FindPrevious*, FindPreviousState on Feedrate/SpindleSpeed/IsoLocalCoordinateOffset, modal arc-/linear-feedrate prev-block reads, etc.) where the data is supposed to be guaranteed numeric and any non-numeric is a HiAPIs codegen bug rather than an unevaluated user expression. Tag missing → returns null silently (the section may not have been written on a previous block; caller's ?? default chain handles it). Tag present and numeric → returns the value. Tag present but non-numeric → throws InvalidOperationException immediately. The stack trace anchors the bug at the read site (which is the right place to investigate — the originating block has already passed). Continuing with NaN/0 would silently propagate corrupt coordinates downstream and is more dangerous than crashing the run. Use GetParsedDouble(JsonObject, string, Sentence, NcDiagnosticProgress) instead when reading from a parser- stage section (variable expressions on the current block deserve a soft diagnostic, not a hard crash). public static double? GetMachineStateDouble(this JsonObject section, string key) Parameters section JsonObject key string Returns double? GetMachineStateVec3d(JsonObject, string) Vec3d reader for machine-state sections (written by upstream LogicSyntaxes / Semantics with explicit numeric values). Section missing → returns null; individual missing X/Y/Z components fall through to NaN; a non-numeric value at any of X/Y/Z throws via GetMachineStateDouble(JsonObject, string) — non-numeric here is a HiAPIs codegen bug, not a user-facing unevaluated expression, and silently degrading to NaN/0 would propagate corrupt coordinates downstream. public static Vec3d GetMachineStateVec3d(JsonObject json, string sectionKey) Parameters json JsonObject sectionKey string Returns Vec3d GetOccupiedMotionEventForm(JsonObject) Reads the form on the current block's MotionEvent section, indicating that a motion event has already been authored on this block by an earlier-stage motion syntax. Returns null when no motion event is present on this block. Used by motion syntaxes to enforce mutual exclusion (only one motion event per block). Reads MotionEvent rather than MotionState because state is modally carried onto every block via ModalCarrySyntax and would always appear \"occupied\"; only the event section is sparse and meaningfully indicates an authored claim on this block. public static string GetOccupiedMotionEventForm(this JsonObject json) Parameters json JsonObject Returns string GetParsedDouble(JsonObject, string, Sentence, NcDiagnosticProgress) Reads a numeric tag from a JSON object held on a SyntaxPiece (the Parsing tree, a previously-written modal section, or any sub-object thereof), with strict separation between “tag absent” and “tag present but not a number”. Tag missing → returns null silently. The caller's existing ?? default chain handles the \"axis not written\" / \"section absent\" case as before. Tag present and numeric → returns the value. Tag present but non-numeric → emits UnsupportedError(Sentence, string, string, object) (id VariableExpression--Unevaluated) and returns null. Two sources land here: Parser-stage residue — a Fanuc \"#124\", Heidenhain \"Q1\", Siemens \"R5\", or bracket expression \"[#100+5]\" stored as a string by ToFloat(string) / ToInteger(string) when the literal parse failed. Remediation: wire up the variable evaluator. Codegen residue — a previously-written modal section that somehow ended up with a non-numeric JsonValue. Remediation: file a HiAPIs bug. Severity is intentionally the same; reconfigurable diagnostic routing handles operator-vs-developer triage and a second error id would be cosmetic. Replaces the legacy idiom section[key]?.GetDouble() at every call site that consumes a numeric tag held on a SyntaxPiece. public static double? GetParsedDouble(this JsonObject section, string key, Sentence sentence, NcDiagnosticProgress diag) Parameters section JsonObject key string sentence Sentence diag NcDiagnosticProgress Returns double? GetVec3d(JsonObject, string, Vec3d, Sentence, NcDiagnosticProgress) Reads Vec3d from a sub-object with X/Y/Z keys, substituting each missing component (or a missing section) with the matching component of fallback. When sentence is non-null and diag is supplied, non-numeric X/Y/Z values are reported via GetParsedDouble(JsonObject, string, Sentence, NcDiagnosticProgress); when sentence is null, the diagnostic still fires but without a source-line anchor. public static Vec3d GetVec3d(JsonObject json, string sectionKey, Vec3d fallback, Sentence sentence, NcDiagnosticProgress diag) Parameters json JsonObject sectionKey string fallback Vec3d sentence Sentence diag NcDiagnosticProgress Returns Vec3d GetVec3d(JsonObject, string, Sentence, NcDiagnosticProgress) Read Vec3d from a sub-object with X/Y/Z keys. Returns null if the section or all three keys are missing; individual missing keys are filled with NaN. When sentence is non-null and diag is supplied, non-numeric X/Y/Z values are reported via GetParsedDouble(JsonObject, string, Sentence, NcDiagnosticProgress) (id VariableExpression--Unevaluated); when sentence is null, the diagnostic still fires but without a source-line anchor (used by backward-walk / dump-reading callers that cannot tie the read to the current sentence). public static Vec3d GetVec3d(JsonObject json, string sectionKey, Sentence sentence, NcDiagnosticProgress diag) Parameters json JsonObject sectionKey string sentence Sentence diag NcDiagnosticProgress Returns Vec3d GrabDouble(ref string, string, bool) Grab double value with decimal point judgement: The text is changed by replacing tag and value to empty string. If enableIntegerShrink is true and no decimal point, the value should be scale by 0.001. public static double GrabDouble(ref string text, string tag, bool enableIntegerShrink) Parameters text string text tag string tag enableIntegerShrink bool If true and no decimal point exists, the value will be scaled by 0.001. Returns double double value GrabFlag(ref string, string) Grabs and removes a flag from the NC text. public static bool GrabFlag(ref string text, string regexTag) Parameters text string The NC text to search and modify. regexTag string The flag tag to search for. Returns bool True if the flag was found and removed; otherwise, false. GrabFlags(ref string, IEnumerable) Removes the first occurrence of any flag in tags from text (alternation regex). public static bool GrabFlags(ref string text, IEnumerable tags) Parameters text string tags IEnumerable Returns bool true if a match was removed. HasAnyFlag(string, IEnumerable) True if text contains any flag in flags as whole tokens. public static bool HasAnyFlag(string text, IEnumerable flags) Parameters text string flags IEnumerable Returns bool HasAnyFlag(string, string) True if text contains flag as a whole token (see RegexFlagPrefix). public static bool HasAnyFlag(string text, string flag) Parameters text string flag string Returns bool HasFlagInArray(JsonObject, string) Checks if a specific flag string exists in the Parsing.Flags JsonArray. public static bool HasFlagInArray(this JsonObject parsing, string flag) Parameters parsing JsonObject flag string Returns bool ParseDouble(JsonNode) Parses a double from a JsonNode that may be a number or a string. Extends GetDouble(JsonNode) with string parsing support (needed for values from ParameterizedFlagSyntax which stores values as strings like “180”). Returns 0 if null or unparseable. public static double ParseDouble(this JsonNode node) Parameters node JsonNode Returns double RemoveFlagFromArray(JsonObject, string) Removes a specific flag string from the Parsing.Flags JsonArray. public static void RemoveFlagFromArray(this JsonObject parsing, string flag) Parameters parsing JsonObject flag string SetAndTrimUnparsedText(JsonObject, string) Normalises UnparsedText (trim, drop blank-only lines) and removes the property when empty. public static void SetAndTrimUnparsedText(this JsonObject root, string unparsedText) Parameters root JsonObject Block JSON object. unparsedText string Raw tail text after structured fields were consumed. SetVec3d(JsonObject, string, Vec3d) Writes Vec3d to a sub-object under sectionKey, setting only the X/Y/Z keys. If the section already exists, other keys (e.g. A/B/C on a shared MachineCoordinate) are preserved; if it does not exist, a new sub-object is created. Upsert rather than replace so callers that write XYZ and ABC in separate stages (McXyzSyntax and McAbcSyntax) can cooperate on the same MachineCoordinateState section without clobbering each other. public static void SetVec3d(JsonObject json, string sectionKey, Vec3d v) Parameters json JsonObject sectionKey string v Vec3d" + "summary": "Class SoftNcUtil Namespace Hi.NcParsers Assembly HiMech.dll JSON helpers for soft-NC blocks: vectors under Parsing, motion-term queries, flag grab/remove on raw text, and unparsed-line trimming. public static class SoftNcUtil Inheritance object SoftNcUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Properties RegexFlagPrefix Regex prefix pattern that matches word boundary, after digit, after whitespace, or at start of string. The whitespace/start-of-string alternatives are needed for non-word-character prefixes (e.g. Fanuc '#', Siemens '$'). public static string RegexFlagPrefix { get; } Property Value string Methods GetMachineStateDouble(JsonObject, string) Reads a numeric tag from a machine-state section (one written by a LogicSyntax / Semantic with explicit numeric values, not from the parser stage). Used by backward-walk lookback paths (ProgramXyzUtil FindPrevious*, FindPreviousState on Feedrate/SpindleSpeed/IsoLocalCoordinateOffset, modal arc-/linear-feedrate prev-block reads, etc.) where the data is supposed to be guaranteed numeric and any non-numeric is a HiAPIs codegen bug rather than an unevaluated user expression. Tag missing → returns null silently (the section may not have been written on a previous block; caller's ?? default chain handles it). Tag present and numeric → returns the value. Tag present but non-numeric → throws InvalidOperationException immediately. The stack trace anchors the bug at the read site (which is the right place to investigate — the originating block has already passed). Continuing with NaN/0 would silently propagate corrupt coordinates downstream and is more dangerous than crashing the run. Use GetParsedDouble(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) instead when reading from a parser- stage section (variable expressions on the current block deserve a soft diagnostic, not a hard crash). public static double? GetMachineStateDouble(this JsonObject section, string key) Parameters section JsonObject key string Returns double? GetMachineStateVec3d(JsonObject, string) Vec3d reader for machine-state sections (written by upstream LogicSyntaxes / Semantics with explicit numeric values). Section missing → returns null; individual missing X/Y/Z components fall through to NaN; a non-numeric value at any of X/Y/Z throws via GetMachineStateDouble(JsonObject, string) — non-numeric here is a HiAPIs codegen bug, not a user-facing unevaluated expression, and silently degrading to NaN/0 would propagate corrupt coordinates downstream. public static Vec3d GetMachineStateVec3d(JsonObject json, string sectionKey) Parameters json JsonObject sectionKey string Returns Vec3d GetOccupiedMotionEventForm(JsonObject) Reads the form on the current block's MotionEvent section, indicating that a motion event has already been authored on this block by an earlier-stage motion syntax. Returns null when no motion event is present on this block. Used by motion syntaxes to enforce mutual exclusion (only one motion event per block). Reads MotionEvent rather than MotionState because state is modally carried onto every block via ModalCarrySyntax and would always appear \"occupied\"; only the event section is sparse and meaningfully indicates an authored claim on this block. public static string GetOccupiedMotionEventForm(this JsonObject json) Parameters json JsonObject Returns string GetParsedDouble(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) Reads a numeric tag from a JSON object held on a SyntaxPiece (the Parsing tree, a previously-written modal section, or any sub-object thereof), with strict separation between “tag absent” and “tag present but not a number”. Tag missing → returns null silently. The caller's existing ?? default chain handles the \"axis not written\" / \"section absent\" case as before. Tag present and numeric → returns the value. Tag present but non-numeric → emits UnsupportedError(ISentenceCarrier, string, string, object) (id VariableExpression--Unevaluated) and returns null. Two sources land here: Parser-stage residue — a Fanuc \"#124\", Heidenhain \"Q1\", Siemens \"R5\", or bracket expression \"[#100+5]\" stored as a string by ToFloat(string) / ToInteger(string) when the literal parse failed. Remediation: wire up the variable evaluator. Codegen residue — a previously-written modal section that somehow ended up with a non-numeric JsonValue. Remediation: file a HiAPIs bug. Severity is intentionally the same; reconfigurable diagnostic routing handles operator-vs-developer triage and a second error id would be cosmetic. Replaces the legacy idiom section[key]?.GetDouble() at every call site that consumes a numeric tag held on a SyntaxPiece. public static double? GetParsedDouble(this JsonObject section, string key, ISentenceCarrier sentenceCarrier, NcDiagnosticProgress diag) Parameters section JsonObject key string sentenceCarrier ISentenceCarrier diag NcDiagnosticProgress Returns double? GetVec3d(JsonObject, string, Vec3d, ISentenceCarrier, NcDiagnosticProgress) Reads Vec3d from a sub-object with X/Y/Z keys, substituting each missing component (or a missing section) with the matching component of fallback. When sentenceCarrier is non-null and diag is supplied, non-numeric X/Y/Z values are reported via GetParsedDouble(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress); when sentenceCarrier is null, the diagnostic still fires but without a source-line anchor. public static Vec3d GetVec3d(JsonObject json, string sectionKey, Vec3d fallback, ISentenceCarrier sentenceCarrier, NcDiagnosticProgress diag) Parameters json JsonObject sectionKey string fallback Vec3d sentenceCarrier ISentenceCarrier diag NcDiagnosticProgress Returns Vec3d GetVec3d(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) Read Vec3d from a sub-object with X/Y/Z keys. Returns null if the section or all three keys are missing; individual missing keys are filled with NaN. When sentenceCarrier is non-null and diag is supplied, non-numeric X/Y/Z values are reported via GetParsedDouble(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) (id VariableExpression--Unevaluated); when sentenceCarrier is null, the diagnostic still fires but without a source-line anchor (used by backward-walk / dump-reading callers that cannot tie the read to the current sentence). public static Vec3d GetVec3d(JsonObject json, string sectionKey, ISentenceCarrier sentenceCarrier, NcDiagnosticProgress diag) Parameters json JsonObject sectionKey string sentenceCarrier ISentenceCarrier diag NcDiagnosticProgress Returns Vec3d GrabDouble(ref string, string, bool) Grab double value with decimal point judgement: The text is changed by replacing tag and value to empty string. If enableIntegerShrink is true and no decimal point, the value should be scale by 0.001. public static double GrabDouble(ref string text, string tag, bool enableIntegerShrink) Parameters text string text tag string tag enableIntegerShrink bool If true and no decimal point exists, the value will be scaled by 0.001. Returns double double value GrabFlag(ref string, string) Grabs and removes a flag from the NC text. public static bool GrabFlag(ref string text, string regexTag) Parameters text string The NC text to search and modify. regexTag string The flag tag to search for. Returns bool True if the flag was found and removed; otherwise, false. GrabFlags(ref string, IEnumerable) Removes the first occurrence of any flag in tags from text (alternation regex). public static bool GrabFlags(ref string text, IEnumerable tags) Parameters text string tags IEnumerable Returns bool true if a match was removed. HasAnyFlag(string, IEnumerable) True if text contains any flag in flags as whole tokens. public static bool HasAnyFlag(string text, IEnumerable flags) Parameters text string flags IEnumerable Returns bool HasAnyFlag(string, string) True if text contains flag as a whole token (see RegexFlagPrefix). public static bool HasAnyFlag(string text, string flag) Parameters text string flag string Returns bool HasFlagInArray(JsonObject, string) Checks if a specific flag string exists in the Parsing.Flags JsonArray. public static bool HasFlagInArray(this JsonObject parsing, string flag) Parameters parsing JsonObject flag string Returns bool ParseDouble(JsonNode) Parses a double from a JsonNode that may be a number or a string. Extends GetDouble(JsonNode) with string parsing support (needed for values from ParameterizedFlagSyntax which stores values as strings like “180”). Returns 0 if null or unparseable. public static double ParseDouble(this JsonNode node) Parameters node JsonNode Returns double RemoveFlagFromArray(JsonObject, string) Removes a specific flag string from the Parsing.Flags JsonArray. public static void RemoveFlagFromArray(this JsonObject parsing, string flag) Parameters parsing JsonObject flag string SetAndTrimUnparsedText(JsonObject, string) Normalises UnparsedText (trim, drop blank-only lines) and removes the property when empty. public static void SetAndTrimUnparsedText(this JsonObject root, string unparsedText) Parameters root JsonObject Block JSON object. unparsedText string Raw tail text after structured fields were consumed. SetVec3d(JsonObject, string, Vec3d) Writes Vec3d to a sub-object under sectionKey, setting only the X/Y/Z keys. If the section already exists, other keys (e.g. A/B/C on a shared MachineCoordinate) are preserved; if it does not exist, a new sub-object is created. Upsert rather than replace so callers that write XYZ and ABC in separate stages (McXyzSyntax and McAbcSyntax) can cooperate on the same MachineCoordinateState section without clobbering each other. public static void SetVec3d(JsonObject json, string sectionKey, Vec3d v) Parameters json JsonObject sectionKey string v Vec3d" }, "api/Hi.NcParsers.Syntaxs.BundleSyntax.html": { "href": "api/Hi.NcParsers.Syntaxs.BundleSyntax.html", "title": "Class BundleSyntax | HiAPI-C# 2025", - "summary": "Class BundleSyntax Namespace Hi.NcParsers.Syntaxs Assembly HiMech.dll Depth-First Sequential Syntaxes management. It saves space by save the LazyLinkedLists from each syntax to only one LazyLinkedLists in SoftNcRunner to get better performance. If the INcSyntax only edit the current node itself, those self-editing INcSyntax without looks-forward is suitable to put into the BundleSyntax. public class BundleSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object BundleSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors BundleSyntax() Creates an empty bundle (name defaults to the type name BundleSyntax). public BundleSyntax() BundleSyntax(IEnumerable) Creates a bundle with default Name from an ordered syntax list. public BundleSyntax(IEnumerable syntaxes) Parameters syntaxes IEnumerable BundleSyntax(string, IEnumerable) Creates a named bundle wrapping the given syntax list. public BundleSyntax(string name, IEnumerable syntaxes) Parameters name string syntaxes IEnumerable BundleSyntax(XElement, string, string, IProgress) Loads nested in-situ syntax elements from XML under Name. public BundleSyntax(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement baseDirectory string relFile string progress IProgress Properties Name Syntax kind name (typically the concrete type name). public string Name { get; set; } Property Value string SyntaxList Child syntaxes executed in registration order within this bundle. public List SyntaxList { get; } Property Value List XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." + "summary": "Class BundleSyntax Namespace Hi.NcParsers.Syntaxs Assembly HiMech.dll Depth-First Sequential Syntaxes management. It saves space by save the LazyLinkedLists from each syntax to only one LazyLinkedLists in SoftNcRunner to get better performance. If the INcSyntax only edit the current node itself, those self-editing INcSyntax without looks-forward is suitable to put into the BundleSyntax. public class BundleSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object BundleSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors BundleSyntax() Creates an empty bundle (name defaults to the type name BundleSyntax). public BundleSyntax() BundleSyntax(IEnumerable) Creates a bundle with default Name from an ordered syntax list. public BundleSyntax(IEnumerable syntaxes) Parameters syntaxes IEnumerable BundleSyntax(string, IEnumerable) Creates a named bundle wrapping the given syntax list. public BundleSyntax(string name, IEnumerable syntaxes) Parameters name string syntaxes IEnumerable BundleSyntax(XElement, string, string, IProgress) Loads nested in-situ syntax elements from XML under Name. public BundleSyntax(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement baseDirectory string relFile string progress IProgress Properties Name Syntax kind name (typically the concrete type name). public string Name { get; set; } Property Value string SyntaxList Child syntaxes executed in registration order within this bundle. public List SyntaxList { get; } Property Value List XName XML element name for Generators registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file." }, "api/Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html": { "href": "api/Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html", @@ -4837,7 +4977,7 @@ "api/Hi.NcParsers.Syntaxs.SyntaxPiece.html": { "href": "api/Hi.NcParsers.Syntaxs.SyntaxPiece.html", "title": "Class SyntaxPiece | HiAPI-C# 2025", - "summary": "Class SyntaxPiece Namespace Hi.NcParsers.Syntaxs Assembly HiMech.dll One NC block's source line paired with its parsed JSON payload during soft-NC processing. public class SyntaxPiece : IGetSentence Inheritance object SyntaxPiece Implements IGetSentence Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks The design pattern of Sentence and JsonObject are one-one mapping. JSON value type convention: Prefer base types (double, int) over string for numeric values in JsonObject. This applies to both parsing syntaxes and logic syntaxes. Strings should only be used when the value is genuinely textual (e.g., macro variable references like \"#1\", \"Q2\", coordinate IDs like \"G54\") or when the value cannot be parsed to a number. Use FloatTagValueSyntax, IntegerTagValueSyntax, or FloatParamPrefixes / IntParamPrefixes to store typed values at parse time. Constructors SyntaxPiece(Sentence, JsonObject) Creates a piece binding sentence to jsonObject. public SyntaxPiece(Sentence sentence, JsonObject jsonObject) Parameters sentence Sentence jsonObject JsonObject Properties JsonObject Structured parse result built by syntax passes. public JsonObject JsonObject { get; set; } Property Value JsonObject Sentence Indexed source line and block text for this piece. public Sentence Sentence { get; set; } Property Value Sentence SentenceIndex 0-based ordinal in NC execution order. Stamped at piece construction time by GetSyntaxPieces(ISegmenter, LazyLinkedList, int, NcDiagnosticProgress, CancellationToken) from the destination layers[0]'s running count, so subprogram pieces inlined by SubProgramCallSyntax get sequential indices that interleave correctly between host blocks. Useful as a cross-process alignment key (messages, ClStripPos, MachiningStep) — unlike FileLineUtil.MixedIndex(), it reflects execution order rather than (FileIndex, LineIndex) source order. public int SentenceIndex { get; set; } Property Value int Methods GetSentence() Returns the source Sentence carried by this object. public Sentence GetSentence() Returns Sentence ToString() Serialize with Hi.NcParsers.Syntaxs.NcSyntaxUtil.Options to support NaN/Infinity. public override string ToString() Returns string" + "summary": "Class SyntaxPiece Namespace Hi.NcParsers.Syntaxs Assembly HiMech.dll One NC block's source line paired with its parsed JSON payload during soft-NC processing. public class SyntaxPiece : ISentenceCarrier, IGetSentence, ISentenceIndexed Inheritance object SyntaxPiece Implements ISentenceCarrier IGetSentence ISentenceIndexed Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks The design pattern of Sentence and JsonObject are one-one mapping. JSON value type convention: Prefer base types (double, int) over string for numeric values in JsonObject. This applies to both parsing syntaxes and logic syntaxes. Strings should only be used when the value is genuinely textual (e.g., macro variable references like \"#1\", \"Q2\", coordinate IDs like \"G54\") or when the value cannot be parsed to a number. Use FloatTagValueSyntax, IntegerTagValueSyntax, or FloatParamPrefixes / IntParamPrefixes to store typed values at parse time. Constructors SyntaxPiece(Sentence, JsonObject, int) Creates a piece binding sentence to jsonObject with its execution-order sentenceIndex. public SyntaxPiece(Sentence sentence, JsonObject jsonObject, int sentenceIndex) Parameters sentence Sentence jsonObject JsonObject sentenceIndex int Properties JsonObject Structured parse result built by syntax passes. public JsonObject JsonObject { get; set; } Property Value JsonObject Sentence Indexed source line and block text for this piece. public Sentence Sentence { get; set; } Property Value Sentence SentenceIndex 0-based ordinal in NC execution order. Stamped at piece construction time by GetSyntaxPieces(ISegmenter, IEnumerable, int, NcDiagnosticProgress, CancellationToken) from the destination layers[0]'s running count, so subprogram pieces inlined by SubProgramCallSyntax get sequential indices that interleave correctly between host blocks. Useful as a cross-process alignment key (messages, ClStripPos, MachiningStep) — unlike FileLineUtil.MixedIndex(), it reflects execution order rather than (FileIndex, LineIndex) source order. Required at construction: the index is identity, not optional metadata. Read-only after construction; the pipeline guarantees one stamping per piece at the wrapping chokepoint. public int SentenceIndex { get; } Property Value int Methods GetSentence() Returns the source Sentence carried by this object. public Sentence GetSentence() Returns Sentence ToString() Serialize with Hi.NcParsers.Syntaxs.NcSyntaxUtil.Options to support NaN/Infinity. public override string ToString() Returns string" }, "api/Hi.NcParsers.Syntaxs.SyntaxStageKeys.html": { "href": "api/Hi.NcParsers.Syntaxs.SyntaxStageKeys.html", @@ -4867,7 +5007,7 @@ "api/Hi.NcParsers.html": { "href": "api/Hi.NcParsers.html", "title": "Namespace Hi.NcParsers | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers Classes NcDiagnostic A structured diagnostic from the SoftNcRunner pipeline, designed for IProgress consumption. Id is composed as {Primary}-{Secondary}--{Abbrev} (e.g., Cycle-Peck--BadPeckQ, Syntax-Build--Exception). For irregular cases that don't fit the pattern, use a custom string. NcDiagnosticProgress Helper that emits NcDiagnostic records via an IProgress sink. Provides one method per (NcDiagnosticCategory, NcDiagnosticSeverity) pair, each with an optional Sentence overload locating the issue in the NC source. Sentence A small NC block for one or several lines. SoftNcRunner Configurable NC Runner. SoftNcUtil JSON helpers for soft-NC blocks: vectors under Parsing, motion-term queries, flag grab/remove on raw text, and unparsed-line trimming. Interfaces IGetSentence Abstraction for a source that carries a Sentence. Enums NcDiagnosticCategory Diagnostic category of an NC diagnostic. System + Error → exception/bug, unconsidered case Unsupported + Warning → known unsupported, likely harmless Unsupported + Error → known unsupported, likely matters Validation + Warning → manufacturing/physics may be unfeasible Validation + Error → manufacturing/physics is unfeasible Configuration + Message → dependency/config applied, informational event (e.g. a block skipped by an enabled IBlockSkipConfig layer) Configuration + Warning → dependency/config missing, using fallback Configuration + Error → dependency/config missing, cannot proceed NcDiagnosticSeverity Importance level of an NC diagnostic. Combined with NcDiagnosticCategory to form the full diagnostic meaning (e.g., Unsupported + Warning)." + "summary": "Namespace Hi.NcParsers Classes IndexedSentence Minimal ISentenceCarrier pairing a Sentence with its execution-order SentenceIndex. Use when there is no richer host object that already carries the sentence — e.g. CSV-driven runs that go straight from an input line to a Sentence without a SyntaxPiece wrapper. NcDiagnostic A structured diagnostic from the SoftNcRunner pipeline, designed for IProgress consumption. Id is composed as {Primary}-{Secondary}--{Abbrev} (e.g., Cycle-Peck--BadPeckQ, Syntax-Build--Exception). For irregular cases that don't fit the pattern, use a custom string. NcDiagnosticProgress Helper that emits NcDiagnostic records via an IProgress sink. Provides one method per (NcDiagnosticCategory, NcDiagnosticSeverity) pair, each with an optional Sentence overload locating the issue in the NC source. Sentence A small NC block for one or several lines. SoftNcRunner Configurable NC Runner. SoftNcUtil JSON helpers for soft-NC blocks: vectors under Parsing, motion-term queries, flag grab/remove on raw text, and unparsed-line trimming. Interfaces IGetSentence Abstraction for a source that carries a Sentence. ISentenceCarrier Carries a reference to a source Sentence together with its execution-order SentenceIndex. Used as the cross-process alignment carrier for diagnostics, messages, ClStripPos, MachiningStep, etc. — both the source content (via GetSentence()) and the execution-order position (via SentenceIndex) are available without needing two separate references. ISentenceIndexed Abstraction for an object that carries a SentenceIndex — a 0-based ordinal of its source Sentence in NC execution order. Use as a cross-process alignment key (messages, ClStripPos, MachiningStep, etc.) when source order (MixedIndex(IFileLineIndex)) is not enough because SubProgram inline reorders blocks relative to (FileIndex, LineIndex). Enums NcDiagnosticCategory Diagnostic category of an NC diagnostic. System + Error → exception/bug, unconsidered case Unsupported + Warning → known unsupported, likely harmless Unsupported + Error → known unsupported, likely matters Validation + Warning → manufacturing/physics may be unfeasible Validation + Error → manufacturing/physics is unfeasible Configuration + Message → dependency/config applied, informational event (e.g. a block skipped by an enabled IBlockSkipConfig layer) Configuration + Warning → dependency/config missing, using fallback Configuration + Error → dependency/config missing, cannot proceed NcDiagnosticSeverity Importance level of an NC diagnostic. Combined with NcDiagnosticCategory to form the full diagnostic meaning (e.g., Unsupported + Warning)." }, "api/Hi.Numerical.Acts.ActActualTime.html": { "href": "api/Hi.Numerical.Acts.ActActualTime.html", @@ -5117,7 +5257,7 @@ "api/Hi.Numerical.FilePlayers.CsvRunner.html": { "href": "api/Hi.Numerical.FilePlayers.CsvRunner.html", "title": "Class CsvRunner | HiAPI-C# 2025", - "summary": "Class CsvRunner Namespace Hi.Numerical.FilePlayers Assembly HiNc.dll Provides functionality for running and processing csv lines. public class CsvRunner : IControlRunner Inheritance object CsvRunner Implements IControlRunner Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CsvRunner(LocalProjectService) Initializes a new instance. public CsvRunner(LocalProjectService localProjectService) Parameters localProjectService LocalProjectService The local project service. Properties Config Configuration for CSV Runner. public CsvRunnerConfig Config { get; set; } Property Value CsvRunnerConfig Methods Reset() Reset runtime data. public void Reset() RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) Runs raw Control lines and yields source sentence and Act pairs. public IEnumerable RunControlLines(string relFilePath, IEnumerable lines, MachiningSession machiningSession, SessionProgress sessionMessageHost, CancellationToken cancellationToken) Parameters relFilePath string The relative path of the control file lines IEnumerable The enumerable collection of command (control code) lines machiningSession MachiningSession Session-scoped state shared across multiple RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) calls (e.g. lazy-initialized pipeline state, file-index counter). sessionMessageHost SessionProgress cancellationToken CancellationToken Cancellation token to cancel the operation Returns IEnumerable Enumerable of source sentence and Act pairs" + "summary": "Class CsvRunner Namespace Hi.Numerical.FilePlayers Assembly HiNc.dll Provides functionality for running and processing csv lines. public class CsvRunner : IControlRunner Inheritance object CsvRunner Implements IControlRunner Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CsvRunner(LocalProjectService) Initializes a new instance. public CsvRunner(LocalProjectService localProjectService) Parameters localProjectService LocalProjectService The local project service. Properties Config Configuration for CSV Runner. public CsvRunnerConfig Config { get; set; } Property Value CsvRunnerConfig Methods Reset() Reset runtime data, including the execution-order Hi.Numerical.FilePlayers.CsvRunner.sentenceIndex counter. Called from LocalProjectService.ResetRuntime only — session stop (EndSession) deliberately does not reset the runner. public void Reset() RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) Runs raw Control lines and yields source sentence and Act pairs. public IEnumerable RunControlLines(string relFilePath, IEnumerable lines, MachiningSession machiningSession, SessionProgress sessionMessageHost, CancellationToken cancellationToken) Parameters relFilePath string The relative path of the control file lines IEnumerable The enumerable collection of command (control code) lines machiningSession MachiningSession Session-scoped state shared across multiple RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) calls (e.g. lazy-initialized pipeline state, file-index counter). sessionMessageHost SessionProgress cancellationToken CancellationToken Cancellation token to cancel the operation Returns IEnumerable Enumerable of source sentence and Act pairs" }, "api/Hi.Numerical.FilePlayers.CsvRunnerConfig.html": { "href": "api/Hi.Numerical.FilePlayers.CsvRunnerConfig.html", @@ -5152,7 +5292,7 @@ "api/Hi.Numerical.HardNcLine.html": { "href": "api/Hi.Numerical.HardNcLine.html", "title": "Class HardNcLine | HiAPI-C# 2025", - "summary": "Class HardNcLine Namespace Hi.Numerical Assembly HiUniNc.dll Represents a line in the NC program with its associated data and operations. public class HardNcLine : IIndexedFileLine, IFileLine, IFileLineIndex, IGetIndexedFileLine, IGetFileLineIndex, IFlagText, IGetSentence Inheritance object HardNcLine Implements IIndexedFileLine IFileLine IFileLineIndex IGetIndexedFileLine IGetFileLineIndex IFlagText IGetSentence Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) HardNcUtil.IsFlagChanging(HardNcLine, HardNcLine, NcFlag) HardNcUtil.IsFlagChanging(HardNcLine, HardNcLine, NcFlag, bool) HardNcUtil.IsFlagKeeping(HardNcLine, HardNcLine, NcFlag, bool) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HardNcLine(HardNcEnv, IndexedFileLine, HardNcLine, out NcNoteCache, IProgress) Ctor from the reference HardNcLine. public HardNcLine(HardNcEnv ncEnv, IndexedFileLine fileLine, HardNcLine preNcLine, out NcNoteCache ncNoteCache, IProgress progress) Parameters ncEnv HardNcEnv NC environment fileLine IndexedFileLine file line preNcLine HardNcLine reference HardNcLine that this HardNcLine copy from. If previous HardNcLine is not null, apply previous HardNcLine. ncNoteCache NcNoteCache Output NC note cache progress IProgress Message host for warnings HardNcLine(HardNcEnv, IProgress) Ctor for initial state. public HardNcLine(HardNcEnv ncEnv, IProgress messageHost) Parameters ncEnv HardNcEnv messageHost IProgress Properties ArcNcArg NC arguments for arc commands. public ArcNcArg ArcNcArg { get; set; } Property Value ArcNcArg CoordinateInterpolationMode Gets the current coordinate interpolation mode (Cartesian or Polar). public CoordinateInterpolationMode CoordinateInterpolationMode { get; } Property Value CoordinateInterpolationMode F F. Feedrate on NC code. Note that this may not be the working feedrate. Some NC codes like G00 and G28 doesnt use F code. public double F { get; set; } Property Value double Remarks According to Fanuc manual, the default F is zero. Feedrate_mmdmin Feedrate on NC code in current mode in mm/min. See F. public double Feedrate_mmdmin { get; set; } Property Value double Feedrate_mmds Feedrate on NC code in current mode in mm/sec. public double Feedrate_mmds { get; set; } Property Value double FileIndex File Index. Start on 0. public int FileIndex { get; } Property Value int FileNo Gets the file number. [Present(\"File Number\", \"FileNo\", PhysicsUnit.None, \"G\")] public int FileNo { get; } Property Value int FilePath File path. [Present(\"File\", \"File\", PhysicsUnit.None, \"G\")] public string FilePath { get; } Property Value string FlagsText Gets a string representation of the active NC flags for this line. public string FlagsText { get; } Property Value string G28Arg Arguments for G28 commands. public G28Arg G28Arg { get; set; } Property Value G28Arg G52_Xyz Local coordinate system translation. public Vec3d G52_Xyz { get; set; } Property Value Vec3d G54SeriesCoordinateNum1000 Faunc Group14 value. Note that Heidenhain Datum shift is set by DatumTableId. public int G54SeriesCoordinateNum1000 { get; set; } Property Value int Group07NcArg Arguments for Group07 NC commands (tool radius compensation). public Group07NcArg Group07NcArg { get; set; } Property Value Group07NcArg Group07_D Radius compensation ID. Note that in Siemens controller, each tool ID has several D entry. public int Group07_D { get; set; } Property Value int Group08_H Height compensation ID. For Siemens Traori, the value is Tool ID. For Heidenhain, the value is Tool ID. public int Group08_H { get; set; } Property Value int Group09NcArg NC Argument of NC Group09. public Group09NcArg Group09NcArg { get; set; } Property Value Group09NcArg HeidenhainBlockCacheArg Heidenhain block cache arguments for various Heidenhain commands. public IHeidenhainBlockCacheArg HeidenhainBlockCacheArg { get; set; } Property Value IHeidenhainBlockCacheArg HeidenhainCycleDef247Q339 DATUM SETTING DATUM Number. public int HeidenhainCycleDef247Q339 { get; set; } Property Value int HeidenhainCycleDef7Arg Arguments for Heidenhain Cycle Definition 7 (datum shift). public HeidenhainCycleDef7Arg HeidenhainCycleDef7Arg { get; set; } Property Value HeidenhainCycleDef7Arg HeidenhainM140MB HeidenhainM140(Retract the tool) MB value. MB is the retraction height. double.positiveInf is [MB MAX]. One shot command. public double HeidenhainM140MB { get; set; } Property Value double HeidenhainQMacroMap Dictionary mapping Q macro numbers to their string values for Heidenhain controllers. public Dictionary HeidenhainQMacroMap { get; set; } Property Value Dictionary HeidenhainToolAxisDir Direction of the tool axis for Heidenhain controllers. public int HeidenhainToolAxisDir { get; set; } Property Value int IndexedFileLine The file line information associated with this NC line. public IndexedFileLine IndexedFileLine { get; } Property Value IndexedFileLine IsAbsolutePositioning Gets a value indicating whether absolute positioning (G90) is active. public bool IsAbsolutePositioning { get; } Property Value bool IsHeightCompensationEnabled Gets a value indicating whether height compensation is enabled. public bool IsHeightCompensationEnabled { get; } Property Value bool IsOnArcCommand Gets a value indicating whether an arc command (G02 or G03) is active. public bool IsOnArcCommand { get; } Property Value bool IsPathPrepared Gets a value indicating whether the path is prepared (no radius compensation). public bool IsPathPrepared { get; } Property Value bool IsRadiusCompensationEnabled Gets a value indicating whether radius compensation is enabled. public bool IsRadiusCompensationEnabled { get; } Property Value bool IsToolCenterPointManagementEnabled Gets a value indicating whether tool center point management is enabled. public bool IsToolCenterPointManagementEnabled { get; } Property Value bool Line The line. [Present(\"Line\", \"Line\", PhysicsUnit.None, \"G\")] public string Line { get; } Property Value string LineIndex Line Index. Start on 0. public int LineIndex { get; } Property Value int LineNo Gets the line number. [Present(\"Line Number\", \"LineNo\", PhysicsUnit.None, \"G\")] public int LineNo { get; } Property Value int MachiningFeedrate_mmdmin Machining Feedrate on NC code in machining mode (such as G01,G02,G03 but not G00) in mm/min. public double MachiningFeedrate_mmdmin { get; set; } Property Value double MachiningFeedrate_mmds Machining Feedrate on NC code in machining mode (such as G01,G02,G03 but not G00) in mm/sec. public double MachiningFeedrate_mmds { get; set; } Property Value double McAbc_deg Gets or sets the machine ABC coordinates in degrees. public Vec3d McAbc_deg { get; set; } Property Value Vec3d McAbc_rad Machine coordinates in ABC format (radians). public Vec3d McAbc_rad { get; } Property Value Vec3d McXyz Gets or sets the machine coordinate XYZ values. public Vec3d McXyz { get; } Property Value Vec3d McXyzabc Machine coordinate ( with side radius compensation if existed). Point is XYZ. the unit is mm. Normal is ABC. the unit is radian. public DVec3d McXyzabc { get; } Property Value DVec3d NcFlagBitArray Internal Used. public BitArray NcFlagBitArray { get; } Property Value BitArray PausingNcArg public PausingNcArg PausingNcArg { get; set; } Property Value PausingNcArg Remarks Since this is base on OneShot Flag, so here has no copy ctor. PolarEntry Data structure for polar coordinates entry. public PolarEntry PolarEntry { get; set; } Property Value PolarEntry PreparationT Tool ID for preparation. public int PreparationT { get; set; } Property Value int ProgramOrthogonalPlaneNormal The orthogonal plane transform after tilting plane transform. Include G17, G18, G19 and plane of called G12p1. public Vec3d ProgramOrthogonalPlaneNormal { get; } Property Value Vec3d ProgramPos ProgramPos can be cartesian XYZ or polar XCZ with radius-based X, depends on CoordinateInterpolationMode. public Vec3d ProgramPos { get; } Property Value Vec3d ProgramXyz XYZ in Feature Coordinate. Cartesian Program Position XYZ, Abs Program Position (as G90 position). NC coordinate position is the position processed by modal flags. NC coordinate position is the position after radius compensation. The NC(Program) coordinate position is comprehensible by User. MC NC conversion may raise floating error. The floating error raise the cutting force issue, especially for bottom cutting force. Hence the NC values have to be memorized. public Vec3d ProgramXyz { get; } Property Value Vec3d Remarks NC is the better source property than MC. Ex. a NC line command: X100. The Y and Z value may vary if using MC converting back to NC. The error of Y and Z will keeps accumulating until the next explicit YZ command assignment. The error maybe up to 3e-5 in current case. the bounding box size of the case is not large (TT.20230815). Also note that if using Arc command for a complete circle, the begin NC XYZ and the end NC XYZ have to be equaled. Otherwise, it will become only a very small arc rather than the circle. So be care that do not change the NC XYZ if not needed. RadiusCompensationBuf Internal use. public RadiusCompensationBuf RadiusCompensationBuf { get; set; } Property Value RadiusCompensationBuf RapidFeedrate_mmdmin Rapid Feedrate on NC code in rapid mode (such as G00 but not G01,G02,G03) in mm/min. public double RapidFeedrate_mmdmin { get; set; } Property Value double RapidFeedrate_mmds Rapid Feedrate on NC code in rapid mode (such as G00 but not G01,G02,G03) in mm/sec. public double RapidFeedrate_mmds { get; set; } Property Value double S S. Spindle speed. public int S { get; set; } Property Value int SpindleSpeed_radds Spindle speed in radian/s. public double SpindleSpeed_radds { get; set; } Property Value double SpindleSpeed_rpm Spindle speed in RPM. public double SpindleSpeed_rpm { get; set; } Property Value double T Current equiped Tool ID. public int T { get; set; } Property Value int TiltPlaneNcArg Arguments related to tilted plane operations. public ITiltPlaneNcArg TiltPlaneNcArg { get; set; } Property Value ITiltPlaneNcArg Methods GetAttacherMat(HardNcEnv) Gets the attacher transformation matrix for the current machine coordinates. public Mat4d GetAttacherMat(HardNcEnv ncEnv) Parameters ncEnv HardNcEnv The NC environment. Returns Mat4d The attacher transformation matrix. GetCompensationHeight(HardNcEnv, IProgress) Gets the tool height compensation value for this NC line. public double GetCompensationHeight(HardNcEnv ncEnv, IProgress messageHost) Parameters ncEnv HardNcEnv NC environment messageHost IProgress Message host for warnings Returns double Height compensation value GetCompensationRadius(CncBrand, MillingToolOffsetTable, IProgress) Gets the tool radius compensation value for this NC line. public double GetCompensationRadius(CncBrand cncBrand, MillingToolOffsetTable millingToolOffsetTable, IProgress messageHost) Parameters cncBrand CncBrand CNC brand millingToolOffsetTable MillingToolOffsetTable Milling tool offset table messageHost IProgress Message host for warnings Returns double Radius compensation value GetFileLineIndex() Get FileLineIndex. public FileLineIndex GetFileLineIndex() Returns FileLineIndex FileLineIndex GetG5xCoordinateOffset(HardNcEnv) Gets the G5x coordinate offset for this NC line. public Vec3d GetG5xCoordinateOffset(HardNcEnv ncEnv) Parameters ncEnv HardNcEnv NC environment Returns Vec3d The G5x coordinate offset vector GetIndexedFileLine() Gets the file line associated with this object. public IndexedFileLine GetIndexedFileLine() Returns IndexedFileLine The file line object. GetMcByProgramPos(Vec3d, HardNcEnv, NcNoteCache, IProgress, out Vec3d) Internal Use. public DVec3d GetMcByProgramPos(Vec3d programPos, HardNcEnv ncEnv, NcNoteCache ncNoteCache, IProgress messageHost, out Vec3d programXyz) Parameters programPos Vec3d ncEnv HardNcEnv ncNoteCache NcNoteCache messageHost IProgress programXyz Vec3d Returns DVec3d GetSentence() Returns the source Sentence carried by this object. public Sentence GetSentence() Returns Sentence GetSourceCommand() public IIndexedFileLine GetSourceCommand() Returns IIndexedFileLine GetTiltMat4d(HardNcEnv, out Mat4d) Internal Use Only. public bool? GetTiltMat4d(HardNcEnv ncEnv, out Mat4d tableToFeatureTransform) Parameters ncEnv HardNcEnv NC environment. tableToFeatureTransform Mat4d Transform from NC to Table without tool compensation and linear coordinate offset (such as G55,G56..). Returns bool? True if G68.2 is successfully applied, false if not, and null if not applicable. HasSyntaxXyz(HardNcEnv) Determines whether the line contains syntactic XYZ coordinates. public bool HasSyntaxXyz(HardNcEnv ncEnv) Parameters ncEnv HardNcEnv NC environment Returns bool True if syntactic XYZ coordinates are present; otherwise, false. RebuildByMc(HardNcEnv, DVec3d, NcNoteCache, IProgress) Internal Use Only. For NC opt. public void RebuildByMc(HardNcEnv ncEnv, DVec3d mc, NcNoteCache ncNoteCache, IProgress messageHost) Parameters ncEnv HardNcEnv NC environment. mc DVec3d MC coordinates. ncNoteCache NcNoteCache NC line cache. messageHost IProgress Message host for logging and reporting. RebuildByProgramXyz(HardNcEnv, Vec3d, NcNoteCache, IProgress) Internal Use Only. For NC opt. public void RebuildByProgramXyz(HardNcEnv ncEnv, Vec3d programXyz, NcNoteCache ncNoteCache, IProgress messageHost) Parameters ncEnv HardNcEnv NC environment. programXyz Vec3d Program XYZ coordinates. ncNoteCache NcNoteCache NC note cache. messageHost IProgress Message host for logging and reporting. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." + "summary": "Class HardNcLine Namespace Hi.Numerical Assembly HiUniNc.dll Represents a line in the NC program with its associated data and operations. public class HardNcLine : IIndexedFileLine, IFileLine, IFileLineIndex, IGetIndexedFileLine, IGetFileLineIndex, IFlagText, ISentenceCarrier, IGetSentence, ISentenceIndexed Inheritance object HardNcLine Implements IIndexedFileLine IFileLine IFileLineIndex IGetIndexedFileLine IGetFileLineIndex IFlagText ISentenceCarrier IGetSentence ISentenceIndexed Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) HardNcUtil.IsFlagChanging(HardNcLine, HardNcLine, NcFlag) HardNcUtil.IsFlagChanging(HardNcLine, HardNcLine, NcFlag, bool) HardNcUtil.IsFlagKeeping(HardNcLine, HardNcLine, NcFlag, bool) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HardNcLine(HardNcEnv, IndexedFileLine, HardNcLine, int, out NcNoteCache, IProgress) Ctor from the reference HardNcLine. public HardNcLine(HardNcEnv ncEnv, IndexedFileLine fileLine, HardNcLine preNcLine, int sentenceIndex, out NcNoteCache ncNoteCache, IProgress progress) Parameters ncEnv HardNcEnv NC environment fileLine IndexedFileLine file line preNcLine HardNcLine reference HardNcLine that this HardNcLine copy from. If previous HardNcLine is not null, apply previous HardNcLine. sentenceIndex int 0-based ordinal in NC execution order; stamped at construction and exposed via SentenceIndex. ncNoteCache NcNoteCache Output NC note cache progress IProgress Message host for warnings HardNcLine(HardNcEnv, IProgress) Ctor for initial state. The instance is the pre-pipeline seed (RefNcLineOnInit), so SentenceIndex is set to -1 as a “not in pipeline” sentinel. public HardNcLine(HardNcEnv ncEnv, IProgress messageHost) Parameters ncEnv HardNcEnv messageHost IProgress Properties ArcNcArg NC arguments for arc commands. public ArcNcArg ArcNcArg { get; set; } Property Value ArcNcArg CoordinateInterpolationMode Gets the current coordinate interpolation mode (Cartesian or Polar). public CoordinateInterpolationMode CoordinateInterpolationMode { get; } Property Value CoordinateInterpolationMode F F. Feedrate on NC code. Note that this may not be the working feedrate. Some NC codes like G00 and G28 doesnt use F code. public double F { get; set; } Property Value double Remarks According to Fanuc manual, the default F is zero. Feedrate_mmdmin Feedrate on NC code in current mode in mm/min. See F. public double Feedrate_mmdmin { get; set; } Property Value double Feedrate_mmds Feedrate on NC code in current mode in mm/sec. public double Feedrate_mmds { get; set; } Property Value double FileIndex File Index. Start on 0. public int FileIndex { get; } Property Value int FileNo Gets the file number. [Present(\"File Number\", \"FileNo\", PhysicsUnit.None, \"G\")] public int FileNo { get; } Property Value int FilePath File path. [Present(\"File\", \"File\", PhysicsUnit.None, \"G\")] public string FilePath { get; } Property Value string FlagsText Gets a string representation of the active NC flags for this line. public string FlagsText { get; } Property Value string G28Arg Arguments for G28 commands. public G28Arg G28Arg { get; set; } Property Value G28Arg G52_Xyz Local coordinate system translation. public Vec3d G52_Xyz { get; set; } Property Value Vec3d G54SeriesCoordinateNum1000 Faunc Group14 value. Note that Heidenhain Datum shift is set by DatumTableId. public int G54SeriesCoordinateNum1000 { get; set; } Property Value int Group07NcArg Arguments for Group07 NC commands (tool radius compensation). public Group07NcArg Group07NcArg { get; set; } Property Value Group07NcArg Group07_D Radius compensation ID. Note that in Siemens controller, each tool ID has several D entry. public int Group07_D { get; set; } Property Value int Group08_H Height compensation ID. For Siemens Traori, the value is Tool ID. For Heidenhain, the value is Tool ID. public int Group08_H { get; set; } Property Value int Group09NcArg NC Argument of NC Group09. public Group09NcArg Group09NcArg { get; set; } Property Value Group09NcArg HeidenhainBlockCacheArg Heidenhain block cache arguments for various Heidenhain commands. public IHeidenhainBlockCacheArg HeidenhainBlockCacheArg { get; set; } Property Value IHeidenhainBlockCacheArg HeidenhainCycleDef247Q339 DATUM SETTING DATUM Number. public int HeidenhainCycleDef247Q339 { get; set; } Property Value int HeidenhainCycleDef7Arg Arguments for Heidenhain Cycle Definition 7 (datum shift). public HeidenhainCycleDef7Arg HeidenhainCycleDef7Arg { get; set; } Property Value HeidenhainCycleDef7Arg HeidenhainM140MB HeidenhainM140(Retract the tool) MB value. MB is the retraction height. double.positiveInf is [MB MAX]. One shot command. public double HeidenhainM140MB { get; set; } Property Value double HeidenhainQMacroMap Dictionary mapping Q macro numbers to their string values for Heidenhain controllers. public Dictionary HeidenhainQMacroMap { get; set; } Property Value Dictionary HeidenhainToolAxisDir Direction of the tool axis for Heidenhain controllers. public int HeidenhainToolAxisDir { get; set; } Property Value int IndexedFileLine The file line information associated with this NC line. public IndexedFileLine IndexedFileLine { get; } Property Value IndexedFileLine IsAbsolutePositioning Gets a value indicating whether absolute positioning (G90) is active. public bool IsAbsolutePositioning { get; } Property Value bool IsHeightCompensationEnabled Gets a value indicating whether height compensation is enabled. public bool IsHeightCompensationEnabled { get; } Property Value bool IsOnArcCommand Gets a value indicating whether an arc command (G02 or G03) is active. public bool IsOnArcCommand { get; } Property Value bool IsPathPrepared Gets a value indicating whether the path is prepared (no radius compensation). public bool IsPathPrepared { get; } Property Value bool IsRadiusCompensationEnabled Gets a value indicating whether radius compensation is enabled. public bool IsRadiusCompensationEnabled { get; } Property Value bool IsToolCenterPointManagementEnabled Gets a value indicating whether tool center point management is enabled. public bool IsToolCenterPointManagementEnabled { get; } Property Value bool Line The line. [Present(\"Line\", \"Line\", PhysicsUnit.None, \"G\")] public string Line { get; } Property Value string LineIndex Line Index. Start on 0. public int LineIndex { get; } Property Value int LineNo Gets the line number. [Present(\"Line Number\", \"LineNo\", PhysicsUnit.None, \"G\")] public int LineNo { get; } Property Value int MachiningFeedrate_mmdmin Machining Feedrate on NC code in machining mode (such as G01,G02,G03 but not G00) in mm/min. public double MachiningFeedrate_mmdmin { get; set; } Property Value double MachiningFeedrate_mmds Machining Feedrate on NC code in machining mode (such as G01,G02,G03 but not G00) in mm/sec. public double MachiningFeedrate_mmds { get; set; } Property Value double McAbc_deg Gets or sets the machine ABC coordinates in degrees. public Vec3d McAbc_deg { get; set; } Property Value Vec3d McAbc_rad Machine coordinates in ABC format (radians). public Vec3d McAbc_rad { get; } Property Value Vec3d McXyz Gets or sets the machine coordinate XYZ values. public Vec3d McXyz { get; } Property Value Vec3d McXyzabc Machine coordinate ( with side radius compensation if existed). Point is XYZ. the unit is mm. Normal is ABC. the unit is radian. public DVec3d McXyzabc { get; } Property Value DVec3d NcFlagBitArray Internal Used. public BitArray NcFlagBitArray { get; } Property Value BitArray PausingNcArg public PausingNcArg PausingNcArg { get; set; } Property Value PausingNcArg Remarks Since this is base on OneShot Flag, so here has no copy ctor. PolarEntry Data structure for polar coordinates entry. public PolarEntry PolarEntry { get; set; } Property Value PolarEntry PreparationT Tool ID for preparation. public int PreparationT { get; set; } Property Value int ProgramOrthogonalPlaneNormal The orthogonal plane transform after tilting plane transform. Include G17, G18, G19 and plane of called G12p1. public Vec3d ProgramOrthogonalPlaneNormal { get; } Property Value Vec3d ProgramPos ProgramPos can be cartesian XYZ or polar XCZ with radius-based X, depends on CoordinateInterpolationMode. public Vec3d ProgramPos { get; } Property Value Vec3d ProgramXyz XYZ in Feature Coordinate. Cartesian Program Position XYZ, Abs Program Position (as G90 position). NC coordinate position is the position processed by modal flags. NC coordinate position is the position after radius compensation. The NC(Program) coordinate position is comprehensible by User. MC NC conversion may raise floating error. The floating error raise the cutting force issue, especially for bottom cutting force. Hence the NC values have to be memorized. public Vec3d ProgramXyz { get; } Property Value Vec3d Remarks NC is the better source property than MC. Ex. a NC line command: X100. The Y and Z value may vary if using MC converting back to NC. The error of Y and Z will keeps accumulating until the next explicit YZ command assignment. The error maybe up to 3e-5 in current case. the bounding box size of the case is not large (TT.20230815). Also note that if using Arc command for a complete circle, the begin NC XYZ and the end NC XYZ have to be equaled. Otherwise, it will become only a very small arc rather than the circle. So be care that do not change the NC XYZ if not needed. RadiusCompensationBuf Internal use. public RadiusCompensationBuf RadiusCompensationBuf { get; set; } Property Value RadiusCompensationBuf RapidFeedrate_mmdmin Rapid Feedrate on NC code in rapid mode (such as G00 but not G01,G02,G03) in mm/min. public double RapidFeedrate_mmdmin { get; set; } Property Value double RapidFeedrate_mmds Rapid Feedrate on NC code in rapid mode (such as G00 but not G01,G02,G03) in mm/sec. public double RapidFeedrate_mmds { get; set; } Property Value double S S. Spindle speed. public int S { get; set; } Property Value int SentenceIndex 0-based ordinal in NC execution order, stamped at construction by Hi.Numerical.FilePlayers.HardNcRunner (source-side) or by NcOptProc (optimized-side, a fresh independent count). Init-state lines (RefNcLineOnInit) carry -1 as a “not in pipeline” sentinel. public int SentenceIndex { get; } Property Value int SpindleSpeed_radds Spindle speed in radian/s. public double SpindleSpeed_radds { get; set; } Property Value double SpindleSpeed_rpm Spindle speed in RPM. public double SpindleSpeed_rpm { get; set; } Property Value double T Current equiped Tool ID. public int T { get; set; } Property Value int TiltPlaneNcArg Arguments related to tilted plane operations. public ITiltPlaneNcArg TiltPlaneNcArg { get; set; } Property Value ITiltPlaneNcArg Methods GetAttacherMat(HardNcEnv) Gets the attacher transformation matrix for the current machine coordinates. public Mat4d GetAttacherMat(HardNcEnv ncEnv) Parameters ncEnv HardNcEnv The NC environment. Returns Mat4d The attacher transformation matrix. GetCompensationHeight(HardNcEnv, IProgress) Gets the tool height compensation value for this NC line. public double GetCompensationHeight(HardNcEnv ncEnv, IProgress messageHost) Parameters ncEnv HardNcEnv NC environment messageHost IProgress Message host for warnings Returns double Height compensation value GetCompensationRadius(CncBrand, MillingToolOffsetTable, IProgress) Gets the tool radius compensation value for this NC line. public double GetCompensationRadius(CncBrand cncBrand, MillingToolOffsetTable millingToolOffsetTable, IProgress messageHost) Parameters cncBrand CncBrand CNC brand millingToolOffsetTable MillingToolOffsetTable Milling tool offset table messageHost IProgress Message host for warnings Returns double Radius compensation value GetFileLineIndex() Get FileLineIndex. public FileLineIndex GetFileLineIndex() Returns FileLineIndex FileLineIndex GetG5xCoordinateOffset(HardNcEnv) Gets the G5x coordinate offset for this NC line. public Vec3d GetG5xCoordinateOffset(HardNcEnv ncEnv) Parameters ncEnv HardNcEnv NC environment Returns Vec3d The G5x coordinate offset vector GetIndexedFileLine() Gets the file line associated with this object. public IndexedFileLine GetIndexedFileLine() Returns IndexedFileLine The file line object. GetMcByProgramPos(Vec3d, HardNcEnv, NcNoteCache, IProgress, out Vec3d) Internal Use. public DVec3d GetMcByProgramPos(Vec3d programPos, HardNcEnv ncEnv, NcNoteCache ncNoteCache, IProgress messageHost, out Vec3d programXyz) Parameters programPos Vec3d ncEnv HardNcEnv ncNoteCache NcNoteCache messageHost IProgress programXyz Vec3d Returns DVec3d GetSentence() Returns the source Sentence carried by this object. public Sentence GetSentence() Returns Sentence GetSourceCommand() public IIndexedFileLine GetSourceCommand() Returns IIndexedFileLine GetTiltMat4d(HardNcEnv, out Mat4d) Internal Use Only. public bool? GetTiltMat4d(HardNcEnv ncEnv, out Mat4d tableToFeatureTransform) Parameters ncEnv HardNcEnv NC environment. tableToFeatureTransform Mat4d Transform from NC to Table without tool compensation and linear coordinate offset (such as G55,G56..). Returns bool? True if G68.2 is successfully applied, false if not, and null if not applicable. HasSyntaxXyz(HardNcEnv) Determines whether the line contains syntactic XYZ coordinates. public bool HasSyntaxXyz(HardNcEnv ncEnv) Parameters ncEnv HardNcEnv NC environment Returns bool True if syntactic XYZ coordinates are present; otherwise, false. RebuildByMc(HardNcEnv, DVec3d, NcNoteCache, IProgress) Internal Use Only. For NC opt. public void RebuildByMc(HardNcEnv ncEnv, DVec3d mc, NcNoteCache ncNoteCache, IProgress messageHost) Parameters ncEnv HardNcEnv NC environment. mc DVec3d MC coordinates. ncNoteCache NcNoteCache NC line cache. messageHost IProgress Message host for logging and reporting. RebuildByProgramXyz(HardNcEnv, Vec3d, NcNoteCache, IProgress) Internal Use Only. For NC opt. public void RebuildByProgramXyz(HardNcEnv ncEnv, Vec3d programXyz, NcNoteCache ncNoteCache, IProgress messageHost) Parameters ncEnv HardNcEnv NC environment. programXyz Vec3d Program XYZ coordinates. ncNoteCache NcNoteCache NC note cache. messageHost IProgress Message host for logging and reporting. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." }, "api/Hi.Numerical.HardNcUtil.html": { "href": "api/Hi.Numerical.HardNcUtil.html", @@ -5472,7 +5612,7 @@ "api/Hi.Numerical.SourcedActEntry.html": { "href": "api/Hi.Numerical.SourcedActEntry.html", "title": "Class SourcedActEntry | HiAPI-C# 2025", - "summary": "Class SourcedActEntry Namespace Hi.Numerical Assembly HiMech.dll Represents an entry containing a source command and its associated act. public record SourcedActEntry : IEquatable Inheritance object SourcedActEntry Implements IEquatable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SourcedActEntry(IGetSentence, IAct) Represents an entry containing a source command and its associated act. public SourcedActEntry(IGetSentence SentenceSource, IAct Act) Parameters SentenceSource IGetSentence The source sentence. Act IAct The act associated with the source command. Properties Act The act associated with the source command. public IAct Act { get; init; } Property Value IAct SentenceSource The source sentence. public IGetSentence SentenceSource { get; init; } Property Value IGetSentence" + "summary": "Class SourcedActEntry Namespace Hi.Numerical Assembly HiMech.dll Represents an entry containing a source command and its associated act. public record SourcedActEntry : IEquatable Inheritance object SourcedActEntry Implements IEquatable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SourcedActEntry(ISentenceCarrier, IAct) Represents an entry containing a source command and its associated act. public SourcedActEntry(ISentenceCarrier SentenceSource, IAct Act) Parameters SentenceSource ISentenceCarrier The source sentence carrier, carrying both the Sentence and the execution-order SentenceIndex. Act IAct The act associated with the source command. Properties Act The act associated with the source command. public IAct Act { get; init; } Property Value IAct SentenceSource The source sentence carrier, carrying both the Sentence and the execution-order SentenceIndex. public ISentenceCarrier SentenceSource { get; init; } Property Value ISentenceCarrier" }, "api/Hi.Numerical.SpindleDirection.html": { "href": "api/Hi.Numerical.SpindleDirection.html", @@ -6547,7 +6687,7 @@ "fundamentals/common/xml-io.html": { "href": "fundamentals/common/xml-io.html", "title": "About XML IO | HiAPI-C# 2025", - "summary": "About XML IO The XML IO design pattern in HiNc Framework is based on IMakeXmlSource interface and XFactory class. This pattern provides a standardized way to serialize and deserialize objects to and from XML format. Don't serialize the runtime member object like Func or Action either cache object. The runtime objects can be optionally sent by the res part on the XFactory Registration or set by the other host or dependent object. If it is set by the other object, then there is nothing can do to it in the XML IO procedure. Core Components IMakeXmlSource Interface The IMakeXmlSource interface defines the contract for objects that can be serialized to XML format. It contains a single method MakeXmlSource. XFactory Registration Every class implementing IMakeXmlSource must: Define a static XName property matching the class name. Register itself in the static constructor using XFactory.Regs.Add Implement XML serialization and deserialization logic The registration delegate signature includes an IProgress parameter for diagnostic message routing: XFactory.Regs.Add(XName, (xml, baseDirectory, relFile, progress, res) => new MyClass(xml, baseDirectory, relFile, progress)); For example, see BallApt: static BallApt() { // Register to the . XFactory.Regs.Add(XName, (xml,baseDirectory, relFile, progress, res) => new BallApt(xml)); } IProgress Threading The IProgress parameter is threaded through the entire deserialization chain. When a class constructor calls XFactory to deserialize child objects, it passes the same progress instance: public MyClass(XElement src, string baseDirectory, string relFile, IProgress progress) { Child = XFactory.GenByChild( src.Element(nameof(Child)), subBaseDirectory, progress); } Parsing errors are reported to the caller-provided IProgress handler. Implementation Patterns Simple Value Objects See BallApt implementation: /// /// Name for XML IO. /// public static string XName => nameof(BallApt); /// /// Ctor. /// /// XML public BallApt(XElement src) { Diameter_mm = double.Parse(src.Element(\"D\").Value); FluteHeight_mm = double.Parse(src.Element(\"FluteH\").Value); } /// public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) => ToXElement(); /// public XElement ToXElement() { return new XElement(XName, new XElement(\"D\", Diameter_mm), new XElement(\"FluteH\", FluteHeight_mm) ); } Complex Data Structures See SpindleCapability implementation: /// /// Name for XML IO. /// public static string XName => nameof(SpindleCapability); /// /// Initializes a new instance of the class. /// /// The XML element containing spindle data. /// The base directory for resolving relative paths. /// Additional resolution parameters. public SpindleCapability(XElement src, string baseDirectory, params object[] res) { this.SetNameNote(src); if (src.Element(nameof(EnergyEfficiency)) != null) EnergyEfficiency = XmlConvert.ToDouble( src.Element(nameof(EnergyEfficiency)).Value); src.Element(nameof(WorkingTemperatureUpperBoundary_C))?.SelfInvoke( e => WorkingTemperatureUpperBoundary_C = XmlConvert.ToDouble(e.Value)); src.Element(nameof(GearShiftSpindleSpeed_rpm))?.Value?.SelfInvoke( s => GearShiftSpindleSpeed_rpm = string.IsNullOrEmpty(s) ? null : XmlConvert.ToDouble(s)); if (src.Element(nameof(DryRunFrictionPowerCoefficient_mWdrpm)) != null) DryRunFrictionPowerCoefficient_mWdrpm = XmlConvert.ToDouble( src.Element(nameof(DryRunFrictionPowerCoefficient_mWdrpm)).Value); if (src.Element(nameof(DryRunWindagePowerCoefficient_pWdrpm3)) != null) DryRunWindagePowerCoefficient_pWdrpm3 = XmlConvert.ToDouble( src.Element(nameof(DryRunWindagePowerCoefficient_pWdrpm3)).Value); if (src.Element(\"SpindleSpeedToPowerContours\") != null) //for legacy WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW = src.Element(\"SpindleSpeedToPowerContours\").Elements(\"Contour\") .ToDictionary( contourElem => { double r = XmlConvert.ToDouble(contourElem.Attribute(\"InsistentRatio\")?.Value); //600s=10mins return r == 1 ? double.PositiveInfinity : (r * 600); }, contourElem => contourElem.Elements(\"SpindleSpeedToPower\").Select( elem => new Vec2d( XmlConvert.ToDouble(elem.Element(\"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Element(\"Power-kW\").Value))) .ToList()); src.Element(\"WorkableDurationToSpindleSpeedPowerContoursDictionary\") ?.SelfInvoke(dicElem => { WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW = dicElem.Elements(\"Contour\") .ToDictionary( contourElem => XmlConvert.ToDouble( contourElem.Attribute(\"WorkableDuration-min\")?.Value), contourElem => contourElem.Elements(\"SpindleSpeedToPower\").Select( elem => new Vec2d( XmlConvert.ToDouble(elem.Element(\"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Element(\"Power-kW\").Value))) .ToList()); }); if (src.Element(\"SpindleSpeedToTorqueContours\") != null) //for legacy WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm = src.Element(\"SpindleSpeedToTorqueContours\").Elements(\"Contour\") .ToDictionary( contourElem => { double r = XmlConvert.ToDouble(contourElem.Attribute(\"InsistentRatio\")?.Value); //600s=10mins return r == 1 ? double.PositiveInfinity : (r * 600); }, contourElem => contourElem.Elements(\"SpindleSpeedToTorque\").Select( elem => new Vec2d( XmlConvert.ToDouble(elem.Element(\"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Element(\"Torque-Nm\").Value))) .ToList()); src.Element(\"WorkableDurationToSpindleSpeedTorqueContoursDictionary\") ?.SelfInvoke(dicElem => { //MessageUtil.WriteLine($\"dicElem: {dicElem}\"); WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm = dicElem.Elements(\"Contour\").ToDictionary( contourElem => XmlConvert.ToDouble( contourElem.Attribute(\"WorkableDuration-min\")?.Value), contourElem => contourElem.Elements(\"SpindleSpeedToTorque\").Select( elem => new Vec2d( XmlConvert.ToDouble(elem.Element(\"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Element(\"Torque-Nm\").Value))) .ToList()); //MessageUtil.WriteLine($\"keys: {string.Join(',',WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm.Select(e=>e.Key))}\"); }); //for legacy compatible. if (src.Element(\"SpindleSpeedToPower--RPM-to-kW\") != null) InfInsistentSpindleSpeedToPower_cycleDs_kW = src.Element(\"SpindleSpeedToPower--RPM-to-kW\").Elements() .Select(elem => new Vec2d(XmlConvert.ToDouble(elem.Attribute( \"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Value))).ToList(); //for legacy compatible. if (src.Element(\"SpindleSpeedToTorque--RPM-to-Nm\") != null) InfInsistentSpindleSpeedToTorque_cycleDs_Nm = src.Element(\"SpindleSpeedToTorque--RPM-to-Nm\").Elements() .Select(elem => new Vec2d(XmlConvert.ToDouble(elem.Attribute( \"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Value))).ToList(); } /// public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) { return new XElement(XName, this.GetNameNoteXElementList(), new XElement(nameof(EnergyEfficiency), EnergyEfficiency), new XElement(nameof(GearShiftSpindleSpeed_rpm), GearShiftSpindleSpeed_rpm), new XElement(nameof(DryRunFrictionPowerCoefficient_mWdrpm), DryRunFrictionPowerCoefficient_mWdrpm), new XElement(nameof(DryRunWindagePowerCoefficient_pWdrpm3), DryRunWindagePowerCoefficient_pWdrpm3), new XElement(\"WorkableDurationToSpindleSpeedPowerContoursDictionary\", WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW.OrderBy(entry => entry.Key) .Select(entry => new XElement(\"Contour\", new XAttribute(\"WorkableDuration-min\", entry.Key), entry.Value.Select(entry => new XElement(\"SpindleSpeedToPower\", new XElement(\"SpindleSpeed-RPM\", entry.X * 60), new XElement(\"Power-kW\", entry.Y))))) ), new XElement(\"WorkableDurationToSpindleSpeedTorqueContoursDictionary\", WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm.OrderBy(entry => entry.Key) .Select(entry => new XElement(\"Contour\", new XAttribute(\"WorkableDuration-min\", entry.Key), entry.Value.Select(entry => new XElement(\"SpindleSpeedToTorque\", new XElement(\"SpindleSpeed-RPM\", entry.X * 60), new XElement(\"Torque-Nm\", entry.Y))))) ) ); } Best Practices XName: Always define static XName property matching the class name. Registration: Register in static constructor using XFactory.Regs Call the XName such like _ = CalleeClass.XName; in the caller class static initialization field so that the registration takes effect before calling the Callee construction by XFactory. Progress Threading: Pass the IProgress parameter through all nested XFactory calls. See Message Management for the rationale. Legacy Support: Maintain backward compatibility when needed" + "summary": "About XML IO The XML IO design pattern in HiNc Framework is based on IMakeXmlSource interface and XFactory class. This pattern provides a standardized way to serialize and deserialize objects to and from XML format. Don't serialize the runtime member object like Func or Action either cache object. The runtime objects can be optionally sent by the res part on the XFactory Registration or set by the other host or dependent object. If it is set by the other object, then there is nothing can do to it in the XML IO procedure. Core Components IMakeXmlSource Interface The IMakeXmlSource interface defines the contract for objects that can be serialized to XML format. It contains a single method MakeXmlSource. XFactory Registration Every class implementing IMakeXmlSource must: Define a static XName property matching the class name. Register itself in the static constructor using XFactory.Regs.Add Implement XML serialization and deserialization logic The registration delegate signature includes an IProgress parameter for diagnostic message routing: XFactory.Regs.Add(XName, (xml, baseDirectory, relFile, progress, res) => new MyClass(xml, baseDirectory, relFile, progress)); For example, see BallApt: static BallApt() { // Register to the . XFactory.Generators.Add(XName, (xml,baseDirectory, relFile, progress, res) => new BallApt(xml)); } IProgress Threading The IProgress parameter is threaded through the entire deserialization chain. When a class constructor calls XFactory to deserialize child objects, it passes the same progress instance: public MyClass(XElement src, string baseDirectory, string relFile, IProgress progress) { Child = XFactory.GenByChild( src.Element(nameof(Child)), subBaseDirectory, progress); } Parsing errors are reported to the caller-provided IProgress handler. Implementation Patterns Simple Value Objects See BallApt implementation: /// /// Name for XML IO. /// public static string XName => nameof(BallApt); /// /// Ctor. /// /// XML public BallApt(XElement src) { Diameter_mm = double.Parse(src.Element(\"D\").Value); FluteHeight_mm = double.Parse(src.Element(\"FluteH\").Value); } /// public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) => ToXElement(); /// public XElement ToXElement() { return new XElement(XName, new XElement(\"D\", Diameter_mm), new XElement(\"FluteH\", FluteHeight_mm) ); } Complex Data Structures See SpindleCapability implementation: /// /// Name for XML IO. /// public static string XName => nameof(SpindleCapability); /// /// Initializes a new instance of the class. /// /// The XML element containing spindle data. /// The base directory for resolving relative paths. /// Additional resolution parameters. public SpindleCapability(XElement src, string baseDirectory, params object[] res) { this.SetNameNote(src); if (src.Element(nameof(EnergyEfficiency)) != null) EnergyEfficiency = XmlConvert.ToDouble( src.Element(nameof(EnergyEfficiency)).Value); src.Element(nameof(WorkingTemperatureUpperBoundary_C))?.SelfInvoke( e => WorkingTemperatureUpperBoundary_C = XmlConvert.ToDouble(e.Value)); src.Element(nameof(GearShiftSpindleSpeed_rpm))?.Value?.SelfInvoke( s => GearShiftSpindleSpeed_rpm = string.IsNullOrEmpty(s) ? null : XmlConvert.ToDouble(s)); if (src.Element(nameof(DryRunFrictionPowerCoefficient_mWdrpm)) != null) DryRunFrictionPowerCoefficient_mWdrpm = XmlConvert.ToDouble( src.Element(nameof(DryRunFrictionPowerCoefficient_mWdrpm)).Value); if (src.Element(nameof(DryRunWindagePowerCoefficient_pWdrpm3)) != null) DryRunWindagePowerCoefficient_pWdrpm3 = XmlConvert.ToDouble( src.Element(nameof(DryRunWindagePowerCoefficient_pWdrpm3)).Value); if (src.Element(\"SpindleSpeedToPowerContours\") != null) //for legacy WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW = src.Element(\"SpindleSpeedToPowerContours\").Elements(\"Contour\") .ToDictionary( contourElem => { double r = XmlConvert.ToDouble(contourElem.Attribute(\"InsistentRatio\")?.Value); //600s=10mins return r == 1 ? double.PositiveInfinity : (r * 600); }, contourElem => contourElem.Elements(\"SpindleSpeedToPower\").Select( elem => new Vec2d( XmlConvert.ToDouble(elem.Element(\"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Element(\"Power-kW\").Value))) .ToList()); src.Element(\"WorkableDurationToSpindleSpeedPowerContoursDictionary\") ?.SelfInvoke(dicElem => { WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW = dicElem.Elements(\"Contour\") .ToDictionary( contourElem => XmlConvert.ToDouble( contourElem.Attribute(\"WorkableDuration-min\")?.Value), contourElem => contourElem.Elements(\"SpindleSpeedToPower\").Select( elem => new Vec2d( XmlConvert.ToDouble(elem.Element(\"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Element(\"Power-kW\").Value))) .ToList()); }); if (src.Element(\"SpindleSpeedToTorqueContours\") != null) //for legacy WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm = src.Element(\"SpindleSpeedToTorqueContours\").Elements(\"Contour\") .ToDictionary( contourElem => { double r = XmlConvert.ToDouble(contourElem.Attribute(\"InsistentRatio\")?.Value); //600s=10mins return r == 1 ? double.PositiveInfinity : (r * 600); }, contourElem => contourElem.Elements(\"SpindleSpeedToTorque\").Select( elem => new Vec2d( XmlConvert.ToDouble(elem.Element(\"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Element(\"Torque-Nm\").Value))) .ToList()); src.Element(\"WorkableDurationToSpindleSpeedTorqueContoursDictionary\") ?.SelfInvoke(dicElem => { //MessageUtil.WriteLine($\"dicElem: {dicElem}\"); WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm = dicElem.Elements(\"Contour\").ToDictionary( contourElem => XmlConvert.ToDouble( contourElem.Attribute(\"WorkableDuration-min\")?.Value), contourElem => contourElem.Elements(\"SpindleSpeedToTorque\").Select( elem => new Vec2d( XmlConvert.ToDouble(elem.Element(\"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Element(\"Torque-Nm\").Value))) .ToList()); //MessageUtil.WriteLine($\"keys: {string.Join(',',WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm.Select(e=>e.Key))}\"); }); //for legacy compatible. if (src.Element(\"SpindleSpeedToPower--RPM-to-kW\") != null) InfInsistentSpindleSpeedToPower_cycleDs_kW = src.Element(\"SpindleSpeedToPower--RPM-to-kW\").Elements() .Select(elem => new Vec2d(XmlConvert.ToDouble(elem.Attribute( \"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Value))).ToList(); //for legacy compatible. if (src.Element(\"SpindleSpeedToTorque--RPM-to-Nm\") != null) InfInsistentSpindleSpeedToTorque_cycleDs_Nm = src.Element(\"SpindleSpeedToTorque--RPM-to-Nm\").Elements() .Select(elem => new Vec2d(XmlConvert.ToDouble(elem.Attribute( \"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Value))).ToList(); } /// public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) { return new XElement(XName, this.GetNameNoteXElementList(), new XElement(nameof(EnergyEfficiency), EnergyEfficiency), new XElement(nameof(GearShiftSpindleSpeed_rpm), GearShiftSpindleSpeed_rpm), new XElement(nameof(DryRunFrictionPowerCoefficient_mWdrpm), DryRunFrictionPowerCoefficient_mWdrpm), new XElement(nameof(DryRunWindagePowerCoefficient_pWdrpm3), DryRunWindagePowerCoefficient_pWdrpm3), new XElement(\"WorkableDurationToSpindleSpeedPowerContoursDictionary\", WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW.OrderBy(entry => entry.Key) .Select(entry => new XElement(\"Contour\", new XAttribute(\"WorkableDuration-min\", entry.Key), entry.Value.Select(entry => new XElement(\"SpindleSpeedToPower\", new XElement(\"SpindleSpeed-RPM\", entry.X * 60), new XElement(\"Power-kW\", entry.Y))))) ), new XElement(\"WorkableDurationToSpindleSpeedTorqueContoursDictionary\", WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm.OrderBy(entry => entry.Key) .Select(entry => new XElement(\"Contour\", new XAttribute(\"WorkableDuration-min\", entry.Key), entry.Value.Select(entry => new XElement(\"SpindleSpeedToTorque\", new XElement(\"SpindleSpeed-RPM\", entry.X * 60), new XElement(\"Torque-Nm\", entry.Y))))) ) ); } Best Practices XName: Always define static XName property matching the class name. Registration: Register in static constructor using XFactory.Regs Call the XName such like _ = CalleeClass.XName; in the caller class static initialization field so that the registration takes effect before calling the Callee construction by XFactory. Progress Threading: Pass the IProgress parameter through all nested XFactory calls. See Message Management for the rationale. Legacy Support: Maintain backward compatibility when needed" }, "fundamentals/general-hinc-workflow/index.html": { "href": "fundamentals/general-hinc-workflow/index.html", @@ -6822,7 +6962,7 @@ "release-note/index.html": { "href": "release-note/index.html", "title": "Release Note | HiAPI-C# 2025", - "summary": "Release Note HiNc Packages Version 3.1.167 Introduce SoftNcRunner as a pluggable NC parser/runner replacing the legacy HardNcRunner; opt in via EnableSoftNcRunner. see HardNc → SoftNc Rewrite — Progress Report for the in-flight rewrite scope and remaining work Extend coolant model to CoolantMode Flood/Mist/Off and refactor CoolantHeatCondition / MillingTemperatureUtil for multi-mode coolant Bind session events to MachiningSession lifetime: SessionStepBuilt, SessionStepSelected, SessionSyntaxPieceRan, SessionSourcedActEntry (legacy aliases kept as [Obsolete]); add RegisterWriteSyntaxPieces / RegisterWriteSyntaxPiecesWithActs for syntax-piece debug tracing Add ProjectApiVersion carrier through XFactory deserialization for project-XML version negotiation; resolve Workpiece through a lazy Func getter in WorkpieceService HiNc Packages Version 3.1.162 Refactor message management into three independent categories: Diagnostic (IProgress), UI Notification (MessageBoardUtil), App Log (ILogger); remove MessageUtil class entirely and remove ExceptionUtil.ShowException / ExceptionUtil.OnShown (see Message Management) Thread IProgress through XFactory deserialization chain and MachiningProject loading; remove GenMode enum entirely (see XML IO) Add ActionProgress.FromLogger to bridge IProgress APIs to ILogger Rename ShowIfCatched → CatchExceptions with explicit Action handler; remove RoutineBlocker0 Extract WorkpieceService from Workpiece for runtime geometry operations Update ISO coordinate rendering for 3+2 axis machines: coordinate position now uses IsoCoordinateEntryDisplayee with full machining chain anchor instead of table-buckle-only anchor Rename SessionMessageHost → SessionProgress on both SessionProgress and SessionProgress (SessionShell.SessionMessageHost is kept as [Obsolete]) Remove obsolete HiLog logging utility and DynamicMachiningProjectDisplayee0 HiNc Packages Version 3.1.160 Fix NC optimization R-format arc interpolation with negative R values (follow-up to v158 R-format arc fix) Fix cubetree construction defect when a triangle edge passes through a wire corner Mech Builder: geometry (STL) file picker for anchored transformation now offers Project directory in addition to Resource directory. Rename XML IO utilities: XmlSourceAndFile → FileRefSource, CombineAsSubDirectory → GetResourceDirectory, MakeXmlSourceWithRebaseFile → MakeXmlSourceToFileRef HiNc Packages Version 3.1.158 Fix G53.1 tool height compensation behavior: replace NcEnv.SetToolHeightCompensationOnFeatureNormal configuration with automatic detection via NC flag state Make EnableIntegerShrinkOnPositionCommand configurable via project settings (previously hard-coded by CNC brand, now defaults to false with XML IO support) Fix NC optimization splitting R-format arcs (G02/G03 with R parameter) by converting to IJK format, since R sign meaning does not apply correctly to individual fragments Fix step.csv reading crash on null or malformed values Fix XML IO sub-base directory not applied in some project file operations Improve CSV actual time parsing to support DateTime format in addition to TimeSpan (see Workflow: Basic Machining Simulation) Fix CSV title parsing to trim surrounding quotes HiNc Packages Version 3.1.156 Fix G68 coordinate rotation transformation for non-origin rotation centers Fix NC optimization arc/circle offset when splitting arc fragments across multiple lines Fix optimization rotation code jumping at ±180° cycle boundary by applying cyclic angle comparison Fix RTCP on unmatched tool offset Fix blocking issue when time-mapping file not found Fix FlagsText always null after NC parser refactoring HiNc Packages Version 3.1.150 Add cubetree geometry defect scanning (ScanRuntimeGeomInfDefect) and clearing (ClearDefectDisplayee) for detecting and visualizing geometry anomalies in workpieces (see Workflow: Geometry Validation) Upgrade internal fraction representation to float128 precision for improved cubetree geometry accuracy and numerical stability Refactor messaging system from IMessageHost to standard IProgress pattern; SessionProgress (formerly SessionMessageHost) now implements IProgress, and all messaging methods renamed from Add* to Report* (e.g., AddProgress → ReportProgress) Fix cubetree initialization crash Improve postprocess precision by applying sin–cos parameterization instead of direct angle-based formulation for rotary axis numerical solving in XyzabcSolver Add asynchronous anchor solid preparation on project load for improved startup performance HiNc Packages Version 3.1.144 Enhance Siemens Sinumerik support: Siemens CYCLE800 coordinate transform and reset Siemens MCALL CYCLE81() drilling cycle parsing Siemens TRAORI/TRAFOOF/SUPA flag parsing Fix Siemens TRAFOOF plain rotation coordinate transform issue Fix Siemens coordinate transform for successive file running Fix relief face collision floating-point precision issue Replace MongoDB with SQLite for local step data storage (significant package size reduction) Add machining and motion resolution dynamic adjustment functions HiNc Packages Version 3.1.106 Rename mapping API for clearer naming: ReadCsvByTimeInterpolation → MapSingleByCsvFile (one-to-one mapping) MapByActualTime → MapSeriesByCsvFile (one-to-many mapping) Rename CSV column prefix Spindle to Holder for sensor data mapping Unify CSV column tags to MappingUtil for consistent data mapping Fix ChartRange manipulation to be time-based instead of step-based for more accurate time chart display Tune thread priority for machining parallel processing to improve UI responsiveness during simulation Various code cleanup and improvements HiNc Packages Version 3.1.102 Separate resource files (Resource, wwwroot, Doc) to HiNc-Resource nuget package for smaller package size Add ScaledFeedPerCycle function for scaled feed-per-cycle machining motion resolution Upgrade target framework to .NET 10.0 Various code cleanup and improvements HiNc Packages Version 3.1.100 Refactor project architecture: split runtime functions from MachiningProject to LocalProjectService for better separation of concerns Improve MillingTraining module with separate lead and result parameter templates for more accurate cutting parameter training Separate C++ library for code protection Add UTF-8 file path support for runtime geometry IO operations Improve CsvRunner with enhanced time mapping pattern Various architecture improvements and bug fixes HiNc Packages Version 3.1.91 Add NcOptimizationEmbeddedLogMode to control embedded log detail level (None/SimpleLog/FullLog) (see Embedded Log Comments). Fix bug of NcOptProc duplicated feedrate assignment HiNc Packages Version 3.1.90 Rename optimization log API EnableIndividualStepAdjustmentLog Fix crash from workpiece displaying with specific mechanical topology setting Improve .flatproc.log output to maintain step order during parallel computation Various stability improvements and bug fixes HiNc Packages Version 3.1.86 Re-build NcOptProc with stricter optimization logics Add optimization logging features (see Optimization Logs): .flatproc.log file output for optimization process analysis Embedded log comments in optimized NC file marking source lines with (src) suffix Fix cutting depth and width accuracy by bounding-box method with workpiece surface Fix collision check error during concurrent changing collidable object Various stability improvements and bug fixes HiNc Packages Version 3.1.84 Optimize memory usage by shrinking map-size of clStripPos Fix design pattern of cutting parameter training module (MillingTraining) Add LoadCuttingParaByFile function to load cutting parameters from file Improve CsvRunner actual time parsing: automatically calculate step duration from actual time when duration is not provided Enhance message handling in SessionShell by unifying SessionProgress usage Improve optimization performance with better task scheduling Various performance improvements and bug fixes HiNc Packages Version 3.1.75 Add actual time tracking functionality (ActualTime) Various stability improvements and bug fixes HiNc Packages Version 3.1.74 Rename class MillingCutterOptLimit to MillingCutterOptOption Add physics simulation function for relief face collision detection (ReliefFaceCollidingSpeed_mmds, IsReliefFaceCollided) and optimization (EnableLimitByReliefAngle) Add UpdateNcOptOption function to step processing Fix step ordering bug from concurrent processing Fix ClStrip shrinking to zero issue" + "summary": "Release Note HiNc Packages Version 3.1.171 Rename RuntimeApi → SessionShell (the runtime entry point exposed to scripting); IShellCommand → ISessionCommand and RuntimeController → SessionShellController; the Hi.ShellCommands namespace moves to Hi.SessionCommands, and every command implementer's Run() parameter renames scriptApi → sessionShell Tri-state milling-physics contract: MachiningStep physics getters converge on a tri-state result, non-null MillingPhysicsBrief on no-cut steps under EnablePhysics; silently skip thermal physics on null FluteMaterial / WorkpieceMaterial; lazy first-equip warning; align relief-face null-sentinel across NoCut + producer (in NcOpt and forces) Rename IMachiningStepHost → IMachiningService (drops the ICsScriptApi seam) Fixes: rotary IK round-trip anchored to pre-FK interpolated angle; ForceAccelShot.ReadRows skips blank lines HiNc Packages Version 3.1.167 Introduce SoftNcRunner as a pluggable NC parser/runner replacing the legacy HardNcRunner; opt in via EnableSoftNcRunner. see HardNc → SoftNc Rewrite — Progress Report for the in-flight rewrite scope and remaining work Extend coolant model to CoolantMode Flood/Mist/Off and refactor CoolantHeatCondition / MillingTemperatureUtil for multi-mode coolant Bind session events to MachiningSession lifetime: SessionStepBuilt, SessionStepSelected, SessionSyntaxPieceRan, SessionSourcedActEntry (legacy aliases kept as [Obsolete]); add RegisterWriteSyntaxPieces / RegisterWriteSyntaxPiecesWithActs for syntax-piece debug tracing Add ProjectApiVersion carrier through XFactory deserialization for project-XML version negotiation; resolve Workpiece through a lazy Func getter in WorkpieceService HiNc Packages Version 3.1.162 Refactor message management into three independent categories: Diagnostic (IProgress), UI Notification (MessageBoardUtil), App Log (ILogger); remove MessageUtil class entirely and remove ExceptionUtil.ShowException / ExceptionUtil.OnShown (see Message Management) Thread IProgress through XFactory deserialization chain and MachiningProject loading; remove GenMode enum entirely (see XML IO) Add ActionProgress.FromLogger to bridge IProgress APIs to ILogger Rename ShowIfCatched → CatchExceptions with explicit Action handler; remove RoutineBlocker0 Extract WorkpieceService from Workpiece for runtime geometry operations Update ISO coordinate rendering for 3+2 axis machines: coordinate position now uses IsoCoordinateEntryDisplayee with full machining chain anchor instead of table-buckle-only anchor Rename SessionMessageHost → SessionProgress on both SessionProgress and SessionProgress (SessionShell.SessionMessageHost is kept as [Obsolete]) Remove obsolete HiLog logging utility and DynamicMachiningProjectDisplayee0 HiNc Packages Version 3.1.160 Fix NC optimization R-format arc interpolation with negative R values (follow-up to v158 R-format arc fix) Fix cubetree construction defect when a triangle edge passes through a wire corner Mech Builder: geometry (STL) file picker for anchored transformation now offers Project directory in addition to Resource directory. Rename XML IO utilities: XmlSourceAndFile → FileRefSource, CombineAsSubDirectory → GetResourceDirectory, MakeXmlSourceWithRebaseFile → MakeXmlSourceToFileRef HiNc Packages Version 3.1.158 Fix G53.1 tool height compensation behavior: replace NcEnv.SetToolHeightCompensationOnFeatureNormal configuration with automatic detection via NC flag state Make EnableIntegerShrinkOnPositionCommand configurable via project settings (previously hard-coded by CNC brand, now defaults to false with XML IO support) Fix NC optimization splitting R-format arcs (G02/G03 with R parameter) by converting to IJK format, since R sign meaning does not apply correctly to individual fragments Fix step.csv reading crash on null or malformed values Fix XML IO sub-base directory not applied in some project file operations Improve CSV actual time parsing to support DateTime format in addition to TimeSpan (see Workflow: Basic Machining Simulation) Fix CSV title parsing to trim surrounding quotes HiNc Packages Version 3.1.156 Fix G68 coordinate rotation transformation for non-origin rotation centers Fix NC optimization arc/circle offset when splitting arc fragments across multiple lines Fix optimization rotation code jumping at ±180° cycle boundary by applying cyclic angle comparison Fix RTCP on unmatched tool offset Fix blocking issue when time-mapping file not found Fix FlagsText always null after NC parser refactoring HiNc Packages Version 3.1.150 Add cubetree geometry defect scanning (ScanRuntimeGeomInfDefect) and clearing (ClearDefectDisplayee) for detecting and visualizing geometry anomalies in workpieces (see Workflow: Geometry Validation) Upgrade internal fraction representation to float128 precision for improved cubetree geometry accuracy and numerical stability Refactor messaging system from IMessageHost to standard IProgress pattern; SessionProgress (formerly SessionMessageHost) now implements IProgress, and all messaging methods renamed from Add* to Report* (e.g., AddProgress → ReportProgress) Fix cubetree initialization crash Improve postprocess precision by applying sin–cos parameterization instead of direct angle-based formulation for rotary axis numerical solving in XyzabcSolver Add asynchronous anchor solid preparation on project load for improved startup performance HiNc Packages Version 3.1.144 Enhance Siemens Sinumerik support: Siemens CYCLE800 coordinate transform and reset Siemens MCALL CYCLE81() drilling cycle parsing Siemens TRAORI/TRAFOOF/SUPA flag parsing Fix Siemens TRAFOOF plain rotation coordinate transform issue Fix Siemens coordinate transform for successive file running Fix relief face collision floating-point precision issue Replace MongoDB with SQLite for local step data storage (significant package size reduction) Add machining and motion resolution dynamic adjustment functions HiNc Packages Version 3.1.106 Rename mapping API for clearer naming: ReadCsvByTimeInterpolation → MapSingleByCsvFile (one-to-one mapping) MapByActualTime → MapSeriesByCsvFile (one-to-many mapping) Rename CSV column prefix Spindle to Holder for sensor data mapping Unify CSV column tags to MappingUtil for consistent data mapping Fix ChartRange manipulation to be time-based instead of step-based for more accurate time chart display Tune thread priority for machining parallel processing to improve UI responsiveness during simulation Various code cleanup and improvements HiNc Packages Version 3.1.102 Separate resource files (Resource, wwwroot, Doc) to HiNc-Resource nuget package for smaller package size Add ScaledFeedPerCycle function for scaled feed-per-cycle machining motion resolution Upgrade target framework to .NET 10.0 Various code cleanup and improvements HiNc Packages Version 3.1.100 Refactor project architecture: split runtime functions from MachiningProject to LocalProjectService for better separation of concerns Improve MillingTraining module with separate lead and result parameter templates for more accurate cutting parameter training Separate C++ library for code protection Add UTF-8 file path support for runtime geometry IO operations Improve CsvRunner with enhanced time mapping pattern Various architecture improvements and bug fixes HiNc Packages Version 3.1.91 Add NcOptimizationEmbeddedLogMode to control embedded log detail level (None/SimpleLog/FullLog) (see Embedded Log Comments). Fix bug of NcOptProc duplicated feedrate assignment HiNc Packages Version 3.1.90 Rename optimization log API EnableIndividualStepAdjustmentLog Fix crash from workpiece displaying with specific mechanical topology setting Improve .flatproc.log output to maintain step order during parallel computation Various stability improvements and bug fixes HiNc Packages Version 3.1.86 Re-build NcOptProc with stricter optimization logics Add optimization logging features (see Optimization Logs): .flatproc.log file output for optimization process analysis Embedded log comments in optimized NC file marking source lines with (src) suffix Fix cutting depth and width accuracy by bounding-box method with workpiece surface Fix collision check error during concurrent changing collidable object Various stability improvements and bug fixes HiNc Packages Version 3.1.84 Optimize memory usage by shrinking map-size of clStripPos Fix design pattern of cutting parameter training module (MillingTraining) Add LoadCuttingParaByFile function to load cutting parameters from file Improve CsvRunner actual time parsing: automatically calculate step duration from actual time when duration is not provided Enhance message handling in SessionShell by unifying SessionProgress usage Improve optimization performance with better task scheduling Various performance improvements and bug fixes HiNc Packages Version 3.1.75 Add actual time tracking functionality (ActualTime) Various stability improvements and bug fixes HiNc Packages Version 3.1.74 Rename class MillingCutterOptLimit to MillingCutterOptOption Add physics simulation function for relief face collision detection (ReliefFaceCollidingSpeed_mmds, IsReliefFaceCollided) and optimization (EnableLimitByReliefAngle) Add UpdateNcOptOption function to step processing Fix step ordering bug from concurrent processing Fix ClStrip shrinking to zero issue" }, "release-note/softnc-rewrite-report.html": { "href": "release-note/softnc-rewrite-report.html", @@ -6912,7 +7052,7 @@ "sample/Sample.MachineTool.DemoBuildMachineTool.html": { "href": "sample/Sample.MachineTool.DemoBuildMachineTool.html", "title": "Class DemoBuildMachineTool | HiAPI-C# 2025", - "summary": "Class DemoBuildMachineTool Namespace Sample.MachineTool Assembly Hi.Sample.dll Provides access to the PMC-B1 machine tool model. public class DemoBuildMachineTool : IGetCodeXyzabcMachineTool Inheritance object DemoBuildMachineTool Implements IGetCodeXyzabcMachineTool Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks Source Code using Hi.Common.XmlUtils; using Hi.Geom; using Hi.Mech; using Hi.Mech.Topo; using Hi.NcMech; using Hi.NcMech.Solids; using Hi.NcMech.Xyzabc; using Hi.Numerical.Xyzabc; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Xml.Linq; namespace Sample.MachineTool { /// /// Provides access to the PMC-B1 machine tool model. /// /// /// ### Source Code /// [!code-csharp[SampleCode](~/../Hi.Sample/MachineTool/DemoBuildMachineTool.cs)] /// public class DemoBuildMachineTool : IGetCodeXyzabcMachineTool { static DemoBuildMachineTool() { XFactory.Regs.Add(XName, (xml, baseDirectory, relFile, progress, res) => new DemoBuildMachineTool()); } /// /// Generates an XYZ-ABC machine tool instance from embedded resources. /// /// A configured machine tool model. public static CodeXyzabcMachineTool GenXyzabcMachineTool() { CodeXyzabcChain chain = new CodeXyzabcChain(\"[O][Y][X][C][w];[O][Z][B][S][t]\"); if (chain.ToolBuckleTransformer is StaticTranslation st) st.Trans = new Vec3d(-72.40, 72.40, 176.44); chain.TransformerB.Pivot = new Vec3d(-72.4, -177.4, 225.94); Dictionary solidMap = new Dictionary() { [\"O\"] = new Solid(new Stl(\"MachineTool/base.stl\")), [\"X\"] = new Solid(new Stl(\"MachineTool/X.stl\")), [\"Y\"] = new Solid(new Stl(\"MachineTool/Y.stl\")), [\"Z\"] = new Solid(new Stl(\"MachineTool/Z.stl\")), [\"B\"] = new Solid(new Stl(\"MachineTool/B.stl\")), [\"C\"] = new Solid(new Stl(\"MachineTool/C.stl\")), [\"S\"] = new Solid(new Stl(\"MachineTool/spindle.stl\")), }; chain.AnchorToSolid.BuildAnchorToSolid( chain.Asmb.GetDescendantAnchors(), solidMap); CodeXyzabcMachineTool dst = new CodeXyzabcMachineTool(chain); dst.GenerateCollisionIndexPairs(); return dst; } /// /// The cached machine tool instance. /// CodeXyzabcMachineTool MachineTool { get; } /// /// Default constructor that initializes the machine tool model. /// public DemoBuildMachineTool() { MachineTool = GenXyzabcMachineTool(); } #region XML IO //public PmcB1MachineToolSource(XElement src, object res) : this() { } /// /// XML element name for serialization. /// public static string XName = nameof(DemoBuildMachineTool); /// public XElement ToXElement() => new XElement(XName); #endregion /// public CodeXyzabcMachineTool GetXyzabcMachineTool() => MachineTool; /// public IMachiningChain GetMachiningChain() => MachineTool; } } Constructors DemoBuildMachineTool() Default constructor that initializes the machine tool model. public DemoBuildMachineTool() Fields XName XML element name for serialization. public static string XName Field Value string Methods GenXyzabcMachineTool() Generates an XYZ-ABC machine tool instance from embedded resources. public static CodeXyzabcMachineTool GenXyzabcMachineTool() Returns CodeXyzabcMachineTool A configured machine tool model. GetMachiningChain() public IMachiningChain GetMachiningChain() Returns IMachiningChain GetXyzabcMachineTool() Get CodeXyzabcMachineTool. public CodeXyzabcMachineTool GetXyzabcMachineTool() Returns CodeXyzabcMachineTool Machine tool. ToXElement() public XElement ToXElement() Returns XElement" + "summary": "Class DemoBuildMachineTool Namespace Sample.MachineTool Assembly Hi.Sample.dll Provides access to the PMC-B1 machine tool model. public class DemoBuildMachineTool : IGetCodeXyzabcMachineTool Inheritance object DemoBuildMachineTool Implements IGetCodeXyzabcMachineTool Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Remarks Source Code using Hi.Common.XmlUtils; using Hi.Geom; using Hi.Mech; using Hi.Mech.Topo; using Hi.NcMech; using Hi.NcMech.Solids; using Hi.NcMech.Xyzabc; using Hi.Numerical.Xyzabc; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Xml.Linq; namespace Sample.MachineTool { /// /// Provides access to the PMC-B1 machine tool model. /// /// /// ### Source Code /// [!code-csharp[SampleCode](~/../Hi.Sample/MachineTool/DemoBuildMachineTool.cs)] /// public class DemoBuildMachineTool : IGetCodeXyzabcMachineTool { static DemoBuildMachineTool() { XFactory.Generators.Add(XName, (xml, baseDirectory, relFile, progress, res) => new DemoBuildMachineTool()); } /// /// Generates an XYZ-ABC machine tool instance from embedded resources. /// /// A configured machine tool model. public static CodeXyzabcMachineTool GenXyzabcMachineTool() { CodeXyzabcChain chain = new CodeXyzabcChain(\"[O][Y][X][C][w];[O][Z][B][S][t]\"); if (chain.ToolBuckleTransformer is StaticTranslation st) st.Trans = new Vec3d(-72.40, 72.40, 176.44); chain.TransformerB.Pivot = new Vec3d(-72.4, -177.4, 225.94); Dictionary solidMap = new Dictionary() { [\"O\"] = new Solid(new Stl(\"MachineTool/base.stl\")), [\"X\"] = new Solid(new Stl(\"MachineTool/X.stl\")), [\"Y\"] = new Solid(new Stl(\"MachineTool/Y.stl\")), [\"Z\"] = new Solid(new Stl(\"MachineTool/Z.stl\")), [\"B\"] = new Solid(new Stl(\"MachineTool/B.stl\")), [\"C\"] = new Solid(new Stl(\"MachineTool/C.stl\")), [\"S\"] = new Solid(new Stl(\"MachineTool/spindle.stl\")), }; chain.AnchorToSolid.BuildAnchorToSolid( chain.Asmb.GetDescendantAnchors(), solidMap); CodeXyzabcMachineTool dst = new CodeXyzabcMachineTool(chain); dst.GenerateCollisionIndexPairs(); return dst; } /// /// The cached machine tool instance. /// CodeXyzabcMachineTool MachineTool { get; } /// /// Default constructor that initializes the machine tool model. /// public DemoBuildMachineTool() { MachineTool = GenXyzabcMachineTool(); } #region XML IO //public PmcB1MachineToolSource(XElement src, object res) : this() { } /// /// XML element name for serialization. /// public static string XName = nameof(DemoBuildMachineTool); /// public XElement ToXElement() => new XElement(XName); #endregion /// public CodeXyzabcMachineTool GetXyzabcMachineTool() => MachineTool; /// public IMachiningChain GetMachiningChain() => MachineTool; } } Constructors DemoBuildMachineTool() Default constructor that initializes the machine tool model. public DemoBuildMachineTool() Fields XName XML element name for serialization. public static string XName Field Value string Methods GenXyzabcMachineTool() Generates an XYZ-ABC machine tool instance from embedded resources. public static CodeXyzabcMachineTool GenXyzabcMachineTool() Returns CodeXyzabcMachineTool A configured machine tool model. GetMachiningChain() public IMachiningChain GetMachiningChain() Returns IMachiningChain GetXyzabcMachineTool() Get CodeXyzabcMachineTool. public CodeXyzabcMachineTool GetXyzabcMachineTool() Returns CodeXyzabcMachineTool Machine tool. ToXElement() public XElement ToXElement() Returns XElement" }, "sample/Sample.MachineTool.DemoBuildMachineToolWithoutGeometrys.html": { "href": "sample/Sample.MachineTool.DemoBuildMachineToolWithoutGeometrys.html", diff --git a/App/wwwroot/HiAPI-docsite/manifest.json b/App/wwwroot/HiAPI-docsite/manifest.json index 039a0352..823d7736 100644 --- a/App/wwwroot/HiAPI-docsite/manifest.json +++ b/App/wwwroot/HiAPI-docsite/manifest.json @@ -2826,17 +2826,17 @@ }, { "type": "ManagedReference", - "source_relative_path": "api/Hi.Common.XmlUtils.XFactory.GenByXElementDelegate.yml", + "source_relative_path": "api/Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.yml", "output": { ".html": { - "relative_path": "api/Hi.Common.XmlUtils.XFactory.GenByXElementDelegate.html" + "relative_path": "api/Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.html" } }, "version": "", "Uid": null, "IsMRef": true, - "Title": "Hi.Common.XmlUtils.XFactory.GenByXElementDelegate", - "Summary": "

    Delegate for generating objects from XML elements with relative file path.

    \n" + "Title": "Hi.Common.XmlUtils.XFactory.XGeneratorDelegate", + "Summary": "

    Delegate for generating objects from XML elements with relative file path.

    \n" }, { "type": "ManagedReference", @@ -9908,6 +9908,20 @@ "Title": "Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType", "Summary": "

    Fanuc #5003: Cutter compensation startup/cancellation type.

    \n" }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency", + "Summary": "

    Watchdog for Fanuc Custom Macro B GOTO loops. Holds a\n limit (XML-persisted user config —\nthe soft cap above which the upcoming\nFanucGotoSyntax stops firing and emits a warning) plus a\nruntime per-target hit counter ( — not\nserialised, cleared at session start by\n).

    \n

    \nThe dependency is syntax-managed: FanucGotoSyntax reads the\nlimit, increments the counter, and decides whether to fire. There is\nno host Func provider — the dep is placed in\n rather than\n because nothing outside the\nsyntax pipeline writes it; is a plain method call\nthe runner invokes, not a host-wired Func.\n

    \n

    \nThe counter key is (FileName, TargetN) where FileName\nis the source-level file path of the block containing the GOTO (the\nrelative path form carried on — same\nform used by IndexedFileLine labels). Source-level keying means\nmultiple inline invocations of the same subprogram pool their counts\n(they ARE the same source-code GOTO), while two different files with\ntheir own N100 stay isolated (they ARE different jumps).\n

    \n

    \nDefault is 1000 — a runaway-loop\nguard, not a precise iteration budget. Legitimate macro loops\n(multi-hole drill matrices, calibration sweeps) sit well below this;\ntruly infinite loops hit the limit fast. Projects with batch-style\nmacros that legitimately need higher counts can raise the value in\nthe project XML.\n

    \n" + }, { "type": "ManagedReference", "source_relative_path": "api/Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.yml", @@ -9948,7 +9962,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup", - "Summary": "

    Fanuc-side adapter that exposes a wrapped \nas an following Fanuc Memory C tool offset\naddressing: #2001+N → effective height of offset N\n(geometry − wear).

    \n

    \nThe underlying stays brand-neutral —\nHeidenhain / Siemens can use the same storage with different addressing\nby registering their own adapter alongside the table. Holds a reference\nto the table rather than owning data so writes through the table show\nup immediately in lookups via this adapter.\n

    \n" + "Summary": "

    Fanuc-side adapter that exposes a wrapped \n(resolved at call time from the dependency list) as an\n following Fanuc Memory C tool\noffset addressing: #2001+N → effective height of offset N\n(geometry − wear).

    \n

    \nThe underlying stays brand-neutral —\nHeidenhain / Siemens can use the same storage with different addressing\nby registering their own adapter alongside the table. Stateless: holds\nno reference of its own and resolves the table from the per-call\ndependencies list, so XML round-trip is trivial (an empty element).\n

    \n

    \nRegistered on a brand preset's\nVariableEvaluatorSyntax.RuntimeVariableLookups, not on\n — the wrapper owns no\nlong-lived data, only the Fanuc-style id addressing scheme. The\nunderlying still lives in\nNcDependencyList as the data dependency.\n

    \n" }, { "type": "ManagedReference", @@ -10482,6 +10496,20 @@ "Title": "Hi.NcParsers.Dependencys", "Summary": null }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.EvaluationSyntaxs.CallStackUtil", + "Summary": "

    Push / pop helpers for the per-block section.\nBoth produce a fresh deep-cloned ready to\nstamp onto an inlined piece (push site) or onto an M99 return block\n(pop site); the caller is responsible for deep-cloning again if it\ndistributes the same stamp across multiple pieces of an L-repetition.

    \n

    \nPairs with at the\nLogic stage: explicit push / pop writes seed the section at frame\nboundaries, ModalCarry copies it forward to every block in between\nso each block is self-contained for cache-dump readers and downstream\nconsumers (notably M99 P{seq} reading the top frame's\n).\n

    \n" + }, { "type": "ManagedReference", "source_relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.EvalResult.yml", @@ -10508,7 +10536,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.EvaluationSyntaxs.Evaluation.IRuntimeVariableLookup", - "Summary": "

    Stateless variable lookup that needs per-block runtime context — the\ncurrent node (for \ntraceback into runtime-state sections like MachineCoordinateState\n/ ProgramXyz) and the dependency list (so the lookup can read\nfrom sibling dependencies without holding a static reference).

    \n

    \nDistinguished from : that one is for\nlong-lived dependencies that already hold their own data (parameter\ntables, tool-offset wrappers, retained-variable tables) and need no\nblock context. IRuntimeVariableLookup is for context-sensitive\nresolutions configured declaratively on\n.\n

    \n

    \nImplementations should be brand-specific (e.g. Fanuc #5001-#5043\nposition reads) and return null for keys outside their range so\nthe evaluator's chain can fall through to the next lookup.\n

    \n" + "Summary": "

    Stateless variable lookup that needs per-block runtime context — the\ncurrent node (for \ntraceback into runtime-state sections like MachineCoordinateState\n/ ProgramXyz) and the dependency list (so the lookup can read\nfrom sibling dependencies without holding a static reference).

    \n

    \nDistinguished from : that one is for\nlong-lived dependencies that already hold their own data (parameter\ntables, tool-offset wrappers, retained-variable tables) and need no\nblock context. IRuntimeVariableLookup is for context-sensitive\nresolutions configured declaratively on\n.\n

    \n

    \nImplementations should be brand-specific (e.g. Fanuc #5001-#5043\nposition reads) and return null for keys outside their range so\nthe evaluator's chain can fall through to the next lookup.\n

    \n

    \nImplementations are XML-serialised as part of\n's round-trip: each impl exposes a\nstatic XName, registers itself with ,\nand implements . Since impls\nare stateless, the typical body is just an empty element carrying the\ntype name; brand identity is restored by XFactory dispatch.\n

    \n" }, { "type": "ManagedReference", @@ -10536,7 +10564,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup", - "Summary": "

    Reads Fanuc-style local macro variables (#1-#33) from\nVars.Local on the current JSON,\nwalking until the entry\nis found. Self-gates the id range so the evaluator's\n chain can\nfall through to the next lookup for out-of-range keys.

    \n

    \nStateless and dependency-free — instances are interchangeable.\n

    \n" + "Summary": "

    Reads Fanuc-style local macro variables (#1-#33) from\nVars.Local on the current JSON,\nfalling back to the immediately previous block when they share the\nsame id. Self-gates the id range\nso the evaluator's\n chain can\nfall through to the next lookup for out-of-range keys.

    \n

    \nTwo-step lookup (mirrors ): the\ncurrent block sees writes that \nstamped at inline time (the call-line argument bindings) and writes\nthat \napplied on this block before the lookup runs; the previous block\n(frame-checked) supplies body-internal writes from the prior block in\nthe same macro frame. Looking past the previous block is unnecessary\nbecause the reader carries forward block-by-block within a frame.\n

    \n

    \nFrame isolation via : a previous\nblock whose frame id differs from the current block's is skipped —\na macro body's body-internal locals are invisible to the caller after\nreturn, and the caller's main-frame locals are invisible inside the\nmacro. M98/M198 subprogram inlining\n() deliberately\ndoes not stamp on its\ninlined blocks, so the callee inherits the caller's frame and sees\nthe caller's locals — matching real Fanuc M98 semantics.\n

    \n

    \nStateless and dependency-free — instances are interchangeable.\n

    \n" }, { "type": "ManagedReference", @@ -10550,7 +10578,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr", - "Summary": "

    Binary arithmetic on two operands (+ - * / or MOD).

    \n" + "Summary": "

    Binary operation on two operands. Covers arithmetic\n(+ - * / / MOD), comparison\n(EQ NE GT GE LT LE, yielding 1.0 / 0.0), and\nlogical bitwise (AND OR XOR, operands truncated to\n).

    \n" }, { "type": "ManagedReference", @@ -10592,7 +10620,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionEvaluator", - "Summary": "

    Walks an AST and produces an .\nResolves #nnn via an ; built-in function\nnames are matched case-insensitively against a fixed table.

    \n

    \nPhase-1 supports: SIN COS TAN ASIN ACOS ATAN SQRT ABS ROUND FIX FUP LN\nEXP POW. Trigonometric arguments and results are in degrees, matching\nFanuc Custom Macro B convention. Unknown function names surface as\n; arity mismatches as\n; division / MOD by zero and domain\nerrors (e.g. SQRT[-1]) as ; vacant\noperands as .\n

    \n" + "Summary": "

    Walks an AST and produces an .\nResolves #nnn via an ; built-in function\nnames are matched case-insensitively against a fixed table.

    \n

    \nPhase-1 supports: SIN COS TAN ASIN ACOS ATAN SQRT ABS ROUND FIX FUP LN\nEXP POW. Trigonometric arguments and results are in degrees, matching\nFanuc Custom Macro B convention. Unknown function names surface as\n; arity mismatches as\n; division / MOD by zero and domain\nerrors (e.g. SQRT[-1]) as ; vacant\noperands as .\n

    \n

    \nNumeric domain & type conventions. All values are IEEE 754\n — there is no separate bool / int type at runtime.\nComparison ops (EQ NE GT GE LT LE) yield 1.0 (true) or\n0.0 (false), using strict double equality / ordering (NaN\ncompares as IEEE specifies — NaN EQ NaN is 0.0). Logical\nops (AND OR XOR) truncate each operand to a 64-bit signed\ninteger ( then cast to\n) before applying the bitwise operation; non-finite\nor out-of-range operands surface rather\nthan silently wrapping. Truthiness at caller-side IF / WHILE\ngates is value != 0 — any non-zero value (bit, float, comparator\nresult) is true.\n

    \n" }, { "type": "ManagedReference", @@ -10606,7 +10634,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionParser", - "Summary": "

    Recursive-descent parser for Fanuc Custom Macro B value expressions.\nPure: takes a string, produces an AST. Performs no\nvariable lookup and no evaluation.

    \n

    Grammar (highest precedence last):

    \n
    expr    := term (('+' | '-') term)*\nterm    := factor (('*' | '/' | 'MOD') factor)*\nfactor  := ('+' | '-')? primary\nprimary := number\n        | '#' integer\n        | '#' '[' expr ']'\n        | '[' expr ']'\n        | ident '[' arglist ']' ('/' '[' expr ']')?\narglist := expr (',' expr)*
    \n

    \nFunction names are case-insensitive (SIN = sin); whitespace\nis skipped between tokens. The '/' '[' expr ']' tail captures the\ndual-bracket form Fanuc uses for ATAN[a]/[b]; non-ATAN callers that\nhappen to use it produce a function with an extra arg, which the evaluator\nrejects with an arity error.\n

    \n" + "Summary": "

    Recursive-descent parser for Fanuc Custom Macro B value expressions.\nPure: takes a string, produces an AST. Performs no\nvariable lookup and no evaluation.

    \n

    Grammar (lowest precedence at top):

    \n
    expr     := or-expr\nor-expr  := and-expr (('OR' | 'XOR') and-expr)*\nand-expr := cmp-expr ('AND' cmp-expr)*\ncmp-expr := add-expr (('EQ' | 'NE' | 'GT' | 'GE' | 'LT' | 'LE') add-expr)*\nadd-expr := term (('+' | '-') term)*\nterm     := factor (('*' | '/' | 'MOD') factor)*\nfactor   := ('+' | '-')? primary\nprimary  := number\n         | '#' integer\n         | '#' '[' expr ']'\n         | '[' expr ']'\n         | ident '[' arglist ']' ('/' '[' expr ']')?\narglist  := expr (',' expr)*
    \n

    \nFunction names and keyword operators (MOD, EQ NE GT GE LT LE,\nAND OR XOR) are case-insensitive (SIN = sin,\nEQ = eq); each keyword requires a non-identifier character\non its right boundary so EQ1 is not the EQ operator\nfollowed by 1. Whitespace is skipped between tokens. The\n'/' '[' expr ']' tail captures the dual-bracket form Fanuc uses\nfor ATAN[a]/[b]; non-ATAN callers that happen to use it produce a\nfunction with an extra arg, which the evaluator rejects with an arity\nerror.\n

    \n

    \nOperator precedence intentionally puts boolean / logical layers below\narithmetic so #1 + 1 GT 0 parses as (#1 + 1) GT 0 and\n#1 GT 0 AND #2 LT 10 parses as (#1 GT 0) AND (#2 LT 10),\nmatching the Fanuc Custom Macro B spec for IF [..] GOTO /\nIF [..] THEN / WHILE [..] DO conditions.\n

    \n" }, { "type": "ManagedReference", @@ -10704,7 +10732,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup", - "Summary": "

    Reads Fanuc-style non-retained common variables (#100-#499)\nfrom Vars.Volatile on the current \nJSON, walking until the\nentry is found. Self-gates the id range so the evaluator's\n chain can\nfall through to the next lookup for out-of-range keys.

    \n

    \nStateless and dependency-free — instances are interchangeable.\nReads use the same dict-merge carry that\n writes; the two stay\ndecoupled (read side here; write side in the reader).\n

    \n" + "Summary": "

    Reads Fanuc-style non-retained common variables (#100-#499)\nfrom Vars.Volatile. Self-gates the id range so the evaluator's\n chain can\nfall through to the next lookup for out-of-range keys.

    \n

    \nSingle-step lookup: already\ndict-merges every block's Vars.Volatile into the next block, so\nthe entry — if it exists — must be on the current block (when this\nlookup runs after the reader) or on the immediately previous block\n(when this lookup runs before the reader on the same block, which is\nthe Fanuc preset's order — evaluator first, reader second). No\narbitrary walk-back: such a walk would be defensive overkill given\nthe reader's carry guarantee.\n

    \n

    \nStateless and dependency-free — instances are interchangeable. Reads\nstay decoupled from the reader (read side here; write side in the\nreader).\n

    \n" }, { "type": "ManagedReference", @@ -10722,17 +10750,185 @@ }, { "type": "ManagedReference", - "source_relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.yml", + "source_relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.yml", "output": { ".html": { - "relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html" + "relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html" } }, "version": "", "Uid": null, "IsMRef": true, - "Title": "Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax", - "Summary": "

    Consumes Fanuc-style system-control variable assignments\n(#3000-#3999) — alarm trigger (#3000), millisecond and\nhour clocks (#3001 / #3002), single-block / feed-hold\nbypass flags (#3003 / #3004), pause-with-message\n(#3006), mirror-image flags (#3007), date / time\n(#3011 / #3012), tool-life data (#3030 /\n#3032), etc.

    \n

    \nEvery id in this range is a controller-side state variable — its\nauthoritative value lives on the real hardware (RTC, alarm bus,\noverride switches, …) and an NC write at most triggers a side effect\n(clock reset, alarm raise, message-pause prompt). Offline simulation\nhas none of that machinery, so this syntax does not emulate the\neffect. Instead it:\n

    \n
    1. records the literal write on the block JSON under\nVars.SystemControl (round-trip and cache-dump visibility);
    2. emits a FanucSystemControl--Unsupported\n\nso the user knows the assignment was recognised but its controller-side\neffect is not simulated. Message-severity (not Warning) because these\nwrites are safe no-ops offline — every consumed assignment would emit\na Warning per block, which would be noisy without signalling anything\nthe user must act on;
    3. removes the entry from Parsing.Assignments so it does not\nre-surface as a generic Parsing--Unconsumed diagnostic.
    \n

    \nThe dictionary carries forward block-by-block (same dict-merge pattern\nas ) so a downstream consumer\ncan read the most recent recorded value via SyntaxPiece linkage.\n

    \n

    \nOnly literal numeric RHS values are consumed; non-literal RHS\n(e.g. #3002 = #500) is left in Parsing.Assignments for\n to resolve, mirroring the\nretained / volatile reading syntaxes.\n

    \n

    \nFanuc-family only — Siemens uses named system variables\n($AC_TIME, $A_DAY, …) and Heidenhain uses\nFN18: SYSREAD; neither flows through Parsing.Assignments.#nnn.\n

    \n" + "Title": "Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax", + "Summary": "

    Resolves Fanuc Custom Macro B GOTO control flow.\nTriggered by Parsing.FanucGoto (written by\n); decides whether\nto fire, and on fire calls\n on layers[0] with\nthe re-segmented file content starting at the matching N{target}\nlabel. The host block stays materialised (so cache dumps still see the\nGOTO call site); execution naturally continues from the new source\nonce the pipeline pulls the next block.

    \n

    \nBoth unconditional GOTO <n> and conditional\nIF [<expr>] GOTO <n> are implemented. The conditional\nform leans on 's pass-2 tree walk\nto substitute Parsing.FanucGoto.Condition with a numeric\n when the expression\nevaluates successfully — then reads the\nnode polymorphically. Truthy non-zero fires the redirect; zero falls\nthrough silently; a still-string (unresolved) Condition emits\nFanucGoto--ConditionNotEvaluated and falls through.\n

    \n

    \nPipeline placement: tail of the Fanuc / Mazak / Syntec Evaluation\nbundle. Must run after so any\n#<var> in the target N (e.g. GOTO #1) has been\nsubstituted to a literal in Parsing.FanucGoto.N. Reader syntaxes\n( etc.) are independent —\nthey touch Parsing.Assignments, not Parsing.FanucGoto.\n

    \n

    \nLabel scanning uses two hosted helper syntaxes —\nCommentSyntax and IndexSyntax — applied to\neach candidate block in turn so the predicate\nIndexNote.Number == target matches the same way the Parsing\nbundle would. Both are XML-IO-able so API customers can swap them\n(e.g. for a controller variant using ;-style comments or a\ndifferent head symbol). Defaults match Fanuc: \nand with the \"N\" symbol.\n

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax", + "Summary": "

    Resolves Fanuc Custom Macro B IF [<cond>] THEN <body>\nsingle-block conditionals. Triggered by Parsing.FanucIfThen\n(written by );\nreads the now-resolved node, decides\nwhether to fire, and on fire lifts the parsing-stage\nPendingAssignments sub-object into the canonical\nParsing.Assignments bucket so the brand-specific reader syntaxes\ndownstream route each entry to its store the same way they would handle\nan unconditional #nnn = <literal> on a normal block.

    \n

    \nUnlike there is no source splice, no\nlabel scan, no iteration watchdog — the spec restricts the body to the\ncurrent block. The host block is preserved either way (the stamped\nFanucIfThen section on the host's top-level JSON keeps the\nIF-THEN call site visible to cache dumps and diagnostics, with\n flipped true only on a successful\nfire).\n

    \n

    \nPipeline placement: in the Evaluation bundle after\n (so the Condition expression has\nbeen substituted in place by pass-2 tree walk, and each\nPendingAssignments RHS string has been evaluated to a numeric\n) and before the reader syntaxes\n(,\n,\n,\n) — that ordering lets\nthe lifted entries reach the readers as if they had been written by\n on a normal block.\n

    \n

    \nThree condition outcomes mirror the\n shape:\n

    • Truthy non-zero → lift assignments, stamp Applied=true.
    • Truthy zero → fall through silently, Applied=false.
    • Truthy null (evaluator failed, condition still a string or\n non-finite) → warn FanucIfThen--ConditionNotEvaluated, do not\n lift, Applied=false.
    \nA truthy condition with no PendingAssignments (body did not parse as\none or more assignments — e.g. a G-code body, currently unsupported)\nwarns FanucIfThen--UnsupportedBody and falls through.\n\n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax", + "Summary": "

    Routes literal-RHS assignments to Fanuc-style local macro variables\n(#1-#33) from Parsing.Assignments into Vars.Local\non the current block, carrying the previous block's Vars.Local\ndict forward when both blocks share the same\n id. Mirrors\n for the\n#100-#499 range, with two differences:

    \n
    • Carry is gated by equality, so a\ncaller block after a G65 return does not inherit the macro body's\nfinal locals.
    • Writes outside a macro frame (a main-program block doing\n#11 = 5) emit\nLocalVariable--MainFrameWriteUnsupported and consume the\nassignment without persisting — real Fanuc allows main-frame local\nwrites but this simulator only tracks locals inside G65/G66 call\nframes; surfacing the gap as a diagnostic is more informative than\na silent\n hit.
    \n

    \nPipeline placement: Evaluation bundle, after\n (so any expression RHS such as\n#11 = #1 + 1 has already been normalised to a literal by the\ntime this reader runs) and after the other range readers\n(,\n) so they all share a\nsimilar Reader-stage shape.\n

    \n

    \nOnly literal numeric RHS values are consumed here; non-literal\nentries (which can only persist if\n failed to resolve them) are\nleft untouched and surface via the evaluator's own\nVariableExpression--Unevaluated diagnostic plus\n.\n

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap", + "Summary": "

    Fanuc Custom Macro B Type-I argument-letter map: which call-line letter\nbinds to which Vars.Local id (#1-#26) inside the macro body.\nReserved letters (G, L, N, O, P) are\nabsent — they are consumed by the call itself, not passed through.

    \n

    \nUsed by (G65, one-shot) and\n (G66, modal) to translate the\nargument letters captured by \n/ into the\n#nnn bindings the macro body's expression evaluator can read.\n

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax", + "Summary": "

    Inlines a Fanuc Custom Macro B one-shot call (G65 P_ L_ [letter\nvalue …]) into the source layer and binds the call-line argument\nletters to Vars.Local #1-#26 per the Type-I map (see\n). Every inlined block carries the\nbinding dict, a clone of the diagnostic\nrecord, and a id stamp — so\nLocalVariableLookup resolves arg references in a\nsingle-block lookup, a cache dump landing on any block immediately\nshows which call it belongs to, and downstream\n carries body-internal\n#1-#33 writes forward only within the same frame. The host\nblock itself records but stays in the\ncaller's frame (no stamp) and emits no\nmotion act; after the macro body's last inlined block the pipeline\ncontinues naturally into the caller's next block (the inlined pieces\nsit ahead of the host block's successor in layers[0]).

    \n

    \nFrame isolation works on two layers. Statically, caller blocks\nhave no stamp (frame id 0 by\n), so the inlined frame ids (allocated\nfresh per L-repetition) never collide with main. Dynamically,\nLocalVariableLookup and\n compare frame ids\nbefore carrying any Vars.Local entry across a block boundary\n— a macro body's body-internal writes therefore stay inside the\nmacro and never leak back into the caller's frame.\n

    \n

    \nFilename lookup mirrors :\nO{P:D4}.NC, O{P}.NC, O{P:D4}, O{P},\n{P:D4}.NC, {P}.NC — first match wins. The lookup root\nis (G65 has no\n\"external storage\" variant; M198's external root is M98/M198-only).\n

    \n

    \nL > 1 inlines the same macro L times in series. Each\nrepetition is a fresh segmentation pass (so each block gets its own\n JSON object — the downstream pipeline\nmutates JSON in place and would clobber sibling repetitions if\ninstances were shared) and gets a fresh FileIndex (so\n(FileIndex, LineIndex) pairs stay unique across the\nL-copies of the same source lines).\n

    \n

    \nPipeline placement: ahead of inside\nthe Fanuc Evaluation \nso a hypothetical G65 P_ + M98 P_ on the same block\nexpands the G65 macro first (would be an unusual but legal\ncomposition). Detection is on the Parsing.G65 sub-object\nwritten by \n(a ) — the\nkeyword \"G65\" never reaches Parsing.Flags because the\nparameterized match has already consumed the text by the time\n runs.\n

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase", + "Summary": "

    Identifies which pipeline phase the instance runs in. The two\nvalues correspond to the Evaluation-bundle and PostLogic-bundle\nregistrations of this same syntax class.

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax", + "Summary": "

    Handles Fanuc Custom Macro B modal-call lifecycle (G66 setup,\nG67 cancel, and per-motion-block implicit macro invocation).\nThe same class is registered twice in the pipeline via\n — once in the Evaluation bundle\n(, captures G66/G67 edges and carries\nthe state block-to-block) and once in\nthe PostLogic bundle (, on every\nmotion block within an active G66 modal, inlines the macro body via\nthe same mechanism uses).

    \n

    \nKeeping both phases in one class makes the pairing visually explicit:\nreaders see \"G66 in one file\" and the two methods (DoSetup,\nDoExpansion) make the lifecycle obvious. The two factory\nhelpers (, ) mirror the\nModalCarrySyntax.Logic / .PostLogic pattern already in\nthe codebase.\n

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax", + "Summary": "

    Consumes Fanuc-style system-control variable assignments\n(#3000-#3999) — alarm trigger (#3000), millisecond and\nhour clocks (#3001 / #3002), single-block / feed-hold\nbypass flags (#3003 / #3004), pause-with-message\n(#3006), mirror-image flags (#3007), date / time\n(#3011 / #3012), tool-life data (#3030 /\n#3032), etc.

    \n

    \nEvery id in this range is a controller-side state variable — its\nauthoritative value lives on the real hardware (RTC, alarm bus,\noverride switches, …) and an NC write at most triggers a side effect\n(clock reset, alarm raise, message-pause prompt). Offline simulation\nhas none of that machinery, so this syntax does not emulate the\neffect. Instead it:\n

    \n
    1. records the literal write on the block JSON under\nVars.SystemControl (round-trip and cache-dump visibility);
    2. emits a FanucSystemControl--Unsupported\n\nso the user knows the assignment was recognised but its controller-side\neffect is not simulated. Message-severity (not Warning) because these\nwrites are safe no-ops offline — every consumed assignment would emit\na Warning per block, which would be noisy without signalling anything\nthe user must act on;
    3. removes the entry from Parsing.Assignments so it does not\nre-surface as a generic Parsing--Unconsumed diagnostic.
    \n

    \nThe dictionary carries forward block-by-block (same dict-merge pattern\nas ) so a downstream consumer\ncan read the most recent recorded value via SyntaxPiece linkage.\n

    \n

    \nOnly literal numeric RHS values are consumed; non-literal RHS\n(e.g. #3002 = #500) is left in Parsing.Assignments for\n to resolve, mirroring the\nretained / volatile reading syntaxes.\n

    \n

    \nFanuc-family only — Siemens uses named system variables\n($AC_TIME, $A_DAY, …) and Heidenhain uses\nFN18: SYSREAD; neither flows through Parsing.Assignments.#nnn.\n

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.EvaluationSyntaxs.Fanuc", + "Summary": null + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil", + "Summary": "

    Shared “re-segment a file and skip pieces until a label matches”\nscan, used by both\n (unconditional GOTO redirect)\nand (M99 P{seq} jump\ninto the caller file). Reads the file via\n, segments through the\nprovided , runs the\nprobeSyntaxes on each candidate block to\nextract IndexNote.Number, and returns the slice from the\nfirst matching block to EOF.

    \n

    \nReturns null when no block matches — the caller's\nresponsibility to surface the appropriate diagnostic. The probes\nare idempotent because the downstream Parsing bundle re-runs the\nsame syntaxes on the yielded pieces with no-op effect (the regex\npatterns no longer match once the N-prefix is consumed and the\nparenthesised comment stripped).\n

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile", + "Summary": "

    Tri-form resolution result. is the bare\nmatched name; is that name joined with the\nfolder portion of the dependency (relative when the folder is\nconfigured relative, absolute fallback when it isn't);\n is the fully-resolved I/O target.

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver", + "Summary": "

    Shared subprogram-/macro-file resolver for Fanuc-style O<n>\nlookups consumed by (M98 / M198)\nand (G65). Single helper so the three\npath forms — file name, project-relative path, absolute path — are\nproduced together at one site and each caller gets exactly the form\nit should consume:

    \n
    • — bare O####.NC form\nthe resolver matched. Stored in JSON sections (FanucMacroCall,\nSubProgramCall) as the structural NC-language identifier;\nindependent of which folder the dependency happened to be pointing\nat, so the JSON stays portable across environments.
    • — relative path against the\nproject base directory (e.g. \"NC/O1234.NC\"). Used as the\n label so diagnostics on inlined blocks\nalign with the relative form already used for the main file label.
    • — absolute path. Used only\nat the call site for actual disk I/O; never\npersisted, never returned to JSON. Lives inside the resolver's stack\nframe and the segmenter's enumeration.
    \n

    \nFilename lookup order (first match wins) mirrors real Fanuc fallback:\nO{P:D4}.NC, O{P}.NC, O{P:D4}, O{P},\n{P:D4}.NC, {P}.NC. Case-insensitive match is delegated\nto the host filesystem (Windows is, Linux is not).\n

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil", + "Summary": "

    Shared inline mechanism for Fanuc Custom Macro B body expansion —\nused by both (one-shot) and\n's expansion phase (modal trigger). Both\ncallers do the same three things on every produced\n: stamp a \nclone, stamp a fresh id, and stamp\nargument bindings into Vars.Local. Centralising lets the two\ncall sites stay in lock-step — frame allocation, file-index\nallocation, and the inline-piece JSON shape are guaranteed\nidentical.

    \n

    \nFrame ids share the same \ncounter as file indices — both just need within-session uniqueness\nand the counter is rewound on session start in lock-step with the\npipeline. The main NC file is allocated index 0 first, so all\ninline frame ids land at > 0 and never collide with main.\n

    \n" }, { "type": "ManagedReference", @@ -10760,7 +10956,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax", - "Summary": "

    Inlines a Fanuc-style subprogram into the source layer when an M98 or\nM198 host block is reached. M98 P_ L_ reads the matching\nO<P> file from ;\nM198 P_ reads from \n(Fanuc external-storage call — same mechanism as M98, different lookup\nroot). The file is segmented through the host runner's segmenter\n() and the resulting\ns are prepended into layers[0] via\n; the rest of the\npipeline picks them up through ordinary walkNode.Next\ntraversal as if they had always been part of the host file.

    \n

    \nPipeline placement: first child of the Fanuc Evaluation\n. By the time this runs,\n /\n\n(each a ) have written a\nParsing.M98 / Parsing.M198 sub-object carrying the\ncaptured P / L parameters. Note: those sub-objects\nare this syntax's only trigger — \"M98\" / \"M198\"\nnever reach Parsing.Flags, because the parameterized\nmatch has already consumed the text by the time\n runs.\n

    \n

    \nFilename lookup uses a fallback chain:\nO{P:D4}.NC, O{P}.NC, O{P:D4}, O{P},\n{P:D4}.NC, {P}.NC — first match wins. Case-insensitive\nmatch is delegated to the host filesystem (Windows is, Linux is not).\n

    \n

    \nL > 1 inlines the same subprogram L times in series. Each\nrepetition is a fresh segmentation pass so each block gets its own\n with an independent JSON object — the\ndownstream pipeline mutates JSON in place and would clobber sibling\nrepetitions if instances were shared.\n

    \n

    \nNot yet supported: M99 P{seq} early return inside a\nsubprogram, partial-program calls (M98 P{seq}{prog} split\nencoding), and arg binding (G65 macro is a separate syntax).\n

    \n" + "Summary": "

    Inlines a Fanuc-style subprogram into the source layer when an M98 or\nM198 host block is reached. M98 P_ L_ reads the matching\nO<P> file from ;\nM198 P_ reads from \n(Fanuc external-storage call — same mechanism as M98, different lookup\nroot). The file is segmented through the host runner's segmenter\n() and the resulting\ns are prepended into layers[0] via\n; the rest of the\npipeline picks them up through ordinary walkNode.Next\ntraversal as if they had always been part of the host file.

    \n

    \nPipeline placement: first child of the Fanuc Evaluation\n. By the time this runs,\n /\n\n(each a ) have written a\nParsing.M98 / Parsing.M198 sub-object carrying the\ncaptured P / L parameters. Note: those sub-objects\nare this syntax's only trigger — \"M98\" / \"M198\"\nnever reach Parsing.Flags, because the parameterized\nmatch has already consumed the text by the time\n runs.\n

    \n

    \nFilename lookup uses a fallback chain:\nO{P:D4}.NC, O{P}.NC, O{P:D4}, O{P},\n{P:D4}.NC, {P}.NC — first match wins. Case-insensitive\nmatch is delegated to the host filesystem (Windows is, Linux is not).\n

    \n

    \nL > 1 inlines the same subprogram L times in series. Each\nrepetition is a fresh segmentation pass so each block gets its own\n with an independent JSON object — the\ndownstream pipeline mutates JSON in place and would clobber sibling\nrepetitions if instances were shared.\n

    \n

    \nNot yet supported: M99 P{seq} early return inside a\nsubprogram and partial-program calls (M98 P{seq}{prog} split\nencoding). Custom Macro B argument-binding calls (G65 /\nG66 / G67) live in and\n — those handle the\nargument-letter-to-#1..#26 binding and the macro-call frame\nisolation that M98 deliberately does not provide.\n

    \n" }, { "type": "ManagedReference", @@ -10774,7 +10970,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax", - "Summary": "

    Consumes Fanuc-style M99 subprogram-return blocks.

    \n

    \nIn the inline model used by , a\nplain M99 at the end of a subprogram is implicit: the\ninlined blocks are followed in layers[0] by the caller's\nnext block, so the natural pipeline traversal already does the\n\"return\". This syntax therefore only consumes the M99 flag (so\n doesn't warn)\nand records a section for cache-dump\nvisibility.\n

    \n

    \nM99 P{seq} (return to caller's N{seq} sequence\nnumber) is captured in but not yet\nhonoured — the subprogram tail still proceeds straight into the\ncaller's next block. Implementing the jump requires a forward scan\nof the post-host caller blocks for a matching N{seq} head\nindex, then dropping the intervening blocks; deferred until the\ncaller-side walk semantics are designed.\n

    \n

    \nPipeline placement: anywhere after Parsing has populated\nParsing.M99. Conventionally placed alongside\n at the head of the Evaluation\nbundle so call/return live next to each other.\n

    \n

    \nDetection is on the Parsing.M99 sub-object written by\n\n(a ) — the keyword\n\"M99\" never reaches Parsing.Flags because the\nparameterized match has already consumed the text by the time\n runs.\n

    \n" + "Summary": "

    Consumes Fanuc-style M99 subprogram-return blocks and pops\none frame. Plain M99 relies on the\nnatural pipeline tail — the inlined body's last block is followed\nin layers[0] by the caller's next block, so the “return”\nhappens implicitly; this syntax only consumes the M99 trigger (so\n doesn't warn),\nstamps a diagnostic section, and\nwrites the popped for downstream blocks to\ncarry.

    \n

    \nM99 P{seq} additionally redirects control flow to the\ncaller's N{seq} block via\n. The caller's file is\nresolved from the popped frame's\n; the scan uses the same\n helper as\n, with hardcoded Fanuc-default\nprobes ( + \nwith symbol \"N\") because the M99 P semantic itself is\nFanuc-family-only and Mazak / Syntec follow the same conventions.\nThe iteration is counted against\n, sharing the same\nrunaway-loop guard as GOTO — keyed on the same\n(FileName, TargetN) bucket so a tight\nM98 → M99 P → M98 … loop trips the same threshold.\n

    \n

    \nPipeline placement: same Evaluation bundle slot it always occupied,\nright after at the head. Needs\n,\n,\n,\n,\n on the dep list when\nM99 P{seq} is to fire; without them the plain-M99 path still\nworks and the P-jump emits a configuration warning.\n

    \n

    \nDetection is on the Parsing.M99 sub-object written by\n\n(a ) — the keyword\n\"M99\" never reaches Parsing.Flags because the\nparameterized match has already consumed the text by the time\n runs.\n

    \n" }, { "type": "ManagedReference", @@ -10788,7 +10984,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax", - "Summary": "

    Pure expression normalizer for Custom Macro B syntax. Walks the\nparser-stage residue on a single block and inlines numeric values\nwherever a Fanuc-style variable reference or bracket expression\nappears — but does not write to any specific store. Routing\n“where the resolved literal lands” stays in the brand-specific\nreader syntaxes (,\n's reader,\n, …) which run\nafter this syntax on the same block.

    \n

    \nTwo passes per block:\n

    \n
    1. \nAssignments normalizeParsing.Assignments.#nnn entries\nwhose RHS is non-literal (e.g. \"#500+1\", \"SQRT[#100]\")\nare evaluated via the and the RHS string is\nreplaced with the resolved literal (round-trip-safe\n\"R\"-format). The entry stays in Parsing.Assignments so\ndownstream reader syntaxes consume it as a pure-literal assignment.\nIteration follows source order (Parsing.Assignments insertion order).\n
    2. \nParsing tree substitution — every string-typed value reachable\nfrom Parsing.<tag> (axis tags, canned-cycle sub-objects)\nis parsed; on a successful evaluation the string is replaced with a\nnumeric . Failures silently leave the original\nstring and rely on downstream\n at consumer sites to surface\nVariableExpression--Unevaluated only if the tag is actually read.\n
    \n

    \nLookup chain (first non-null wins, configured per brand preset via\n + \ninstances on NcDependencyList):\n

    \n
    1. Current block's own resolved assignments — built-in to\n; covers same-block forward references in\nsource order (an earlier #nnn=literal is visible to a later\nRHS that mentions #nnn).
    2. Each in\n, in list order. Typical contents\nfor a Fanuc-family preset:\n (#1-#33),\n (#100-#499),\n\n(#5001-#5043).
    3. Each on the runner's\nNcDependencyList, in registration order\n(,\n,\n).
    \n

    \nEach lookup self-gates its id range; the evaluator stays brand- and\nrange-agnostic. Adding a new variable surface is additive: register\nan on a dependency or push an\n onto the per-preset list.\n

    \n

    \nSame-block forward reference — when an Assignment RHS\nreferences a #nnn that is also being assigned later in\nthe same block (i.e. listed in Parsing.Assignments after the\nRHS being evaluated), the cannot pick up\nthe not-yet-resolved value and falls back to traceback /\ndependency-table reads — effectively the pre-block value. A\nVariableEvaluator--SameBlockForwardReference warning is\nemitted per such RHS so the user is told the source-order semantics\nwere not honoured. Practical impact is near-zero for typical\nCAM-emitted NC (one assignment per line).\n

    \n" + "Summary": "

    Pure expression normalizer for Custom Macro B syntax. Walks the\nparser-stage residue on a single block and inlines numeric values\nwherever a Fanuc-style variable reference or bracket expression\nappears — but does not write to any specific store. Routing\n“where the resolved literal lands” stays in the brand-specific\nreader syntaxes (,\n's reader,\n, …) which run\nafter this syntax on the same block.

    \n

    \nTwo passes per block:\n

    \n
    1. \nAssignments normalizeParsing.Assignments.#nnn entries\nwhose RHS is non-literal (e.g. \"#500+1\", \"SQRT[#100]\")\nare evaluated via the and the RHS string is\nreplaced with the resolved literal (round-trip-safe\n\"R\"-format). The entry stays in Parsing.Assignments so\ndownstream reader syntaxes consume it as a pure-literal assignment.\nIteration follows source order (Parsing.Assignments insertion order).\n
    2. \nParsing tree substitution — every string-typed value reachable\nfrom Parsing.<tag> (axis tags, canned-cycle sub-objects)\nis parsed; on a successful evaluation the string is replaced with a\nnumeric . Failures silently leave the original\nstring and rely on downstream\n at consumer sites to surface\nVariableExpression--Unevaluated only if the tag is actually read.\n
    \n

    \nLookup chain (first non-null wins, configured per brand preset via\n + \ninstances on NcDependencyList):\n

    \n
    1. Current block's own resolved assignments — built-in to\n; covers same-block forward references in\nsource order (an earlier #nnn=literal is visible to a later\nRHS that mentions #nnn).
    2. Each in\n, in list order. Typical contents\nfor a Fanuc-family preset:\n (#1-#33),\n (#100-#499),\n\n(#5001-#5043).
    3. Each on the runner's\nNcDependencyList, in registration order\n(,\n,\n).
    \n

    \nEach lookup self-gates its id range; the evaluator stays brand- and\nrange-agnostic. Adding a new variable surface is additive: register\nan on a dependency or push an\n onto the per-preset list.\n

    \n

    \nSame-block forward reference — when an Assignment RHS\nreferences a #nnn that is also being assigned later in\nthe same block (i.e. listed in Parsing.Assignments after the\nRHS being evaluated), the cannot pick up\nthe not-yet-resolved value and falls back to traceback /\ndependency-table reads — effectively the pre-block value. A\nVariableEvaluator--SameBlockForwardReference warning is\nemitted per such RHS so the user is told the source-order semantics\nwere not honoured. Practical impact is near-zero for typical\nCAM-emitted NC (one assignment per line).\n

    \n" }, { "type": "ManagedReference", @@ -10832,6 +11028,48 @@ "Title": "Hi.NcParsers.IGetSentence", "Summary": "

    Abstraction for a source that carries a .

    \n" }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.ISentenceCarrier.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.ISentenceCarrier.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.ISentenceCarrier", + "Summary": "

    Carries a reference to a source together with its\nexecution-order . Used as the\ncross-process alignment carrier for diagnostics, messages, ClStripPos,\nMachiningStep, etc. — both the source content (via\n) and the execution-order position\n(via ) are available without\nneeding two separate references.

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.ISentenceIndexed.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.ISentenceIndexed.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.ISentenceIndexed", + "Summary": "

    Abstraction for an object that carries a —\na 0-based ordinal of its source in NC execution\norder. Use as a cross-process alignment key (messages, ClStripPos,\nMachiningStep, etc.) when source order\n()\nis not enough because SubProgram inline reorders blocks relative to\n(FileIndex, LineIndex).

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.IndexedSentence.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.IndexedSentence.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.IndexedSentence", + "Summary": "

    Minimal pairing a \nwith its execution-order . Use when there is no\nricher host object that already carries the sentence — e.g. CSV-driven\nruns that go straight from an input line to a \nwithout a wrapper.

    \n" + }, { "type": "ManagedReference", "source_relative_path": "api/Hi.NcParsers.Initializers.HomeMcInitializer.yml", @@ -10972,6 +11210,34 @@ "Title": "Hi.NcParsers.Keywords.BlockSkip", "Summary": "

    Optional block skip marker extracted from the head of an NC block.\nISO 6983 / Fanuc calls this feature Block Delete (BDT switch);\nSiemens / Syntec / Mazak use the same / prefix with matching\nbehaviour.

    \n

    \nThe section is only present on blocks that carry a / prefix.\nWhether the block's NC commands are actually skipped at runtime\ndepends on :\n

    • Config absent or the bit OFF → the /\nprefix is consumed, is left null, and the rest of\nthe line parses as a regular NC block (comments still take effect).
    • Config present and the bit ON → the rest\nof the line is moved into and cleared from\nUnparsedText, so downstream parsing syntaxes see nothing and\nno NC action is emitted. Comment syntaxes run before this one so\ncomments (and any embedded CsScript) still take effect.
    \n\nNot a comment: a comment is static metadata, block skip is a runtime\ntoggle that can change per machine/operator setting.\n" }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.Keywords.CallFrame.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.Keywords.CallFrame.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.Keywords.CallFrame", + "Summary": "

    One entry in . Holds the caller-side\ninformation consumers need to “unwind” or “look back” — currently\nonly the relative file path of the caller, used by\n on\nM99 P{seq} to locate the caller's N{seq} block.

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.Keywords.CallStack.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.Keywords.CallStack.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.Keywords.CallStack", + "Summary": "

    JSON-section data shape representing the active call-frame stack on\na block — pushed by call-and-inline syntaxes\n( for M98/M198,\n for G65, and\n's expansion\nphase for G66 implicit triggers) and popped by\n on M99. Every\nblock between push and pop carries the section forward via\n; the caller's blocks\nbefore push and after pop carry the surrounding stack state\n(typically empty when running from the main file).

    \n

    \nThe section is wrapped in a rather than\nexposed as a bare so it fits ModalCarry's\n\"deep-clone JsonObject\" carry pattern — the array of frames lives\ninside .\n

    \n" + }, { "type": "ManagedReference", "source_relative_path": "api/Hi.NcParsers.Keywords.CannedCycle.yml", @@ -11098,6 +11364,62 @@ "Title": "Hi.NcParsers.Keywords.Fanuc", "Summary": null }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.Keywords.FanucGoto.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.Keywords.FanucGoto.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.Keywords.FanucGoto", + "Summary": "

    Fanuc Custom Macro B GOTO record. Stamped on the host block by\n after the control-flow\ndecision has been made; produced earlier by\n as a parsing-stage\nsub-section (Parsing.FanucGoto) carrying the raw captured fields.

    \n

    \nTwo source forms map to the same shape:\n

    • GOTO <n> — unconditional jump. is null.
    • IF [<bool-expr>] GOTO <n> — conditional jump.\n holds the expression text from inside the\n brackets.
    \n\n

    \nAt parsing time is a raw token from the source — it may\nbe a literal (\"100\"), a variable reference (\"#1\"), or a\nbracketed expression (\"#[#2+5]\"). VariableEvaluatorSyntax\nsubstitutes a resolved literal back into the same field in the\nEvaluation bundle; then\nint.TryParses the final string to produce an int target.\n

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.Keywords.FanucIfThen.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.Keywords.FanucIfThen.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.Keywords.FanucIfThen", + "Summary": "

    Fanuc Custom Macro B IF [<cond>] THEN <body>\nsingle-block conditional record. Stamped on the host block by\n after the gate\ndecision; produced earlier by\n as a parsing-stage\nsub-section (Parsing.FanucIfThen) carrying the raw captured fields\nplus an internal PendingAssignments sub-object harvested from the\nbody text.

    \n

    \nSpec: IF [bool-expr] THEN <stmt> executes <stmt>\nonly when the condition is truthy. Unlike 's\nconditional form there is no jump — the body affects the current block\nonly, no source splice, no label scan, no iteration watchdog. The most\ncommon body shape is a single Custom Macro B assignment\n(#nnn = <expr>); multiple assignments in one body are also\naccepted and lifted together.\n

    \n

    \n is held as a string at parsing time so\nVariableEvaluatorSyntax's pass-2 tree walk can substitute\nit to a numeric in place;\nthe FanucIfThenSyntax tail then reads the resolved node polymorphically\nvia the same ReadCondition shape used by\n.\n

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.Keywords.FanucMacroCall.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.Keywords.FanucMacroCall.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.Keywords.FanucMacroCall", + "Summary": "

    One-shot custom-macro-call record written by\n. Lives on both the\nG65 host block (the caller) and every inlined block of the\nmacro body — so a cache-dump reader can land on any block inside the\nmacro and immediately see “this block belongs to a G65 call of\nFile with these argument bindings” without back-walking\nto find the host.

    \n

    \nEach inlined block additionally carries the resolved\nVars.Local #1-#26 bindings derived from \n(see ), so\n\nresolves macro args in a single-block lookup. Frame isolation is\nstructural: caller blocks never have Vars.Local written, so\nafter the macro body ends, the next caller block reads null\nfor any #1-#26 without any explicit frame marker.\n

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.Keywords.FanucModalMacro.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.Keywords.FanucModalMacro.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.Keywords.FanucModalMacro", + "Summary": "

    Modal-macro-call record left by\n. Carries Fanuc\nG66 setup state forward block-to-block until cancelled by\nG67. The section is also written on the G67 block itself\n(with = “G67”) so cache dumps show the cancel\nedge; subsequent blocks then carry no section at all.

    \n

    \nPer-block expansion of the modal call into an actual macro inline at\nevery positioning move is not yet implemented — a\nFanucModalMacro--NotExpanded warning is emitted on the setup\nblock to flag the simulation gap. The setup state itself is captured\nfaithfully so external tooling can detect \"this block sits inside a\nG66 modal\" via the carried section.\n

    \n" + }, { "type": "ManagedReference", "source_relative_path": "api/Hi.NcParsers.Keywords.FanucPathSmoothing.yml", @@ -11348,7 +11670,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Keywords.IMotionEventDef", - "Summary": "

    One-shot motion event — present only on blocks that actually issue a\nmotion command. Used by motion semantics (,\n, )\nas the trigger to emit motion . NOT carried\nforward across blocks. Property names are used as JSON keys via nameof.

    \n" + "Summary": "

    One-shot motion event — present on every block whose source programmed\na motion command, regardless of whether the resulting displacement is non-zero.\nA redundant G01 X10 on a block already at X10 still gets a\n; the motion semantics\n(,\n, )\nthen early-return on distance <= 0 and emit no\n. NOT carried forward across blocks.

    \n

    \nReason for the \"programmed, not displaced\" definition: Fanuc G66 modal\nmacro fires once per programmed motion command (per Fanuc spec —\nno distance gate), so .Expansion uses\n presence as its trigger. Suppressing the section\non zero-distance moves would silently change G66 behaviour. The modal\nsibling separately latches the Group-01 mode for\nreaders that only need to know \"what G-code is active\".\n

    \nProperty names are used as JSON keys via nameof.\n" }, { "type": "ManagedReference", @@ -11630,6 +11952,20 @@ "Title": "Hi.NcParsers.Keywords.MachineCoordinateState", "Summary": "

    Section key holder for .

    \n" }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.Keywords.MacroFrame.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.Keywords.MacroFrame.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.Keywords.MacroFrame", + "Summary": "

    Top-level integer marker stamped onto a SyntaxPiece's JSON\nto identify which call frame the block belongs to. Brand-agnostic by\ndesign — written by \ntoday, reusable by any future call-inlining syntax (Fanuc G66\nmodal expansion, Heidenhain LBL CALL, …) that needs\nlocal-variable isolation across call boundaries.

    \n

    \nSemantics: the value is an opaque id; only equality matters. Two\nblocks with the same id share a call frame\n(locals visible across them via single-step carry); two blocks with\ndifferent ids do not. The id 0 is reserved for the main\nprogram frame and is returned by when the field is\nabsent — so a plain caller block needs no stamp and yet compares\ndistinct from any inlined frame.\n

    \n

    \nStored as a top-level JSON int (not an object section) so it stays\nlightweight on every inlined block. Decoupled from\n: that section is a diagnostic record of\nthe call (what file, what args), while MacroFrame is the\npurely functional marker the local-variable I/O syntaxes consult.\n

    \n" + }, { "type": "ManagedReference", "source_relative_path": "api/Hi.NcParsers.Keywords.MotionEvent.yml", @@ -11824,7 +12160,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Keywords.SubProgramCall", - "Summary": "

    Subprogram call record left on the M98 / M198 host block by\n after the subprogram\nfile has been inlined into the source layer. The call itself emits no\nmotion act; this section is bookkeeping so cache dumps and diagnostic\nreaders can see "this block triggered an inline of file File".

    \n" + "Summary": "

    Subprogram call record left by\n on the M98 /\nM198 host block and on every inlined body block. The call itself\nemits no motion act; this section is bookkeeping so cache dumps and\ndiagnostic readers can see "this block triggered (or sits inside)\nan inline of program P".

    \n

    \nM98 and M198 share the exact same section shape. The\ndifference between them is purely environmental — which folder the\nresolver looks in (SubProgramFolderConfig.InternalFolder vs\nExternalFolder) — and that lives on the dependency, not in\nthis JSON record.\n

    \n" }, { "type": "ManagedReference", @@ -11838,7 +12174,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Keywords.SubProgramReturn", - "Summary": "

    Subprogram return record left on the M99 host block by\n. Return blocks\nproduce no motion acts; this section makes the consumed M99 visible\nin cache dumps and reserves a slot for future M99 P{seq}\n(return-to-sequence-number) support.

    \n" + "Summary": "

    Subprogram return record left on the M99 host block by\n. Return blocks\nproduce no motion acts; this section makes the consumed M99 visible\nin cache dumps and surfaces the M99 P{seq} jump decision.

    \n" }, { "type": "ManagedReference", @@ -11938,6 +12274,20 @@ "Title": "Hi.NcParsers.LogicSyntaxs.BackBoringSyntax", "Summary": "

    G87 back boring cycle. Supports modal repetition.\nCuts upward from Z to R — used to bore the back side of a workpiece.

    \n

    \nCycle sequence:\n

    1. Oriented spindle stop (OSS) at current position
    2. Rapid (shifted) to init position, then down to bottom Z\n — tool enters pre-drilled hole without contacting bore wall
    3. Shift back to hole center at bottom
    4. Spindle start (CW)
    5. Feed upward from Z to R-point (back boring cut)
    6. Oriented spindle stop at R
    7. Tool shift, rapid retract (shifted) to final Z
    8. Shift back to center, spindle restart
    \n\n

    \nQ specifies the lateral shift distance (mm).\nShift direction defaults to +X (OSS angle 0°).\n

    \n

    \nReads absolute coordinates from the cycle section, which is\nresolved by before this\nsyntax runs.\n

    \n" }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.LogicSyntaxs.BareG28Behavior.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.LogicSyntaxs.BareG28Behavior", + "Summary": "

    Writes section for G28 reference point return.\nReads intermediate XYZ from Parsing.G28\n(written by )\nand converts to machine coordinates via\n.

    \n

    \nMust be placed after in the syntax chain.\nRemoves the section written by\n (G28 handles its own motion).\nOverwrites root \nand with reference position\nfor subsequent block lookback.\n

    \n" + }, { "type": "ManagedReference", "source_relative_path": "api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.yml", @@ -12244,7 +12594,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax", - "Summary": "

    Resolve modular rotary axes to the shortest cyclic path relative to the previous node.\nUses to determine which axes\nwithin need cyclic resolution.\nFalls back to hardcoded A/B/C if no is available.\nMust be placed after in .

    \n" + "Summary": "

    Resolve modular rotary axes to the shortest cyclic path relative to the previous node.\nUses to determine which axes\nwithin need cyclic resolution.\nFalls back to hardcoded A/B/C if no is available.\nMust be placed after in .

    \n

    \nTwo stages, mirroring :\n

    1. Root MachineCoordinateState — anchored at the previous\n block's modal rotary state.
    2. .[*]\n — sequential walk through items, anchoring item 0 at the previous\n block's modal state and item i > 0 at item i-1's\n post-cycle value (per-axis chain). Items without a rotary\n MachineCoordinateState are skipped.
    \nThe items pass enables rotary motion (e.g. G28 ABC intermediate /\nhome stages) to surface as motion \nsegments rather than a single root-MC stamp.\n\n" }, { "type": "ManagedReference", @@ -12356,7 +12706,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax", - "Summary": "

    Clears the per-block Vars.Volatile dictionary on blocks that\ntriggered program end (M02 / M30, identified by the\n section written by ).

    \n

    \nReal Fanuc clears non-retained common variables (#100-#499) on program\nend + reset; this syntax models that behaviour at the simulator level.\nThe clear happens on the same block that carried M02/M30 — the next\nblock's carry then sees an\nempty dictionary on the predecessor and starts fresh.\n

    \n

    \nPipeline placement: must run after both \n(which writes the section this syntax checks)\nand (so the carry has\nalready happened on this block; this syntax overwrites the result).\n

    \n

    \nRetained common variables (#500-#999, owned by\n) are\nuntouched — they survive program end on real hardware (NV-RAM).\nLocal variables (#1-#33, scope: macro call frame) are also\nuntouched here; their lifecycle belongs to G65/G66/M99 push/pop, not\nprogram end.\n

    \n" + "Summary": "

    Clears the per-block Vars.Volatile dictionary on blocks that\ntriggered program end (M02 / M30, identified by the\n section written by ).

    \n

    \nReal Fanuc clears non-retained common variables (#100-#499) on program\nend + reset; this syntax models that behaviour at the simulator level.\nThe clear happens on the same block that carried M02/M30 — the next\nblock's carry then sees an\nempty dictionary on the predecessor and starts fresh.\n

    \n

    \nPipeline placement: must run after both \n(which writes the section this syntax checks)\nand (so the carry has\nalready happened on this block; this syntax overwrites the result).\n

    \n

    \nRetained common variables (#500-#999, owned by\n) are\nuntouched — they survive program end on real hardware (NV-RAM).\nLocal variables (#1-#33, scope: macro call frame) are also\nuntouched here; their lifecycle belongs to G65/G66/M99 push/pop, not\nprogram end.\n

    \n

    \nAlso clears any active on the same\nedge: a G66 modal that was still active when M02/M30 hit is\nimplicitly cancelled, matching real Fanuc reset behaviour. The\nsection is overwritten with a G67-shaped cancel marker so\nthe carry mechanism in\n sees the boundary\nand does not propagate the modal past the program-end edge.\n

    \n" }, { "type": "ManagedReference", @@ -12426,7 +12776,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax", - "Summary": "

    Writes section for G28 reference point return.\nReads intermediate XYZ from Parsing.G28\n(written by )\nand converts to machine coordinates via\n.

    \n

    \nMust be placed after in the syntax chain.\nRemoves the section written by\n (G28 handles its own motion).\nOverwrites root \nand with reference position\nfor subsequent block lookback.\n

    \n" + "Summary": null }, { "type": "ManagedReference", @@ -12696,17 +13046,59 @@ }, { "type": "ManagedReference", - "source_relative_path": "api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.yml", + "source_relative_path": "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.yml", "output": { ".html": { - "relative_path": "api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html" + "relative_path": "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html" } }, "version": "", "Uid": null, "IsMRef": true, - "Title": "Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax", - "Summary": "

    Detects a Fanuc-family program identifier header — O1234 or\n<O1234> — that follows a \nline, and records it under on the\nblock JSON. The wrapping form (bare vs angle-bracketed) is preserved\nin so the block can be emitted\nback to its original notation.

    \n" + "Title": "Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax", + "Summary": "

    Parses Fanuc Custom Macro B GOTO phrases out of the remaining\n into a Parsing.FanucGoto\nsub-object. Two forms are recognised:

    \n
    • GOTO <n> — unconditional jump.
    • IF [<bool-expr>] GOTO <n> — conditional jump.
    \n

    \nIF [...] GOTO is matched as a single phrase, not as an IF\nsyntax composed with a GOTO syntax — Fanuc only permits the two\nfixed forms (the other being IF [...] THEN <assignment>,\nout of scope here), so a phrase-level parser is more faithful and\navoids parsing-ambiguity rabbit holes.\n

    \n

    \n<n> is captured as a raw token (literal like \"100\",\nvariable like \"#1\", or bracketed expression like\n\"#[#2+5]\"). \nsubstitutes the resolved literal back into the same field downstream;\n then parses the final\nstring as an int. Storing as a string at parsing time mirrors how axis\ntags and canned-cycle params accept #N references and the\nevaluator rewrites them in place.\n

    \n

    \nPipeline placement: after (so the leading\nN{seq} on a block like N50 GOTO 100 has already been\nconsumed) and after \n(so a parenthesised (GOTO 100) inside a comment never matches).\nThe phrase consumes the entire remaining text on the block — Fanuc\nallows only the GOTO / IF-GOTO phrase after any preceding head index,\nno other instructions on the same block.\n

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax", + "Summary": "

    Parses the Fanuc Custom Macro B\nIF [<bool-expr>] THEN <body> single-block conditional\nphrase out of into a\nParsing.FanucIfThen sub-object. Sibling to\n — Fanuc spec only permits two\nIF-led control phrases (IF [...] GOTO <n> handled there,\nIF [...] THEN <stmt> handled here) so each form is matched\nphrase-level rather than composed from a generic IF combinator.

    \n

    \nBody shape. The body after THEN is conceptually a single\nstatement that affects the current block only — no jump, no label scan.\nAlmost always a Custom Macro B assignment (#nnn = <expr>);\nmultiple assignments in the same body\n(#100 = 5. #101 = #100 + 1) are also accepted. The parsing\nsyntax pre-extracts these via\n into\nParsing.FanucIfThen.PendingAssignments as {tag: rhs-string}\nentries — that shape lets 's\npass-2 tree walk substitute each RHS to a numeric in place, and lets\n lift the\nresolved entries into Parsing.Assignments only when the gate\ncondition fires (so unfired bodies leave no trace in the readers).\n

    \n

    \nPipeline placement. This syntax must run before\n — the bare IF-GOTO regex over there\n(^IF[..]GOTO n$) is anchored, but consuming IF-THEN here first\nkeeps the two phrases textually disjoint and avoids any future\nregression if either regex is loosened. Also placed before\n so a bare\nIF [...] THEN #100 = 5. is not first half-eaten as a plain\nassignment.\n

    \n

    \nRaw is retained verbatim on the\nparsing section regardless of whether the body parsed as assignments —\nit carries the round-trip view and lets the evaluation syntax warn\n(FanucIfThen--UnsupportedBody) if no PendingAssignments were\nproduced on a truthy condition.\n

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax", + "Summary": "

    Detects a Fanuc-family program identifier header — O1234 or\n<O1234> — that follows a \nline, and records it under on the\nblock JSON. The wrapping form (bare vs angle-bracketed) is preserved\nin so the block can be emitted\nback to its original notation.

    \n" + }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.ParsingSyntaxs.Fanuc.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.ParsingSyntaxs.Fanuc", + "Summary": null }, { "type": "ManagedReference", @@ -12860,7 +13252,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax", - "Summary": "

    Heidenhain linear movement (the leading L) syntax.

    \n" + "Summary": "

    Heidenhain linear movement (the leading L) syntax. Strips the leading\nL and grabs axis-tag values for any of\n (X, Y, Z, U, V, W, A, B, C) that\nappear afterwards as {axis}{signed-value} pairs; values are\nparsed as floats via .

    \n" }, { "type": "ManagedReference", @@ -13070,7 +13462,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax", - "Summary": "

    Per-block modal-section carry. For each key in ,\nif the current block has no section for that key, deep-clone the same\nsection from the immediately previous block (which is itself guaranteed\nto carry it because every block is processed by this syntax) and set\n = \ninside the cloned section. Lets every block stand alone with its full\nmodal context, so downstream readers (cache-file dumps, semantics, UI\njumping to a single block) do not need\n to resolve modal state.

    \n

    \nThis replaces the earlier CacheSyntax design (which sampled\nevery Pace blocks). The legacy CacheSyntax XName is still\nrecognised on load for backward compatibility with previously-saved\nproject files.\n

    \n" + "Summary": "

    Per-block modal-section carry. For each key in ,\nif the current block has no section for that key, deep-clone the same\nsection from the immediately previous block (which is itself guaranteed\nto carry it because every block is processed by this syntax) and set\n = \ninside the cloned section. Lets every block stand alone with its full\nmodal context, so downstream readers (cache-file dumps, semantics, UI\njumping to a single block) do not need\n to resolve modal state.

    \n

    \nA JSON section is a candidate for when ALL\nfour criteria hold:\n

    1. Writers concentrated — one or two syntaxes own the\n section (e.g. /\n own\n MotionState; the call/return pair own\n SubProgramCall-derived state).
    2. Readers distributed — multiple downstream consumers\n each need the value, and none of them should walk back to find it.\n Single-reader sections do not benefit from blanket carry.
    3. Every block must see the section — cache-dump readers\n landing randomly, single-block UI views, and look-ahead syntaxes\n all require the section to be present on every block.
    4. Carry is unconditional — no frame-gating or other\n per-block veto. Sections that need conditional carry (e.g.\n 's\n frame-aware Vars.Local dict-merge — carry only when\n MacroFrame matches) belong in the owning syntax's own\n carry logic, not here.
    \nA section failing any criterion should be carried through its owning\nsyntax's own logic (single-step node.Previous read, or no carry\nat all if absence is meaningful — e.g. MacroFrame absent = main\nframe).\n\n

    \nThis replaces the earlier CacheSyntax design (which sampled\nevery Pace blocks). The legacy CacheSyntax XName is still\nrecognised on load for backward compatibility with previously-saved\nproject files.\n

    \n" }, { "type": "ManagedReference", @@ -13196,7 +13588,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Semantics.CompoundMotionSemantic", - "Summary": "

    Resolves into acts\nby delegating to\n.

    \n" + "Summary": "

    Resolves into acts\nby delegating to\n.

    \n" }, { "type": "ManagedReference", diff --git a/App/wwwroot/HiAPI-docsite/release-note/index.html b/App/wwwroot/HiAPI-docsite/release-note/index.html index 4e99a212..b20c3128 100644 --- a/App/wwwroot/HiAPI-docsite/release-note/index.html +++ b/App/wwwroot/HiAPI-docsite/release-note/index.html @@ -87,6 +87,13 @@

    Release Note

    +

    HiNc Packages Version 3.1.171

    +
      +
    • Rename RuntimeApiSessionShell (the runtime entry point exposed to scripting); IShellCommandISessionCommand and RuntimeControllerSessionShellController; the Hi.ShellCommands namespace moves to Hi.SessionCommands, and every command implementer's Run() parameter renames scriptApisessionShell
    • +
    • Tri-state milling-physics contract: MachiningStep physics getters converge on a tri-state result, non-null MillingPhysicsBrief on no-cut steps under EnablePhysics; silently skip thermal physics on null FluteMaterial / WorkpieceMaterial; lazy first-equip warning; align relief-face null-sentinel across NoCut + producer (in NcOpt and forces)
    • +
    • Rename IMachiningStepHostIMachiningService (drops the ICsScriptApi seam)
    • +
    • Fixes: rotary IK round-trip anchored to pre-FK interpolated angle; ForceAccelShot.ReadRows skips blank lines
    • +

    HiNc Packages Version 3.1.167

    • Introduce SoftNcRunner as a pluggable NC parser/runner replacing the legacy HardNcRunner; opt in via EnableSoftNcRunner. see HardNc → SoftNc Rewrite — Progress Report for the in-flight rewrite scope and remaining work
    • diff --git a/App/wwwroot/HiAPI-docsite/sample/Sample.MachineTool.DemoBuildMachineTool.html b/App/wwwroot/HiAPI-docsite/sample/Sample.MachineTool.DemoBuildMachineTool.html index b2afe1b1..d56fb06d 100644 --- a/App/wwwroot/HiAPI-docsite/sample/Sample.MachineTool.DemoBuildMachineTool.html +++ b/App/wwwroot/HiAPI-docsite/sample/Sample.MachineTool.DemoBuildMachineTool.html @@ -182,7 +182,7 @@ namespace Sample.MachineTool { static DemoBuildMachineTool() { - XFactory.Regs.Add(XName, (xml, baseDirectory, relFile, progress, res) => new DemoBuildMachineTool()); + XFactory.Generators.Add(XName, (xml, baseDirectory, relFile, progress, res) => new DemoBuildMachineTool()); } /// <summary> /// Generates an XYZ-ABC machine tool instance from embedded resources. diff --git a/App/wwwroot/HiAPI-docsite/xrefmap.yml b/App/wwwroot/HiAPI-docsite/xrefmap.yml index b5769bdf..1e0000a6 100644 --- a/App/wwwroot/HiAPI-docsite/xrefmap.yml +++ b/App/wwwroot/HiAPI-docsite/xrefmap.yml @@ -6226,6 +6226,24 @@ references: fullName.vb: Hi.Common.Collections.LazyLinkedList(Of T).PrependSource nameWithType: LazyLinkedList.PrependSource nameWithType.vb: LazyLinkedList(Of T).PrependSource +- uid: Hi.Common.Collections.LazyLinkedList`1.ReplaceSource(System.Collections.Generic.IEnumerable{`0}) + name: ReplaceSource(IEnumerable) + href: api/Hi.Common.Collections.LazyLinkedList-1.html#Hi_Common_Collections_LazyLinkedList_1_ReplaceSource_System_Collections_Generic_IEnumerable__0__ + commentId: M:Hi.Common.Collections.LazyLinkedList`1.ReplaceSource(System.Collections.Generic.IEnumerable{`0}) + name.vb: ReplaceSource(IEnumerable(Of T)) + fullName: Hi.Common.Collections.LazyLinkedList.ReplaceSource(System.Collections.Generic.IEnumerable) + fullName.vb: Hi.Common.Collections.LazyLinkedList(Of T).ReplaceSource(System.Collections.Generic.IEnumerable(Of T)) + nameWithType: LazyLinkedList.ReplaceSource(IEnumerable) + nameWithType.vb: LazyLinkedList(Of T).ReplaceSource(IEnumerable(Of T)) +- uid: Hi.Common.Collections.LazyLinkedList`1.ReplaceSource* + name: ReplaceSource + href: api/Hi.Common.Collections.LazyLinkedList-1.html#Hi_Common_Collections_LazyLinkedList_1_ReplaceSource_ + commentId: Overload:Hi.Common.Collections.LazyLinkedList`1.ReplaceSource + isSpec: "True" + fullName: Hi.Common.Collections.LazyLinkedList.ReplaceSource + fullName.vb: Hi.Common.Collections.LazyLinkedList(Of T).ReplaceSource + nameWithType: LazyLinkedList.ReplaceSource + nameWithType.vb: LazyLinkedList(Of T).ReplaceSource - uid: Hi.Common.Collections.LinkedListUtil name: LinkedListUtil href: api/Hi.Common.Collections.LinkedListUtil.html @@ -15958,12 +15976,6 @@ references: fullName.vb: Hi.Common.XmlUtils.XFactory.GenByFile(Of T)(String, String, System.IProgress(Of Object), Boolean, Object()) nameWithType: XFactory.GenByFile(string, string, IProgress, bool, object[]) nameWithType.vb: XFactory.GenByFile(Of T)(String, String, IProgress(Of Object), Boolean, Object()) -- uid: Hi.Common.XmlUtils.XFactory.GenByXElementDelegate - name: XFactory.GenByXElementDelegate - href: api/Hi.Common.XmlUtils.XFactory.GenByXElementDelegate.html - commentId: T:Hi.Common.XmlUtils.XFactory.GenByXElementDelegate - fullName: Hi.Common.XmlUtils.XFactory.GenByXElementDelegate - nameWithType: XFactory.GenByXElementDelegate - uid: Hi.Common.XmlUtils.XFactory.GenFileRefSource* name: GenFileRefSource href: api/Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_GenFileRefSource_ @@ -16030,19 +16042,25 @@ references: fullName.vb: Hi.Common.XmlUtils.XFactory.Gen(Of T)(System.Xml.Linq.XElement, String, String, System.IProgress(Of Object), Boolean, Object()) nameWithType: XFactory.Gen(XElement, string, out string, IProgress, bool, object[]) nameWithType.vb: XFactory.Gen(Of T)(XElement, String, String, IProgress(Of Object), Boolean, Object()) -- uid: Hi.Common.XmlUtils.XFactory.Regs - name: Regs - href: api/Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Regs - commentId: P:Hi.Common.XmlUtils.XFactory.Regs - fullName: Hi.Common.XmlUtils.XFactory.Regs - nameWithType: XFactory.Regs -- uid: Hi.Common.XmlUtils.XFactory.Regs* - name: Regs - href: api/Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Regs_ - commentId: Overload:Hi.Common.XmlUtils.XFactory.Regs +- uid: Hi.Common.XmlUtils.XFactory.Generators + name: Generators + href: api/Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Generators + commentId: P:Hi.Common.XmlUtils.XFactory.Generators + fullName: Hi.Common.XmlUtils.XFactory.Generators + nameWithType: XFactory.Generators +- uid: Hi.Common.XmlUtils.XFactory.Generators* + name: Generators + href: api/Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Generators_ + commentId: Overload:Hi.Common.XmlUtils.XFactory.Generators isSpec: "True" - fullName: Hi.Common.XmlUtils.XFactory.Regs - nameWithType: XFactory.Regs + fullName: Hi.Common.XmlUtils.XFactory.Generators + nameWithType: XFactory.Generators +- uid: Hi.Common.XmlUtils.XFactory.XGeneratorDelegate + name: XFactory.XGeneratorDelegate + href: api/Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.html + commentId: T:Hi.Common.XmlUtils.XFactory.XGeneratorDelegate + fullName: Hi.Common.XmlUtils.XFactory.XGeneratorDelegate + nameWithType: XFactory.XGeneratorDelegate - uid: Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate name: XFactory.XmlExceptionDelegate href: api/Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html @@ -85548,6 +85566,25 @@ references: commentId: T:Hi.MachiningProcs.SessionProgress fullName: Hi.MachiningProcs.SessionProgress nameWithType: SessionProgress +- uid: Hi.MachiningProcs.SessionProgress.#ctor + name: SessionProgress() + href: api/Hi.MachiningProcs.SessionProgress.html#Hi_MachiningProcs_SessionProgress__ctor + commentId: M:Hi.MachiningProcs.SessionProgress.#ctor + name.vb: New() + fullName: Hi.MachiningProcs.SessionProgress.SessionProgress() + fullName.vb: Hi.MachiningProcs.SessionProgress.New() + nameWithType: SessionProgress.SessionProgress() + nameWithType.vb: SessionProgress.New() +- uid: Hi.MachiningProcs.SessionProgress.#ctor* + name: SessionProgress + href: api/Hi.MachiningProcs.SessionProgress.html#Hi_MachiningProcs_SessionProgress__ctor_ + commentId: Overload:Hi.MachiningProcs.SessionProgress.#ctor + isSpec: "True" + name.vb: New + fullName: Hi.MachiningProcs.SessionProgress.SessionProgress + fullName.vb: Hi.MachiningProcs.SessionProgress.New + nameWithType: SessionProgress.SessionProgress + nameWithType.vb: SessionProgress.New - uid: Hi.MachiningProcs.SessionProgress.Add(System.Object) name: Add(object) href: api/Hi.MachiningProcs.SessionProgress.html#Hi_MachiningProcs_SessionProgress_Add_System_Object_ @@ -120803,6 +120840,114 @@ references: commentId: F:Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType.TypeC fullName: Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType.TypeC nameWithType: CutterCompensationType.TypeC +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency + name: FanucGotoIterationDependency + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html + commentId: T:Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency + nameWithType: FanucGotoIterationDependency +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.#ctor + name: FanucGotoIterationDependency() + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency__ctor + commentId: M:Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.#ctor + name.vb: New() + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.FanucGotoIterationDependency() + fullName.vb: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.New() + nameWithType: FanucGotoIterationDependency.FanucGotoIterationDependency() + nameWithType.vb: FanucGotoIterationDependency.New() +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.#ctor(System.Xml.Linq.XElement) + name: FanucGotoIterationDependency(XElement) + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency__ctor_System_Xml_Linq_XElement_ + commentId: M:Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.#ctor(System.Xml.Linq.XElement) + name.vb: New(XElement) + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.FanucGotoIterationDependency(System.Xml.Linq.XElement) + fullName.vb: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.New(System.Xml.Linq.XElement) + nameWithType: FanucGotoIterationDependency.FanucGotoIterationDependency(XElement) + nameWithType.vb: FanucGotoIterationDependency.New(XElement) +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.#ctor* + name: FanucGotoIterationDependency + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency__ctor_ + commentId: Overload:Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.#ctor + isSpec: "True" + name.vb: New + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.FanucGotoIterationDependency + fullName.vb: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.New + nameWithType: FanucGotoIterationDependency.FanucGotoIterationDependency + nameWithType.vb: FanucGotoIterationDependency.New +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.CountByTarget + name: CountByTarget + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_CountByTarget + commentId: P:Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.CountByTarget + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.CountByTarget + nameWithType: FanucGotoIterationDependency.CountByTarget +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.CountByTarget* + name: CountByTarget + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_CountByTarget_ + commentId: Overload:Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.CountByTarget + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.CountByTarget + nameWithType: FanucGotoIterationDependency.CountByTarget +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.DefaultMaxIterationsPerTarget + name: DefaultMaxIterationsPerTarget + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_DefaultMaxIterationsPerTarget + commentId: F:Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.DefaultMaxIterationsPerTarget + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.DefaultMaxIterationsPerTarget + nameWithType: FanucGotoIterationDependency.DefaultMaxIterationsPerTarget +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.MakeXmlSource(System.String,System.String,System.Boolean) + name: MakeXmlSource(string, string, bool) + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_MakeXmlSource_System_String_System_String_System_Boolean_ + commentId: M:Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.MakeXmlSource(System.String,System.String,System.Boolean) + name.vb: MakeXmlSource(String, String, Boolean) + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.MakeXmlSource(string, string, bool) + fullName.vb: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.MakeXmlSource(String, String, Boolean) + nameWithType: FanucGotoIterationDependency.MakeXmlSource(string, string, bool) + nameWithType.vb: FanucGotoIterationDependency.MakeXmlSource(String, String, Boolean) +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.MakeXmlSource* + name: MakeXmlSource + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_MakeXmlSource_ + commentId: Overload:Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.MakeXmlSource + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.MakeXmlSource + nameWithType: FanucGotoIterationDependency.MakeXmlSource +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.MaxIterationsPerTarget + name: MaxIterationsPerTarget + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_MaxIterationsPerTarget + commentId: P:Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.MaxIterationsPerTarget + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.MaxIterationsPerTarget + nameWithType: FanucGotoIterationDependency.MaxIterationsPerTarget +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.MaxIterationsPerTarget* + name: MaxIterationsPerTarget + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_MaxIterationsPerTarget_ + commentId: Overload:Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.MaxIterationsPerTarget + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.MaxIterationsPerTarget + nameWithType: FanucGotoIterationDependency.MaxIterationsPerTarget +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.Reset + name: Reset() + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_Reset + commentId: M:Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.Reset + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.Reset() + nameWithType: FanucGotoIterationDependency.Reset() +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.Reset* + name: Reset + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_Reset_ + commentId: Overload:Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.Reset + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.Reset + nameWithType: FanucGotoIterationDependency.Reset +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.XName + name: XName + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_XName + commentId: P:Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.XName + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.XName + nameWithType: FanucGotoIterationDependency.XName +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.XName* + name: XName + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_XName_ + commentId: Overload:Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.XName + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.XName + nameWithType: FanucGotoIterationDependency.XName - uid: Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable name: FanucParameterTable href: api/Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html @@ -121244,6 +121389,34 @@ references: commentId: T:Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup fullName: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup nameWithType: FanucPositionVariableLookup +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.#ctor + name: FanucPositionVariableLookup() + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucPositionVariableLookup__ctor + commentId: M:Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.#ctor + name.vb: New() + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.FanucPositionVariableLookup() + fullName.vb: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.New() + nameWithType: FanucPositionVariableLookup.FanucPositionVariableLookup() + nameWithType.vb: FanucPositionVariableLookup.New() +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.#ctor(System.Xml.Linq.XElement) + name: FanucPositionVariableLookup(XElement) + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucPositionVariableLookup__ctor_System_Xml_Linq_XElement_ + commentId: M:Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.#ctor(System.Xml.Linq.XElement) + name.vb: New(XElement) + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.FanucPositionVariableLookup(System.Xml.Linq.XElement) + fullName.vb: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.New(System.Xml.Linq.XElement) + nameWithType: FanucPositionVariableLookup.FanucPositionVariableLookup(XElement) + nameWithType.vb: FanucPositionVariableLookup.New(XElement) +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.#ctor* + name: FanucPositionVariableLookup + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucPositionVariableLookup__ctor_ + commentId: Overload:Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.#ctor + isSpec: "True" + name.vb: New + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.FanucPositionVariableLookup + fullName.vb: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.New + nameWithType: FanucPositionVariableLookup.FanucPositionVariableLookup + nameWithType.vb: FanucPositionVariableLookup.New - uid: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.AbsoluteXyzBase name: AbsoluteXyzBase href: api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucPositionVariableLookup_AbsoluteXyzBase @@ -121278,6 +121451,35 @@ references: commentId: F:Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.MachineCoordXyzBase fullName: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.MachineCoordXyzBase nameWithType: FanucPositionVariableLookup.MachineCoordXyzBase +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.MakeXmlSource(System.String,System.String,System.Boolean) + name: MakeXmlSource(string, string, bool) + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucPositionVariableLookup_MakeXmlSource_System_String_System_String_System_Boolean_ + commentId: M:Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.MakeXmlSource(System.String,System.String,System.Boolean) + name.vb: MakeXmlSource(String, String, Boolean) + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.MakeXmlSource(string, string, bool) + fullName.vb: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.MakeXmlSource(String, String, Boolean) + nameWithType: FanucPositionVariableLookup.MakeXmlSource(string, string, bool) + nameWithType.vb: FanucPositionVariableLookup.MakeXmlSource(String, String, Boolean) +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.MakeXmlSource* + name: MakeXmlSource + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucPositionVariableLookup_MakeXmlSource_ + commentId: Overload:Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.MakeXmlSource + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.MakeXmlSource + nameWithType: FanucPositionVariableLookup.MakeXmlSource +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.XName + name: XName + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucPositionVariableLookup_XName + commentId: P:Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.XName + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.XName + nameWithType: FanucPositionVariableLookup.XName +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.XName* + name: XName + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucPositionVariableLookup_XName_ + commentId: Overload:Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.XName + isSpec: "True" + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.XName + nameWithType: FanucPositionVariableLookup.XName - uid: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup name: FanucToolOffsetVariableLookup href: api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html @@ -121293,15 +121495,6 @@ references: fullName.vb: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.New() nameWithType: FanucToolOffsetVariableLookup.FanucToolOffsetVariableLookup() nameWithType.vb: FanucToolOffsetVariableLookup.New() -- uid: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.#ctor(Hi.NcParsers.Dependencys.Generic.ToolOffsetTable) - name: FanucToolOffsetVariableLookup(ToolOffsetTable) - href: api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucToolOffsetVariableLookup__ctor_Hi_NcParsers_Dependencys_Generic_ToolOffsetTable_ - commentId: M:Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.#ctor(Hi.NcParsers.Dependencys.Generic.ToolOffsetTable) - name.vb: New(ToolOffsetTable) - fullName: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.FanucToolOffsetVariableLookup(Hi.NcParsers.Dependencys.Generic.ToolOffsetTable) - fullName.vb: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.New(Hi.NcParsers.Dependencys.Generic.ToolOffsetTable) - nameWithType: FanucToolOffsetVariableLookup.FanucToolOffsetVariableLookup(ToolOffsetTable) - nameWithType.vb: FanucToolOffsetVariableLookup.New(ToolOffsetTable) - uid: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.#ctor(System.Xml.Linq.XElement) name: FanucToolOffsetVariableLookup(XElement) href: api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucToolOffsetVariableLookup__ctor_System_Xml_Linq_XElement_ @@ -121321,15 +121514,15 @@ references: fullName.vb: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.New nameWithType: FanucToolOffsetVariableLookup.FanucToolOffsetVariableLookup nameWithType.vb: FanucToolOffsetVariableLookup.New -- uid: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Get(System.String) - name: Get(string) - href: api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucToolOffsetVariableLookup_Get_System_String_ - commentId: M:Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Get(System.String) - name.vb: Get(String) - fullName: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Get(string) - fullName.vb: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Get(String) - nameWithType: FanucToolOffsetVariableLookup.Get(string) - nameWithType.vb: FanucToolOffsetVariableLookup.Get(String) +- uid: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Get(System.String,Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.IReadOnlyList{Hi.NcParsers.Dependencys.INcDependency}) + name: Get(string, LazyLinkedListNode, IReadOnlyList) + href: api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucToolOffsetVariableLookup_Get_System_String_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_IReadOnlyList_Hi_NcParsers_Dependencys_INcDependency__ + commentId: M:Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Get(System.String,Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.IReadOnlyList{Hi.NcParsers.Dependencys.INcDependency}) + name.vb: Get(String, LazyLinkedListNode(Of SyntaxPiece), IReadOnlyList(Of INcDependency)) + fullName: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Get(string, Hi.Common.Collections.LazyLinkedListNode, System.Collections.Generic.IReadOnlyList) + fullName.vb: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Get(String, Hi.Common.Collections.LazyLinkedListNode(Of Hi.NcParsers.Syntaxs.SyntaxPiece), System.Collections.Generic.IReadOnlyList(Of Hi.NcParsers.Dependencys.INcDependency)) + nameWithType: FanucToolOffsetVariableLookup.Get(string, LazyLinkedListNode, IReadOnlyList) + nameWithType.vb: FanucToolOffsetVariableLookup.Get(String, LazyLinkedListNode(Of SyntaxPiece), IReadOnlyList(Of INcDependency)) - uid: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Get* name: Get href: api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucToolOffsetVariableLookup_Get_ @@ -121353,19 +121546,6 @@ references: isSpec: "True" fullName: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.MakeXmlSource nameWithType: FanucToolOffsetVariableLookup.MakeXmlSource -- uid: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Table - name: Table - href: api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucToolOffsetVariableLookup_Table - commentId: P:Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Table - fullName: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Table - nameWithType: FanucToolOffsetVariableLookup.Table -- uid: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Table* - name: Table - href: api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucToolOffsetVariableLookup_Table_ - commentId: Overload:Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Table - isSpec: "True" - fullName: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.Table - nameWithType: FanucToolOffsetVariableLookup.Table - uid: Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.ToolHeightMax name: ToolHeightMax href: api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html#Hi_NcParsers_Dependencys_Fanuc_FanucToolOffsetVariableLookup_ToolHeightMax @@ -124793,6 +124973,54 @@ references: commentId: N:Hi.NcParsers.EvaluationSyntaxs fullName: Hi.NcParsers.EvaluationSyntaxs nameWithType: Hi.NcParsers.EvaluationSyntaxs +- uid: Hi.NcParsers.EvaluationSyntaxs.CallStackUtil + name: CallStackUtil + href: api/Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html + commentId: T:Hi.NcParsers.EvaluationSyntaxs.CallStackUtil + fullName: Hi.NcParsers.EvaluationSyntaxs.CallStackUtil + nameWithType: CallStackUtil +- uid: Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.BuildPoppedCallStack(System.Text.Json.Nodes.JsonObject) + name: BuildPoppedCallStack(JsonObject) + href: api/Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html#Hi_NcParsers_EvaluationSyntaxs_CallStackUtil_BuildPoppedCallStack_System_Text_Json_Nodes_JsonObject_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.BuildPoppedCallStack(System.Text.Json.Nodes.JsonObject) + fullName: Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.BuildPoppedCallStack(System.Text.Json.Nodes.JsonObject) + nameWithType: CallStackUtil.BuildPoppedCallStack(JsonObject) +- uid: Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.BuildPoppedCallStack* + name: BuildPoppedCallStack + href: api/Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html#Hi_NcParsers_EvaluationSyntaxs_CallStackUtil_BuildPoppedCallStack_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.BuildPoppedCallStack + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.BuildPoppedCallStack + nameWithType: CallStackUtil.BuildPoppedCallStack +- uid: Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.BuildPushedCallStack(System.Text.Json.Nodes.JsonObject,System.String) + name: BuildPushedCallStack(JsonObject, string) + href: api/Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html#Hi_NcParsers_EvaluationSyntaxs_CallStackUtil_BuildPushedCallStack_System_Text_Json_Nodes_JsonObject_System_String_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.BuildPushedCallStack(System.Text.Json.Nodes.JsonObject,System.String) + name.vb: BuildPushedCallStack(JsonObject, String) + fullName: Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.BuildPushedCallStack(System.Text.Json.Nodes.JsonObject, string) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.BuildPushedCallStack(System.Text.Json.Nodes.JsonObject, String) + nameWithType: CallStackUtil.BuildPushedCallStack(JsonObject, string) + nameWithType.vb: CallStackUtil.BuildPushedCallStack(JsonObject, String) +- uid: Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.BuildPushedCallStack* + name: BuildPushedCallStack + href: api/Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html#Hi_NcParsers_EvaluationSyntaxs_CallStackUtil_BuildPushedCallStack_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.BuildPushedCallStack + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.BuildPushedCallStack + nameWithType: CallStackUtil.BuildPushedCallStack +- uid: Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.GetTopCallerFilePath(System.Text.Json.Nodes.JsonObject) + name: GetTopCallerFilePath(JsonObject) + href: api/Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html#Hi_NcParsers_EvaluationSyntaxs_CallStackUtil_GetTopCallerFilePath_System_Text_Json_Nodes_JsonObject_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.GetTopCallerFilePath(System.Text.Json.Nodes.JsonObject) + fullName: Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.GetTopCallerFilePath(System.Text.Json.Nodes.JsonObject) + nameWithType: CallStackUtil.GetTopCallerFilePath(JsonObject) +- uid: Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.GetTopCallerFilePath* + name: GetTopCallerFilePath + href: api/Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html#Hi_NcParsers_EvaluationSyntaxs_CallStackUtil_GetTopCallerFilePath_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.GetTopCallerFilePath + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.GetTopCallerFilePath + nameWithType: CallStackUtil.GetTopCallerFilePath - uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation name: Hi.NcParsers.EvaluationSyntaxs.Evaluation href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.html @@ -124958,6 +125186,34 @@ references: commentId: T:Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup nameWithType: LocalVariableLookup +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.#ctor + name: LocalVariableLookup() + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup__ctor + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.#ctor + name.vb: New() + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.LocalVariableLookup() + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.New() + nameWithType: LocalVariableLookup.LocalVariableLookup() + nameWithType.vb: LocalVariableLookup.New() +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.#ctor(System.Xml.Linq.XElement) + name: LocalVariableLookup(XElement) + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup__ctor_System_Xml_Linq_XElement_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.#ctor(System.Xml.Linq.XElement) + name.vb: New(XElement) + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.LocalVariableLookup(System.Xml.Linq.XElement) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.New(System.Xml.Linq.XElement) + nameWithType: LocalVariableLookup.LocalVariableLookup(XElement) + nameWithType.vb: LocalVariableLookup.New(XElement) +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.#ctor* + name: LocalVariableLookup + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup__ctor_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.#ctor + isSpec: "True" + name.vb: New + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.LocalVariableLookup + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.New + nameWithType: LocalVariableLookup.LocalVariableLookup + nameWithType.vb: LocalVariableLookup.New - uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.Get(System.String,Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.IReadOnlyList{Hi.NcParsers.Dependencys.INcDependency}) name: Get(string, LazyLinkedListNode, IReadOnlyList) href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup_Get_System_String_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_IReadOnlyList_Hi_NcParsers_Dependencys_INcDependency__ @@ -124986,6 +125242,35 @@ references: commentId: F:Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.LocalMin fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.LocalMin nameWithType: LocalVariableLookup.LocalMin +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.MakeXmlSource(System.String,System.String,System.Boolean) + name: MakeXmlSource(string, string, bool) + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup_MakeXmlSource_System_String_System_String_System_Boolean_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.MakeXmlSource(System.String,System.String,System.Boolean) + name.vb: MakeXmlSource(String, String, Boolean) + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.MakeXmlSource(string, string, bool) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.MakeXmlSource(String, String, Boolean) + nameWithType: LocalVariableLookup.MakeXmlSource(string, string, bool) + nameWithType.vb: LocalVariableLookup.MakeXmlSource(String, String, Boolean) +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.MakeXmlSource* + name: MakeXmlSource + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup_MakeXmlSource_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.MakeXmlSource + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.MakeXmlSource + nameWithType: LocalVariableLookup.MakeXmlSource +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.XName + name: XName + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup_XName + commentId: P:Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.XName + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.XName + nameWithType: LocalVariableLookup.XName +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.XName* + name: XName + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup_XName_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.XName + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.XName + nameWithType: LocalVariableLookup.XName - uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr name: NcBinaryExpr href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr.html @@ -125062,12 +125347,48 @@ references: commentId: F:Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Add fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Add nameWithType: NcBinaryOp.Add +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.And + name: And + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_NcBinaryOp_And + commentId: F:Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.And + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.And + nameWithType: NcBinaryOp.And - uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Divide name: Divide href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_NcBinaryOp_Divide commentId: F:Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Divide fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Divide nameWithType: NcBinaryOp.Divide +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Eq + name: Eq + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_NcBinaryOp_Eq + commentId: F:Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Eq + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Eq + nameWithType: NcBinaryOp.Eq +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Ge + name: Ge + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_NcBinaryOp_Ge + commentId: F:Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Ge + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Ge + nameWithType: NcBinaryOp.Ge +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Gt + name: Gt + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_NcBinaryOp_Gt + commentId: F:Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Gt + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Gt + nameWithType: NcBinaryOp.Gt +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Le + name: Le + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_NcBinaryOp_Le + commentId: F:Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Le + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Le + nameWithType: NcBinaryOp.Le +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Lt + name: Lt + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_NcBinaryOp_Lt + commentId: F:Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Lt + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Lt + nameWithType: NcBinaryOp.Lt - uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Mod name: Mod href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_NcBinaryOp_Mod @@ -125080,12 +125401,30 @@ references: commentId: F:Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Multiply fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Multiply nameWithType: NcBinaryOp.Multiply +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Ne + name: Ne + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_NcBinaryOp_Ne + commentId: F:Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Ne + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Ne + nameWithType: NcBinaryOp.Ne +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Or + name: Or + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_NcBinaryOp_Or + commentId: F:Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Or + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Or + nameWithType: NcBinaryOp.Or - uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Subtract name: Subtract href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_NcBinaryOp_Subtract commentId: F:Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Subtract fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Subtract nameWithType: NcBinaryOp.Subtract +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Xor + name: Xor + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_NcBinaryOp_Xor + commentId: F:Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Xor + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.Xor + nameWithType: NcBinaryOp.Xor - uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpr name: NcExpr href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpr.html @@ -125410,6 +125749,34 @@ references: commentId: T:Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup nameWithType: VolatileVariableLookup +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.#ctor + name: VolatileVariableLookup() + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_VolatileVariableLookup__ctor + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.#ctor + name.vb: New() + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.VolatileVariableLookup() + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.New() + nameWithType: VolatileVariableLookup.VolatileVariableLookup() + nameWithType.vb: VolatileVariableLookup.New() +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.#ctor(System.Xml.Linq.XElement) + name: VolatileVariableLookup(XElement) + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_VolatileVariableLookup__ctor_System_Xml_Linq_XElement_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.#ctor(System.Xml.Linq.XElement) + name.vb: New(XElement) + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.VolatileVariableLookup(System.Xml.Linq.XElement) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.New(System.Xml.Linq.XElement) + nameWithType: VolatileVariableLookup.VolatileVariableLookup(XElement) + nameWithType.vb: VolatileVariableLookup.New(XElement) +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.#ctor* + name: VolatileVariableLookup + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_VolatileVariableLookup__ctor_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.#ctor + isSpec: "True" + name.vb: New + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.VolatileVariableLookup + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.New + nameWithType: VolatileVariableLookup.VolatileVariableLookup + nameWithType.vb: VolatileVariableLookup.New - uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.Get(System.String,Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.IReadOnlyList{Hi.NcParsers.Dependencys.INcDependency}) name: Get(string, LazyLinkedListNode, IReadOnlyList) href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_VolatileVariableLookup_Get_System_String_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_IReadOnlyList_Hi_NcParsers_Dependencys_INcDependency__ @@ -125426,116 +125793,886 @@ references: isSpec: "True" fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.Get nameWithType: VolatileVariableLookup.Get -- uid: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax - name: FanucSystemControlVariableSyntax - href: api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html - commentId: T:Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax - fullName: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax - nameWithType: FanucSystemControlVariableSyntax -- uid: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.#ctor - name: FanucSystemControlVariableSyntax() - href: api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_FanucSystemControlVariableSyntax__ctor - commentId: M:Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.#ctor +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.MakeXmlSource(System.String,System.String,System.Boolean) + name: MakeXmlSource(string, string, bool) + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_VolatileVariableLookup_MakeXmlSource_System_String_System_String_System_Boolean_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.MakeXmlSource(System.String,System.String,System.Boolean) + name.vb: MakeXmlSource(String, String, Boolean) + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.MakeXmlSource(string, string, bool) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.MakeXmlSource(String, String, Boolean) + nameWithType: VolatileVariableLookup.MakeXmlSource(string, string, bool) + nameWithType.vb: VolatileVariableLookup.MakeXmlSource(String, String, Boolean) +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.MakeXmlSource* + name: MakeXmlSource + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_VolatileVariableLookup_MakeXmlSource_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.MakeXmlSource + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.MakeXmlSource + nameWithType: VolatileVariableLookup.MakeXmlSource +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.XName + name: XName + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_VolatileVariableLookup_XName + commentId: P:Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.XName + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.XName + nameWithType: VolatileVariableLookup.XName +- uid: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.XName* + name: XName + href: api/Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_VolatileVariableLookup_XName_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.XName + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.XName + nameWithType: VolatileVariableLookup.XName +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc + name: Hi.NcParsers.EvaluationSyntaxs.Fanuc + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.html + commentId: N:Hi.NcParsers.EvaluationSyntaxs.Fanuc + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc + nameWithType: Hi.NcParsers.EvaluationSyntaxs.Fanuc +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax + name: FanucGotoSyntax + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html + commentId: T:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax + nameWithType: FanucGotoSyntax +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.#ctor + name: FanucGotoSyntax() + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucGotoSyntax__ctor + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.#ctor name.vb: New() - fullName: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.FanucSystemControlVariableSyntax() - fullName.vb: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.New() - nameWithType: FanucSystemControlVariableSyntax.FanucSystemControlVariableSyntax() - nameWithType.vb: FanucSystemControlVariableSyntax.New() -- uid: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.#ctor(System.Xml.Linq.XElement) - name: FanucSystemControlVariableSyntax(XElement) - href: api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_FanucSystemControlVariableSyntax__ctor_System_Xml_Linq_XElement_ - commentId: M:Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.#ctor(System.Xml.Linq.XElement) - name.vb: New(XElement) - fullName: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.FanucSystemControlVariableSyntax(System.Xml.Linq.XElement) - fullName.vb: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.New(System.Xml.Linq.XElement) - nameWithType: FanucSystemControlVariableSyntax.FanucSystemControlVariableSyntax(XElement) - nameWithType.vb: FanucSystemControlVariableSyntax.New(XElement) -- uid: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.#ctor* - name: FanucSystemControlVariableSyntax - href: api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_FanucSystemControlVariableSyntax__ctor_ - commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.#ctor + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.FanucGotoSyntax() + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.New() + nameWithType: FanucGotoSyntax.FanucGotoSyntax() + nameWithType.vb: FanucGotoSyntax.New() +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.#ctor(System.Xml.Linq.XElement,System.String,System.IProgress{System.Object}) + name: FanucGotoSyntax(XElement, string, IProgress) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucGotoSyntax__ctor_System_Xml_Linq_XElement_System_String_System_IProgress_System_Object__ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.#ctor(System.Xml.Linq.XElement,System.String,System.IProgress{System.Object}) + name.vb: New(XElement, String, IProgress(Of Object)) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.FanucGotoSyntax(System.Xml.Linq.XElement, string, System.IProgress) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.New(System.Xml.Linq.XElement, String, System.IProgress(Of Object)) + nameWithType: FanucGotoSyntax.FanucGotoSyntax(XElement, string, IProgress) + nameWithType.vb: FanucGotoSyntax.New(XElement, String, IProgress(Of Object)) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.#ctor* + name: FanucGotoSyntax + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucGotoSyntax__ctor_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.#ctor isSpec: "True" name.vb: New - fullName: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.FanucSystemControlVariableSyntax - fullName.vb: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.New + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.FanucGotoSyntax + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.New + nameWithType: FanucGotoSyntax.FanucGotoSyntax + nameWithType.vb: FanucGotoSyntax.New +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) + name: Build(LazyLinkedListNode, List, NcDiagnosticProgress) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucGotoSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) + name.vb: Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Build(Hi.Common.Collections.LazyLinkedListNode, System.Collections.Generic.List, Hi.NcParsers.NcDiagnosticProgress) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Build(Hi.Common.Collections.LazyLinkedListNode(Of Hi.NcParsers.Syntaxs.SyntaxPiece), System.Collections.Generic.List(Of Hi.NcParsers.Dependencys.INcDependency), Hi.NcParsers.NcDiagnosticProgress) + nameWithType: FanucGotoSyntax.Build(LazyLinkedListNode, List, NcDiagnosticProgress) + nameWithType.vb: FanucGotoSyntax.Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Build* + name: Build + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucGotoSyntax_Build_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Build + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Build + nameWithType: FanucGotoSyntax.Build +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.LabelProbeSyntaxes + name: LabelProbeSyntaxes + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucGotoSyntax_LabelProbeSyntaxes + commentId: P:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.LabelProbeSyntaxes + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.LabelProbeSyntaxes + nameWithType: FanucGotoSyntax.LabelProbeSyntaxes +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.LabelProbeSyntaxes* + name: LabelProbeSyntaxes + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucGotoSyntax_LabelProbeSyntaxes_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.LabelProbeSyntaxes + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.LabelProbeSyntaxes + nameWithType: FanucGotoSyntax.LabelProbeSyntaxes +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.MakeXmlSource(System.String,System.String,System.Boolean) + name: MakeXmlSource(string, string, bool) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucGotoSyntax_MakeXmlSource_System_String_System_String_System_Boolean_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.MakeXmlSource(System.String,System.String,System.Boolean) + name.vb: MakeXmlSource(String, String, Boolean) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.MakeXmlSource(string, string, bool) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.MakeXmlSource(String, String, Boolean) + nameWithType: FanucGotoSyntax.MakeXmlSource(string, string, bool) + nameWithType.vb: FanucGotoSyntax.MakeXmlSource(String, String, Boolean) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.MakeXmlSource* + name: MakeXmlSource + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucGotoSyntax_MakeXmlSource_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.MakeXmlSource + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.MakeXmlSource + nameWithType: FanucGotoSyntax.MakeXmlSource +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Name + name: Name + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucGotoSyntax_Name + commentId: P:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Name + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Name + nameWithType: FanucGotoSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Name* + name: Name + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucGotoSyntax_Name_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Name + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.Name + nameWithType: FanucGotoSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.XName + name: XName + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucGotoSyntax_XName + commentId: P:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.XName + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.XName + nameWithType: FanucGotoSyntax.XName +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.XName* + name: XName + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucGotoSyntax_XName_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.XName + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.XName + nameWithType: FanucGotoSyntax.XName +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax + name: FanucIfThenSyntax + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html + commentId: T:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax + nameWithType: FanucIfThenSyntax +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.#ctor + name: FanucIfThenSyntax() + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucIfThenSyntax__ctor + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.#ctor + name.vb: New() + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.FanucIfThenSyntax() + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.New() + nameWithType: FanucIfThenSyntax.FanucIfThenSyntax() + nameWithType.vb: FanucIfThenSyntax.New() +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.#ctor(System.Xml.Linq.XElement) + name: FanucIfThenSyntax(XElement) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucIfThenSyntax__ctor_System_Xml_Linq_XElement_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.#ctor(System.Xml.Linq.XElement) + name.vb: New(XElement) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.FanucIfThenSyntax(System.Xml.Linq.XElement) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.New(System.Xml.Linq.XElement) + nameWithType: FanucIfThenSyntax.FanucIfThenSyntax(XElement) + nameWithType.vb: FanucIfThenSyntax.New(XElement) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.#ctor* + name: FanucIfThenSyntax + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucIfThenSyntax__ctor_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.#ctor + isSpec: "True" + name.vb: New + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.FanucIfThenSyntax + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.New + nameWithType: FanucIfThenSyntax.FanucIfThenSyntax + nameWithType.vb: FanucIfThenSyntax.New +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) + name: Build(LazyLinkedListNode, List, NcDiagnosticProgress) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucIfThenSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) + name.vb: Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Build(Hi.Common.Collections.LazyLinkedListNode, System.Collections.Generic.List, Hi.NcParsers.NcDiagnosticProgress) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Build(Hi.Common.Collections.LazyLinkedListNode(Of Hi.NcParsers.Syntaxs.SyntaxPiece), System.Collections.Generic.List(Of Hi.NcParsers.Dependencys.INcDependency), Hi.NcParsers.NcDiagnosticProgress) + nameWithType: FanucIfThenSyntax.Build(LazyLinkedListNode, List, NcDiagnosticProgress) + nameWithType.vb: FanucIfThenSyntax.Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Build* + name: Build + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucIfThenSyntax_Build_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Build + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Build + nameWithType: FanucIfThenSyntax.Build +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.MakeXmlSource(System.String,System.String,System.Boolean) + name: MakeXmlSource(string, string, bool) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucIfThenSyntax_MakeXmlSource_System_String_System_String_System_Boolean_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.MakeXmlSource(System.String,System.String,System.Boolean) + name.vb: MakeXmlSource(String, String, Boolean) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.MakeXmlSource(string, string, bool) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.MakeXmlSource(String, String, Boolean) + nameWithType: FanucIfThenSyntax.MakeXmlSource(string, string, bool) + nameWithType.vb: FanucIfThenSyntax.MakeXmlSource(String, String, Boolean) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.MakeXmlSource* + name: MakeXmlSource + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucIfThenSyntax_MakeXmlSource_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.MakeXmlSource + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.MakeXmlSource + nameWithType: FanucIfThenSyntax.MakeXmlSource +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Name + name: Name + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucIfThenSyntax_Name + commentId: P:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Name + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Name + nameWithType: FanucIfThenSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Name* + name: Name + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucIfThenSyntax_Name_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Name + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.Name + nameWithType: FanucIfThenSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.XName + name: XName + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucIfThenSyntax_XName + commentId: P:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.XName + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.XName + nameWithType: FanucIfThenSyntax.XName +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.XName* + name: XName + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucIfThenSyntax_XName_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.XName + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.XName + nameWithType: FanucIfThenSyntax.XName +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax + name: FanucLocalVariableReadingSyntax + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html + commentId: T:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax + nameWithType: FanucLocalVariableReadingSyntax +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.#ctor + name: FanucLocalVariableReadingSyntax() + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucLocalVariableReadingSyntax__ctor + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.#ctor + name.vb: New() + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.FanucLocalVariableReadingSyntax() + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.New() + nameWithType: FanucLocalVariableReadingSyntax.FanucLocalVariableReadingSyntax() + nameWithType.vb: FanucLocalVariableReadingSyntax.New() +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.#ctor(System.Xml.Linq.XElement) + name: FanucLocalVariableReadingSyntax(XElement) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucLocalVariableReadingSyntax__ctor_System_Xml_Linq_XElement_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.#ctor(System.Xml.Linq.XElement) + name.vb: New(XElement) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.FanucLocalVariableReadingSyntax(System.Xml.Linq.XElement) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.New(System.Xml.Linq.XElement) + nameWithType: FanucLocalVariableReadingSyntax.FanucLocalVariableReadingSyntax(XElement) + nameWithType.vb: FanucLocalVariableReadingSyntax.New(XElement) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.#ctor* + name: FanucLocalVariableReadingSyntax + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucLocalVariableReadingSyntax__ctor_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.#ctor + isSpec: "True" + name.vb: New + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.FanucLocalVariableReadingSyntax + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.New + nameWithType: FanucLocalVariableReadingSyntax.FanucLocalVariableReadingSyntax + nameWithType.vb: FanucLocalVariableReadingSyntax.New +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) + name: Build(LazyLinkedListNode, List, NcDiagnosticProgress) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucLocalVariableReadingSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) + name.vb: Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode, System.Collections.Generic.List, Hi.NcParsers.NcDiagnosticProgress) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode(Of Hi.NcParsers.Syntaxs.SyntaxPiece), System.Collections.Generic.List(Of Hi.NcParsers.Dependencys.INcDependency), Hi.NcParsers.NcDiagnosticProgress) + nameWithType: FanucLocalVariableReadingSyntax.Build(LazyLinkedListNode, List, NcDiagnosticProgress) + nameWithType.vb: FanucLocalVariableReadingSyntax.Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Build* + name: Build + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucLocalVariableReadingSyntax_Build_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Build + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Build + nameWithType: FanucLocalVariableReadingSyntax.Build +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.LocalMax + name: LocalMax + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucLocalVariableReadingSyntax_LocalMax + commentId: F:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.LocalMax + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.LocalMax + nameWithType: FanucLocalVariableReadingSyntax.LocalMax +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.LocalMin + name: LocalMin + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucLocalVariableReadingSyntax_LocalMin + commentId: F:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.LocalMin + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.LocalMin + nameWithType: FanucLocalVariableReadingSyntax.LocalMin +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.MakeXmlSource(System.String,System.String,System.Boolean) + name: MakeXmlSource(string, string, bool) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucLocalVariableReadingSyntax_MakeXmlSource_System_String_System_String_System_Boolean_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.MakeXmlSource(System.String,System.String,System.Boolean) + name.vb: MakeXmlSource(String, String, Boolean) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.MakeXmlSource(string, string, bool) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.MakeXmlSource(String, String, Boolean) + nameWithType: FanucLocalVariableReadingSyntax.MakeXmlSource(string, string, bool) + nameWithType.vb: FanucLocalVariableReadingSyntax.MakeXmlSource(String, String, Boolean) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.MakeXmlSource* + name: MakeXmlSource + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucLocalVariableReadingSyntax_MakeXmlSource_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.MakeXmlSource + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.MakeXmlSource + nameWithType: FanucLocalVariableReadingSyntax.MakeXmlSource +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Name + name: Name + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucLocalVariableReadingSyntax_Name + commentId: P:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Name + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Name + nameWithType: FanucLocalVariableReadingSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Name* + name: Name + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucLocalVariableReadingSyntax_Name_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Name + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.Name + nameWithType: FanucLocalVariableReadingSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.XName + name: XName + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucLocalVariableReadingSyntax_XName + commentId: P:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.XName + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.XName + nameWithType: FanucLocalVariableReadingSyntax.XName +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.XName* + name: XName + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucLocalVariableReadingSyntax_XName_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.XName + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.XName + nameWithType: FanucLocalVariableReadingSyntax.XName +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap + name: FanucMacroArgumentMap + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap.html + commentId: T:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap + nameWithType: FanucMacroArgumentMap +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap.Map + name: Map + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucMacroArgumentMap_Map + commentId: F:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap.Map + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap.Map + nameWithType: FanucMacroArgumentMap.Map +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax + name: FanucMacroCallSyntax + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html + commentId: T:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax + nameWithType: FanucMacroCallSyntax +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.#ctor + name: FanucMacroCallSyntax() + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucMacroCallSyntax__ctor + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.#ctor + name.vb: New() + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.FanucMacroCallSyntax() + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.New() + nameWithType: FanucMacroCallSyntax.FanucMacroCallSyntax() + nameWithType.vb: FanucMacroCallSyntax.New() +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.#ctor(System.Xml.Linq.XElement) + name: FanucMacroCallSyntax(XElement) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucMacroCallSyntax__ctor_System_Xml_Linq_XElement_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.#ctor(System.Xml.Linq.XElement) + name.vb: New(XElement) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.FanucMacroCallSyntax(System.Xml.Linq.XElement) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.New(System.Xml.Linq.XElement) + nameWithType: FanucMacroCallSyntax.FanucMacroCallSyntax(XElement) + nameWithType.vb: FanucMacroCallSyntax.New(XElement) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.#ctor* + name: FanucMacroCallSyntax + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucMacroCallSyntax__ctor_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.#ctor + isSpec: "True" + name.vb: New + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.FanucMacroCallSyntax + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.New + nameWithType: FanucMacroCallSyntax.FanucMacroCallSyntax + nameWithType.vb: FanucMacroCallSyntax.New +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) + name: Build(LazyLinkedListNode, List, NcDiagnosticProgress) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucMacroCallSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) + name.vb: Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Build(Hi.Common.Collections.LazyLinkedListNode, System.Collections.Generic.List, Hi.NcParsers.NcDiagnosticProgress) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Build(Hi.Common.Collections.LazyLinkedListNode(Of Hi.NcParsers.Syntaxs.SyntaxPiece), System.Collections.Generic.List(Of Hi.NcParsers.Dependencys.INcDependency), Hi.NcParsers.NcDiagnosticProgress) + nameWithType: FanucMacroCallSyntax.Build(LazyLinkedListNode, List, NcDiagnosticProgress) + nameWithType.vb: FanucMacroCallSyntax.Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Build* + name: Build + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucMacroCallSyntax_Build_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Build + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Build + nameWithType: FanucMacroCallSyntax.Build +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.MakeXmlSource(System.String,System.String,System.Boolean) + name: MakeXmlSource(string, string, bool) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucMacroCallSyntax_MakeXmlSource_System_String_System_String_System_Boolean_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.MakeXmlSource(System.String,System.String,System.Boolean) + name.vb: MakeXmlSource(String, String, Boolean) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.MakeXmlSource(string, string, bool) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.MakeXmlSource(String, String, Boolean) + nameWithType: FanucMacroCallSyntax.MakeXmlSource(string, string, bool) + nameWithType.vb: FanucMacroCallSyntax.MakeXmlSource(String, String, Boolean) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.MakeXmlSource* + name: MakeXmlSource + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucMacroCallSyntax_MakeXmlSource_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.MakeXmlSource + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.MakeXmlSource + nameWithType: FanucMacroCallSyntax.MakeXmlSource +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Name + name: Name + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucMacroCallSyntax_Name + commentId: P:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Name + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Name + nameWithType: FanucMacroCallSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Name* + name: Name + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucMacroCallSyntax_Name_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Name + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.Name + nameWithType: FanucMacroCallSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.XName + name: XName + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucMacroCallSyntax_XName + commentId: P:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.XName + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.XName + nameWithType: FanucMacroCallSyntax.XName +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.XName* + name: XName + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucMacroCallSyntax_XName_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.XName + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.XName + nameWithType: FanucMacroCallSyntax.XName +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax + name: FanucModalMacroSyntax + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html + commentId: T:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax + nameWithType: FanucModalMacroSyntax +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.#ctor + name: FanucModalMacroSyntax() + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax__ctor + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.#ctor + name.vb: New() + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.FanucModalMacroSyntax() + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.New() + nameWithType: FanucModalMacroSyntax.FanucModalMacroSyntax() + nameWithType.vb: FanucModalMacroSyntax.New() +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.#ctor(System.Xml.Linq.XElement) + name: FanucModalMacroSyntax(XElement) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax__ctor_System_Xml_Linq_XElement_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.#ctor(System.Xml.Linq.XElement) + name.vb: New(XElement) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.FanucModalMacroSyntax(System.Xml.Linq.XElement) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.New(System.Xml.Linq.XElement) + nameWithType: FanucModalMacroSyntax.FanucModalMacroSyntax(XElement) + nameWithType.vb: FanucModalMacroSyntax.New(XElement) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.#ctor* + name: FanucModalMacroSyntax + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax__ctor_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.#ctor + isSpec: "True" + name.vb: New + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.FanucModalMacroSyntax + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.New + nameWithType: FanucModalMacroSyntax.FanucModalMacroSyntax + nameWithType.vb: FanucModalMacroSyntax.New +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) + name: Build(LazyLinkedListNode, List, NcDiagnosticProgress) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) + name.vb: Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Build(Hi.Common.Collections.LazyLinkedListNode, System.Collections.Generic.List, Hi.NcParsers.NcDiagnosticProgress) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Build(Hi.Common.Collections.LazyLinkedListNode(Of Hi.NcParsers.Syntaxs.SyntaxPiece), System.Collections.Generic.List(Of Hi.NcParsers.Dependencys.INcDependency), Hi.NcParsers.NcDiagnosticProgress) + nameWithType: FanucModalMacroSyntax.Build(LazyLinkedListNode, List, NcDiagnosticProgress) + nameWithType.vb: FanucModalMacroSyntax.Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Build* + name: Build + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_Build_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Build + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Build + nameWithType: FanucModalMacroSyntax.Build +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Expansion + name: Expansion + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_Expansion + commentId: P:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Expansion + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Expansion + nameWithType: FanucModalMacroSyntax.Expansion +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Expansion* + name: Expansion + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_Expansion_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Expansion + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Expansion + nameWithType: FanucModalMacroSyntax.Expansion +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.MakeXmlSource(System.String,System.String,System.Boolean) + name: MakeXmlSource(string, string, bool) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_MakeXmlSource_System_String_System_String_System_Boolean_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.MakeXmlSource(System.String,System.String,System.Boolean) + name.vb: MakeXmlSource(String, String, Boolean) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.MakeXmlSource(string, string, bool) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.MakeXmlSource(String, String, Boolean) + nameWithType: FanucModalMacroSyntax.MakeXmlSource(string, string, bool) + nameWithType.vb: FanucModalMacroSyntax.MakeXmlSource(String, String, Boolean) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.MakeXmlSource* + name: MakeXmlSource + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_MakeXmlSource_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.MakeXmlSource + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.MakeXmlSource + nameWithType: FanucModalMacroSyntax.MakeXmlSource +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Name + name: Name + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_Name + commentId: P:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Name + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Name + nameWithType: FanucModalMacroSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Name* + name: Name + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_Name_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Name + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Name + nameWithType: FanucModalMacroSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Phase + name: Phase + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_Phase + commentId: P:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Phase + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Phase + nameWithType: FanucModalMacroSyntax.Phase +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Phase* + name: Phase + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_Phase_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Phase + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Phase + nameWithType: FanucModalMacroSyntax.Phase +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Setup + name: Setup + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_Setup + commentId: P:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Setup + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Setup + nameWithType: FanucModalMacroSyntax.Setup +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Setup* + name: Setup + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_Setup_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Setup + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.Setup + nameWithType: FanucModalMacroSyntax.Setup +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase + name: FanucModalMacroSyntax.SyntaxPhase + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.html + commentId: T:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase + nameWithType: FanucModalMacroSyntax.SyntaxPhase +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.Expansion + name: Expansion + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_SyntaxPhase_Expansion + commentId: F:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.Expansion + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.Expansion + nameWithType: FanucModalMacroSyntax.SyntaxPhase.Expansion +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.Setup + name: Setup + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_SyntaxPhase_Setup + commentId: F:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.Setup + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.Setup + nameWithType: FanucModalMacroSyntax.SyntaxPhase.Setup +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.XName + name: XName + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_XName + commentId: P:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.XName + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.XName + nameWithType: FanucModalMacroSyntax.XName +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.XName* + name: XName + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucModalMacroSyntax_XName_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.XName + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.XName + nameWithType: FanucModalMacroSyntax.XName +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax + name: FanucSystemControlVariableSyntax + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html + commentId: T:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax + nameWithType: FanucSystemControlVariableSyntax +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.#ctor + name: FanucSystemControlVariableSyntax() + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucSystemControlVariableSyntax__ctor + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.#ctor + name.vb: New() + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.FanucSystemControlVariableSyntax() + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.New() + nameWithType: FanucSystemControlVariableSyntax.FanucSystemControlVariableSyntax() + nameWithType.vb: FanucSystemControlVariableSyntax.New() +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.#ctor(System.Xml.Linq.XElement) + name: FanucSystemControlVariableSyntax(XElement) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucSystemControlVariableSyntax__ctor_System_Xml_Linq_XElement_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.#ctor(System.Xml.Linq.XElement) + name.vb: New(XElement) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.FanucSystemControlVariableSyntax(System.Xml.Linq.XElement) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.New(System.Xml.Linq.XElement) + nameWithType: FanucSystemControlVariableSyntax.FanucSystemControlVariableSyntax(XElement) + nameWithType.vb: FanucSystemControlVariableSyntax.New(XElement) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.#ctor* + name: FanucSystemControlVariableSyntax + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucSystemControlVariableSyntax__ctor_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.#ctor + isSpec: "True" + name.vb: New + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.FanucSystemControlVariableSyntax + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.New nameWithType: FanucSystemControlVariableSyntax.FanucSystemControlVariableSyntax nameWithType.vb: FanucSystemControlVariableSyntax.New -- uid: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) name: Build(LazyLinkedListNode, List, NcDiagnosticProgress) - href: api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_FanucSystemControlVariableSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ - commentId: M:Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucSystemControlVariableSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) name.vb: Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) - fullName: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.Build(Hi.Common.Collections.LazyLinkedListNode, System.Collections.Generic.List, Hi.NcParsers.NcDiagnosticProgress) - fullName.vb: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.Build(Hi.Common.Collections.LazyLinkedListNode(Of Hi.NcParsers.Syntaxs.SyntaxPiece), System.Collections.Generic.List(Of Hi.NcParsers.Dependencys.INcDependency), Hi.NcParsers.NcDiagnosticProgress) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Build(Hi.Common.Collections.LazyLinkedListNode, System.Collections.Generic.List, Hi.NcParsers.NcDiagnosticProgress) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Build(Hi.Common.Collections.LazyLinkedListNode(Of Hi.NcParsers.Syntaxs.SyntaxPiece), System.Collections.Generic.List(Of Hi.NcParsers.Dependencys.INcDependency), Hi.NcParsers.NcDiagnosticProgress) nameWithType: FanucSystemControlVariableSyntax.Build(LazyLinkedListNode, List, NcDiagnosticProgress) nameWithType.vb: FanucSystemControlVariableSyntax.Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) -- uid: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.Build* +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Build* name: Build - href: api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_FanucSystemControlVariableSyntax_Build_ - commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.Build + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucSystemControlVariableSyntax_Build_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Build isSpec: "True" - fullName: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.Build + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Build nameWithType: FanucSystemControlVariableSyntax.Build -- uid: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.MakeXmlSource(System.String,System.String,System.Boolean) +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.MakeXmlSource(System.String,System.String,System.Boolean) name: MakeXmlSource(string, string, bool) - href: api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_FanucSystemControlVariableSyntax_MakeXmlSource_System_String_System_String_System_Boolean_ - commentId: M:Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.MakeXmlSource(System.String,System.String,System.Boolean) + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucSystemControlVariableSyntax_MakeXmlSource_System_String_System_String_System_Boolean_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.MakeXmlSource(System.String,System.String,System.Boolean) name.vb: MakeXmlSource(String, String, Boolean) - fullName: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.MakeXmlSource(string, string, bool) - fullName.vb: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.MakeXmlSource(String, String, Boolean) + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.MakeXmlSource(string, string, bool) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.MakeXmlSource(String, String, Boolean) nameWithType: FanucSystemControlVariableSyntax.MakeXmlSource(string, string, bool) nameWithType.vb: FanucSystemControlVariableSyntax.MakeXmlSource(String, String, Boolean) -- uid: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.MakeXmlSource* +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.MakeXmlSource* name: MakeXmlSource - href: api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_FanucSystemControlVariableSyntax_MakeXmlSource_ - commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.MakeXmlSource + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucSystemControlVariableSyntax_MakeXmlSource_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.MakeXmlSource isSpec: "True" - fullName: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.MakeXmlSource + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.MakeXmlSource nameWithType: FanucSystemControlVariableSyntax.MakeXmlSource -- uid: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.Name +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Name name: Name - href: api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_FanucSystemControlVariableSyntax_Name - commentId: P:Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.Name - fullName: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.Name + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucSystemControlVariableSyntax_Name + commentId: P:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Name + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Name nameWithType: FanucSystemControlVariableSyntax.Name -- uid: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.Name* +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Name* name: Name - href: api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_FanucSystemControlVariableSyntax_Name_ - commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.Name + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucSystemControlVariableSyntax_Name_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Name isSpec: "True" - fullName: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.Name + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.Name nameWithType: FanucSystemControlVariableSyntax.Name -- uid: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.SystemControlMax +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.SystemControlMax name: SystemControlMax - href: api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_FanucSystemControlVariableSyntax_SystemControlMax - commentId: F:Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.SystemControlMax - fullName: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.SystemControlMax + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucSystemControlVariableSyntax_SystemControlMax + commentId: F:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.SystemControlMax + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.SystemControlMax nameWithType: FanucSystemControlVariableSyntax.SystemControlMax -- uid: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.SystemControlMin +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.SystemControlMin name: SystemControlMin - href: api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_FanucSystemControlVariableSyntax_SystemControlMin - commentId: F:Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.SystemControlMin - fullName: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.SystemControlMin + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucSystemControlVariableSyntax_SystemControlMin + commentId: F:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.SystemControlMin + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.SystemControlMin nameWithType: FanucSystemControlVariableSyntax.SystemControlMin -- uid: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.UnsupportedDiagId +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.UnsupportedDiagId name: UnsupportedDiagId - href: api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_FanucSystemControlVariableSyntax_UnsupportedDiagId - commentId: F:Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.UnsupportedDiagId - fullName: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.UnsupportedDiagId + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucSystemControlVariableSyntax_UnsupportedDiagId + commentId: F:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.UnsupportedDiagId + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.UnsupportedDiagId nameWithType: FanucSystemControlVariableSyntax.UnsupportedDiagId -- uid: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.XName +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.XName name: XName - href: api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_FanucSystemControlVariableSyntax_XName - commentId: P:Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.XName - fullName: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.XName + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucSystemControlVariableSyntax_XName + commentId: P:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.XName + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.XName nameWithType: FanucSystemControlVariableSyntax.XName -- uid: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.XName* +- uid: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.XName* name: XName - href: api/Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_FanucSystemControlVariableSyntax_XName_ - commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.XName + href: api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucSystemControlVariableSyntax_XName_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.XName isSpec: "True" - fullName: Hi.NcParsers.EvaluationSyntaxs.FanucSystemControlVariableSyntax.XName + fullName: Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.XName nameWithType: FanucSystemControlVariableSyntax.XName +- uid: Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil + name: LabelScanUtil + href: api/Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html + commentId: T:Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil + fullName: Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil + nameWithType: LabelScanUtil +- uid: Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndSkipUntilLabel(Hi.NcParsers.Segmenters.ISegmenter,System.String,System.String,System.Int32,System.Int32,System.Int32,System.Collections.Generic.List{Hi.NcParsers.Syntaxs.ISituNcSyntax},Hi.NcParsers.NcDiagnosticProgress) + name: SegmentAndSkipUntilLabel(ISegmenter, string, string, int, int, int, List, NcDiagnosticProgress) + href: api/Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html#Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_SegmentAndSkipUntilLabel_Hi_NcParsers_Segmenters_ISegmenter_System_String_System_String_System_Int32_System_Int32_System_Int32_System_Collections_Generic_List_Hi_NcParsers_Syntaxs_ISituNcSyntax__Hi_NcParsers_NcDiagnosticProgress_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndSkipUntilLabel(Hi.NcParsers.Segmenters.ISegmenter,System.String,System.String,System.Int32,System.Int32,System.Int32,System.Collections.Generic.List{Hi.NcParsers.Syntaxs.ISituNcSyntax},Hi.NcParsers.NcDiagnosticProgress) + name.vb: SegmentAndSkipUntilLabel(ISegmenter, String, String, Integer, Integer, Integer, List(Of ISituNcSyntax), NcDiagnosticProgress) + fullName: Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndSkipUntilLabel(Hi.NcParsers.Segmenters.ISegmenter, string, string, int, int, int, System.Collections.Generic.List, Hi.NcParsers.NcDiagnosticProgress) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndSkipUntilLabel(Hi.NcParsers.Segmenters.ISegmenter, String, String, Integer, Integer, Integer, System.Collections.Generic.List(Of Hi.NcParsers.Syntaxs.ISituNcSyntax), Hi.NcParsers.NcDiagnosticProgress) + nameWithType: LabelScanUtil.SegmentAndSkipUntilLabel(ISegmenter, string, string, int, int, int, List, NcDiagnosticProgress) + nameWithType.vb: LabelScanUtil.SegmentAndSkipUntilLabel(ISegmenter, String, String, Integer, Integer, Integer, List(Of ISituNcSyntax), NcDiagnosticProgress) +- uid: Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndSkipUntilLabel* + name: SegmentAndSkipUntilLabel + href: api/Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html#Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_SegmentAndSkipUntilLabel_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndSkipUntilLabel + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndSkipUntilLabel + nameWithType: LabelScanUtil.SegmentAndSkipUntilLabel +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver + name: MacroFileResolver + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.html + commentId: T:Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver + nameWithType: MacroFileResolver +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.FilenamePatterns + name: FilenamePatterns + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.html#Hi_NcParsers_EvaluationSyntaxs_MacroFileResolver_FilenamePatterns + commentId: F:Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.FilenamePatterns + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.FilenamePatterns + nameWithType: MacroFileResolver.FilenamePatterns +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ReadLines(System.Int32,System.String,System.String) + name: ReadLines(int, string, string) + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.html#Hi_NcParsers_EvaluationSyntaxs_MacroFileResolver_ReadLines_System_Int32_System_String_System_String_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ReadLines(System.Int32,System.String,System.String) + name.vb: ReadLines(Integer, String, String) + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ReadLines(int, string, string) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ReadLines(Integer, String, String) + nameWithType: MacroFileResolver.ReadLines(int, string, string) + nameWithType.vb: MacroFileResolver.ReadLines(Integer, String, String) +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ReadLines* + name: ReadLines + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.html#Hi_NcParsers_EvaluationSyntaxs_MacroFileResolver_ReadLines_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ReadLines + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ReadLines + nameWithType: MacroFileResolver.ReadLines +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.Resolve(System.String,System.Int32,System.String) + name: Resolve(string, int, string) + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.html#Hi_NcParsers_EvaluationSyntaxs_MacroFileResolver_Resolve_System_String_System_Int32_System_String_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.Resolve(System.String,System.Int32,System.String) + name.vb: Resolve(String, Integer, String) + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.Resolve(string, int, string) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.Resolve(String, Integer, String) + nameWithType: MacroFileResolver.Resolve(string, int, string) + nameWithType.vb: MacroFileResolver.Resolve(String, Integer, String) +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.Resolve* + name: Resolve + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.html#Hi_NcParsers_EvaluationSyntaxs_MacroFileResolver_Resolve_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.Resolve + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.Resolve + nameWithType: MacroFileResolver.Resolve +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile + name: MacroFileResolver.ResolvedFile + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html + commentId: T:Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile + nameWithType: MacroFileResolver.ResolvedFile +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.#ctor(System.String,System.String,System.String) + name: ResolvedFile(string, string, string) + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html#Hi_NcParsers_EvaluationSyntaxs_MacroFileResolver_ResolvedFile__ctor_System_String_System_String_System_String_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.#ctor(System.String,System.String,System.String) + name.vb: New(String, String, String) + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.ResolvedFile(string, string, string) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.New(String, String, String) + nameWithType: MacroFileResolver.ResolvedFile.ResolvedFile(string, string, string) + nameWithType.vb: MacroFileResolver.ResolvedFile.New(String, String, String) +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.#ctor* + name: ResolvedFile + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html#Hi_NcParsers_EvaluationSyntaxs_MacroFileResolver_ResolvedFile__ctor_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.#ctor + isSpec: "True" + name.vb: New + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.ResolvedFile + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.New + nameWithType: MacroFileResolver.ResolvedFile.ResolvedFile + nameWithType.vb: MacroFileResolver.ResolvedFile.New +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.AbsPath + name: AbsPath + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html#Hi_NcParsers_EvaluationSyntaxs_MacroFileResolver_ResolvedFile_AbsPath + commentId: P:Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.AbsPath + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.AbsPath + nameWithType: MacroFileResolver.ResolvedFile.AbsPath +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.AbsPath* + name: AbsPath + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html#Hi_NcParsers_EvaluationSyntaxs_MacroFileResolver_ResolvedFile_AbsPath_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.AbsPath + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.AbsPath + nameWithType: MacroFileResolver.ResolvedFile.AbsPath +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.FileName + name: FileName + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html#Hi_NcParsers_EvaluationSyntaxs_MacroFileResolver_ResolvedFile_FileName + commentId: P:Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.FileName + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.FileName + nameWithType: MacroFileResolver.ResolvedFile.FileName +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.FileName* + name: FileName + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html#Hi_NcParsers_EvaluationSyntaxs_MacroFileResolver_ResolvedFile_FileName_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.FileName + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.FileName + nameWithType: MacroFileResolver.ResolvedFile.FileName +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.RelPath + name: RelPath + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html#Hi_NcParsers_EvaluationSyntaxs_MacroFileResolver_ResolvedFile_RelPath + commentId: P:Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.RelPath + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.RelPath + nameWithType: MacroFileResolver.ResolvedFile.RelPath +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.RelPath* + name: RelPath + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html#Hi_NcParsers_EvaluationSyntaxs_MacroFileResolver_ResolvedFile_RelPath_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.RelPath + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.RelPath + nameWithType: MacroFileResolver.ResolvedFile.RelPath +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil + name: MacroInlineUtil + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html + commentId: T:Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil + nameWithType: MacroInlineUtil +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.ApplyLocalBindings(System.Text.Json.Nodes.JsonObject,System.Collections.Generic.IReadOnlyDictionary{System.String,System.Double}) + name: ApplyLocalBindings(JsonObject, IReadOnlyDictionary) + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html#Hi_NcParsers_EvaluationSyntaxs_MacroInlineUtil_ApplyLocalBindings_System_Text_Json_Nodes_JsonObject_System_Collections_Generic_IReadOnlyDictionary_System_String_System_Double__ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.ApplyLocalBindings(System.Text.Json.Nodes.JsonObject,System.Collections.Generic.IReadOnlyDictionary{System.String,System.Double}) + name.vb: ApplyLocalBindings(JsonObject, IReadOnlyDictionary(Of String, Double)) + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.ApplyLocalBindings(System.Text.Json.Nodes.JsonObject, System.Collections.Generic.IReadOnlyDictionary) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.ApplyLocalBindings(System.Text.Json.Nodes.JsonObject, System.Collections.Generic.IReadOnlyDictionary(Of String, Double)) + nameWithType: MacroInlineUtil.ApplyLocalBindings(JsonObject, IReadOnlyDictionary) + nameWithType.vb: MacroInlineUtil.ApplyLocalBindings(JsonObject, IReadOnlyDictionary(Of String, Double)) +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.ApplyLocalBindings* + name: ApplyLocalBindings + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html#Hi_NcParsers_EvaluationSyntaxs_MacroInlineUtil_ApplyLocalBindings_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.ApplyLocalBindings + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.ApplyLocalBindings + nameWithType: MacroInlineUtil.ApplyLocalBindings +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.BuildInlinedPieces(Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile,System.Int32,System.Collections.Generic.IReadOnlyDictionary{System.String,System.Double},System.Text.Json.Nodes.JsonObject,System.Text.Json.Nodes.JsonObject,Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency,Hi.NcParsers.Segmenters.ISegmenter,System.Int32,Hi.NcParsers.NcDiagnosticProgress) + name: BuildInlinedPieces(ResolvedFile, int, IReadOnlyDictionary, JsonObject, JsonObject, FileIndexCounterDependency, ISegmenter, int, NcDiagnosticProgress) + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html#Hi_NcParsers_EvaluationSyntaxs_MacroInlineUtil_BuildInlinedPieces_Hi_NcParsers_EvaluationSyntaxs_MacroFileResolver_ResolvedFile_System_Int32_System_Collections_Generic_IReadOnlyDictionary_System_String_System_Double__System_Text_Json_Nodes_JsonObject_System_Text_Json_Nodes_JsonObject_Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_Hi_NcParsers_Segmenters_ISegmenter_System_Int32_Hi_NcParsers_NcDiagnosticProgress_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.BuildInlinedPieces(Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile,System.Int32,System.Collections.Generic.IReadOnlyDictionary{System.String,System.Double},System.Text.Json.Nodes.JsonObject,System.Text.Json.Nodes.JsonObject,Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency,Hi.NcParsers.Segmenters.ISegmenter,System.Int32,Hi.NcParsers.NcDiagnosticProgress) + name.vb: BuildInlinedPieces(ResolvedFile, Integer, IReadOnlyDictionary(Of String, Double), JsonObject, JsonObject, FileIndexCounterDependency, ISegmenter, Integer, NcDiagnosticProgress) + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.BuildInlinedPieces(Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile, int, System.Collections.Generic.IReadOnlyDictionary, System.Text.Json.Nodes.JsonObject, System.Text.Json.Nodes.JsonObject, Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency, Hi.NcParsers.Segmenters.ISegmenter, int, Hi.NcParsers.NcDiagnosticProgress) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.BuildInlinedPieces(Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile, Integer, System.Collections.Generic.IReadOnlyDictionary(Of String, Double), System.Text.Json.Nodes.JsonObject, System.Text.Json.Nodes.JsonObject, Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency, Hi.NcParsers.Segmenters.ISegmenter, Integer, Hi.NcParsers.NcDiagnosticProgress) + nameWithType: MacroInlineUtil.BuildInlinedPieces(MacroFileResolver.ResolvedFile, int, IReadOnlyDictionary, JsonObject, JsonObject, FileIndexCounterDependency, ISegmenter, int, NcDiagnosticProgress) + nameWithType.vb: MacroInlineUtil.BuildInlinedPieces(MacroFileResolver.ResolvedFile, Integer, IReadOnlyDictionary(Of String, Double), JsonObject, JsonObject, FileIndexCounterDependency, ISegmenter, Integer, NcDiagnosticProgress) +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.BuildInlinedPieces* + name: BuildInlinedPieces + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html#Hi_NcParsers_EvaluationSyntaxs_MacroInlineUtil_BuildInlinedPieces_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.BuildInlinedPieces + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.BuildInlinedPieces + nameWithType: MacroInlineUtil.BuildInlinedPieces +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.BuildLocalBindings(System.Text.Json.Nodes.JsonObject) + name: BuildLocalBindings(JsonObject) + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html#Hi_NcParsers_EvaluationSyntaxs_MacroInlineUtil_BuildLocalBindings_System_Text_Json_Nodes_JsonObject_ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.BuildLocalBindings(System.Text.Json.Nodes.JsonObject) + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.BuildLocalBindings(System.Text.Json.Nodes.JsonObject) + nameWithType: MacroInlineUtil.BuildLocalBindings(JsonObject) +- uid: Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.BuildLocalBindings* + name: BuildLocalBindings + href: api/Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html#Hi_NcParsers_EvaluationSyntaxs_MacroInlineUtil_BuildLocalBindings_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.BuildLocalBindings + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.BuildLocalBindings + nameWithType: MacroInlineUtil.BuildLocalBindings - uid: Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax name: RetainedCommonVariableReadingSyntax href: api/Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html @@ -125735,15 +126872,15 @@ references: fullName.vb: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.New() nameWithType: SubProgramReturnSyntax.SubProgramReturnSyntax() nameWithType.vb: SubProgramReturnSyntax.New() -- uid: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.#ctor(System.Xml.Linq.XElement) - name: SubProgramReturnSyntax(XElement) - href: api/Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html#Hi_NcParsers_EvaluationSyntaxs_SubProgramReturnSyntax__ctor_System_Xml_Linq_XElement_ - commentId: M:Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.#ctor(System.Xml.Linq.XElement) - name.vb: New(XElement) - fullName: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.SubProgramReturnSyntax(System.Xml.Linq.XElement) - fullName.vb: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.New(System.Xml.Linq.XElement) - nameWithType: SubProgramReturnSyntax.SubProgramReturnSyntax(XElement) - nameWithType.vb: SubProgramReturnSyntax.New(XElement) +- uid: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.#ctor(System.Xml.Linq.XElement,System.String,System.IProgress{System.Object}) + name: SubProgramReturnSyntax(XElement, string, IProgress) + href: api/Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html#Hi_NcParsers_EvaluationSyntaxs_SubProgramReturnSyntax__ctor_System_Xml_Linq_XElement_System_String_System_IProgress_System_Object__ + commentId: M:Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.#ctor(System.Xml.Linq.XElement,System.String,System.IProgress{System.Object}) + name.vb: New(XElement, String, IProgress(Of Object)) + fullName: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.SubProgramReturnSyntax(System.Xml.Linq.XElement, string, System.IProgress) + fullName.vb: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.New(System.Xml.Linq.XElement, String, System.IProgress(Of Object)) + nameWithType: SubProgramReturnSyntax.SubProgramReturnSyntax(XElement, string, IProgress) + nameWithType.vb: SubProgramReturnSyntax.New(XElement, String, IProgress(Of Object)) - uid: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.#ctor* name: SubProgramReturnSyntax href: api/Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html#Hi_NcParsers_EvaluationSyntaxs_SubProgramReturnSyntax__ctor_ @@ -125770,6 +126907,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.Build nameWithType: SubProgramReturnSyntax.Build +- uid: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.LabelProbeSyntaxes + name: LabelProbeSyntaxes + href: api/Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html#Hi_NcParsers_EvaluationSyntaxs_SubProgramReturnSyntax_LabelProbeSyntaxes + commentId: P:Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.LabelProbeSyntaxes + fullName: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.LabelProbeSyntaxes + nameWithType: SubProgramReturnSyntax.LabelProbeSyntaxes +- uid: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.LabelProbeSyntaxes* + name: LabelProbeSyntaxes + href: api/Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html#Hi_NcParsers_EvaluationSyntaxs_SubProgramReturnSyntax_LabelProbeSyntaxes_ + commentId: Overload:Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.LabelProbeSyntaxes + isSpec: "True" + fullName: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.LabelProbeSyntaxes + nameWithType: SubProgramReturnSyntax.LabelProbeSyntaxes - uid: Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.MakeXmlSource(System.String,System.String,System.Boolean) name: MakeXmlSource(string, string, bool) href: api/Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html#Hi_NcParsers_EvaluationSyntaxs_SubProgramReturnSyntax_MakeXmlSource_System_String_System_String_System_Boolean_ @@ -126040,6 +127190,95 @@ references: isSpec: "True" fullName: Hi.NcParsers.IGetSentence.GetSentence nameWithType: IGetSentence.GetSentence +- uid: Hi.NcParsers.ISentenceCarrier + name: ISentenceCarrier + href: api/Hi.NcParsers.ISentenceCarrier.html + commentId: T:Hi.NcParsers.ISentenceCarrier + fullName: Hi.NcParsers.ISentenceCarrier + nameWithType: ISentenceCarrier +- uid: Hi.NcParsers.ISentenceIndexed + name: ISentenceIndexed + href: api/Hi.NcParsers.ISentenceIndexed.html + commentId: T:Hi.NcParsers.ISentenceIndexed + fullName: Hi.NcParsers.ISentenceIndexed + nameWithType: ISentenceIndexed +- uid: Hi.NcParsers.ISentenceIndexed.SentenceIndex + name: SentenceIndex + href: api/Hi.NcParsers.ISentenceIndexed.html#Hi_NcParsers_ISentenceIndexed_SentenceIndex + commentId: P:Hi.NcParsers.ISentenceIndexed.SentenceIndex + fullName: Hi.NcParsers.ISentenceIndexed.SentenceIndex + nameWithType: ISentenceIndexed.SentenceIndex +- uid: Hi.NcParsers.ISentenceIndexed.SentenceIndex* + name: SentenceIndex + href: api/Hi.NcParsers.ISentenceIndexed.html#Hi_NcParsers_ISentenceIndexed_SentenceIndex_ + commentId: Overload:Hi.NcParsers.ISentenceIndexed.SentenceIndex + isSpec: "True" + fullName: Hi.NcParsers.ISentenceIndexed.SentenceIndex + nameWithType: ISentenceIndexed.SentenceIndex +- uid: Hi.NcParsers.IndexedSentence + name: IndexedSentence + href: api/Hi.NcParsers.IndexedSentence.html + commentId: T:Hi.NcParsers.IndexedSentence + fullName: Hi.NcParsers.IndexedSentence + nameWithType: IndexedSentence +- uid: Hi.NcParsers.IndexedSentence.#ctor(Hi.NcParsers.Sentence,System.Int32) + name: IndexedSentence(Sentence, int) + href: api/Hi.NcParsers.IndexedSentence.html#Hi_NcParsers_IndexedSentence__ctor_Hi_NcParsers_Sentence_System_Int32_ + commentId: M:Hi.NcParsers.IndexedSentence.#ctor(Hi.NcParsers.Sentence,System.Int32) + name.vb: New(Sentence, Integer) + fullName: Hi.NcParsers.IndexedSentence.IndexedSentence(Hi.NcParsers.Sentence, int) + fullName.vb: Hi.NcParsers.IndexedSentence.New(Hi.NcParsers.Sentence, Integer) + nameWithType: IndexedSentence.IndexedSentence(Sentence, int) + nameWithType.vb: IndexedSentence.New(Sentence, Integer) +- uid: Hi.NcParsers.IndexedSentence.#ctor* + name: IndexedSentence + href: api/Hi.NcParsers.IndexedSentence.html#Hi_NcParsers_IndexedSentence__ctor_ + commentId: Overload:Hi.NcParsers.IndexedSentence.#ctor + isSpec: "True" + name.vb: New + fullName: Hi.NcParsers.IndexedSentence.IndexedSentence + fullName.vb: Hi.NcParsers.IndexedSentence.New + nameWithType: IndexedSentence.IndexedSentence + nameWithType.vb: IndexedSentence.New +- uid: Hi.NcParsers.IndexedSentence.GetSentence + name: GetSentence() + href: api/Hi.NcParsers.IndexedSentence.html#Hi_NcParsers_IndexedSentence_GetSentence + commentId: M:Hi.NcParsers.IndexedSentence.GetSentence + fullName: Hi.NcParsers.IndexedSentence.GetSentence() + nameWithType: IndexedSentence.GetSentence() +- uid: Hi.NcParsers.IndexedSentence.GetSentence* + name: GetSentence + href: api/Hi.NcParsers.IndexedSentence.html#Hi_NcParsers_IndexedSentence_GetSentence_ + commentId: Overload:Hi.NcParsers.IndexedSentence.GetSentence + isSpec: "True" + fullName: Hi.NcParsers.IndexedSentence.GetSentence + nameWithType: IndexedSentence.GetSentence +- uid: Hi.NcParsers.IndexedSentence.Sentence + name: Sentence + href: api/Hi.NcParsers.IndexedSentence.html#Hi_NcParsers_IndexedSentence_Sentence + commentId: P:Hi.NcParsers.IndexedSentence.Sentence + fullName: Hi.NcParsers.IndexedSentence.Sentence + nameWithType: IndexedSentence.Sentence +- uid: Hi.NcParsers.IndexedSentence.Sentence* + name: Sentence + href: api/Hi.NcParsers.IndexedSentence.html#Hi_NcParsers_IndexedSentence_Sentence_ + commentId: Overload:Hi.NcParsers.IndexedSentence.Sentence + isSpec: "True" + fullName: Hi.NcParsers.IndexedSentence.Sentence + nameWithType: IndexedSentence.Sentence +- uid: Hi.NcParsers.IndexedSentence.SentenceIndex + name: SentenceIndex + href: api/Hi.NcParsers.IndexedSentence.html#Hi_NcParsers_IndexedSentence_SentenceIndex + commentId: P:Hi.NcParsers.IndexedSentence.SentenceIndex + fullName: Hi.NcParsers.IndexedSentence.SentenceIndex + nameWithType: IndexedSentence.SentenceIndex +- uid: Hi.NcParsers.IndexedSentence.SentenceIndex* + name: SentenceIndex + href: api/Hi.NcParsers.IndexedSentence.html#Hi_NcParsers_IndexedSentence_SentenceIndex_ + commentId: Overload:Hi.NcParsers.IndexedSentence.SentenceIndex + isSpec: "True" + fullName: Hi.NcParsers.IndexedSentence.SentenceIndex + nameWithType: IndexedSentence.SentenceIndex - uid: Hi.NcParsers.Initializers name: Hi.NcParsers.Initializers href: api/Hi.NcParsers.Initializers.html @@ -126819,6 +128058,44 @@ references: isSpec: "True" fullName: Hi.NcParsers.Keywords.BlockSkip.Symbol nameWithType: BlockSkip.Symbol +- uid: Hi.NcParsers.Keywords.CallFrame + name: CallFrame + href: api/Hi.NcParsers.Keywords.CallFrame.html + commentId: T:Hi.NcParsers.Keywords.CallFrame + fullName: Hi.NcParsers.Keywords.CallFrame + nameWithType: CallFrame +- uid: Hi.NcParsers.Keywords.CallFrame.CallerFilePath + name: CallerFilePath + href: api/Hi.NcParsers.Keywords.CallFrame.html#Hi_NcParsers_Keywords_CallFrame_CallerFilePath + commentId: P:Hi.NcParsers.Keywords.CallFrame.CallerFilePath + fullName: Hi.NcParsers.Keywords.CallFrame.CallerFilePath + nameWithType: CallFrame.CallerFilePath +- uid: Hi.NcParsers.Keywords.CallFrame.CallerFilePath* + name: CallerFilePath + href: api/Hi.NcParsers.Keywords.CallFrame.html#Hi_NcParsers_Keywords_CallFrame_CallerFilePath_ + commentId: Overload:Hi.NcParsers.Keywords.CallFrame.CallerFilePath + isSpec: "True" + fullName: Hi.NcParsers.Keywords.CallFrame.CallerFilePath + nameWithType: CallFrame.CallerFilePath +- uid: Hi.NcParsers.Keywords.CallStack + name: CallStack + href: api/Hi.NcParsers.Keywords.CallStack.html + commentId: T:Hi.NcParsers.Keywords.CallStack + fullName: Hi.NcParsers.Keywords.CallStack + nameWithType: CallStack +- uid: Hi.NcParsers.Keywords.CallStack.Frames + name: Frames + href: api/Hi.NcParsers.Keywords.CallStack.html#Hi_NcParsers_Keywords_CallStack_Frames + commentId: P:Hi.NcParsers.Keywords.CallStack.Frames + fullName: Hi.NcParsers.Keywords.CallStack.Frames + nameWithType: CallStack.Frames +- uid: Hi.NcParsers.Keywords.CallStack.Frames* + name: Frames + href: api/Hi.NcParsers.Keywords.CallStack.html#Hi_NcParsers_Keywords_CallStack_Frames_ + commentId: Overload:Hi.NcParsers.Keywords.CallStack.Frames + isSpec: "True" + fullName: Hi.NcParsers.Keywords.CallStack.Frames + nameWithType: CallStack.Frames - uid: Hi.NcParsers.Keywords.CannedCycle name: CannedCycle href: api/Hi.NcParsers.Keywords.CannedCycle.html @@ -127104,6 +128381,251 @@ references: commentId: F:Hi.NcParsers.Keywords.Fanuc.FanucKeywords.G43p4 fullName: Hi.NcParsers.Keywords.Fanuc.FanucKeywords.G43p4 nameWithType: FanucKeywords.G43p4 +- uid: Hi.NcParsers.Keywords.FanucGoto + name: FanucGoto + href: api/Hi.NcParsers.Keywords.FanucGoto.html + commentId: T:Hi.NcParsers.Keywords.FanucGoto + fullName: Hi.NcParsers.Keywords.FanucGoto + nameWithType: FanucGoto +- uid: Hi.NcParsers.Keywords.FanucGoto.Condition + name: Condition + href: api/Hi.NcParsers.Keywords.FanucGoto.html#Hi_NcParsers_Keywords_FanucGoto_Condition + commentId: P:Hi.NcParsers.Keywords.FanucGoto.Condition + fullName: Hi.NcParsers.Keywords.FanucGoto.Condition + nameWithType: FanucGoto.Condition +- uid: Hi.NcParsers.Keywords.FanucGoto.Condition* + name: Condition + href: api/Hi.NcParsers.Keywords.FanucGoto.html#Hi_NcParsers_Keywords_FanucGoto_Condition_ + commentId: Overload:Hi.NcParsers.Keywords.FanucGoto.Condition + isSpec: "True" + fullName: Hi.NcParsers.Keywords.FanucGoto.Condition + nameWithType: FanucGoto.Condition +- uid: Hi.NcParsers.Keywords.FanucGoto.Fired + name: Fired + href: api/Hi.NcParsers.Keywords.FanucGoto.html#Hi_NcParsers_Keywords_FanucGoto_Fired + commentId: P:Hi.NcParsers.Keywords.FanucGoto.Fired + fullName: Hi.NcParsers.Keywords.FanucGoto.Fired + nameWithType: FanucGoto.Fired +- uid: Hi.NcParsers.Keywords.FanucGoto.Fired* + name: Fired + href: api/Hi.NcParsers.Keywords.FanucGoto.html#Hi_NcParsers_Keywords_FanucGoto_Fired_ + commentId: Overload:Hi.NcParsers.Keywords.FanucGoto.Fired + isSpec: "True" + fullName: Hi.NcParsers.Keywords.FanucGoto.Fired + nameWithType: FanucGoto.Fired +- uid: Hi.NcParsers.Keywords.FanucGoto.N + name: N + href: api/Hi.NcParsers.Keywords.FanucGoto.html#Hi_NcParsers_Keywords_FanucGoto_N + commentId: P:Hi.NcParsers.Keywords.FanucGoto.N + fullName: Hi.NcParsers.Keywords.FanucGoto.N + nameWithType: FanucGoto.N +- uid: Hi.NcParsers.Keywords.FanucGoto.N* + name: N + href: api/Hi.NcParsers.Keywords.FanucGoto.html#Hi_NcParsers_Keywords_FanucGoto_N_ + commentId: Overload:Hi.NcParsers.Keywords.FanucGoto.N + isSpec: "True" + fullName: Hi.NcParsers.Keywords.FanucGoto.N + nameWithType: FanucGoto.N +- uid: Hi.NcParsers.Keywords.FanucGoto.Term + name: Term + href: api/Hi.NcParsers.Keywords.FanucGoto.html#Hi_NcParsers_Keywords_FanucGoto_Term + commentId: P:Hi.NcParsers.Keywords.FanucGoto.Term + fullName: Hi.NcParsers.Keywords.FanucGoto.Term + nameWithType: FanucGoto.Term +- uid: Hi.NcParsers.Keywords.FanucGoto.Term* + name: Term + href: api/Hi.NcParsers.Keywords.FanucGoto.html#Hi_NcParsers_Keywords_FanucGoto_Term_ + commentId: Overload:Hi.NcParsers.Keywords.FanucGoto.Term + isSpec: "True" + fullName: Hi.NcParsers.Keywords.FanucGoto.Term + nameWithType: FanucGoto.Term +- uid: Hi.NcParsers.Keywords.FanucIfThen + name: FanucIfThen + href: api/Hi.NcParsers.Keywords.FanucIfThen.html + commentId: T:Hi.NcParsers.Keywords.FanucIfThen + fullName: Hi.NcParsers.Keywords.FanucIfThen + nameWithType: FanucIfThen +- uid: Hi.NcParsers.Keywords.FanucIfThen.Applied + name: Applied + href: api/Hi.NcParsers.Keywords.FanucIfThen.html#Hi_NcParsers_Keywords_FanucIfThen_Applied + commentId: P:Hi.NcParsers.Keywords.FanucIfThen.Applied + fullName: Hi.NcParsers.Keywords.FanucIfThen.Applied + nameWithType: FanucIfThen.Applied +- uid: Hi.NcParsers.Keywords.FanucIfThen.Applied* + name: Applied + href: api/Hi.NcParsers.Keywords.FanucIfThen.html#Hi_NcParsers_Keywords_FanucIfThen_Applied_ + commentId: Overload:Hi.NcParsers.Keywords.FanucIfThen.Applied + isSpec: "True" + fullName: Hi.NcParsers.Keywords.FanucIfThen.Applied + nameWithType: FanucIfThen.Applied +- uid: Hi.NcParsers.Keywords.FanucIfThen.BodyText + name: BodyText + href: api/Hi.NcParsers.Keywords.FanucIfThen.html#Hi_NcParsers_Keywords_FanucIfThen_BodyText + commentId: P:Hi.NcParsers.Keywords.FanucIfThen.BodyText + fullName: Hi.NcParsers.Keywords.FanucIfThen.BodyText + nameWithType: FanucIfThen.BodyText +- uid: Hi.NcParsers.Keywords.FanucIfThen.BodyText* + name: BodyText + href: api/Hi.NcParsers.Keywords.FanucIfThen.html#Hi_NcParsers_Keywords_FanucIfThen_BodyText_ + commentId: Overload:Hi.NcParsers.Keywords.FanucIfThen.BodyText + isSpec: "True" + fullName: Hi.NcParsers.Keywords.FanucIfThen.BodyText + nameWithType: FanucIfThen.BodyText +- uid: Hi.NcParsers.Keywords.FanucIfThen.Condition + name: Condition + href: api/Hi.NcParsers.Keywords.FanucIfThen.html#Hi_NcParsers_Keywords_FanucIfThen_Condition + commentId: P:Hi.NcParsers.Keywords.FanucIfThen.Condition + fullName: Hi.NcParsers.Keywords.FanucIfThen.Condition + nameWithType: FanucIfThen.Condition +- uid: Hi.NcParsers.Keywords.FanucIfThen.Condition* + name: Condition + href: api/Hi.NcParsers.Keywords.FanucIfThen.html#Hi_NcParsers_Keywords_FanucIfThen_Condition_ + commentId: Overload:Hi.NcParsers.Keywords.FanucIfThen.Condition + isSpec: "True" + fullName: Hi.NcParsers.Keywords.FanucIfThen.Condition + nameWithType: FanucIfThen.Condition +- uid: Hi.NcParsers.Keywords.FanucMacroCall + name: FanucMacroCall + href: api/Hi.NcParsers.Keywords.FanucMacroCall.html + commentId: T:Hi.NcParsers.Keywords.FanucMacroCall + fullName: Hi.NcParsers.Keywords.FanucMacroCall + nameWithType: FanucMacroCall +- uid: Hi.NcParsers.Keywords.FanucMacroCall.Args + name: Args + href: api/Hi.NcParsers.Keywords.FanucMacroCall.html#Hi_NcParsers_Keywords_FanucMacroCall_Args + commentId: P:Hi.NcParsers.Keywords.FanucMacroCall.Args + fullName: Hi.NcParsers.Keywords.FanucMacroCall.Args + nameWithType: FanucMacroCall.Args +- uid: Hi.NcParsers.Keywords.FanucMacroCall.Args* + name: Args + href: api/Hi.NcParsers.Keywords.FanucMacroCall.html#Hi_NcParsers_Keywords_FanucMacroCall_Args_ + commentId: Overload:Hi.NcParsers.Keywords.FanucMacroCall.Args + isSpec: "True" + fullName: Hi.NcParsers.Keywords.FanucMacroCall.Args + nameWithType: FanucMacroCall.Args +- uid: Hi.NcParsers.Keywords.FanucMacroCall.FileName + name: FileName + href: api/Hi.NcParsers.Keywords.FanucMacroCall.html#Hi_NcParsers_Keywords_FanucMacroCall_FileName + commentId: P:Hi.NcParsers.Keywords.FanucMacroCall.FileName + fullName: Hi.NcParsers.Keywords.FanucMacroCall.FileName + nameWithType: FanucMacroCall.FileName +- uid: Hi.NcParsers.Keywords.FanucMacroCall.FileName* + name: FileName + href: api/Hi.NcParsers.Keywords.FanucMacroCall.html#Hi_NcParsers_Keywords_FanucMacroCall_FileName_ + commentId: Overload:Hi.NcParsers.Keywords.FanucMacroCall.FileName + isSpec: "True" + fullName: Hi.NcParsers.Keywords.FanucMacroCall.FileName + nameWithType: FanucMacroCall.FileName +- uid: Hi.NcParsers.Keywords.FanucMacroCall.L + name: L + href: api/Hi.NcParsers.Keywords.FanucMacroCall.html#Hi_NcParsers_Keywords_FanucMacroCall_L + commentId: P:Hi.NcParsers.Keywords.FanucMacroCall.L + fullName: Hi.NcParsers.Keywords.FanucMacroCall.L + nameWithType: FanucMacroCall.L +- uid: Hi.NcParsers.Keywords.FanucMacroCall.L* + name: L + href: api/Hi.NcParsers.Keywords.FanucMacroCall.html#Hi_NcParsers_Keywords_FanucMacroCall_L_ + commentId: Overload:Hi.NcParsers.Keywords.FanucMacroCall.L + isSpec: "True" + fullName: Hi.NcParsers.Keywords.FanucMacroCall.L + nameWithType: FanucMacroCall.L +- uid: Hi.NcParsers.Keywords.FanucMacroCall.P + name: P + href: api/Hi.NcParsers.Keywords.FanucMacroCall.html#Hi_NcParsers_Keywords_FanucMacroCall_P + commentId: P:Hi.NcParsers.Keywords.FanucMacroCall.P + fullName: Hi.NcParsers.Keywords.FanucMacroCall.P + nameWithType: FanucMacroCall.P +- uid: Hi.NcParsers.Keywords.FanucMacroCall.P* + name: P + href: api/Hi.NcParsers.Keywords.FanucMacroCall.html#Hi_NcParsers_Keywords_FanucMacroCall_P_ + commentId: Overload:Hi.NcParsers.Keywords.FanucMacroCall.P + isSpec: "True" + fullName: Hi.NcParsers.Keywords.FanucMacroCall.P + nameWithType: FanucMacroCall.P +- uid: Hi.NcParsers.Keywords.FanucMacroCall.Term + name: Term + href: api/Hi.NcParsers.Keywords.FanucMacroCall.html#Hi_NcParsers_Keywords_FanucMacroCall_Term + commentId: P:Hi.NcParsers.Keywords.FanucMacroCall.Term + fullName: Hi.NcParsers.Keywords.FanucMacroCall.Term + nameWithType: FanucMacroCall.Term +- uid: Hi.NcParsers.Keywords.FanucMacroCall.Term* + name: Term + href: api/Hi.NcParsers.Keywords.FanucMacroCall.html#Hi_NcParsers_Keywords_FanucMacroCall_Term_ + commentId: Overload:Hi.NcParsers.Keywords.FanucMacroCall.Term + isSpec: "True" + fullName: Hi.NcParsers.Keywords.FanucMacroCall.Term + nameWithType: FanucMacroCall.Term +- uid: Hi.NcParsers.Keywords.FanucModalMacro + name: FanucModalMacro + href: api/Hi.NcParsers.Keywords.FanucModalMacro.html + commentId: T:Hi.NcParsers.Keywords.FanucModalMacro + fullName: Hi.NcParsers.Keywords.FanucModalMacro + nameWithType: FanucModalMacro +- uid: Hi.NcParsers.Keywords.FanucModalMacro.Args + name: Args + href: api/Hi.NcParsers.Keywords.FanucModalMacro.html#Hi_NcParsers_Keywords_FanucModalMacro_Args + commentId: P:Hi.NcParsers.Keywords.FanucModalMacro.Args + fullName: Hi.NcParsers.Keywords.FanucModalMacro.Args + nameWithType: FanucModalMacro.Args +- uid: Hi.NcParsers.Keywords.FanucModalMacro.Args* + name: Args + href: api/Hi.NcParsers.Keywords.FanucModalMacro.html#Hi_NcParsers_Keywords_FanucModalMacro_Args_ + commentId: Overload:Hi.NcParsers.Keywords.FanucModalMacro.Args + isSpec: "True" + fullName: Hi.NcParsers.Keywords.FanucModalMacro.Args + nameWithType: FanucModalMacro.Args +- uid: Hi.NcParsers.Keywords.FanucModalMacro.FileName + name: FileName + href: api/Hi.NcParsers.Keywords.FanucModalMacro.html#Hi_NcParsers_Keywords_FanucModalMacro_FileName + commentId: P:Hi.NcParsers.Keywords.FanucModalMacro.FileName + fullName: Hi.NcParsers.Keywords.FanucModalMacro.FileName + nameWithType: FanucModalMacro.FileName +- uid: Hi.NcParsers.Keywords.FanucModalMacro.FileName* + name: FileName + href: api/Hi.NcParsers.Keywords.FanucModalMacro.html#Hi_NcParsers_Keywords_FanucModalMacro_FileName_ + commentId: Overload:Hi.NcParsers.Keywords.FanucModalMacro.FileName + isSpec: "True" + fullName: Hi.NcParsers.Keywords.FanucModalMacro.FileName + nameWithType: FanucModalMacro.FileName +- uid: Hi.NcParsers.Keywords.FanucModalMacro.L + name: L + href: api/Hi.NcParsers.Keywords.FanucModalMacro.html#Hi_NcParsers_Keywords_FanucModalMacro_L + commentId: P:Hi.NcParsers.Keywords.FanucModalMacro.L + fullName: Hi.NcParsers.Keywords.FanucModalMacro.L + nameWithType: FanucModalMacro.L +- uid: Hi.NcParsers.Keywords.FanucModalMacro.L* + name: L + href: api/Hi.NcParsers.Keywords.FanucModalMacro.html#Hi_NcParsers_Keywords_FanucModalMacro_L_ + commentId: Overload:Hi.NcParsers.Keywords.FanucModalMacro.L + isSpec: "True" + fullName: Hi.NcParsers.Keywords.FanucModalMacro.L + nameWithType: FanucModalMacro.L +- uid: Hi.NcParsers.Keywords.FanucModalMacro.P + name: P + href: api/Hi.NcParsers.Keywords.FanucModalMacro.html#Hi_NcParsers_Keywords_FanucModalMacro_P + commentId: P:Hi.NcParsers.Keywords.FanucModalMacro.P + fullName: Hi.NcParsers.Keywords.FanucModalMacro.P + nameWithType: FanucModalMacro.P +- uid: Hi.NcParsers.Keywords.FanucModalMacro.P* + name: P + href: api/Hi.NcParsers.Keywords.FanucModalMacro.html#Hi_NcParsers_Keywords_FanucModalMacro_P_ + commentId: Overload:Hi.NcParsers.Keywords.FanucModalMacro.P + isSpec: "True" + fullName: Hi.NcParsers.Keywords.FanucModalMacro.P + nameWithType: FanucModalMacro.P +- uid: Hi.NcParsers.Keywords.FanucModalMacro.Term + name: Term + href: api/Hi.NcParsers.Keywords.FanucModalMacro.html#Hi_NcParsers_Keywords_FanucModalMacro_Term + commentId: P:Hi.NcParsers.Keywords.FanucModalMacro.Term + fullName: Hi.NcParsers.Keywords.FanucModalMacro.Term + nameWithType: FanucModalMacro.Term +- uid: Hi.NcParsers.Keywords.FanucModalMacro.Term* + name: Term + href: api/Hi.NcParsers.Keywords.FanucModalMacro.html#Hi_NcParsers_Keywords_FanucModalMacro_Term_ + commentId: Overload:Hi.NcParsers.Keywords.FanucModalMacro.Term + isSpec: "True" + fullName: Hi.NcParsers.Keywords.FanucModalMacro.Term + nameWithType: FanucModalMacro.Term - uid: Hi.NcParsers.Keywords.FanucPathSmoothing name: FanucPathSmoothing href: api/Hi.NcParsers.Keywords.FanucPathSmoothing.html @@ -128516,6 +130038,41 @@ references: commentId: T:Hi.NcParsers.Keywords.MachineCoordinateState fullName: Hi.NcParsers.Keywords.MachineCoordinateState nameWithType: MachineCoordinateState +- uid: Hi.NcParsers.Keywords.MacroFrame + name: MacroFrame + href: api/Hi.NcParsers.Keywords.MacroFrame.html + commentId: T:Hi.NcParsers.Keywords.MacroFrame + fullName: Hi.NcParsers.Keywords.MacroFrame + nameWithType: MacroFrame +- uid: Hi.NcParsers.Keywords.MacroFrame.Get(System.Text.Json.Nodes.JsonObject) + name: Get(JsonObject) + href: api/Hi.NcParsers.Keywords.MacroFrame.html#Hi_NcParsers_Keywords_MacroFrame_Get_System_Text_Json_Nodes_JsonObject_ + commentId: M:Hi.NcParsers.Keywords.MacroFrame.Get(System.Text.Json.Nodes.JsonObject) + fullName: Hi.NcParsers.Keywords.MacroFrame.Get(System.Text.Json.Nodes.JsonObject) + nameWithType: MacroFrame.Get(JsonObject) +- uid: Hi.NcParsers.Keywords.MacroFrame.Get* + name: Get + href: api/Hi.NcParsers.Keywords.MacroFrame.html#Hi_NcParsers_Keywords_MacroFrame_Get_ + commentId: Overload:Hi.NcParsers.Keywords.MacroFrame.Get + isSpec: "True" + fullName: Hi.NcParsers.Keywords.MacroFrame.Get + nameWithType: MacroFrame.Get +- uid: Hi.NcParsers.Keywords.MacroFrame.Set(System.Text.Json.Nodes.JsonObject,System.Int32) + name: Set(JsonObject, int) + href: api/Hi.NcParsers.Keywords.MacroFrame.html#Hi_NcParsers_Keywords_MacroFrame_Set_System_Text_Json_Nodes_JsonObject_System_Int32_ + commentId: M:Hi.NcParsers.Keywords.MacroFrame.Set(System.Text.Json.Nodes.JsonObject,System.Int32) + name.vb: Set(JsonObject, Integer) + fullName: Hi.NcParsers.Keywords.MacroFrame.Set(System.Text.Json.Nodes.JsonObject, int) + fullName.vb: Hi.NcParsers.Keywords.MacroFrame.Set(System.Text.Json.Nodes.JsonObject, Integer) + nameWithType: MacroFrame.Set(JsonObject, int) + nameWithType.vb: MacroFrame.Set(JsonObject, Integer) +- uid: Hi.NcParsers.Keywords.MacroFrame.Set* + name: Set + href: api/Hi.NcParsers.Keywords.MacroFrame.html#Hi_NcParsers_Keywords_MacroFrame_Set_ + commentId: Overload:Hi.NcParsers.Keywords.MacroFrame.Set + isSpec: "True" + fullName: Hi.NcParsers.Keywords.MacroFrame.Set + nameWithType: MacroFrame.Set - uid: Hi.NcParsers.Keywords.MotionEvent name: MotionEvent href: api/Hi.NcParsers.Keywords.MotionEvent.html @@ -128923,19 +130480,19 @@ references: commentId: T:Hi.NcParsers.Keywords.SubProgramCall fullName: Hi.NcParsers.Keywords.SubProgramCall nameWithType: SubProgramCall -- uid: Hi.NcParsers.Keywords.SubProgramCall.File - name: File - href: api/Hi.NcParsers.Keywords.SubProgramCall.html#Hi_NcParsers_Keywords_SubProgramCall_File - commentId: P:Hi.NcParsers.Keywords.SubProgramCall.File - fullName: Hi.NcParsers.Keywords.SubProgramCall.File - nameWithType: SubProgramCall.File -- uid: Hi.NcParsers.Keywords.SubProgramCall.File* - name: File - href: api/Hi.NcParsers.Keywords.SubProgramCall.html#Hi_NcParsers_Keywords_SubProgramCall_File_ - commentId: Overload:Hi.NcParsers.Keywords.SubProgramCall.File +- uid: Hi.NcParsers.Keywords.SubProgramCall.FileName + name: FileName + href: api/Hi.NcParsers.Keywords.SubProgramCall.html#Hi_NcParsers_Keywords_SubProgramCall_FileName + commentId: P:Hi.NcParsers.Keywords.SubProgramCall.FileName + fullName: Hi.NcParsers.Keywords.SubProgramCall.FileName + nameWithType: SubProgramCall.FileName +- uid: Hi.NcParsers.Keywords.SubProgramCall.FileName* + name: FileName + href: api/Hi.NcParsers.Keywords.SubProgramCall.html#Hi_NcParsers_Keywords_SubProgramCall_FileName_ + commentId: Overload:Hi.NcParsers.Keywords.SubProgramCall.FileName isSpec: "True" - fullName: Hi.NcParsers.Keywords.SubProgramCall.File - nameWithType: SubProgramCall.File + fullName: Hi.NcParsers.Keywords.SubProgramCall.FileName + nameWithType: SubProgramCall.FileName - uid: Hi.NcParsers.Keywords.SubProgramCall.L name: L href: api/Hi.NcParsers.Keywords.SubProgramCall.html#Hi_NcParsers_Keywords_SubProgramCall_L @@ -128981,6 +130538,19 @@ references: commentId: T:Hi.NcParsers.Keywords.SubProgramReturn fullName: Hi.NcParsers.Keywords.SubProgramReturn nameWithType: SubProgramReturn +- uid: Hi.NcParsers.Keywords.SubProgramReturn.JumpedToN + name: JumpedToN + href: api/Hi.NcParsers.Keywords.SubProgramReturn.html#Hi_NcParsers_Keywords_SubProgramReturn_JumpedToN + commentId: P:Hi.NcParsers.Keywords.SubProgramReturn.JumpedToN + fullName: Hi.NcParsers.Keywords.SubProgramReturn.JumpedToN + nameWithType: SubProgramReturn.JumpedToN +- uid: Hi.NcParsers.Keywords.SubProgramReturn.JumpedToN* + name: JumpedToN + href: api/Hi.NcParsers.Keywords.SubProgramReturn.html#Hi_NcParsers_Keywords_SubProgramReturn_JumpedToN_ + commentId: Overload:Hi.NcParsers.Keywords.SubProgramReturn.JumpedToN + isSpec: "True" + fullName: Hi.NcParsers.Keywords.SubProgramReturn.JumpedToN + nameWithType: SubProgramReturn.JumpedToN - uid: Hi.NcParsers.Keywords.SubProgramReturn.P name: P href: api/Hi.NcParsers.Keywords.SubProgramReturn.html#Hi_NcParsers_Keywords_SubProgramReturn_P @@ -129277,6 +130847,24 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.XName nameWithType: BackBoringSyntax.XName +- uid: Hi.NcParsers.LogicSyntaxs.BareG28Behavior + name: BareG28Behavior + href: api/Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html + commentId: T:Hi.NcParsers.LogicSyntaxs.BareG28Behavior + fullName: Hi.NcParsers.LogicSyntaxs.BareG28Behavior + nameWithType: BareG28Behavior +- uid: Hi.NcParsers.LogicSyntaxs.BareG28Behavior.Alarm + name: Alarm + href: api/Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html#Hi_NcParsers_LogicSyntaxs_BareG28Behavior_Alarm + commentId: F:Hi.NcParsers.LogicSyntaxs.BareG28Behavior.Alarm + fullName: Hi.NcParsers.LogicSyntaxs.BareG28Behavior.Alarm + nameWithType: BareG28Behavior.Alarm +- uid: Hi.NcParsers.LogicSyntaxs.BareG28Behavior.AllAxesHome + name: AllAxesHome + href: api/Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html#Hi_NcParsers_LogicSyntaxs_BareG28Behavior_AllAxesHome + commentId: F:Hi.NcParsers.LogicSyntaxs.BareG28Behavior.AllAxesHome + fullName: Hi.NcParsers.LogicSyntaxs.BareG28Behavior.AllAxesHome + nameWithType: BareG28Behavior.AllAxesHome - uid: Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax name: BoringCycleSyntax href: api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html @@ -132294,15 +133882,15 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.ResolveBlockProgramXyz nameWithType: ProgramXyzUtil.ResolveBlockProgramXyz -- uid: Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.ResolveProgramXyz(System.Text.Json.Nodes.JsonNode,Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},Hi.NcParsers.Sentence,Hi.NcParsers.NcDiagnosticProgress) - name: ResolveProgramXyz(JsonNode, LazyLinkedListNode, Sentence, NcDiagnosticProgress) - href: api/Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html#Hi_NcParsers_LogicSyntaxs_ProgramXyzUtil_ResolveProgramXyz_System_Text_Json_Nodes_JsonNode_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__Hi_NcParsers_Sentence_Hi_NcParsers_NcDiagnosticProgress_ - commentId: M:Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.ResolveProgramXyz(System.Text.Json.Nodes.JsonNode,Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},Hi.NcParsers.Sentence,Hi.NcParsers.NcDiagnosticProgress) - name.vb: ResolveProgramXyz(JsonNode, LazyLinkedListNode(Of SyntaxPiece), Sentence, NcDiagnosticProgress) - fullName: Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.ResolveProgramXyz(System.Text.Json.Nodes.JsonNode, Hi.Common.Collections.LazyLinkedListNode, Hi.NcParsers.Sentence, Hi.NcParsers.NcDiagnosticProgress) - fullName.vb: Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.ResolveProgramXyz(System.Text.Json.Nodes.JsonNode, Hi.Common.Collections.LazyLinkedListNode(Of Hi.NcParsers.Syntaxs.SyntaxPiece), Hi.NcParsers.Sentence, Hi.NcParsers.NcDiagnosticProgress) - nameWithType: ProgramXyzUtil.ResolveProgramXyz(JsonNode, LazyLinkedListNode, Sentence, NcDiagnosticProgress) - nameWithType.vb: ProgramXyzUtil.ResolveProgramXyz(JsonNode, LazyLinkedListNode(Of SyntaxPiece), Sentence, NcDiagnosticProgress) +- uid: Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.ResolveProgramXyz(System.Text.Json.Nodes.JsonNode,Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},Hi.NcParsers.ISentenceCarrier,Hi.NcParsers.NcDiagnosticProgress) + name: ResolveProgramXyz(JsonNode, LazyLinkedListNode, ISentenceCarrier, NcDiagnosticProgress) + href: api/Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html#Hi_NcParsers_LogicSyntaxs_ProgramXyzUtil_ResolveProgramXyz_System_Text_Json_Nodes_JsonNode_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__Hi_NcParsers_ISentenceCarrier_Hi_NcParsers_NcDiagnosticProgress_ + commentId: M:Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.ResolveProgramXyz(System.Text.Json.Nodes.JsonNode,Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},Hi.NcParsers.ISentenceCarrier,Hi.NcParsers.NcDiagnosticProgress) + name.vb: ResolveProgramXyz(JsonNode, LazyLinkedListNode(Of SyntaxPiece), ISentenceCarrier, NcDiagnosticProgress) + fullName: Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.ResolveProgramXyz(System.Text.Json.Nodes.JsonNode, Hi.Common.Collections.LazyLinkedListNode, Hi.NcParsers.ISentenceCarrier, Hi.NcParsers.NcDiagnosticProgress) + fullName.vb: Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.ResolveProgramXyz(System.Text.Json.Nodes.JsonNode, Hi.Common.Collections.LazyLinkedListNode(Of Hi.NcParsers.Syntaxs.SyntaxPiece), Hi.NcParsers.ISentenceCarrier, Hi.NcParsers.NcDiagnosticProgress) + nameWithType: ProgramXyzUtil.ResolveProgramXyz(JsonNode, LazyLinkedListNode, ISentenceCarrier, NcDiagnosticProgress) + nameWithType.vb: ProgramXyzUtil.ResolveProgramXyz(JsonNode, LazyLinkedListNode(Of SyntaxPiece), ISentenceCarrier, NcDiagnosticProgress) - uid: Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.ResolveProgramXyz* name: ResolveProgramXyz href: api/Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html#Hi_NcParsers_LogicSyntaxs_ProgramXyzUtil_ResolveProgramXyz_ @@ -132344,6 +133932,19 @@ references: fullName.vb: Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.New nameWithType: ReferenceReturnSyntax.ReferenceReturnSyntax nameWithType.vb: ReferenceReturnSyntax.New +- uid: Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.BareG28 + name: BareG28 + href: api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html#Hi_NcParsers_LogicSyntaxs_ReferenceReturnSyntax_BareG28 + commentId: P:Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.BareG28 + fullName: Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.BareG28 + nameWithType: ReferenceReturnSyntax.BareG28 +- uid: Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.BareG28* + name: BareG28 + href: api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html#Hi_NcParsers_LogicSyntaxs_ReferenceReturnSyntax_BareG28_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.BareG28 + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.BareG28 + nameWithType: ReferenceReturnSyntax.BareG28 - uid: Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) name: Build(LazyLinkedListNode, List, NcDiagnosticProgress) href: api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html#Hi_NcParsers_LogicSyntaxs_ReferenceReturnSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ @@ -132408,15 +134009,15 @@ references: commentId: T:Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil fullName: Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil nameWithType: RotaryAxisUtil -- uid: Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.ConsumeAxis(System.Text.Json.Nodes.JsonObject,System.String,Hi.NcParsers.Sentence,Hi.NcParsers.NcDiagnosticProgress) - name: ConsumeAxis(JsonObject, string, Sentence, NcDiagnosticProgress) - href: api/Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html#Hi_NcParsers_LogicSyntaxs_RotaryAxisUtil_ConsumeAxis_System_Text_Json_Nodes_JsonObject_System_String_Hi_NcParsers_Sentence_Hi_NcParsers_NcDiagnosticProgress_ - commentId: M:Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.ConsumeAxis(System.Text.Json.Nodes.JsonObject,System.String,Hi.NcParsers.Sentence,Hi.NcParsers.NcDiagnosticProgress) - name.vb: ConsumeAxis(JsonObject, String, Sentence, NcDiagnosticProgress) - fullName: Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.ConsumeAxis(System.Text.Json.Nodes.JsonObject, string, Hi.NcParsers.Sentence, Hi.NcParsers.NcDiagnosticProgress) - fullName.vb: Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.ConsumeAxis(System.Text.Json.Nodes.JsonObject, String, Hi.NcParsers.Sentence, Hi.NcParsers.NcDiagnosticProgress) - nameWithType: RotaryAxisUtil.ConsumeAxis(JsonObject, string, Sentence, NcDiagnosticProgress) - nameWithType.vb: RotaryAxisUtil.ConsumeAxis(JsonObject, String, Sentence, NcDiagnosticProgress) +- uid: Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.ConsumeAxis(System.Text.Json.Nodes.JsonObject,System.String,Hi.NcParsers.ISentenceCarrier,Hi.NcParsers.NcDiagnosticProgress) + name: ConsumeAxis(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) + href: api/Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html#Hi_NcParsers_LogicSyntaxs_RotaryAxisUtil_ConsumeAxis_System_Text_Json_Nodes_JsonObject_System_String_Hi_NcParsers_ISentenceCarrier_Hi_NcParsers_NcDiagnosticProgress_ + commentId: M:Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.ConsumeAxis(System.Text.Json.Nodes.JsonObject,System.String,Hi.NcParsers.ISentenceCarrier,Hi.NcParsers.NcDiagnosticProgress) + name.vb: ConsumeAxis(JsonObject, String, ISentenceCarrier, NcDiagnosticProgress) + fullName: Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.ConsumeAxis(System.Text.Json.Nodes.JsonObject, string, Hi.NcParsers.ISentenceCarrier, Hi.NcParsers.NcDiagnosticProgress) + fullName.vb: Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.ConsumeAxis(System.Text.Json.Nodes.JsonObject, String, Hi.NcParsers.ISentenceCarrier, Hi.NcParsers.NcDiagnosticProgress) + nameWithType: RotaryAxisUtil.ConsumeAxis(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) + nameWithType.vb: RotaryAxisUtil.ConsumeAxis(JsonObject, String, ISentenceCarrier, NcDiagnosticProgress) - uid: Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.ConsumeAxis* name: ConsumeAxis href: api/Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html#Hi_NcParsers_LogicSyntaxs_RotaryAxisUtil_ConsumeAxis_ @@ -133137,15 +134738,15 @@ references: commentId: T:Hi.NcParsers.NcDiagnostic fullName: Hi.NcParsers.NcDiagnostic nameWithType: NcDiagnostic -- uid: Hi.NcParsers.NcDiagnostic.#ctor(Hi.NcParsers.NcDiagnosticSeverity,Hi.NcParsers.NcDiagnosticCategory,System.String,System.String,System.Object,Hi.NcParsers.Sentence) - name: NcDiagnostic(NcDiagnosticSeverity, NcDiagnosticCategory, string, string, object, Sentence) - href: api/Hi.NcParsers.NcDiagnostic.html#Hi_NcParsers_NcDiagnostic__ctor_Hi_NcParsers_NcDiagnosticSeverity_Hi_NcParsers_NcDiagnosticCategory_System_String_System_String_System_Object_Hi_NcParsers_Sentence_ - commentId: M:Hi.NcParsers.NcDiagnostic.#ctor(Hi.NcParsers.NcDiagnosticSeverity,Hi.NcParsers.NcDiagnosticCategory,System.String,System.String,System.Object,Hi.NcParsers.Sentence) - name.vb: New(NcDiagnosticSeverity, NcDiagnosticCategory, String, String, Object, Sentence) - fullName: Hi.NcParsers.NcDiagnostic.NcDiagnostic(Hi.NcParsers.NcDiagnosticSeverity, Hi.NcParsers.NcDiagnosticCategory, string, string, object, Hi.NcParsers.Sentence) - fullName.vb: Hi.NcParsers.NcDiagnostic.New(Hi.NcParsers.NcDiagnosticSeverity, Hi.NcParsers.NcDiagnosticCategory, String, String, Object, Hi.NcParsers.Sentence) - nameWithType: NcDiagnostic.NcDiagnostic(NcDiagnosticSeverity, NcDiagnosticCategory, string, string, object, Sentence) - nameWithType.vb: NcDiagnostic.New(NcDiagnosticSeverity, NcDiagnosticCategory, String, String, Object, Sentence) +- uid: Hi.NcParsers.NcDiagnostic.#ctor(Hi.NcParsers.NcDiagnosticSeverity,Hi.NcParsers.NcDiagnosticCategory,System.String,System.String,System.Object,Hi.NcParsers.ISentenceCarrier) + name: NcDiagnostic(NcDiagnosticSeverity, NcDiagnosticCategory, string, string, object, ISentenceCarrier) + href: api/Hi.NcParsers.NcDiagnostic.html#Hi_NcParsers_NcDiagnostic__ctor_Hi_NcParsers_NcDiagnosticSeverity_Hi_NcParsers_NcDiagnosticCategory_System_String_System_String_System_Object_Hi_NcParsers_ISentenceCarrier_ + commentId: M:Hi.NcParsers.NcDiagnostic.#ctor(Hi.NcParsers.NcDiagnosticSeverity,Hi.NcParsers.NcDiagnosticCategory,System.String,System.String,System.Object,Hi.NcParsers.ISentenceCarrier) + name.vb: New(NcDiagnosticSeverity, NcDiagnosticCategory, String, String, Object, ISentenceCarrier) + fullName: Hi.NcParsers.NcDiagnostic.NcDiagnostic(Hi.NcParsers.NcDiagnosticSeverity, Hi.NcParsers.NcDiagnosticCategory, string, string, object, Hi.NcParsers.ISentenceCarrier) + fullName.vb: Hi.NcParsers.NcDiagnostic.New(Hi.NcParsers.NcDiagnosticSeverity, Hi.NcParsers.NcDiagnosticCategory, String, String, Object, Hi.NcParsers.ISentenceCarrier) + nameWithType: NcDiagnostic.NcDiagnostic(NcDiagnosticSeverity, NcDiagnosticCategory, string, string, object, ISentenceCarrier) + nameWithType.vb: NcDiagnostic.New(NcDiagnosticSeverity, NcDiagnosticCategory, String, String, Object, ISentenceCarrier) - uid: Hi.NcParsers.NcDiagnostic.#ctor* name: NcDiagnostic href: api/Hi.NcParsers.NcDiagnostic.html#Hi_NcParsers_NcDiagnostic__ctor_ @@ -133195,19 +134796,19 @@ references: isSpec: "True" fullName: Hi.NcParsers.NcDiagnostic.Id nameWithType: NcDiagnostic.Id -- uid: Hi.NcParsers.NcDiagnostic.Sentence - name: Sentence - href: api/Hi.NcParsers.NcDiagnostic.html#Hi_NcParsers_NcDiagnostic_Sentence - commentId: P:Hi.NcParsers.NcDiagnostic.Sentence - fullName: Hi.NcParsers.NcDiagnostic.Sentence - nameWithType: NcDiagnostic.Sentence -- uid: Hi.NcParsers.NcDiagnostic.Sentence* - name: Sentence - href: api/Hi.NcParsers.NcDiagnostic.html#Hi_NcParsers_NcDiagnostic_Sentence_ - commentId: Overload:Hi.NcParsers.NcDiagnostic.Sentence +- uid: Hi.NcParsers.NcDiagnostic.SentenceCarrier + name: SentenceCarrier + href: api/Hi.NcParsers.NcDiagnostic.html#Hi_NcParsers_NcDiagnostic_SentenceCarrier + commentId: P:Hi.NcParsers.NcDiagnostic.SentenceCarrier + fullName: Hi.NcParsers.NcDiagnostic.SentenceCarrier + nameWithType: NcDiagnostic.SentenceCarrier +- uid: Hi.NcParsers.NcDiagnostic.SentenceCarrier* + name: SentenceCarrier + href: api/Hi.NcParsers.NcDiagnostic.html#Hi_NcParsers_NcDiagnostic_SentenceCarrier_ + commentId: Overload:Hi.NcParsers.NcDiagnostic.SentenceCarrier isSpec: "True" - fullName: Hi.NcParsers.NcDiagnostic.Sentence - nameWithType: NcDiagnostic.Sentence + fullName: Hi.NcParsers.NcDiagnostic.SentenceCarrier + nameWithType: NcDiagnostic.SentenceCarrier - uid: Hi.NcParsers.NcDiagnostic.Severity name: Severity href: api/Hi.NcParsers.NcDiagnostic.html#Hi_NcParsers_NcDiagnostic_Severity @@ -133302,15 +134903,15 @@ references: fullName.vb: Hi.NcParsers.NcDiagnosticProgress.New nameWithType: NcDiagnosticProgress.NcDiagnosticProgress nameWithType.vb: NcDiagnosticProgress.New -- uid: Hi.NcParsers.NcDiagnosticProgress.ConfigurationError(Hi.NcParsers.Sentence,System.String,System.String,System.Object) - name: ConfigurationError(Sentence, string, string, object) - href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_ConfigurationError_Hi_NcParsers_Sentence_System_String_System_String_System_Object_ - commentId: M:Hi.NcParsers.NcDiagnosticProgress.ConfigurationError(Hi.NcParsers.Sentence,System.String,System.String,System.Object) - name.vb: ConfigurationError(Sentence, String, String, Object) - fullName: Hi.NcParsers.NcDiagnosticProgress.ConfigurationError(Hi.NcParsers.Sentence, string, string, object) - fullName.vb: Hi.NcParsers.NcDiagnosticProgress.ConfigurationError(Hi.NcParsers.Sentence, String, String, Object) - nameWithType: NcDiagnosticProgress.ConfigurationError(Sentence, string, string, object) - nameWithType.vb: NcDiagnosticProgress.ConfigurationError(Sentence, String, String, Object) +- uid: Hi.NcParsers.NcDiagnosticProgress.ConfigurationError(Hi.NcParsers.ISentenceCarrier,System.String,System.String,System.Object) + name: ConfigurationError(ISentenceCarrier, string, string, object) + href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_ConfigurationError_Hi_NcParsers_ISentenceCarrier_System_String_System_String_System_Object_ + commentId: M:Hi.NcParsers.NcDiagnosticProgress.ConfigurationError(Hi.NcParsers.ISentenceCarrier,System.String,System.String,System.Object) + name.vb: ConfigurationError(ISentenceCarrier, String, String, Object) + fullName: Hi.NcParsers.NcDiagnosticProgress.ConfigurationError(Hi.NcParsers.ISentenceCarrier, string, string, object) + fullName.vb: Hi.NcParsers.NcDiagnosticProgress.ConfigurationError(Hi.NcParsers.ISentenceCarrier, String, String, Object) + nameWithType: NcDiagnosticProgress.ConfigurationError(ISentenceCarrier, string, string, object) + nameWithType.vb: NcDiagnosticProgress.ConfigurationError(ISentenceCarrier, String, String, Object) - uid: Hi.NcParsers.NcDiagnosticProgress.ConfigurationError(System.String,System.String,System.Object) name: ConfigurationError(string, string, object) href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_ConfigurationError_System_String_System_String_System_Object_ @@ -133327,15 +134928,15 @@ references: isSpec: "True" fullName: Hi.NcParsers.NcDiagnosticProgress.ConfigurationError nameWithType: NcDiagnosticProgress.ConfigurationError -- uid: Hi.NcParsers.NcDiagnosticProgress.ConfigurationMessage(Hi.NcParsers.Sentence,System.String,System.String) - name: ConfigurationMessage(Sentence, string, string) - href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_ConfigurationMessage_Hi_NcParsers_Sentence_System_String_System_String_ - commentId: M:Hi.NcParsers.NcDiagnosticProgress.ConfigurationMessage(Hi.NcParsers.Sentence,System.String,System.String) - name.vb: ConfigurationMessage(Sentence, String, String) - fullName: Hi.NcParsers.NcDiagnosticProgress.ConfigurationMessage(Hi.NcParsers.Sentence, string, string) - fullName.vb: Hi.NcParsers.NcDiagnosticProgress.ConfigurationMessage(Hi.NcParsers.Sentence, String, String) - nameWithType: NcDiagnosticProgress.ConfigurationMessage(Sentence, string, string) - nameWithType.vb: NcDiagnosticProgress.ConfigurationMessage(Sentence, String, String) +- uid: Hi.NcParsers.NcDiagnosticProgress.ConfigurationMessage(Hi.NcParsers.ISentenceCarrier,System.String,System.String) + name: ConfigurationMessage(ISentenceCarrier, string, string) + href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_ConfigurationMessage_Hi_NcParsers_ISentenceCarrier_System_String_System_String_ + commentId: M:Hi.NcParsers.NcDiagnosticProgress.ConfigurationMessage(Hi.NcParsers.ISentenceCarrier,System.String,System.String) + name.vb: ConfigurationMessage(ISentenceCarrier, String, String) + fullName: Hi.NcParsers.NcDiagnosticProgress.ConfigurationMessage(Hi.NcParsers.ISentenceCarrier, string, string) + fullName.vb: Hi.NcParsers.NcDiagnosticProgress.ConfigurationMessage(Hi.NcParsers.ISentenceCarrier, String, String) + nameWithType: NcDiagnosticProgress.ConfigurationMessage(ISentenceCarrier, string, string) + nameWithType.vb: NcDiagnosticProgress.ConfigurationMessage(ISentenceCarrier, String, String) - uid: Hi.NcParsers.NcDiagnosticProgress.ConfigurationMessage(System.String,System.String) name: ConfigurationMessage(string, string) href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_ConfigurationMessage_System_String_System_String_ @@ -133352,15 +134953,15 @@ references: isSpec: "True" fullName: Hi.NcParsers.NcDiagnosticProgress.ConfigurationMessage nameWithType: NcDiagnosticProgress.ConfigurationMessage -- uid: Hi.NcParsers.NcDiagnosticProgress.ConfigurationWarning(Hi.NcParsers.Sentence,System.String,System.String,System.Object) - name: ConfigurationWarning(Sentence, string, string, object) - href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_ConfigurationWarning_Hi_NcParsers_Sentence_System_String_System_String_System_Object_ - commentId: M:Hi.NcParsers.NcDiagnosticProgress.ConfigurationWarning(Hi.NcParsers.Sentence,System.String,System.String,System.Object) - name.vb: ConfigurationWarning(Sentence, String, String, Object) - fullName: Hi.NcParsers.NcDiagnosticProgress.ConfigurationWarning(Hi.NcParsers.Sentence, string, string, object) - fullName.vb: Hi.NcParsers.NcDiagnosticProgress.ConfigurationWarning(Hi.NcParsers.Sentence, String, String, Object) - nameWithType: NcDiagnosticProgress.ConfigurationWarning(Sentence, string, string, object) - nameWithType.vb: NcDiagnosticProgress.ConfigurationWarning(Sentence, String, String, Object) +- uid: Hi.NcParsers.NcDiagnosticProgress.ConfigurationWarning(Hi.NcParsers.ISentenceCarrier,System.String,System.String,System.Object) + name: ConfigurationWarning(ISentenceCarrier, string, string, object) + href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_ConfigurationWarning_Hi_NcParsers_ISentenceCarrier_System_String_System_String_System_Object_ + commentId: M:Hi.NcParsers.NcDiagnosticProgress.ConfigurationWarning(Hi.NcParsers.ISentenceCarrier,System.String,System.String,System.Object) + name.vb: ConfigurationWarning(ISentenceCarrier, String, String, Object) + fullName: Hi.NcParsers.NcDiagnosticProgress.ConfigurationWarning(Hi.NcParsers.ISentenceCarrier, string, string, object) + fullName.vb: Hi.NcParsers.NcDiagnosticProgress.ConfigurationWarning(Hi.NcParsers.ISentenceCarrier, String, String, Object) + nameWithType: NcDiagnosticProgress.ConfigurationWarning(ISentenceCarrier, string, string, object) + nameWithType.vb: NcDiagnosticProgress.ConfigurationWarning(ISentenceCarrier, String, String, Object) - uid: Hi.NcParsers.NcDiagnosticProgress.ConfigurationWarning(System.String,System.String,System.Object) name: ConfigurationWarning(string, string, object) href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_ConfigurationWarning_System_String_System_String_System_Object_ @@ -133390,15 +134991,15 @@ references: isSpec: "True" fullName: Hi.NcParsers.NcDiagnosticProgress.Report nameWithType: NcDiagnosticProgress.Report -- uid: Hi.NcParsers.NcDiagnosticProgress.SystemError(Hi.NcParsers.Sentence,System.String,System.String,System.Object) - name: SystemError(Sentence, string, string, object) - href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_SystemError_Hi_NcParsers_Sentence_System_String_System_String_System_Object_ - commentId: M:Hi.NcParsers.NcDiagnosticProgress.SystemError(Hi.NcParsers.Sentence,System.String,System.String,System.Object) - name.vb: SystemError(Sentence, String, String, Object) - fullName: Hi.NcParsers.NcDiagnosticProgress.SystemError(Hi.NcParsers.Sentence, string, string, object) - fullName.vb: Hi.NcParsers.NcDiagnosticProgress.SystemError(Hi.NcParsers.Sentence, String, String, Object) - nameWithType: NcDiagnosticProgress.SystemError(Sentence, string, string, object) - nameWithType.vb: NcDiagnosticProgress.SystemError(Sentence, String, String, Object) +- uid: Hi.NcParsers.NcDiagnosticProgress.SystemError(Hi.NcParsers.ISentenceCarrier,System.String,System.String,System.Object) + name: SystemError(ISentenceCarrier, string, string, object) + href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_SystemError_Hi_NcParsers_ISentenceCarrier_System_String_System_String_System_Object_ + commentId: M:Hi.NcParsers.NcDiagnosticProgress.SystemError(Hi.NcParsers.ISentenceCarrier,System.String,System.String,System.Object) + name.vb: SystemError(ISentenceCarrier, String, String, Object) + fullName: Hi.NcParsers.NcDiagnosticProgress.SystemError(Hi.NcParsers.ISentenceCarrier, string, string, object) + fullName.vb: Hi.NcParsers.NcDiagnosticProgress.SystemError(Hi.NcParsers.ISentenceCarrier, String, String, Object) + nameWithType: NcDiagnosticProgress.SystemError(ISentenceCarrier, string, string, object) + nameWithType.vb: NcDiagnosticProgress.SystemError(ISentenceCarrier, String, String, Object) - uid: Hi.NcParsers.NcDiagnosticProgress.SystemError(System.String,System.String,System.Object) name: SystemError(string, string, object) href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_SystemError_System_String_System_String_System_Object_ @@ -133415,15 +135016,15 @@ references: isSpec: "True" fullName: Hi.NcParsers.NcDiagnosticProgress.SystemError nameWithType: NcDiagnosticProgress.SystemError -- uid: Hi.NcParsers.NcDiagnosticProgress.SystemMessage(Hi.NcParsers.Sentence,System.String,System.String) - name: SystemMessage(Sentence, string, string) - href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_SystemMessage_Hi_NcParsers_Sentence_System_String_System_String_ - commentId: M:Hi.NcParsers.NcDiagnosticProgress.SystemMessage(Hi.NcParsers.Sentence,System.String,System.String) - name.vb: SystemMessage(Sentence, String, String) - fullName: Hi.NcParsers.NcDiagnosticProgress.SystemMessage(Hi.NcParsers.Sentence, string, string) - fullName.vb: Hi.NcParsers.NcDiagnosticProgress.SystemMessage(Hi.NcParsers.Sentence, String, String) - nameWithType: NcDiagnosticProgress.SystemMessage(Sentence, string, string) - nameWithType.vb: NcDiagnosticProgress.SystemMessage(Sentence, String, String) +- uid: Hi.NcParsers.NcDiagnosticProgress.SystemMessage(Hi.NcParsers.ISentenceCarrier,System.String,System.String) + name: SystemMessage(ISentenceCarrier, string, string) + href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_SystemMessage_Hi_NcParsers_ISentenceCarrier_System_String_System_String_ + commentId: M:Hi.NcParsers.NcDiagnosticProgress.SystemMessage(Hi.NcParsers.ISentenceCarrier,System.String,System.String) + name.vb: SystemMessage(ISentenceCarrier, String, String) + fullName: Hi.NcParsers.NcDiagnosticProgress.SystemMessage(Hi.NcParsers.ISentenceCarrier, string, string) + fullName.vb: Hi.NcParsers.NcDiagnosticProgress.SystemMessage(Hi.NcParsers.ISentenceCarrier, String, String) + nameWithType: NcDiagnosticProgress.SystemMessage(ISentenceCarrier, string, string) + nameWithType.vb: NcDiagnosticProgress.SystemMessage(ISentenceCarrier, String, String) - uid: Hi.NcParsers.NcDiagnosticProgress.SystemMessage(System.String,System.String) name: SystemMessage(string, string) href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_SystemMessage_System_String_System_String_ @@ -133440,15 +135041,15 @@ references: isSpec: "True" fullName: Hi.NcParsers.NcDiagnosticProgress.SystemMessage nameWithType: NcDiagnosticProgress.SystemMessage -- uid: Hi.NcParsers.NcDiagnosticProgress.UnsupportedError(Hi.NcParsers.Sentence,System.String,System.String,System.Object) - name: UnsupportedError(Sentence, string, string, object) - href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_UnsupportedError_Hi_NcParsers_Sentence_System_String_System_String_System_Object_ - commentId: M:Hi.NcParsers.NcDiagnosticProgress.UnsupportedError(Hi.NcParsers.Sentence,System.String,System.String,System.Object) - name.vb: UnsupportedError(Sentence, String, String, Object) - fullName: Hi.NcParsers.NcDiagnosticProgress.UnsupportedError(Hi.NcParsers.Sentence, string, string, object) - fullName.vb: Hi.NcParsers.NcDiagnosticProgress.UnsupportedError(Hi.NcParsers.Sentence, String, String, Object) - nameWithType: NcDiagnosticProgress.UnsupportedError(Sentence, string, string, object) - nameWithType.vb: NcDiagnosticProgress.UnsupportedError(Sentence, String, String, Object) +- uid: Hi.NcParsers.NcDiagnosticProgress.UnsupportedError(Hi.NcParsers.ISentenceCarrier,System.String,System.String,System.Object) + name: UnsupportedError(ISentenceCarrier, string, string, object) + href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_UnsupportedError_Hi_NcParsers_ISentenceCarrier_System_String_System_String_System_Object_ + commentId: M:Hi.NcParsers.NcDiagnosticProgress.UnsupportedError(Hi.NcParsers.ISentenceCarrier,System.String,System.String,System.Object) + name.vb: UnsupportedError(ISentenceCarrier, String, String, Object) + fullName: Hi.NcParsers.NcDiagnosticProgress.UnsupportedError(Hi.NcParsers.ISentenceCarrier, string, string, object) + fullName.vb: Hi.NcParsers.NcDiagnosticProgress.UnsupportedError(Hi.NcParsers.ISentenceCarrier, String, String, Object) + nameWithType: NcDiagnosticProgress.UnsupportedError(ISentenceCarrier, string, string, object) + nameWithType.vb: NcDiagnosticProgress.UnsupportedError(ISentenceCarrier, String, String, Object) - uid: Hi.NcParsers.NcDiagnosticProgress.UnsupportedError(System.String,System.String,System.Object) name: UnsupportedError(string, string, object) href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_UnsupportedError_System_String_System_String_System_Object_ @@ -133465,15 +135066,15 @@ references: isSpec: "True" fullName: Hi.NcParsers.NcDiagnosticProgress.UnsupportedError nameWithType: NcDiagnosticProgress.UnsupportedError -- uid: Hi.NcParsers.NcDiagnosticProgress.UnsupportedMessage(Hi.NcParsers.Sentence,System.String,System.String,System.Object) - name: UnsupportedMessage(Sentence, string, string, object) - href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_UnsupportedMessage_Hi_NcParsers_Sentence_System_String_System_String_System_Object_ - commentId: M:Hi.NcParsers.NcDiagnosticProgress.UnsupportedMessage(Hi.NcParsers.Sentence,System.String,System.String,System.Object) - name.vb: UnsupportedMessage(Sentence, String, String, Object) - fullName: Hi.NcParsers.NcDiagnosticProgress.UnsupportedMessage(Hi.NcParsers.Sentence, string, string, object) - fullName.vb: Hi.NcParsers.NcDiagnosticProgress.UnsupportedMessage(Hi.NcParsers.Sentence, String, String, Object) - nameWithType: NcDiagnosticProgress.UnsupportedMessage(Sentence, string, string, object) - nameWithType.vb: NcDiagnosticProgress.UnsupportedMessage(Sentence, String, String, Object) +- uid: Hi.NcParsers.NcDiagnosticProgress.UnsupportedMessage(Hi.NcParsers.ISentenceCarrier,System.String,System.String,System.Object) + name: UnsupportedMessage(ISentenceCarrier, string, string, object) + href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_UnsupportedMessage_Hi_NcParsers_ISentenceCarrier_System_String_System_String_System_Object_ + commentId: M:Hi.NcParsers.NcDiagnosticProgress.UnsupportedMessage(Hi.NcParsers.ISentenceCarrier,System.String,System.String,System.Object) + name.vb: UnsupportedMessage(ISentenceCarrier, String, String, Object) + fullName: Hi.NcParsers.NcDiagnosticProgress.UnsupportedMessage(Hi.NcParsers.ISentenceCarrier, string, string, object) + fullName.vb: Hi.NcParsers.NcDiagnosticProgress.UnsupportedMessage(Hi.NcParsers.ISentenceCarrier, String, String, Object) + nameWithType: NcDiagnosticProgress.UnsupportedMessage(ISentenceCarrier, string, string, object) + nameWithType.vb: NcDiagnosticProgress.UnsupportedMessage(ISentenceCarrier, String, String, Object) - uid: Hi.NcParsers.NcDiagnosticProgress.UnsupportedMessage(System.String,System.String,System.Object) name: UnsupportedMessage(string, string, object) href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_UnsupportedMessage_System_String_System_String_System_Object_ @@ -133490,15 +135091,15 @@ references: isSpec: "True" fullName: Hi.NcParsers.NcDiagnosticProgress.UnsupportedMessage nameWithType: NcDiagnosticProgress.UnsupportedMessage -- uid: Hi.NcParsers.NcDiagnosticProgress.UnsupportedWarning(Hi.NcParsers.Sentence,System.String,System.String,System.Object) - name: UnsupportedWarning(Sentence, string, string, object) - href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_UnsupportedWarning_Hi_NcParsers_Sentence_System_String_System_String_System_Object_ - commentId: M:Hi.NcParsers.NcDiagnosticProgress.UnsupportedWarning(Hi.NcParsers.Sentence,System.String,System.String,System.Object) - name.vb: UnsupportedWarning(Sentence, String, String, Object) - fullName: Hi.NcParsers.NcDiagnosticProgress.UnsupportedWarning(Hi.NcParsers.Sentence, string, string, object) - fullName.vb: Hi.NcParsers.NcDiagnosticProgress.UnsupportedWarning(Hi.NcParsers.Sentence, String, String, Object) - nameWithType: NcDiagnosticProgress.UnsupportedWarning(Sentence, string, string, object) - nameWithType.vb: NcDiagnosticProgress.UnsupportedWarning(Sentence, String, String, Object) +- uid: Hi.NcParsers.NcDiagnosticProgress.UnsupportedWarning(Hi.NcParsers.ISentenceCarrier,System.String,System.String,System.Object) + name: UnsupportedWarning(ISentenceCarrier, string, string, object) + href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_UnsupportedWarning_Hi_NcParsers_ISentenceCarrier_System_String_System_String_System_Object_ + commentId: M:Hi.NcParsers.NcDiagnosticProgress.UnsupportedWarning(Hi.NcParsers.ISentenceCarrier,System.String,System.String,System.Object) + name.vb: UnsupportedWarning(ISentenceCarrier, String, String, Object) + fullName: Hi.NcParsers.NcDiagnosticProgress.UnsupportedWarning(Hi.NcParsers.ISentenceCarrier, string, string, object) + fullName.vb: Hi.NcParsers.NcDiagnosticProgress.UnsupportedWarning(Hi.NcParsers.ISentenceCarrier, String, String, Object) + nameWithType: NcDiagnosticProgress.UnsupportedWarning(ISentenceCarrier, string, string, object) + nameWithType.vb: NcDiagnosticProgress.UnsupportedWarning(ISentenceCarrier, String, String, Object) - uid: Hi.NcParsers.NcDiagnosticProgress.UnsupportedWarning(System.String,System.String,System.Object) name: UnsupportedWarning(string, string, object) href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_UnsupportedWarning_System_String_System_String_System_Object_ @@ -133515,15 +135116,15 @@ references: isSpec: "True" fullName: Hi.NcParsers.NcDiagnosticProgress.UnsupportedWarning nameWithType: NcDiagnosticProgress.UnsupportedWarning -- uid: Hi.NcParsers.NcDiagnosticProgress.ValidationError(Hi.NcParsers.Sentence,System.String,System.String,System.Object) - name: ValidationError(Sentence, string, string, object) - href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_ValidationError_Hi_NcParsers_Sentence_System_String_System_String_System_Object_ - commentId: M:Hi.NcParsers.NcDiagnosticProgress.ValidationError(Hi.NcParsers.Sentence,System.String,System.String,System.Object) - name.vb: ValidationError(Sentence, String, String, Object) - fullName: Hi.NcParsers.NcDiagnosticProgress.ValidationError(Hi.NcParsers.Sentence, string, string, object) - fullName.vb: Hi.NcParsers.NcDiagnosticProgress.ValidationError(Hi.NcParsers.Sentence, String, String, Object) - nameWithType: NcDiagnosticProgress.ValidationError(Sentence, string, string, object) - nameWithType.vb: NcDiagnosticProgress.ValidationError(Sentence, String, String, Object) +- uid: Hi.NcParsers.NcDiagnosticProgress.ValidationError(Hi.NcParsers.ISentenceCarrier,System.String,System.String,System.Object) + name: ValidationError(ISentenceCarrier, string, string, object) + href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_ValidationError_Hi_NcParsers_ISentenceCarrier_System_String_System_String_System_Object_ + commentId: M:Hi.NcParsers.NcDiagnosticProgress.ValidationError(Hi.NcParsers.ISentenceCarrier,System.String,System.String,System.Object) + name.vb: ValidationError(ISentenceCarrier, String, String, Object) + fullName: Hi.NcParsers.NcDiagnosticProgress.ValidationError(Hi.NcParsers.ISentenceCarrier, string, string, object) + fullName.vb: Hi.NcParsers.NcDiagnosticProgress.ValidationError(Hi.NcParsers.ISentenceCarrier, String, String, Object) + nameWithType: NcDiagnosticProgress.ValidationError(ISentenceCarrier, string, string, object) + nameWithType.vb: NcDiagnosticProgress.ValidationError(ISentenceCarrier, String, String, Object) - uid: Hi.NcParsers.NcDiagnosticProgress.ValidationError(System.String,System.String,System.Object) name: ValidationError(string, string, object) href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_ValidationError_System_String_System_String_System_Object_ @@ -133540,15 +135141,15 @@ references: isSpec: "True" fullName: Hi.NcParsers.NcDiagnosticProgress.ValidationError nameWithType: NcDiagnosticProgress.ValidationError -- uid: Hi.NcParsers.NcDiagnosticProgress.ValidationWarning(Hi.NcParsers.Sentence,System.String,System.String,System.Object) - name: ValidationWarning(Sentence, string, string, object) - href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_ValidationWarning_Hi_NcParsers_Sentence_System_String_System_String_System_Object_ - commentId: M:Hi.NcParsers.NcDiagnosticProgress.ValidationWarning(Hi.NcParsers.Sentence,System.String,System.String,System.Object) - name.vb: ValidationWarning(Sentence, String, String, Object) - fullName: Hi.NcParsers.NcDiagnosticProgress.ValidationWarning(Hi.NcParsers.Sentence, string, string, object) - fullName.vb: Hi.NcParsers.NcDiagnosticProgress.ValidationWarning(Hi.NcParsers.Sentence, String, String, Object) - nameWithType: NcDiagnosticProgress.ValidationWarning(Sentence, string, string, object) - nameWithType.vb: NcDiagnosticProgress.ValidationWarning(Sentence, String, String, Object) +- uid: Hi.NcParsers.NcDiagnosticProgress.ValidationWarning(Hi.NcParsers.ISentenceCarrier,System.String,System.String,System.Object) + name: ValidationWarning(ISentenceCarrier, string, string, object) + href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_ValidationWarning_Hi_NcParsers_ISentenceCarrier_System_String_System_String_System_Object_ + commentId: M:Hi.NcParsers.NcDiagnosticProgress.ValidationWarning(Hi.NcParsers.ISentenceCarrier,System.String,System.String,System.Object) + name.vb: ValidationWarning(ISentenceCarrier, String, String, Object) + fullName: Hi.NcParsers.NcDiagnosticProgress.ValidationWarning(Hi.NcParsers.ISentenceCarrier, string, string, object) + fullName.vb: Hi.NcParsers.NcDiagnosticProgress.ValidationWarning(Hi.NcParsers.ISentenceCarrier, String, String, Object) + nameWithType: NcDiagnosticProgress.ValidationWarning(ISentenceCarrier, string, string, object) + nameWithType.vb: NcDiagnosticProgress.ValidationWarning(ISentenceCarrier, String, String, Object) - uid: Hi.NcParsers.NcDiagnosticProgress.ValidationWarning(System.String,System.String,System.Object) name: ValidationWarning(string, string, object) href: api/Hi.NcParsers.NcDiagnosticProgress.html#Hi_NcParsers_NcDiagnosticProgress_ValidationWarning_System_String_System_String_System_Object_ @@ -134026,97 +135627,287 @@ references: isSpec: "True" fullName: Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.XName nameWithType: CsScriptSyntax.XName -- uid: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax - name: FanucProgramNumberSyntax - href: api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html - commentId: T:Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax - fullName: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax - nameWithType: FanucProgramNumberSyntax -- uid: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.#ctor - name: FanucProgramNumberSyntax() - href: api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_FanucProgramNumberSyntax__ctor - commentId: M:Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.#ctor +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc + name: Hi.NcParsers.ParsingSyntaxs.Fanuc + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.html + commentId: N:Hi.NcParsers.ParsingSyntaxs.Fanuc + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc + nameWithType: Hi.NcParsers.ParsingSyntaxs.Fanuc +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax + name: FanucGotoParsingSyntax + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html + commentId: T:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax + nameWithType: FanucGotoParsingSyntax +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.#ctor + name: FanucGotoParsingSyntax() + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucGotoParsingSyntax__ctor + commentId: M:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.#ctor name.vb: New() - fullName: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.FanucProgramNumberSyntax() - fullName.vb: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.New() - nameWithType: FanucProgramNumberSyntax.FanucProgramNumberSyntax() - nameWithType.vb: FanucProgramNumberSyntax.New() -- uid: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.#ctor(System.Xml.Linq.XElement) - name: FanucProgramNumberSyntax(XElement) - href: api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_FanucProgramNumberSyntax__ctor_System_Xml_Linq_XElement_ - commentId: M:Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.#ctor(System.Xml.Linq.XElement) + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.FanucGotoParsingSyntax() + fullName.vb: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.New() + nameWithType: FanucGotoParsingSyntax.FanucGotoParsingSyntax() + nameWithType.vb: FanucGotoParsingSyntax.New() +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.#ctor(System.Xml.Linq.XElement) + name: FanucGotoParsingSyntax(XElement) + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucGotoParsingSyntax__ctor_System_Xml_Linq_XElement_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.#ctor(System.Xml.Linq.XElement) name.vb: New(XElement) - fullName: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.FanucProgramNumberSyntax(System.Xml.Linq.XElement) - fullName.vb: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.New(System.Xml.Linq.XElement) - nameWithType: FanucProgramNumberSyntax.FanucProgramNumberSyntax(XElement) - nameWithType.vb: FanucProgramNumberSyntax.New(XElement) -- uid: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.#ctor* - name: FanucProgramNumberSyntax - href: api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_FanucProgramNumberSyntax__ctor_ - commentId: Overload:Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.#ctor + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.FanucGotoParsingSyntax(System.Xml.Linq.XElement) + fullName.vb: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.New(System.Xml.Linq.XElement) + nameWithType: FanucGotoParsingSyntax.FanucGotoParsingSyntax(XElement) + nameWithType.vb: FanucGotoParsingSyntax.New(XElement) +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.#ctor* + name: FanucGotoParsingSyntax + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucGotoParsingSyntax__ctor_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.#ctor isSpec: "True" name.vb: New - fullName: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.FanucProgramNumberSyntax - fullName.vb: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.New + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.FanucGotoParsingSyntax + fullName.vb: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.New + nameWithType: FanucGotoParsingSyntax.FanucGotoParsingSyntax + nameWithType.vb: FanucGotoParsingSyntax.New +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) + name: Build(LazyLinkedListNode, List, NcDiagnosticProgress) + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucGotoParsingSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) + name.vb: Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode, System.Collections.Generic.List, Hi.NcParsers.NcDiagnosticProgress) + fullName.vb: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode(Of Hi.NcParsers.Syntaxs.SyntaxPiece), System.Collections.Generic.List(Of Hi.NcParsers.Dependencys.INcDependency), Hi.NcParsers.NcDiagnosticProgress) + nameWithType: FanucGotoParsingSyntax.Build(LazyLinkedListNode, List, NcDiagnosticProgress) + nameWithType.vb: FanucGotoParsingSyntax.Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Build* + name: Build + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucGotoParsingSyntax_Build_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Build + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Build + nameWithType: FanucGotoParsingSyntax.Build +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.MakeXmlSource(System.String,System.String,System.Boolean) + name: MakeXmlSource(string, string, bool) + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucGotoParsingSyntax_MakeXmlSource_System_String_System_String_System_Boolean_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.MakeXmlSource(System.String,System.String,System.Boolean) + name.vb: MakeXmlSource(String, String, Boolean) + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.MakeXmlSource(string, string, bool) + fullName.vb: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.MakeXmlSource(String, String, Boolean) + nameWithType: FanucGotoParsingSyntax.MakeXmlSource(string, string, bool) + nameWithType.vb: FanucGotoParsingSyntax.MakeXmlSource(String, String, Boolean) +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.MakeXmlSource* + name: MakeXmlSource + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucGotoParsingSyntax_MakeXmlSource_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.MakeXmlSource + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.MakeXmlSource + nameWithType: FanucGotoParsingSyntax.MakeXmlSource +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Name + name: Name + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucGotoParsingSyntax_Name + commentId: P:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Name + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Name + nameWithType: FanucGotoParsingSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Name* + name: Name + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucGotoParsingSyntax_Name_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Name + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.Name + nameWithType: FanucGotoParsingSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.XName + name: XName + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucGotoParsingSyntax_XName + commentId: P:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.XName + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.XName + nameWithType: FanucGotoParsingSyntax.XName +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.XName* + name: XName + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucGotoParsingSyntax_XName_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.XName + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.XName + nameWithType: FanucGotoParsingSyntax.XName +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax + name: FanucIfThenParsingSyntax + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html + commentId: T:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax + nameWithType: FanucIfThenParsingSyntax +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.#ctor + name: FanucIfThenParsingSyntax() + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucIfThenParsingSyntax__ctor + commentId: M:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.#ctor + name.vb: New() + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.FanucIfThenParsingSyntax() + fullName.vb: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.New() + nameWithType: FanucIfThenParsingSyntax.FanucIfThenParsingSyntax() + nameWithType.vb: FanucIfThenParsingSyntax.New() +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.#ctor(System.Xml.Linq.XElement) + name: FanucIfThenParsingSyntax(XElement) + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucIfThenParsingSyntax__ctor_System_Xml_Linq_XElement_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.#ctor(System.Xml.Linq.XElement) + name.vb: New(XElement) + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.FanucIfThenParsingSyntax(System.Xml.Linq.XElement) + fullName.vb: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.New(System.Xml.Linq.XElement) + nameWithType: FanucIfThenParsingSyntax.FanucIfThenParsingSyntax(XElement) + nameWithType.vb: FanucIfThenParsingSyntax.New(XElement) +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.#ctor* + name: FanucIfThenParsingSyntax + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucIfThenParsingSyntax__ctor_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.#ctor + isSpec: "True" + name.vb: New + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.FanucIfThenParsingSyntax + fullName.vb: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.New + nameWithType: FanucIfThenParsingSyntax.FanucIfThenParsingSyntax + nameWithType.vb: FanucIfThenParsingSyntax.New +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) + name: Build(LazyLinkedListNode, List, NcDiagnosticProgress) + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucIfThenParsingSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) + name.vb: Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode, System.Collections.Generic.List, Hi.NcParsers.NcDiagnosticProgress) + fullName.vb: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode(Of Hi.NcParsers.Syntaxs.SyntaxPiece), System.Collections.Generic.List(Of Hi.NcParsers.Dependencys.INcDependency), Hi.NcParsers.NcDiagnosticProgress) + nameWithType: FanucIfThenParsingSyntax.Build(LazyLinkedListNode, List, NcDiagnosticProgress) + nameWithType.vb: FanucIfThenParsingSyntax.Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Build* + name: Build + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucIfThenParsingSyntax_Build_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Build + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Build + nameWithType: FanucIfThenParsingSyntax.Build +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.MakeXmlSource(System.String,System.String,System.Boolean) + name: MakeXmlSource(string, string, bool) + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucIfThenParsingSyntax_MakeXmlSource_System_String_System_String_System_Boolean_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.MakeXmlSource(System.String,System.String,System.Boolean) + name.vb: MakeXmlSource(String, String, Boolean) + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.MakeXmlSource(string, string, bool) + fullName.vb: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.MakeXmlSource(String, String, Boolean) + nameWithType: FanucIfThenParsingSyntax.MakeXmlSource(string, string, bool) + nameWithType.vb: FanucIfThenParsingSyntax.MakeXmlSource(String, String, Boolean) +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.MakeXmlSource* + name: MakeXmlSource + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucIfThenParsingSyntax_MakeXmlSource_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.MakeXmlSource + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.MakeXmlSource + nameWithType: FanucIfThenParsingSyntax.MakeXmlSource +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Name + name: Name + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucIfThenParsingSyntax_Name + commentId: P:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Name + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Name + nameWithType: FanucIfThenParsingSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Name* + name: Name + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucIfThenParsingSyntax_Name_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Name + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.Name + nameWithType: FanucIfThenParsingSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.XName + name: XName + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucIfThenParsingSyntax_XName + commentId: P:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.XName + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.XName + nameWithType: FanucIfThenParsingSyntax.XName +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.XName* + name: XName + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucIfThenParsingSyntax_XName_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.XName + isSpec: "True" + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.XName + nameWithType: FanucIfThenParsingSyntax.XName +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax + name: FanucProgramNumberSyntax + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html + commentId: T:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax + nameWithType: FanucProgramNumberSyntax +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.#ctor + name: FanucProgramNumberSyntax() + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucProgramNumberSyntax__ctor + commentId: M:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.#ctor + name.vb: New() + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.FanucProgramNumberSyntax() + fullName.vb: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.New() + nameWithType: FanucProgramNumberSyntax.FanucProgramNumberSyntax() + nameWithType.vb: FanucProgramNumberSyntax.New() +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.#ctor(System.Xml.Linq.XElement) + name: FanucProgramNumberSyntax(XElement) + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucProgramNumberSyntax__ctor_System_Xml_Linq_XElement_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.#ctor(System.Xml.Linq.XElement) + name.vb: New(XElement) + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.FanucProgramNumberSyntax(System.Xml.Linq.XElement) + fullName.vb: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.New(System.Xml.Linq.XElement) + nameWithType: FanucProgramNumberSyntax.FanucProgramNumberSyntax(XElement) + nameWithType.vb: FanucProgramNumberSyntax.New(XElement) +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.#ctor* + name: FanucProgramNumberSyntax + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucProgramNumberSyntax__ctor_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.#ctor + isSpec: "True" + name.vb: New + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.FanucProgramNumberSyntax + fullName.vb: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.New nameWithType: FanucProgramNumberSyntax.FanucProgramNumberSyntax nameWithType.vb: FanucProgramNumberSyntax.New -- uid: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) name: Build(LazyLinkedListNode, List, NcDiagnosticProgress) - href: api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_FanucProgramNumberSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ - commentId: M:Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucProgramNumberSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) name.vb: Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) - fullName: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.Build(Hi.Common.Collections.LazyLinkedListNode, System.Collections.Generic.List, Hi.NcParsers.NcDiagnosticProgress) - fullName.vb: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.Build(Hi.Common.Collections.LazyLinkedListNode(Of Hi.NcParsers.Syntaxs.SyntaxPiece), System.Collections.Generic.List(Of Hi.NcParsers.Dependencys.INcDependency), Hi.NcParsers.NcDiagnosticProgress) + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Build(Hi.Common.Collections.LazyLinkedListNode, System.Collections.Generic.List, Hi.NcParsers.NcDiagnosticProgress) + fullName.vb: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Build(Hi.Common.Collections.LazyLinkedListNode(Of Hi.NcParsers.Syntaxs.SyntaxPiece), System.Collections.Generic.List(Of Hi.NcParsers.Dependencys.INcDependency), Hi.NcParsers.NcDiagnosticProgress) nameWithType: FanucProgramNumberSyntax.Build(LazyLinkedListNode, List, NcDiagnosticProgress) nameWithType.vb: FanucProgramNumberSyntax.Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) -- uid: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.Build* +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Build* name: Build - href: api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_FanucProgramNumberSyntax_Build_ - commentId: Overload:Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.Build + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucProgramNumberSyntax_Build_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Build isSpec: "True" - fullName: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.Build + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Build nameWithType: FanucProgramNumberSyntax.Build -- uid: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.MakeXmlSource(System.String,System.String,System.Boolean) +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.MakeXmlSource(System.String,System.String,System.Boolean) name: MakeXmlSource(string, string, bool) - href: api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_FanucProgramNumberSyntax_MakeXmlSource_System_String_System_String_System_Boolean_ - commentId: M:Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.MakeXmlSource(System.String,System.String,System.Boolean) + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucProgramNumberSyntax_MakeXmlSource_System_String_System_String_System_Boolean_ + commentId: M:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.MakeXmlSource(System.String,System.String,System.Boolean) name.vb: MakeXmlSource(String, String, Boolean) - fullName: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.MakeXmlSource(string, string, bool) - fullName.vb: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.MakeXmlSource(String, String, Boolean) + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.MakeXmlSource(string, string, bool) + fullName.vb: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.MakeXmlSource(String, String, Boolean) nameWithType: FanucProgramNumberSyntax.MakeXmlSource(string, string, bool) nameWithType.vb: FanucProgramNumberSyntax.MakeXmlSource(String, String, Boolean) -- uid: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.MakeXmlSource* +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.MakeXmlSource* name: MakeXmlSource - href: api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_FanucProgramNumberSyntax_MakeXmlSource_ - commentId: Overload:Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.MakeXmlSource + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucProgramNumberSyntax_MakeXmlSource_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.MakeXmlSource isSpec: "True" - fullName: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.MakeXmlSource + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.MakeXmlSource nameWithType: FanucProgramNumberSyntax.MakeXmlSource -- uid: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.Name +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Name name: Name - href: api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_FanucProgramNumberSyntax_Name - commentId: P:Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.Name - fullName: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.Name + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucProgramNumberSyntax_Name + commentId: P:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Name + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Name nameWithType: FanucProgramNumberSyntax.Name -- uid: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.Name* +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Name* name: Name - href: api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_FanucProgramNumberSyntax_Name_ - commentId: Overload:Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.Name + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucProgramNumberSyntax_Name_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Name isSpec: "True" - fullName: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.Name + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.Name nameWithType: FanucProgramNumberSyntax.Name -- uid: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.XName +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.XName name: XName - href: api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_FanucProgramNumberSyntax_XName - commentId: P:Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.XName - fullName: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.XName + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucProgramNumberSyntax_XName + commentId: P:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.XName + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.XName nameWithType: FanucProgramNumberSyntax.XName -- uid: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.XName* +- uid: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.XName* name: XName - href: api/Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_FanucProgramNumberSyntax_XName_ - commentId: Overload:Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.XName + href: api/Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucProgramNumberSyntax_XName_ + commentId: Overload:Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.XName isSpec: "True" - fullName: Hi.NcParsers.ParsingSyntaxs.FanucProgramNumberSyntax.XName + fullName: Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.XName nameWithType: FanucProgramNumberSyntax.XName - uid: Hi.NcParsers.ParsingSyntaxs.FlagSyntax name: FlagSyntax @@ -138363,15 +140154,15 @@ references: isSpec: "True" fullName: Hi.NcParsers.SoftNcUtil.GetOccupiedMotionEventForm nameWithType: SoftNcUtil.GetOccupiedMotionEventForm -- uid: Hi.NcParsers.SoftNcUtil.GetParsedDouble(System.Text.Json.Nodes.JsonObject,System.String,Hi.NcParsers.Sentence,Hi.NcParsers.NcDiagnosticProgress) - name: GetParsedDouble(JsonObject, string, Sentence, NcDiagnosticProgress) - href: api/Hi.NcParsers.SoftNcUtil.html#Hi_NcParsers_SoftNcUtil_GetParsedDouble_System_Text_Json_Nodes_JsonObject_System_String_Hi_NcParsers_Sentence_Hi_NcParsers_NcDiagnosticProgress_ - commentId: M:Hi.NcParsers.SoftNcUtil.GetParsedDouble(System.Text.Json.Nodes.JsonObject,System.String,Hi.NcParsers.Sentence,Hi.NcParsers.NcDiagnosticProgress) - name.vb: GetParsedDouble(JsonObject, String, Sentence, NcDiagnosticProgress) - fullName: Hi.NcParsers.SoftNcUtil.GetParsedDouble(System.Text.Json.Nodes.JsonObject, string, Hi.NcParsers.Sentence, Hi.NcParsers.NcDiagnosticProgress) - fullName.vb: Hi.NcParsers.SoftNcUtil.GetParsedDouble(System.Text.Json.Nodes.JsonObject, String, Hi.NcParsers.Sentence, Hi.NcParsers.NcDiagnosticProgress) - nameWithType: SoftNcUtil.GetParsedDouble(JsonObject, string, Sentence, NcDiagnosticProgress) - nameWithType.vb: SoftNcUtil.GetParsedDouble(JsonObject, String, Sentence, NcDiagnosticProgress) +- uid: Hi.NcParsers.SoftNcUtil.GetParsedDouble(System.Text.Json.Nodes.JsonObject,System.String,Hi.NcParsers.ISentenceCarrier,Hi.NcParsers.NcDiagnosticProgress) + name: GetParsedDouble(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) + href: api/Hi.NcParsers.SoftNcUtil.html#Hi_NcParsers_SoftNcUtil_GetParsedDouble_System_Text_Json_Nodes_JsonObject_System_String_Hi_NcParsers_ISentenceCarrier_Hi_NcParsers_NcDiagnosticProgress_ + commentId: M:Hi.NcParsers.SoftNcUtil.GetParsedDouble(System.Text.Json.Nodes.JsonObject,System.String,Hi.NcParsers.ISentenceCarrier,Hi.NcParsers.NcDiagnosticProgress) + name.vb: GetParsedDouble(JsonObject, String, ISentenceCarrier, NcDiagnosticProgress) + fullName: Hi.NcParsers.SoftNcUtil.GetParsedDouble(System.Text.Json.Nodes.JsonObject, string, Hi.NcParsers.ISentenceCarrier, Hi.NcParsers.NcDiagnosticProgress) + fullName.vb: Hi.NcParsers.SoftNcUtil.GetParsedDouble(System.Text.Json.Nodes.JsonObject, String, Hi.NcParsers.ISentenceCarrier, Hi.NcParsers.NcDiagnosticProgress) + nameWithType: SoftNcUtil.GetParsedDouble(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) + nameWithType.vb: SoftNcUtil.GetParsedDouble(JsonObject, String, ISentenceCarrier, NcDiagnosticProgress) - uid: Hi.NcParsers.SoftNcUtil.GetParsedDouble* name: GetParsedDouble href: api/Hi.NcParsers.SoftNcUtil.html#Hi_NcParsers_SoftNcUtil_GetParsedDouble_ @@ -138379,24 +140170,24 @@ references: isSpec: "True" fullName: Hi.NcParsers.SoftNcUtil.GetParsedDouble nameWithType: SoftNcUtil.GetParsedDouble -- uid: Hi.NcParsers.SoftNcUtil.GetVec3d(System.Text.Json.Nodes.JsonObject,System.String,Hi.Geom.Vec3d,Hi.NcParsers.Sentence,Hi.NcParsers.NcDiagnosticProgress) - name: GetVec3d(JsonObject, string, Vec3d, Sentence, NcDiagnosticProgress) - href: api/Hi.NcParsers.SoftNcUtil.html#Hi_NcParsers_SoftNcUtil_GetVec3d_System_Text_Json_Nodes_JsonObject_System_String_Hi_Geom_Vec3d_Hi_NcParsers_Sentence_Hi_NcParsers_NcDiagnosticProgress_ - commentId: M:Hi.NcParsers.SoftNcUtil.GetVec3d(System.Text.Json.Nodes.JsonObject,System.String,Hi.Geom.Vec3d,Hi.NcParsers.Sentence,Hi.NcParsers.NcDiagnosticProgress) - name.vb: GetVec3d(JsonObject, String, Vec3d, Sentence, NcDiagnosticProgress) - fullName: Hi.NcParsers.SoftNcUtil.GetVec3d(System.Text.Json.Nodes.JsonObject, string, Hi.Geom.Vec3d, Hi.NcParsers.Sentence, Hi.NcParsers.NcDiagnosticProgress) - fullName.vb: Hi.NcParsers.SoftNcUtil.GetVec3d(System.Text.Json.Nodes.JsonObject, String, Hi.Geom.Vec3d, Hi.NcParsers.Sentence, Hi.NcParsers.NcDiagnosticProgress) - nameWithType: SoftNcUtil.GetVec3d(JsonObject, string, Vec3d, Sentence, NcDiagnosticProgress) - nameWithType.vb: SoftNcUtil.GetVec3d(JsonObject, String, Vec3d, Sentence, NcDiagnosticProgress) -- uid: Hi.NcParsers.SoftNcUtil.GetVec3d(System.Text.Json.Nodes.JsonObject,System.String,Hi.NcParsers.Sentence,Hi.NcParsers.NcDiagnosticProgress) - name: GetVec3d(JsonObject, string, Sentence, NcDiagnosticProgress) - href: api/Hi.NcParsers.SoftNcUtil.html#Hi_NcParsers_SoftNcUtil_GetVec3d_System_Text_Json_Nodes_JsonObject_System_String_Hi_NcParsers_Sentence_Hi_NcParsers_NcDiagnosticProgress_ - commentId: M:Hi.NcParsers.SoftNcUtil.GetVec3d(System.Text.Json.Nodes.JsonObject,System.String,Hi.NcParsers.Sentence,Hi.NcParsers.NcDiagnosticProgress) - name.vb: GetVec3d(JsonObject, String, Sentence, NcDiagnosticProgress) - fullName: Hi.NcParsers.SoftNcUtil.GetVec3d(System.Text.Json.Nodes.JsonObject, string, Hi.NcParsers.Sentence, Hi.NcParsers.NcDiagnosticProgress) - fullName.vb: Hi.NcParsers.SoftNcUtil.GetVec3d(System.Text.Json.Nodes.JsonObject, String, Hi.NcParsers.Sentence, Hi.NcParsers.NcDiagnosticProgress) - nameWithType: SoftNcUtil.GetVec3d(JsonObject, string, Sentence, NcDiagnosticProgress) - nameWithType.vb: SoftNcUtil.GetVec3d(JsonObject, String, Sentence, NcDiagnosticProgress) +- uid: Hi.NcParsers.SoftNcUtil.GetVec3d(System.Text.Json.Nodes.JsonObject,System.String,Hi.Geom.Vec3d,Hi.NcParsers.ISentenceCarrier,Hi.NcParsers.NcDiagnosticProgress) + name: GetVec3d(JsonObject, string, Vec3d, ISentenceCarrier, NcDiagnosticProgress) + href: api/Hi.NcParsers.SoftNcUtil.html#Hi_NcParsers_SoftNcUtil_GetVec3d_System_Text_Json_Nodes_JsonObject_System_String_Hi_Geom_Vec3d_Hi_NcParsers_ISentenceCarrier_Hi_NcParsers_NcDiagnosticProgress_ + commentId: M:Hi.NcParsers.SoftNcUtil.GetVec3d(System.Text.Json.Nodes.JsonObject,System.String,Hi.Geom.Vec3d,Hi.NcParsers.ISentenceCarrier,Hi.NcParsers.NcDiagnosticProgress) + name.vb: GetVec3d(JsonObject, String, Vec3d, ISentenceCarrier, NcDiagnosticProgress) + fullName: Hi.NcParsers.SoftNcUtil.GetVec3d(System.Text.Json.Nodes.JsonObject, string, Hi.Geom.Vec3d, Hi.NcParsers.ISentenceCarrier, Hi.NcParsers.NcDiagnosticProgress) + fullName.vb: Hi.NcParsers.SoftNcUtil.GetVec3d(System.Text.Json.Nodes.JsonObject, String, Hi.Geom.Vec3d, Hi.NcParsers.ISentenceCarrier, Hi.NcParsers.NcDiagnosticProgress) + nameWithType: SoftNcUtil.GetVec3d(JsonObject, string, Vec3d, ISentenceCarrier, NcDiagnosticProgress) + nameWithType.vb: SoftNcUtil.GetVec3d(JsonObject, String, Vec3d, ISentenceCarrier, NcDiagnosticProgress) +- uid: Hi.NcParsers.SoftNcUtil.GetVec3d(System.Text.Json.Nodes.JsonObject,System.String,Hi.NcParsers.ISentenceCarrier,Hi.NcParsers.NcDiagnosticProgress) + name: GetVec3d(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) + href: api/Hi.NcParsers.SoftNcUtil.html#Hi_NcParsers_SoftNcUtil_GetVec3d_System_Text_Json_Nodes_JsonObject_System_String_Hi_NcParsers_ISentenceCarrier_Hi_NcParsers_NcDiagnosticProgress_ + commentId: M:Hi.NcParsers.SoftNcUtil.GetVec3d(System.Text.Json.Nodes.JsonObject,System.String,Hi.NcParsers.ISentenceCarrier,Hi.NcParsers.NcDiagnosticProgress) + name.vb: GetVec3d(JsonObject, String, ISentenceCarrier, NcDiagnosticProgress) + fullName: Hi.NcParsers.SoftNcUtil.GetVec3d(System.Text.Json.Nodes.JsonObject, string, Hi.NcParsers.ISentenceCarrier, Hi.NcParsers.NcDiagnosticProgress) + fullName.vb: Hi.NcParsers.SoftNcUtil.GetVec3d(System.Text.Json.Nodes.JsonObject, String, Hi.NcParsers.ISentenceCarrier, Hi.NcParsers.NcDiagnosticProgress) + nameWithType: SoftNcUtil.GetVec3d(JsonObject, string, ISentenceCarrier, NcDiagnosticProgress) + nameWithType.vb: SoftNcUtil.GetVec3d(JsonObject, String, ISentenceCarrier, NcDiagnosticProgress) - uid: Hi.NcParsers.SoftNcUtil.GetVec3d* name: GetVec3d href: api/Hi.NcParsers.SoftNcUtil.html#Hi_NcParsers_SoftNcUtil_GetVec3d_ @@ -139240,15 +141031,15 @@ references: commentId: T:Hi.NcParsers.Syntaxs.SyntaxPiece fullName: Hi.NcParsers.Syntaxs.SyntaxPiece nameWithType: SyntaxPiece -- uid: Hi.NcParsers.Syntaxs.SyntaxPiece.#ctor(Hi.NcParsers.Sentence,System.Text.Json.Nodes.JsonObject) - name: SyntaxPiece(Sentence, JsonObject) - href: api/Hi.NcParsers.Syntaxs.SyntaxPiece.html#Hi_NcParsers_Syntaxs_SyntaxPiece__ctor_Hi_NcParsers_Sentence_System_Text_Json_Nodes_JsonObject_ - commentId: M:Hi.NcParsers.Syntaxs.SyntaxPiece.#ctor(Hi.NcParsers.Sentence,System.Text.Json.Nodes.JsonObject) - name.vb: New(Sentence, JsonObject) - fullName: Hi.NcParsers.Syntaxs.SyntaxPiece.SyntaxPiece(Hi.NcParsers.Sentence, System.Text.Json.Nodes.JsonObject) - fullName.vb: Hi.NcParsers.Syntaxs.SyntaxPiece.New(Hi.NcParsers.Sentence, System.Text.Json.Nodes.JsonObject) - nameWithType: SyntaxPiece.SyntaxPiece(Sentence, JsonObject) - nameWithType.vb: SyntaxPiece.New(Sentence, JsonObject) +- uid: Hi.NcParsers.Syntaxs.SyntaxPiece.#ctor(Hi.NcParsers.Sentence,System.Text.Json.Nodes.JsonObject,System.Int32) + name: SyntaxPiece(Sentence, JsonObject, int) + href: api/Hi.NcParsers.Syntaxs.SyntaxPiece.html#Hi_NcParsers_Syntaxs_SyntaxPiece__ctor_Hi_NcParsers_Sentence_System_Text_Json_Nodes_JsonObject_System_Int32_ + commentId: M:Hi.NcParsers.Syntaxs.SyntaxPiece.#ctor(Hi.NcParsers.Sentence,System.Text.Json.Nodes.JsonObject,System.Int32) + name.vb: New(Sentence, JsonObject, Integer) + fullName: Hi.NcParsers.Syntaxs.SyntaxPiece.SyntaxPiece(Hi.NcParsers.Sentence, System.Text.Json.Nodes.JsonObject, int) + fullName.vb: Hi.NcParsers.Syntaxs.SyntaxPiece.New(Hi.NcParsers.Sentence, System.Text.Json.Nodes.JsonObject, Integer) + nameWithType: SyntaxPiece.SyntaxPiece(Sentence, JsonObject, int) + nameWithType.vb: SyntaxPiece.New(Sentence, JsonObject, Integer) - uid: Hi.NcParsers.Syntaxs.SyntaxPiece.#ctor* name: SyntaxPiece href: api/Hi.NcParsers.Syntaxs.SyntaxPiece.html#Hi_NcParsers_Syntaxs_SyntaxPiece__ctor_ @@ -143158,15 +144949,15 @@ references: commentId: T:Hi.Numerical.HardNcLine fullName: Hi.Numerical.HardNcLine nameWithType: HardNcLine -- uid: Hi.Numerical.HardNcLine.#ctor(Hi.Numerical.HardNcEnv,Hi.Common.FileLines.IndexedFileLine,Hi.Numerical.HardNcLine,Hi.Numerical.NcNoteCache@,System.IProgress{System.Object}) - name: HardNcLine(HardNcEnv, IndexedFileLine, HardNcLine, out NcNoteCache, IProgress) - href: api/Hi.Numerical.HardNcLine.html#Hi_Numerical_HardNcLine__ctor_Hi_Numerical_HardNcEnv_Hi_Common_FileLines_IndexedFileLine_Hi_Numerical_HardNcLine_Hi_Numerical_NcNoteCache__System_IProgress_System_Object__ - commentId: M:Hi.Numerical.HardNcLine.#ctor(Hi.Numerical.HardNcEnv,Hi.Common.FileLines.IndexedFileLine,Hi.Numerical.HardNcLine,Hi.Numerical.NcNoteCache@,System.IProgress{System.Object}) - name.vb: New(HardNcEnv, IndexedFileLine, HardNcLine, NcNoteCache, IProgress(Of Object)) - fullName: Hi.Numerical.HardNcLine.HardNcLine(Hi.Numerical.HardNcEnv, Hi.Common.FileLines.IndexedFileLine, Hi.Numerical.HardNcLine, out Hi.Numerical.NcNoteCache, System.IProgress) - fullName.vb: Hi.Numerical.HardNcLine.New(Hi.Numerical.HardNcEnv, Hi.Common.FileLines.IndexedFileLine, Hi.Numerical.HardNcLine, Hi.Numerical.NcNoteCache, System.IProgress(Of Object)) - nameWithType: HardNcLine.HardNcLine(HardNcEnv, IndexedFileLine, HardNcLine, out NcNoteCache, IProgress) - nameWithType.vb: HardNcLine.New(HardNcEnv, IndexedFileLine, HardNcLine, NcNoteCache, IProgress(Of Object)) +- uid: Hi.Numerical.HardNcLine.#ctor(Hi.Numerical.HardNcEnv,Hi.Common.FileLines.IndexedFileLine,Hi.Numerical.HardNcLine,System.Int32,Hi.Numerical.NcNoteCache@,System.IProgress{System.Object}) + name: HardNcLine(HardNcEnv, IndexedFileLine, HardNcLine, int, out NcNoteCache, IProgress) + href: api/Hi.Numerical.HardNcLine.html#Hi_Numerical_HardNcLine__ctor_Hi_Numerical_HardNcEnv_Hi_Common_FileLines_IndexedFileLine_Hi_Numerical_HardNcLine_System_Int32_Hi_Numerical_NcNoteCache__System_IProgress_System_Object__ + commentId: M:Hi.Numerical.HardNcLine.#ctor(Hi.Numerical.HardNcEnv,Hi.Common.FileLines.IndexedFileLine,Hi.Numerical.HardNcLine,System.Int32,Hi.Numerical.NcNoteCache@,System.IProgress{System.Object}) + name.vb: New(HardNcEnv, IndexedFileLine, HardNcLine, Integer, NcNoteCache, IProgress(Of Object)) + fullName: Hi.Numerical.HardNcLine.HardNcLine(Hi.Numerical.HardNcEnv, Hi.Common.FileLines.IndexedFileLine, Hi.Numerical.HardNcLine, int, out Hi.Numerical.NcNoteCache, System.IProgress) + fullName.vb: Hi.Numerical.HardNcLine.New(Hi.Numerical.HardNcEnv, Hi.Common.FileLines.IndexedFileLine, Hi.Numerical.HardNcLine, Integer, Hi.Numerical.NcNoteCache, System.IProgress(Of Object)) + nameWithType: HardNcLine.HardNcLine(HardNcEnv, IndexedFileLine, HardNcLine, int, out NcNoteCache, IProgress) + nameWithType.vb: HardNcLine.New(HardNcEnv, IndexedFileLine, HardNcLine, Integer, NcNoteCache, IProgress(Of Object)) - uid: Hi.Numerical.HardNcLine.#ctor(Hi.Numerical.HardNcEnv,System.IProgress{System.Object}) name: HardNcLine(HardNcEnv, IProgress) href: api/Hi.Numerical.HardNcLine.html#Hi_Numerical_HardNcLine__ctor_Hi_Numerical_HardNcEnv_System_IProgress_System_Object__ @@ -144010,6 +145801,19 @@ references: isSpec: "True" fullName: Hi.Numerical.HardNcLine.S nameWithType: HardNcLine.S +- uid: Hi.Numerical.HardNcLine.SentenceIndex + name: SentenceIndex + href: api/Hi.Numerical.HardNcLine.html#Hi_Numerical_HardNcLine_SentenceIndex + commentId: P:Hi.Numerical.HardNcLine.SentenceIndex + fullName: Hi.Numerical.HardNcLine.SentenceIndex + nameWithType: HardNcLine.SentenceIndex +- uid: Hi.Numerical.HardNcLine.SentenceIndex* + name: SentenceIndex + href: api/Hi.Numerical.HardNcLine.html#Hi_Numerical_HardNcLine_SentenceIndex_ + commentId: Overload:Hi.Numerical.HardNcLine.SentenceIndex + isSpec: "True" + fullName: Hi.Numerical.HardNcLine.SentenceIndex + nameWithType: HardNcLine.SentenceIndex - uid: Hi.Numerical.HardNcLine.SpindleSpeed_radds name: SpindleSpeed_radds href: api/Hi.Numerical.HardNcLine.html#Hi_Numerical_HardNcLine_SpindleSpeed_radds @@ -148693,15 +150497,15 @@ references: commentId: T:Hi.Numerical.SourcedActEntry fullName: Hi.Numerical.SourcedActEntry nameWithType: SourcedActEntry -- uid: Hi.Numerical.SourcedActEntry.#ctor(Hi.NcParsers.IGetSentence,Hi.Numerical.Acts.IAct) - name: SourcedActEntry(IGetSentence, IAct) - href: api/Hi.Numerical.SourcedActEntry.html#Hi_Numerical_SourcedActEntry__ctor_Hi_NcParsers_IGetSentence_Hi_Numerical_Acts_IAct_ - commentId: M:Hi.Numerical.SourcedActEntry.#ctor(Hi.NcParsers.IGetSentence,Hi.Numerical.Acts.IAct) - name.vb: New(IGetSentence, IAct) - fullName: Hi.Numerical.SourcedActEntry.SourcedActEntry(Hi.NcParsers.IGetSentence, Hi.Numerical.Acts.IAct) - fullName.vb: Hi.Numerical.SourcedActEntry.New(Hi.NcParsers.IGetSentence, Hi.Numerical.Acts.IAct) - nameWithType: SourcedActEntry.SourcedActEntry(IGetSentence, IAct) - nameWithType.vb: SourcedActEntry.New(IGetSentence, IAct) +- uid: Hi.Numerical.SourcedActEntry.#ctor(Hi.NcParsers.ISentenceCarrier,Hi.Numerical.Acts.IAct) + name: SourcedActEntry(ISentenceCarrier, IAct) + href: api/Hi.Numerical.SourcedActEntry.html#Hi_Numerical_SourcedActEntry__ctor_Hi_NcParsers_ISentenceCarrier_Hi_Numerical_Acts_IAct_ + commentId: M:Hi.Numerical.SourcedActEntry.#ctor(Hi.NcParsers.ISentenceCarrier,Hi.Numerical.Acts.IAct) + name.vb: New(ISentenceCarrier, IAct) + fullName: Hi.Numerical.SourcedActEntry.SourcedActEntry(Hi.NcParsers.ISentenceCarrier, Hi.Numerical.Acts.IAct) + fullName.vb: Hi.Numerical.SourcedActEntry.New(Hi.NcParsers.ISentenceCarrier, Hi.Numerical.Acts.IAct) + nameWithType: SourcedActEntry.SourcedActEntry(ISentenceCarrier, IAct) + nameWithType.vb: SourcedActEntry.New(ISentenceCarrier, IAct) - uid: Hi.Numerical.SourcedActEntry.#ctor* name: SourcedActEntry href: api/Hi.Numerical.SourcedActEntry.html#Hi_Numerical_SourcedActEntry__ctor_ diff --git a/App/zh-Hans/HiMech.resources.dll b/App/zh-Hans/HiMech.resources.dll index afd20df3695f14a56f5b4538964b5483f6dbaeb3..3f052435ae8e387e3fe32ae4ff19aafb5ab33732 100644 GIT binary patch delta 223 zcmZq3Xvmn*!E#5<_4>vhCuYW(o6j>VG70=k;aTUxpz6LNsP)tNa}pw(*s>Tcjr9x| z7)%)%42<;*^$bmowUfEQ}2j&5})xlgv{slMF1)%~DOwEX-3)jS?+PjSNy# zEH^J^f33nflYxVG6_t(c=c^~+&-UOCNn4OzF&HF6I&LerIDTi z1A{3egMqQ0p`M|sk#@3Ka#Et9SyGx&a&k(dnMsO~X=<`blCi0!k+Hd@k%@tMa*9cs zk@@Du?5|ZgXD~1_Ff%YP%-B3#=Oq)P(dI_|dd6TQ25p991~VW|Vn}2#1hSGC(in_@ z{A7j{pokfR36M5oFl9&uikJXpje%@SpolSpIhZzKFaWYZs!hN;%_j#NS^|ylH7sTV E0ETBc;Q#;t diff --git a/App/zh-Hans/HiNc.resources.dll b/App/zh-Hans/HiNc.resources.dll index e0f64e1c6736d28f51fdc57b170ac18df5fe8899..4eeec304ed4d6a5fa728eed86f35fa56ec0fe400 100644 GIT binary patch delta 223 zcmWlRy-EW?6ot=ZOdwH%f^E8Vfo1-7XSTJn5ea#M`Fnx*0%-&b3n7sB5Q`GF3fQDc z>pK`ooyOi9E*!qY`M8VmV*LJkQT-KPo40$;n)Zj^c5e9R>hXIzfBM*8#^dhpVR`Cq zYgGuKWDvTLg|up7r4w11QiM7O;e3oDMX99KmC4oz6H`py>GrqR@O}dZ4xnk*gBQkB zJGy#iGldB(Bpd`X6bwqDfSOt$a`1?B0*O+RA<5UM$jn5ZEJMqAP1GFp@^D?B-wzM` EA9mz6Qvd(} delta 223 zcmZorX;7Ka!NOQD_v6MMCuYXgo6j=~G6}f+n(*#K@o|qCGE;B#YrS!u{DF0+rJ2_u6w4HoWQ*if6JrZAqtrADOGBX4 zW_|W}X3jPSMh0dE28OoH)44>M7)>^><*8>3Het|aNMbNyFkmodumIvjARELp1Cyx? zmOwExAT(r10kTtoqRBvY$qcDL7D$H~gAtIO24q IQQ$u#0M8UMr2qf` delta 232 zcmWlQv1$TA6h-g2N-&6QiWGs^*#u#ow{OPXX(feV=?BOT%oe6hVX4hZiWC8bd_{_6 z8p%(jir*aMz zaeV7-)PgYrL&L)f8Z}662`e@r7w0j75ub~5vRYIENn->O3gN#F(#q$4({~+41|6@` JdlglBR(~NbG)Vve diff --git a/App/zh-Hant/HiMech.resources.dll b/App/zh-Hant/HiMech.resources.dll index 618b718d19d70abad5e10e996e08f3dea928eaed..8a24c9b3ce0296a997dd2102d3b1fcf3ceb55aea 100644 GIT binary patch delta 223 zcmW-ZJ!%3`6ot>52?=&CK_QUBFus}hds7HW;{sg4yypYa(gkR`6cGfAFm)CXl4(-8 z1uMH$>BK#RTx`B`Ip^c9XY1Ma<*IpDeSE$?<)Ud1c|YrJj{E-a&*<^Hcefb+jrG^{ zT#zaxU<9Np%Az!C5N(Qqv{$mW(Wu}O1xd~(ZM{pTs=cXXno|3IbH42~5Xb>E?c4n+ z6RLe4uEa!PfC!7k3?OKDC`i=YMHs#V9IwPFneO6hroZ$C6}z6ziuZ&mXg4W|-*3ug F_7At0HWvT@ delta 223 zcmZq3Xvmn*!D1_|{d;4N6EowC&F7gFnFPdnjmxH_-tyb_sv1Kt@8tEA@ zFqkqj7#Qmr>KU3EX(yW{CnXx1C8Zf9C#NKunWPw*rY4&t8Jk)f8Jk-gnHZQSrjll@W zPi9B~ikLB&0BIuzQ-)NahzU^E7|6B+iWoDPgJ}~610V~e+61iAd~&d%CD8a@!(t`? DUK=-W diff --git a/App/zh-Hant/HiNc.resources.dll b/App/zh-Hant/HiNc.resources.dll index c20c54db01db84f55ffecd8e2e038d18cca12359..1cce83bc028cd110ede1c86d3773be1218107238 100644 GIT binary patch delta 223 zcmWlRy=nqM6ot=ZLt?OzU<8Xaw!$)h>&&*Itxei(=I;rDscj+&qzEY38nE0ZEEc|k zjSperYk1|t;X9m7}r65C)uP`Dr5jnCnEw?pNvrwz^OL=?WJ7-sa C4>kG# delta 223 zcmZoLX)u}4!SYYx{=1DmPRxv}H=k$T$|NvNC-mgnvv)nWEO6~9IOsHK@)Wk6mWFx; z3=F1>3Po0#;HaY#^$D$=EfH0CT6KANk+-$W~r8@ zmT8;Y*g3d4S2Hj&Ff%YPtlm6bsFjh?aI>sPF=MbHgEoUPLmGoQkThVhWJqO5VK8Jc z0`iO*l7MVupokHJ1&}spFa^qk)L8&Y69zM|+9aTCGLR4AS%OuhO@1tD2{K;nF*5+d C`8K}*